diff --git a/config/overlays.mk b/config/overlays.mk index c928932cfc..c17b2234b4 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -971,7 +971,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.o,ov_SC02_016_jr_8012ACE0.o,tail2.data.o,ov_SC02_016_jr_80135888.o,tail3.data.o,ov_SC02_016_jr_80135A4C.o,tail4.data.o,ov_SC02_016_jr_80135D20.o,tail5.data.o,ov_SC02_016_jr_801380E0.o,ov_SC02_016_o0c.o,tail6.data.o,ov_SC02_016_jr_8013F350.o,tail7.data.o,ov_SC02_016_jr_8013FFD8.o,tail8.data.o,ov_SC02_016_jr_80140608.o,tail9.data.o,ov_SC02_016_jr_8015444C.o,ov_SC02_016_jr_80154C24.o,ov_SC02_016_jr_801588CC.o,ov_SC02_016_jr_80159C84.o,tail10.data.o,ov_SC02_016_jr_8015A3C8.o,tail11.data.o,ov_SC02_016_jr_8015AE2C.o,tail12.data.o,ov_SC02_016_jr_8015C32C.o,tail13.data.o,ov_SC02_016_jr_8016AB6C.o,tail14.data.o,ov_SC02_016_jr_80171B4C.o,ov_SC02_016_jr_801734BC.o,tail15.data.o,ov_SC02_016_jr_801789AC.o,ov_SC02_016_jr_80178D40.o,tail16.data.o,ov_SC02_016_jr_8017A4AC.o,tail17.data.o,ov_SC02_016_jr_8017AE2C.o,ov_SC02_016_jr_8017DC70.o,tail18.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_016_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_016.o,ov_SC02_016_jr_8012ACE0.o,tail2.data.o,ov_SC02_016_jr_80135888.o,tail3.data.o,ov_SC02_016_jr_80135A4C.o,tail4.data.o,ov_SC02_016_jr_80135D20.o,tail5.data.o,ov_SC02_016_jr_801380E0.o,ov_SC02_016_o0c.o,tail6.data.o,ov_SC02_016_jr_8013F350.o,tail7.data.o,ov_SC02_016_jr_8013FFD8.o,tail8.data.o,ov_SC02_016_jr_80140608.o,tail9.data.o,ov_SC02_016_jr_8015444C.o,ov_SC02_016_jr_80154C24.o,ov_SC02_016_jr_801588CC.o,ov_SC02_016_jr_80159C84.o,tail10.data.o,ov_SC02_016_jr_8015A3C8.o,tail11.data.o,ov_SC02_016_jr_8015AE2C.o,tail12.data.o,ov_SC02_016_jr_8015C32C.o,tail13.data.o,ov_SC02_016_jr_8016AB6C.o,tail14.data.o,ov_SC02_016_jr_80171B4C.o,ov_SC02_016_jr_801734BC.o,tail15.data.o,ov_SC02_016_jr_801789AC.o,ov_SC02_016_jr_80178D40.o,tail16.data.o,ov_SC02_016_jr_8017A4AC.o,tail17.data.o,ov_SC02_016_jr_8017AE2C.o,ov_SC02_016_jr_8017DC70.o,tail18.data.o,ov_SC02_016_jr_801810C8.o,tail19.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_016/ov_SC02_016.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14 build/src/ov_SC02_016/ov_SC02_016_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0 build/src/ov_SC02_016/ov_SC02_016_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18 @@ -984,6 +984,7 @@ build/src/ov_SC02_016/ov_SC02_016_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads ( build/src/ov_SC02_016/ov_SC02_016_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_016/ov_SC02_016_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC02_016/ov_SC02_016_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178 +build/src/ov_SC02_016/ov_SC02_016_jr_801810C8.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18 build/src/ov_SC02_016/ov_SC02_016_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118 ov_SC02_016_CHECK_SHA := config/check.ov_SC02_016.sha ov_SC02_016_SYMBOLS := config/symbols.ov_SC02_016.txt @@ -1041,7 +1042,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.o,ov_SC02_021_jr_8012ACE0.o,tail2.data.o,ov_SC02_021_jr_80135888.o,tail3.data.o,ov_SC02_021_jr_80135A4C.o,tail4.data.o,ov_SC02_021_jr_80135D20.o,tail5.data.o,ov_SC02_021_jr_801380E0.o,ov_SC02_021_o0c.o,tail6.data.o,ov_SC02_021_jr_8013F350.o,tail7.data.o,ov_SC02_021_jr_8013FFD8.o,tail8.data.o,ov_SC02_021_jr_80140608.o,tail9.data.o,ov_SC02_021_jr_8015444C.o,ov_SC02_021_jr_80154C24.o,ov_SC02_021_jr_801588CC.o,ov_SC02_021_jr_80159C84.o,tail10.data.o,ov_SC02_021_jr_8015A3C8.o,tail11.data.o,ov_SC02_021_jr_8015AE2C.o,tail12.data.o,ov_SC02_021_jr_8015C32C.o,tail13.data.o,ov_SC02_021_jr_8016AB6C.o,tail14.data.o,ov_SC02_021_jr_80171B4C.o,ov_SC02_021_jr_801734BC.o,tail15.data.o,ov_SC02_021_jr_801789AC.o,ov_SC02_021_jr_80178D40.o,tail16.data.o,ov_SC02_021_jr_8017A4AC.o,tail17.data.o,ov_SC02_021_jr_8017AE2C.o,ov_SC02_021_jr_8017C294.o,tail18.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC02_021_JTBL_INTERLEAVE := --order tail.data.o,ov_SC02_021.o,ov_SC02_021_jr_8012ACE0.o,tail2.data.o,ov_SC02_021_jr_80135888.o,tail3.data.o,ov_SC02_021_jr_80135A4C.o,tail4.data.o,ov_SC02_021_jr_80135D20.o,tail5.data.o,ov_SC02_021_jr_801380E0.o,ov_SC02_021_o0c.o,tail6.data.o,ov_SC02_021_jr_8013F350.o,tail7.data.o,ov_SC02_021_jr_8013FFD8.o,tail8.data.o,ov_SC02_021_jr_80140608.o,tail9.data.o,ov_SC02_021_jr_8015444C.o,ov_SC02_021_jr_80154C24.o,ov_SC02_021_jr_801588CC.o,ov_SC02_021_jr_80159C84.o,tail10.data.o,ov_SC02_021_jr_8015A3C8.o,tail11.data.o,ov_SC02_021_jr_8015AE2C.o,tail12.data.o,ov_SC02_021_jr_8015C32C.o,tail13.data.o,ov_SC02_021_jr_8016AB6C.o,tail14.data.o,ov_SC02_021_jr_80171B4C.o,ov_SC02_021_jr_801734BC.o,tail15.data.o,ov_SC02_021_jr_801789AC.o,ov_SC02_021_jr_80178D40.o,tail16.data.o,ov_SC02_021_jr_8017A4AC.o,tail17.data.o,ov_SC02_021_jr_8017AE2C.o,ov_SC02_021_jr_8017C294.o,tail18.data.o,ov_SC02_021_jr_8017ECFC.o,tail19.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC02_021/ov_SC02_021.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14 build/src/ov_SC02_021/ov_SC02_021_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0 build/src/ov_SC02_021/ov_SC02_021_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18 @@ -2761,7 +2762,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.o,ov_SC03_117_jr_8012ACE0.o,tail2.data.o,ov_SC03_117_jr_80135888.o,tail3.data.o,ov_SC03_117_jr_80135A4C.o,tail4.data.o,ov_SC03_117_jr_80135D20.o,tail5.data.o,ov_SC03_117_jr_801380E0.o,ov_SC03_117_o0c.o,tail6.data.o,ov_SC03_117_jr_8013F350.o,tail7.data.o,ov_SC03_117_jr_8013FFD8.o,tail8.data.o,ov_SC03_117_jr_80140608.o,tail9.data.o,ov_SC03_117_jr_8015444C.o,ov_SC03_117_jr_80154C24.o,ov_SC03_117_jr_801588CC.o,ov_SC03_117_jr_80159C84.o,tail10.data.o,ov_SC03_117_jr_8015A3C8.o,tail11.data.o,ov_SC03_117_jr_8015AE2C.o,tail12.data.o,ov_SC03_117_jr_8015C32C.o,tail13.data.o,ov_SC03_117_jr_8016AB6C.o,tail14.data.o,ov_SC03_117_jr_80171B4C.o,ov_SC03_117_jr_801734BC.o,tail15.data.o,ov_SC03_117_jr_801789AC.o,ov_SC03_117_jr_80178D40.o,tail16.data.o,ov_SC03_117_jr_8017A4AC.o,tail17.data.o,ov_SC03_117_jr_8017AE2C.o,ov_SC03_117_jr_8017BEBC.o,tail18.data.o,ov_SC03_117_jr_80181C80.o,tail19.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC03_117_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_117.o,ov_SC03_117_jr_8012ACE0.o,tail2.data.o,ov_SC03_117_jr_80135888.o,tail3.data.o,ov_SC03_117_jr_80135A4C.o,tail4.data.o,ov_SC03_117_jr_80135D20.o,tail5.data.o,ov_SC03_117_jr_801380E0.o,ov_SC03_117_o0c.o,tail6.data.o,ov_SC03_117_jr_8013F350.o,tail7.data.o,ov_SC03_117_jr_8013FFD8.o,tail8.data.o,ov_SC03_117_jr_80140608.o,tail9.data.o,ov_SC03_117_jr_8015444C.o,ov_SC03_117_jr_80154C24.o,ov_SC03_117_jr_801588CC.o,ov_SC03_117_jr_80159C84.o,tail10.data.o,ov_SC03_117_jr_8015A3C8.o,tail11.data.o,ov_SC03_117_jr_8015AE2C.o,tail12.data.o,ov_SC03_117_jr_8015C32C.o,tail13.data.o,ov_SC03_117_jr_8016AB6C.o,tail14.data.o,ov_SC03_117_jr_80171B4C.o,ov_SC03_117_jr_801734BC.o,tail15.data.o,ov_SC03_117_jr_801789AC.o,ov_SC03_117_jr_80178D40.o,tail16.data.o,ov_SC03_117_jr_8017A4AC.o,tail17.data.o,ov_SC03_117_jr_8017AE2C.o,ov_SC03_117_jr_8017BEBC.o,tail18.data.o,ov_SC03_117_jr_8017E6EC.o,tail19.data.o,ov_SC03_117_jr_80181C80.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC03_117/ov_SC03_117.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14 build/src/ov_SC03_117/ov_SC03_117_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0 build/src/ov_SC03_117/ov_SC03_117_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18 diff --git a/config/splat.ov_SC02_016.yaml b/config/splat.ov_SC02_016.yaml index aa61efc10c..b4b0a5adc0 100644 --- a/config/splat.ov_SC02_016.yaml +++ b/config/splat.ov_SC02_016.yaml @@ -121,6 +121,7 @@ segments: - [0x52354, c, ov_SC02_016_jr_8017A4AC] - [0x52cd4, c, ov_SC02_016_jr_8017AE2C] - [0x55b18, c, ov_SC02_016_jr_8017DC70] + - [0x58f70, c, ov_SC02_016_jr_801810C8] - [0x5c2d8, data, tail] - [0x89920, .rodata, ov_SC02_016] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x899fc, .rodata, ov_SC02_016_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) @@ -164,6 +165,8 @@ segments: - [0x8aa40, .rodata, ov_SC02_016_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8aa54, .rodata, ov_SC02_016_jr_8017DC70] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8aa74, data, tail18] + - [0x8aa7c, .rodata, ov_SC02_016_jr_801810C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x8aaac, data, tail19] - [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_021.yaml b/config/splat.ov_SC02_021.yaml index 8c56f8ba52..86996c455d 100644 --- a/config/splat.ov_SC02_021.yaml +++ b/config/splat.ov_SC02_021.yaml @@ -121,6 +121,7 @@ segments: - [0x52354, c, ov_SC02_021_jr_8017A4AC] - [0x52cd4, c, ov_SC02_021_jr_8017AE2C] - [0x5413c, c, ov_SC02_021_jr_8017C294] + - [0x56ba4, c, ov_SC02_021_jr_8017ECFC] - [0x57924, data, tail] - [0x686bc, .rodata, ov_SC02_021] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x68798, .rodata, ov_SC02_021_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) @@ -164,6 +165,8 @@ segments: - [0x697dc, .rodata, ov_SC02_021_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x697f0, .rodata, ov_SC02_021_jr_8017C294] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x69810, data, tail18] + - [0x69830, .rodata, ov_SC02_021_jr_8017ECFC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x69848, data, tail19] - [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_SC03_117.yaml b/config/splat.ov_SC03_117.yaml index 0650bc60bb..14ae995b6a 100644 --- a/config/splat.ov_SC03_117.yaml +++ b/config/splat.ov_SC03_117.yaml @@ -121,6 +121,7 @@ segments: - [0x52354, c, ov_SC03_117_jr_8017A4AC] - [0x52cd4, c, ov_SC03_117_jr_8017AE2C] - [0x53d64, c, ov_SC03_117_jr_8017BEBC] + - [0x56594, c, ov_SC03_117_jr_8017E6EC] - [0x59b28, c, ov_SC03_117_jr_80181C80] - [0x5c718, data, tail] - [0xa3c1c, .rodata, ov_SC03_117] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) @@ -165,8 +166,10 @@ segments: - [0xa4d3c, .rodata, ov_SC03_117_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa4d50, .rodata, ov_SC03_117_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xa4d70, data, tail18] + - [0xa4d88, .rodata, ov_SC03_117_jr_8017E6EC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xa4da0, data, tail19] - [0xa4db0, .rodata, ov_SC03_117_jr_80181C80] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xa4e40, data, tail19] + - [0xa4e40, data, tail20] - [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/src/ov_SC02_016/ov_SC02_016_jr_8017DC70.c b/src/ov_SC02_016/ov_SC02_016_jr_8017DC70.c index 9db4c88e21..a0e61bc5da 100644 --- a/src/ov_SC02_016/ov_SC02_016_jr_8017DC70.c +++ b/src/ov_SC02_016/ov_SC02_016_jr_8017DC70.c @@ -4661,2061 +4661,3 @@ extern char D_80188620; void func_8018109C(int param_1, int param_2) { ((int (*)(int, int *, int *, int))func_8012D5E4)(param_1, &D_80188620, &D_80188620 + 8, param_2); } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8017DC70", func_801810C8); - -extern char D_80188634[]; -extern s16 D_801B04DC; -extern void func_8012A828(s32, s32); -extern void func_8012B178(s32 a0, s32 a1); -extern void func_8012B200(u8 *a0); - -void func_8018140C(s32 a0) { - u8 *tbl; - - tbl = (u8 *)D_80188634; - if (!(*(u16 *)(a0 + 0x70) & 0x2000)) { - tbl += 0xC; - } - *(s16 *)(a0 + 0x2) = 7; - if (*(u16 *)(a0 + 0x70) & 0x200) { - ((void (*)(s32, void *))func_8012A828)(a0, &D_801B04DC); - } else { - ((void (*)(s32, void *))func_8012A828)(a0, (void *)*(s32 *)tbl); - } - func_8012B200((u8 *)a0); - func_8012B178(a0, *(s32 *)(tbl + 4)); - *(s32 *)(a0 + 0x1C) = *(s32 *)(tbl + 8); -} - - -extern char D_80188620; -extern s16 D_801AFBBC; -extern s16 D_801AFC44; -extern s16 D_801B04DC; -extern s32 func_8012BEE8(s32 a0); -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_80143B6C(s32 a0, s32 a1); -extern void func_8012A828(s32, s32); -extern void func_8012AD80(s32 a0); - -void func_801814A8(s32 a0) { - s32 v0; - - func_8012AD80(a0); - if (*(u16 *)(a0 + 0x70) & 0x2000) { - v0 = *(u16 *)(a0 + 0xFE) - 1; - *(u16 *)(a0 + 0xFE) = v0; - if ((s16)v0 <= 0) { - func_80143B6C(a0, 0); - *(u16 *)(a0 + 0xFE) = 8; - } - if (*(u16 *)(a0 + 0x70) & 0x200) { - func_8012D5E4(a0, (s32)&D_80188620, (s32)&D_80188620 + 8, 0x11); - } - } - if (func_8012BEE8(a0)) { - *(u16 *)(a0 + 0x86) |= 2; - *(s16 *)(a0 + 0x2) = 3; - if (*(u16 *)(a0 + 0x86) & 2) { - *(s16 *)(a0 + 0x34) = 1; - *(s32 *)(a0 + 0x1C) = 0x28; - if (*(u16 *)(a0 + 0x70) & 0x200) { - ((void (*)(s32, void *))func_8012A828)(a0, &D_801B04DC); - } else { - ((void (*)(s32, void *))func_8012A828)(a0, &D_801AFBBC); - } - *(u16 *)(a0 + 0xFE) = 0; - } else { - *(s16 *)(a0 + 0x34) = 0; - ((void (*)(s32, void *))func_8012A828)(a0, &D_801AFC44); - *(s32 *)(a0 + 0x1C) = 0x19; - *(u16 *)(a0 + 0x86) |= 2; - } - } -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8017DC70", func_801815DC); - -#include "common.h" - -extern s32 func_8012BEE8(s32 a0); -extern void func_8012B23C(s32 a0); -extern s32 func_8012CBCC(s32 a0); -extern s32 func_80143B6C(s32 a0, s32 a1); -extern void func_8012A828(s32, s32); -extern s16 D_801AFBBC; -extern s16 D_801AFC44; -extern s16 D_801B04DC; - -void func_80181714(s32 a0) { - register s32 v0; - register s32 v1; - register s32 obj; - - switch (*(u16 *)(a0 + 0x34)) { - case 0: - if (func_8012BEE8(a0) == 0) { - return; - } - *(u16 *)(a0 + 0x34) += 1; - func_8012B23C(a0); - *(s32 *)(*(s32 *)(a0 + 0x20) + 4) &= 0x7FFFFFFF; - *(u16 *)(a0 + 0x5C) = *(u16 *)(*(s32 *)(a0 + 0x78) + 2); - return; - case 1: - if ((func_8012CBCC(a0) & 0x2000) == 0) { - return; - } - func_80143B6C(a0, 1); - *(u16 *)(a0 + 0x34) += 1; - *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) |= 0x10; - *(s32 *)(a0 + 0x1C) = 0x10; - /* fallthrough */ - case 2: - v0 = func_8004787C((*(s32 *)(a0 + 0x1C) << 7) & 0x780); - v1 = ((v0 << 9) >> 12) + 0x1000; - __asm__ __volatile__(""); - obj = *(s32 *)(a0 + 0x20); - *(s16 *)(obj + 0x1C) = v1; - *(s16 *)(obj + 0x18) = v1; - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x1A) = 0x1000 - ((v0 << 10) >> 12); - if (func_8012BEE8(a0) == 0) { - return; - } - *(s16 *)(a0 + 2) = 3; - if (*(u16 *)(a0 + 0x86) & 2) { - *(s16 *)(a0 + 0x34) = 1; - *(s32 *)(a0 + 0x1C) = 0x28; - if (*(u16 *)(a0 + 0x70) & 0x200) { - func_8012A828(a0, &D_801B04DC); - } else { - func_8012A828(a0, &D_801AFBBC); - } - *(u16 *)(a0 + 0xFE) = 0; - } else { - *(s16 *)(a0 + 0x34) = 0; - func_8012A828(a0, &D_801AFC44); - *(s32 *)(a0 + 0x1C) = 0x19; - *(u16 *)(a0 + 0x86) |= 2; - } - *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) &= ~0x10; - break; - } -} - - -extern s32 func_8012C354(s32 a0, s32 a1); -extern s32 func_80143970(s32 a0); -extern void func_8012E8A8(u8 *a0); -extern void func_8012A828(s32 a0, s32 a1); -extern s32 func_8012B744(void *a0, void *a1); -extern void Square0(s32 *a0, s32 *a1); -extern s32 rand(void); - -extern u8 D_8018852C[]; -extern void (*D_801885C8[])(void); -extern u8 D_80078EB1; -extern short D_801AF9CC; -extern u8 D_801AFB14[]; - -typedef struct { - s32 vx, vy, vz; -} Vec3_1818F8; - -void func_801818F8(s32 a0) { - s32 idx; - s32 sum; - Vec3_1818F8 d; - s32 r; - Vec3_1818F8 *p; - s32 dx, dz; - s32 x; - s32 v1; - s32 y; - register void *s1_ptr __asm__("$17"); - - idx = (*(u16 *)(a0 + 0x70) & 0xF00) >> 8; - - if (func_8012C354(a0, (s32)(D_8018852C + idx * 0x34)) == 0) { - return; - } - - *(u8 *)(a0 + 0xC0) = 1; - *(s32 *)(a0 + 0xB4) = -1; - *(u8 *)(a0 + 0xC1) = 0; - *(s32 *)(a0 + 0xBC) = (s32)D_801885C8; - func_80143970(a0); - - if ((*(u16 *)(a0 + 0x70) & 0x6000) != 0) { - *(s16 *)(a0 + 0x2) = 6; - func_8012A828(a0, (s32)&D_801AF9CC); - return; - } - - if ((*(u16 *)(a0 + 0x70) & 0x1) != 0) { - *(s16 *)(a0 + 0x2) = 0xF; - return; - } - - if ((*(u16 *)(a0 + 0x70) & 0x100) != 0) { - if ((*(u16 *)(a0 + 0x70) & 0x1000) != 0) { - y = (u32)(D_80078EB1 - 7) < 0xC; - *(u16 *)(a0 + 0x102) = y; - if (y == 0) { - func_8012E8A8((u8 *)a0); - *(s16 *)(a0 + 0x2) = 0x11; - return; - } - } - *(s16 *)(a0 + 0x2) = 9; - return; - } - - *(s16 *)(a0 + 0x2) = 1; - *(s16 *)(a0 + 0x34) = 0; - *(u16 *)(a0 + 0x5C) = 0xAA10; - r = rand(); - p = &d; - r = r & 0x1F; - dx = *(s16 *)(a0 + 0x6); - dz = *(s16 *)(a0 + 0x88); - *(s32 *)(a0 + 0x1C) = r + 0x28; - - p->vy = 0; - p->vx = dx - dz; - p->vz = *(s16 *)(a0 + 0xE) - *(s16 *)(a0 + 0x8C); - Square0(&p->vx, &p->vx); - - sum = d.vx + d.vz; - s1_ptr = (void *)(a0 + 0x88); - if (sum > 0x8FFFF) { - *(s16 *)(a0 + 0xFC) = (s16)func_8012B744((void *)(a0 + 4), s1_ptr); - } else { - x = rand() & 0x3FF; - v1 = x - 0x200; - if (v1 >= 0) { - v1 = x + 0x100; - } else { - v1 = x - 0x500; - } - y = (*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + v1) & 0xFFF; - *(s16 *)(a0 + 0xFC) = y; - } - - func_8012A828(a0, (s32)D_801AFB14); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8017DC70", func_80181AE8); - -extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); -extern short D_801AF9CC; -extern u8 D_801B02EC[]; -extern void func_8012A828(s32, s32); -extern void func_80181054(s32, s32, s32, void*); - -void func_80181CB8(s32 a0) { - if (*(u16 *)(a0 + 0x72) & 0x4000) { - *(s16 *)(a0 + 0x100) = 3; - if (func_8012BD3C(a0, 0x400, 0x40000) != 0) { - func_80181054(a0, 5, 30, (s32)D_801B02EC); - } else { - *(s16 *)(a0 + 2) = 2; - *(s16 *)(a0 + 0x34) = 0; - ((void (*)(s32, void *))func_8012A828)(a0, (void *)&D_801AF9CC); - } - } -} - - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801AF9CC; - void func_80181D3C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 10; - func_8012A828((int)arg0, (int)&D_801AF9CC); - } - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8017DC70", func_80181D68); - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801B03E4; - void func_80181DEC(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 12; - func_8012A828((int)arg0, (int)&D_801B03E4); - } - - - - -void func_80181E18(void *arg0) { - if (*(u16 *)((s32)arg0 + 0x72) & 0x4000) { - *(u16 *)((s32)arg0 + 0x2) = 9; - *(u16 *)((s32)arg0 + 0x100) = 3; - } -} - - -extern u8 D_801B02EC[]; -extern void func_8012A828(s32, s32); - -void func_80181E40(a0) -s32 a0; -{ - *(s16 *)(a0 + 0x2) = 14; - func_8012A828(a0, &(*(u8 *)D_801B02EC)); - *(s32 *)(a0 + 0x1C) = 0x1e; -} - - -extern u16 D_80126B62; -extern s32 func_8012B8E4(s32 arg0, s32 arg1); -extern void func_801815DC(s32 a0); -extern s32 func_8012BEE8(s32 a0); - -void func_80181E80(s32 arg0) -{ - s32 v; - unsigned short *p; - unsigned short val; - - if (*(u16 *)(arg0 + 0x70) & 0x1000) { - if ((*(s16 *)&D_80126B62) >= -959) { - *(s16 *)(arg0 + 2) = 9; - return; - } - } - v = func_8012B8E4(arg0, 6); - p = (unsigned short *)(*(s32 *)(arg0 + 0x20) + 0x12); - *p = (unsigned short)(*p + v); - - if (*(s32 *)(arg0 + 0x1C) == 0xC) { - func_801815DC(arg0); - } - - if (func_8012BEE8(arg0) == 0) { - return; - } - - val = *(unsigned short *)(arg0 + 0x100); - val--; - *(unsigned short *)(arg0 + 0x100) = val; - - { - s32 v0_shifted = (s32)val << 16; - if (v0_shifted == 0) { - *(unsigned short *)(arg0 + 0x2) = 0xB; - } else { - *(s32 *)(arg0 + 0x1C) = 0x1E; - } - } -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8017DC70", func_80181F54); - -void func_80181FB0(void) { -} - -extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); -extern void func_8012B200(u8 *a0); -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012AD80(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012E8A8(u8 *a0); - -extern s32 D_80188654[]; -extern s32 D_80188660[]; - -void func_80181FB8(s32 a0) { - s32 s1; - s32 v1; - - switch (*(u16 *)(a0 + 0x34)) { - case 0: - s1 = func_8012B608(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12), *(s16 *)(a0 + 0xFC), 8); - if (s1 == 0) { - *(u16 *)(a0 + 0x34) += 1; - func_8012B200((u8 *)a0); - *(s32 *)(a0 + 0x1C) = 0x1E; - if (*(s16 *)(a0 + 0x102) == 0) { - func_8012B14C(a0, (s32)D_80188654); - } else { - func_8012B14C(a0, (s32)D_80188660); - } - } - v1 = *(s32 *)(a0 + 0x20); - *(u16 *)(v1 + 0x12) = *(u16 *)(v1 + 0x12) + s1; - break; - case 1: - func_8012AD80(a0); - if (func_8012BEE8(a0) != 0) { - if (*(s16 *)(a0 + 0x102) == 0) { - func_8012E8A8((u8 *)a0); - *(s16 *)(a0 + 0x2) = 0x11; - } else { - *(s16 *)(a0 + 0x2) = 9; - } - } - break; - } -} - - -extern void func_8012CBF4(s32 a0); -extern void func_80131E00(); -extern void func_801804F8(int); -extern void func_80180728(s32 a0); - -void func_801820C0(s32 a0) { - s32 ret; - - if (*(s16 *)(a0 + 0xA) >= 0x10) { - ((void (*)(void))func_801804F8)(); - } else { - ret = ((s32 (*)(s32))func_8012CBF4)(a0); - if ((ret & 0x2000) != 0) { - if ((ret & 0x1000) != 0) { - ((void (*)(s32, s32))func_80131E00)(a0, 0x12); - } else { - func_80180728(a0); - } - } - } -} - - -extern void func_8012CBF4(s32 a0); -extern void func_80180728(s32 a0); - -void func_80182140(s32 a0) { - func_8012CBF4(a0); - if (*(u16 *)(a0 + 0x72) & 0x4000) { - func_80180728(a0); - } -} - - -extern u8 D_80188630; - -extern s32 func_8012BCCC(s32 a0); -extern void func_8018140C(s32 a0); - -void func_80182184(void *a0) { - s32 s0 = (s32)a0; - s32 v0 = func_8012BCCC(s0); - if (v0 < *(s32 *)&D_80188630) { - func_8018140C(s0); - } -} - - - -extern void func_80019064(void *a0); - -void func_801821CC(void *a0) { - - extern u8 D_801886BC; - extern void (*D_801886E4[])(void *); - func_80019064(&D_801886BC); - D_801886E4[*(u16 *)((s32)a0 + 0x2)](a0); -} - - -void func_80182224(s32 a0) -{ - s32 s0 = a0; - func_8014E934(a0); - func_8014CC28(s0); - func_8014F3E8(s0); - func_80182274(s0); - func_80147324(0x92F); - func_80146CA0((void *)s0); -} - - -extern void func_80147324(s32 a0); -extern int func_801511E0(int); -extern void func_80154274(s32*, s32); -extern void func_80149020(s32*); -extern void func_80182488(void); -extern s32 func_80172630(u8*); -extern void func_80146CA0(void*); -extern u8 D_801886C4[]; - -void func_80182274(s32 p) -{ - func_80147324(0x451); - ((void (*)(s32))func_801511E0)(p); - ((void (*)(s32, s32))func_80154274)(p, (s32)D_801886C4); - ((void (*)(s32))func_80149020)(p); - *(u8 *)(p + 0xDE) = 0x1E; - *(u8 *)(p + 0xDF) = 0; - func_80182488(); - ((void (*)(s32))func_80172630)(p); - ((void (*)(s32))func_80146CA0)(p); -} - - -/* func_801822E0 @ ov_SC02_016 (subseg ov_SC02_016_jr_8017DC70) — 85 ins. - * - * GATE: .venv/bin/python tools/match_one.py func_801822E0 --binary ov_SC02_016 \ - * --src .run/wave-s40/ov_SC02_016/func_801822E0.c - * - * Exemplar of an OPEN-ONLY h_norm cluster (9 members). Real TU is - * src/ov_SC02_016/ov_SC02_016_jr_8017DC70.c — the immediate NEXT function in that - * file, func_80182434 (already MATCHed, see its comment there), confirms: - * - actor pointer arg is plain `s32 a0` - * - func_80172630 canon extern: `extern s32 func_80172630(u8 *a0);` (cast at call) - * - func_80159B3C canon extern: `extern void func_80159B3C(void *a0);` (cast at call) - * - func_80165718 canon extern: `extern void func_80165718(s32 a0);` (no cast) - * - func_80146A6C canon extern (used 30+ times fleet-wide): - * extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); - * - * `func_801824AC` is DEFINED in this same TU (a few lines below the INCLUDE_ASM - * stub for this function) — a simple "find a free slot, mark it used" scan - * returning the slot index or -1. - * - * Body shape (byte-confirmed against the .s, no residual after first draft): - * func_80015978(a0+4, buf) -- fills a 3-short (SVECTOR-shaped) local from - * the actor's position substruct at a0+4; this - * exact `s16 buf[4]; func_80015978(a0+4,(s32*)buf);` - * idiom is the established fleet form (see - * engine_core.h DEFINE_func_8014A380/8016D778/ - * 8017C908 dedup macros). - * buf[1] -= 0x40 -- immediately after the call. The readback here - * is `lhu` (not `lh`) even though buf is a SIGNED - * s16 array: gcc-2.7.2 always emits `lhu` for a - * plain HImode load that feeds straight into an - * `sh` store (cookbook: "It does NOT cost you the - * lhu on readback" bullet, P30 wave 4). No cast - * needed, no separate unsigned local needed. - * do { ... } while (++i < 3) -- the asm has NO initial top-of-loop test before - * label .L80182318 (s3=0 set, then falls straight - * into the body) -- a genuine do-while in the - * source, not a for-loop gcc happened to rotate. - * if (func_801824AC() >= 0) { func_80146A6C(0x51,...); 3x rand(); func_80146A6C(0x52,...); } - * - the three back-to-back `rand()` calls assign straight to 3 locals in - * source order; gcc's own delay-slot filler moves each captured value into - * a callee-saved reg ($s0/$s1) via the NEXT call's branch-delay slot - * (standard call-crossing-value idiom, cookbook "ORDER" register-allocation - * entry) -- no manual reordering needed, plain sequential C reproduces it. - * - the final random offset is computed into a **s16 local** (not s32): the - * assignment truncates+sign-extends via `sll/sra` in-register (matches the - * target's `sll $s0,$s0,16 / sra $s0,$s0,16` with NO memory round-trip, - * because the s16 value is used immediately as a call argument rather than - * stored to a separate memory slot). - * cnt = *(u8*)(a0+0xDE); *(u8*)(a0+0xDE) = cnt + 0xff; if (cnt == 0) { ... } else { ... } - * - `lbu` (not `lb`) for the read: the "feeds only a truncated store + an - * equality-to-zero test" idiom, so either signedness of the C type reads - * identically; u8 chosen to match the common counter-byte convention used - * elsewhere in this TU. - * - THE ONE non-obvious lever: write the decrement as `cnt + 0xff`, not - * `cnt - 1`. Both are mathematically identical mod 256 (only the low byte - * survives the `sb`), and both compile to a single `addiu`, but gcc-2.7.2 - * picks a DIFFERENT immediate encoding for each source spelling: `cnt - 1` - * emits `addiu $v0,$v1,-1` (imm 0xFFFF, sign-extended -1); `cnt + 0xff` - * emits `addiu $v0,$v1,0xFF` (imm 0x00FF, the literal as typed) — which is - * what the target has. Confirmed the signedness of `cnt` (s8 vs u8) makes - * no difference here; the literal's own spelling is the lever. New - * cookbook idiom candidate (not in §31 as of this match). - */ - -extern void func_80015978(s32 a0, s32 *a1); -extern s32 func_801824AC(void); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern int rand(void); -extern void func_80182434(s32 a0); -extern void func_80159B3C(void *a0); -extern void func_80165718(s32 a0); -extern s32 func_80172630(u8 *a0); - -void func_801822E0(s32 param_1) -{ - s16 buf[4]; - s32 i; - s32 iVar1; - s32 uVar3; - s32 uVar4; - s32 uVar5; - s16 rnd; - u8 cnt; - - func_80015978(param_1 + 4, (s32 *)buf); - buf[1] -= 0x40; - - i = 0; - do { - iVar1 = func_801824AC(); - if (iVar1 >= 0) { - func_80146A6C(0x51, (void *)param_1, buf[0], buf[1], buf[2], iVar1, 0); - - uVar3 = rand(); - uVar4 = rand(); - uVar5 = rand(); - rnd = (uVar3 & 3) * 0x400 + (uVar4 & 3) * 0xfa + (uVar5 & 3) * 0x44; - func_80146A6C(0x52, (void *)param_1, 0, -0x20, 0x10, rnd, 0); - } - i++; - } while (i < 3); - - cnt = *(u8 *)(param_1 + 0xde); - *(u8 *)(param_1 + 0xde) = cnt + 0xff; - if (cnt == 0) { - func_80182434(param_1); - func_80159B3C((void *)param_1); - func_80165718(param_1); - } else { - func_80172630((u8 *)param_1); - } -} - - -/* func_80182434 — actor "enter state 0x92F/0x930" stub: two sound/state pokes, - * the standard `func_8014BC44(actor, actor->0xF2)` animation kick, set 0xA8 = 0x20, - * then hand the actor to func_80151664. - * - * Two load-bearing derivations (both byte-verified against the .s): - * - * 1. The final call TAKES THE ACTOR. The .s sets `addu $a0,$s0,$zero` immediately - * before `jal func_80151664`, but the whole fleet declares - * extern void func_80151664(void); - * (16 TUs + engine_core.h:2924; ov_SC02_016_after.c:3151 records that a - * `void func_80151664(s32)` definition is `conflicting types` everywhere). - * So: cookbook idiom 9 — cast at the CALL SITE, never touch the decl: - * ((void (*)(s32))func_80151664)(a0) - * The .run/ghidra_c seed shows `FUN_80151664()` with no argument and is WRONG - * here; the .s wins. This is the single instruction the previous draft missed. - * - * 2. `sb $v0, 0xA8($a0)` uses $a0 — NOT $s0 — as its base, and lands in the jal's - * delay slot. That needs no local-variable lever (no `s32 s0 = a0;` as the - * sibling DEFINE_func_80152790 template uses): the arg copy into $a0 is emitted - * ahead of the store, so the store simply addresses off the live copy, and - * reorg.c then lifts the last pre-jal insn into the delay slot. Writing a - * separate pointer local here would only add a pseudo. - * - * Declaration surface (D2 pass over the whole TU, one grep): - * func_80147364 -> ov_SC02_016_jr_8017DC70.c:194,360 extern void (u16, s32) - * func_80147324 -> :196,777 extern void (s32) - * func_8014BC44 -> :486 extern void (s32, s32) - * func_80151664 -> :880 extern void (void) [re-declared - * identically below, which is a legal duplicate declaration] - * func_80182434 -> only the INCLUDE_ASM at :3587; no prior prototype anywhere in - * ov_SC02_016 or include/. (The ov_SC03_09x definitions of this - * name are other overlays sharing the VA — different binaries.) - * Recompiled with those four prototypes prepended: still MATCH (21 ins). - */ - -extern void func_80151664(void); - -void func_80182434(s32 a0) -{ - func_80147364(4, 0x92F); - func_80147324(0x930); - func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); - *(u8 *)(a0 + 0xA8) = 0x20; - ((void (*)(s32))func_80151664)(a0); -} - - - -void func_80182488(void) -{ - extern u8 D_801B42EB; - s32 i = 19; - u8 *p = &D_801B42EB; - do { - *p = 0; - i--; - p--; - } while (i >= 0); -} - - - - -s32 func_801824AC(void) -{ - - extern u8 D_801B42D8[]; - s32 i; - u8 v; - u8 *p; - s32 ret; - - i = 0; - v = 1; - p = D_801B42D8; - do { - if (*p == 0) { - *p = v; - ret = i; - goto done; - } - i++; - p++; - } while (i < 20); - ret = -1; -done: - return ret; -} - - - -extern void (*D_801886F0[])(void); - -void func_801824F0(void *a0) { - D_801886F0[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (83 ins). $s3 is a dual-copy of iVar3 used only in the ==0 tail block; natural C coalesces to one $s0, so pin iVar3=$s0 and iVar3b=$s3 (different hard regs prevent gcc coalescing the copy). Also: outer+inner branch polarity inverted (if!=0 / if!=0 puts both short blocks at the tail as beqz targets); base = (int)D_801B42EC + idx*0x40 (materialize form, arg to callees). - -extern void func_801465C0(void); -extern void func_8001CD9C(int, void*); -extern void func_800233CC(void*, unsigned short); -extern void func_80182720(void*); -extern void func_801826F0(s32*); -extern int rand(void); - -void func_8018252C(int param_1) -{ - - extern unsigned char D_801B42EC[]; - register int iVar3 __asm__("$16"); - register int iVar3b __asm__("$19"); - int iVar5; - short sVar2; - - iVar5 = (int)D_801B42EC + *(int *)(param_1 + 0x2c) * 0x40; - iVar3 = ((int (*)(void))func_801465C0)(); - *(int *)(param_1 + 0x20) = iVar3; - iVar3b = iVar3; - if (iVar3 != 0) { - ((void (*)(int, int))func_8001CD9C)(iVar3, iVar5); - ((void (*)(int, int))func_800233CC)(iVar5, 0x10); - ((void (*)(int))func_80182720)(iVar5); - *(unsigned int *)(iVar3 + 4) = *(unsigned int *)(iVar3 + 4) | 0x50000000; - if (*(int *)(param_1 + 0x2c) != 0) { - sVar2 = (rand() & 3) * 0x800 + 0x1000; - *(short *)(iVar3 + 0x1a) = sVar2; - *(short *)(iVar3 + 0x18) = sVar2; - *(unsigned short *)(param_1 + 0x12) = (rand() & 0xf) + 3; - if ((rand() & 1) != 0) { - *(short *)(param_1 + 0x12) = -*(short *)(param_1 + 0x12); - } - *(unsigned short *)(param_1 + 0x1a) = (rand() & 0xf) + 3; - if ((rand() & 1) != 0) { - *(short *)(param_1 + 0x1a) = -*(short *)(param_1 + 0x1a); - } - } else { - *(short *)(iVar3b + 0x1a) = 0x4000; - *(short *)(iVar3b + 0x18) = 0x4000; - } - *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; - } else { - ((void (*)(int))func_801826F0)(param_1); - } -} - - -extern s32 func_80182734(s32 *a0, s32 a1); -extern void func_801826F0(s32 *a0); -extern unsigned char D_801B42EC[]; - -void func_80182678(s32 *a0) -{ - s32 param; - s32 table_base; - - param = *(s32 *)((s32)a0 + 0x2c); - table_base = (s32)D_801B42EC + param * 0x40; - - if (param != 0) { - *(s16 *)((s32)a0 + 0x6) += *(s16 *)((s32)a0 + 0x12); - *(s16 *)((s32)a0 + 0xE) += *(s16 *)((s32)a0 + 0x1A); - - if (func_80182734(a0, table_base) == 0) { - return; - } - } - - func_801826F0(a0); -} - - - - - - - - - - - - - - - - - - -extern void func_80146C3C(void); -extern s8 D_801B42D8; -void func_801826F0(s32 *param_1) -{ - int new_var; -register s32 p __asm__("$4"); -register s32 r __asm__("$3"); - p = (s32) (&D_801B42D8); - r = param_1[0x2c / 4]; - new_var = r; - p += new_var; - *((s8 *) p) = 0; - ((void (*)(void)) func_80146C3C)(); -} - - -void func_80182720(void *a0) { - *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; - *(s32 *)((s32)a0 + 0x4) = 0; - } - - -/* func_80182734 — scroll/advance one "text-ish" byte pair and pack it into a - * 24-bit-ish word. Returns 1 when the decoded value is <= 0 (nothing written), - * else stores the packed word through a1 and returns 0. - * - * Signature matches the in-TU forward declaration emitted by the func_80182678 - * draft: extern s32 func_80182734(s32 *a0, s32 a1); - * - * Two derivations that mattered (both byte-verified against the .s): - * - Both `-0x20` subtractions and the `sll $v0,$a2,16` in the bnez delay slot - * are reorg.c fill-from-target duplicates, NOT source duplication: one - * `t -= 0x20` after the if reproduces them exactly. - * - `(t << 8) | (t | 0xFF0000)` written as ONE expression is reassociated by - * fold()'s associate/split_tree step into `t | ((t<<8) | 0xFF0000)`, which - * swaps $v0/$v1 on the two temps. Splitting it into three statements gives - * fold nothing to reassociate and reproduces the target's temp lifetimes - * (local-alloc's qty_compare gives the SHORT-lived temps the lower reg, so - * the long-lived `x` correctly lands in $v1 and the pair in $v0). - */ -s32 func_80182734(s32 *a0, s32 a1) { - s32 t; - s32 ret; - - if (*(s32 *)((s32)a0 + 0x30) == 0) { - t = *(u8 *)(a1 + 1); - } else { - t = *(u8 *)(a1 + 2); - } - t -= 0x20; - ret = 1; - if (t > 0) { - if (*(s32 *)((s32)a0 + 0x30) == 0) { - s32 x = t << 8; - s32 y = t | 0xFF0000; - t = x | y; - } else { - t = (t << 16) | 0xFFFF; - } - *(s32 *)a1 = t; - ret = 0; - } - return ret; -} - - - -extern void (*D_80188728[])(void); - -void func_8018279C(void *a0) { - D_80188728[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_801495C4(s32 a0, s32 a1); -void func_80146E90(s32 *a0, s32 a1); - -void func_801827D8(s32 param_1) -{ - u8 pad[0x28]; - func_801495C4(*(s32 *)(param_1 + 0x34), param_1 + 0x4); - func_80146E90((s32 *)param_1, 3); - *(u16 *)(param_1 + 0x2) = *(u16 *)(param_1 + 0x2) + 1; -} - - -extern s32 func_80146E98(s32 a0); -extern void func_80146C3C(); -extern void func_80182874(s32 param_1); - -void func_80182824(s32 param) { - if (func_80146E98(param) != 0) { - ((void (*)(s32))func_80146C3C)(param); - } else { - func_80182874(param); - } -} - - -void func_8018286C(void) { -} - - - - -extern void func_80015978(s32 a0, s32 *a1); -extern void func_801829D8(); - -void func_80182874(s32 param_1) { - - extern u32 *D_80188720[]; - extern Blk8 D_8018873C[]; - s32 buf[2]; - Blk8 A; - Blk8 B; - Blk8 C; - Blk8 D; - u32 *basep; - s32 i; - s32 j; - - basep = D_80188720[*(s32 *)(param_1 + 0x30)]; - *(s16 *)(param_1 + 0x10) = *(s32 *)(param_1 + 0x2c); - func_80015978(param_1 + 4, buf); - for (j = 0; j < 4; j++) { - *(s16 *)&A = 0; - *((s16 *)&A + 1) = 0; - *((s16 *)&A + 2) = 0; - B = A; - C = A; - for (i = 0; i < 4; i++) { - D = D_8018873C[i]; - *(s16 *)(param_1 + 0x12) = i + j; - func_801829D8(param_1, buf, &A, &B, &C, &D, param_1 + 0x10, basep + i); - } - } -} - - -#include "common.h" -#include "../shared/engine_types.h" - - - -// @class: regalloc-order -// @stuck: none — MATCH (223 ins). Giant GTE coord transform. Two levers: (1) vy = {int t=vy-0x10; t+(r&0x1f);} -// blocks the (r&0x1f)-16 reassoc that materialized -0x10 via `li 0xfff0` (+1 ins); (2) inline the one-shot -// r0_00+1 stsv arg so it stays a $v0 temp instead of stealing a saved reg from the reused pSVar6. - - /* 8, align 2 -> lwl/lwr copy */ - /* 0x20 */ - /* 4, align 1 -> lwl/lwr */ - -extern void func_80013F3C(s32); -extern void RotMatrixZ(s32, void *); -extern void func_8004914C(void *); -extern void func_800491AC(void *); -extern int rand(void); -extern void func_80017714(void *); - -extern SVECTOR_8017E6D8 D_801B47EC[4]; -extern struct PW8017E6D8 D_801B480C; -extern struct PW8017E6D8 D_801B4810; -extern u8 D_801B4814, D_801B4815, D_801B4816, D_801B4818, D_801B4819, D_801B481A; -extern int D_801B481C; - -#define gte_ldv0(r0) __asm__ __volatile__( \ - "lwc2 $0, 0(%0)\n" \ - "lwc2 $1, 4(%0)\n" \ - : : "r"(r0) : "memory") - -#define gte_rt() __asm__ __volatile__( \ - "nop\n" \ - "nop\n" \ - "mvmva 1, 0, 0, 0, 0\n" \ - : : : "memory") - -#define gte_stsv(r0) __asm__ __volatile__( \ - "mfc2 $12, $9\n" \ - "mfc2 $13, $10\n" \ - "mfc2 $14, $11\n" \ - "sh $12, 0(%0)\n" \ - "sh $13, 2(%0)\n" \ - "sh $14, 4(%0)\n" \ - : : "r"(r0) : "$12", "$13", "$14", "memory") - -void func_801829D8(int a, s16 *b, SVECTOR_8017E6D8 *c, SVECTOR_8017E6D8 *d, - SVECTOR_8017E6D8 *e, SVECTOR_8017E6D8 *f, s16 *g, struct PW8017E6D8 *h) -{ - MATRIX_8017E6D8 m; - SVECTOR_8017E6D8 *r0_00; - SVECTOR_8017E6D8 *pSVar6; - SVECTOR_8017E6D8 *r0; - int r; - int mask; - - func_80013F3C((s32)&m); - RotMatrixZ(g[0], &m); - m.t[0] = b[0]; - m.t[1] = b[1]; - m.t[2] = 0; - func_8004914C(&m); - func_800491AC(&m); - - r0_00 = &D_801B47EC[0]; - if (*(s16 *)(a + 0x12) == 0) { - D_801B481C = 0x50000000; - D_801B4814 = 0; - D_801B4815 = 0; - D_801B4816 = 0; - D_801B4818 = 0; - D_801B4819 = 0; - D_801B481A = 0; - } - D_801B480C = h[0]; - D_801B4810 = h[1]; - - f->vx = f->vx + c->vx; - f->vy = f->vy + c->vy; - r = rand(); - mask = f->pad & r; - if (*(u16 *)(a + 0x12) & 1) - f->vx = f->vx + mask; - else - f->vx = f->vx - mask; - r = rand(); - { int t = f->vy - 0x10; f->vy = t + (r & 0x1f); } - - gte_ldv0(c); - gte_rt(); - gte_stsv(r0_00); - - gte_ldv0(f); - gte_rt(); - gte_stsv(r0_00 + 1); - - gte_ldv0(d); - gte_rt(); - r0 = r0_00 + 2; - gte_stsv(r0); - - *d = *f; - r = rand(); - d->vx = d->vx - (f->pad & r); - - gte_ldv0(d); - gte_rt(); - pSVar6 = r0_00 + 3; - gte_stsv(pSVar6); - - r0_00->vz = ((u16 *)b)[2]; - func_80017714(r0_00); - - gte_ldv0(e); - gte_rt(); - gte_stsv(r0); - - *e = *f; - r = rand(); - e->vx = e->vx + (f->pad & r); - - gte_ldv0(e); - gte_rt(); - gte_stsv(pSVar6); - - r0_00->vz = ((u16 *)b)[2]; - func_80017714(r0_00); - - *c = *f; -} - - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8017DC70", func_80182D54); - -extern void func_8012A4BC(void); - void func_80182E14(void) { - func_8012A4BC(); - } - - - -extern void (*D_801A41D4[])(void); - -void func_80182E34(void *a0) { - D_801A41D4[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8017DC70", func_80182E70); - - -extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); -extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8012F14C(s32 a0, s32 a1, s32 a2); - - -void func_80182FE8(s32 param_1) { - - extern s16 D_80126940; - extern s16 D_80126942; - extern s16 D_80126944; - MATRIX m1; - SVECTOR svec_in; - SVECTOR svec_out; - s16 *p; - - *(s32 *)(param_1 + 0x8) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x8), (s32)*(s16 *)(param_1 + 0xC), 4); - *(s32 *)(param_1 + 0x10) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x10), (s32)*(s16 *)(param_1 + 0x14), 4); - *(s16 *)(param_1 + 0x18) = func_80012ABC((s32)*(s16 *)(param_1 + 0x18), (s32)*(s16 *)(param_1 + 0x20), 4); - *(s16 *)(param_1 + 0x1A) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1A), (s32)*(s16 *)(param_1 + 0x22), 4); - *(s16 *)(param_1 + 0x1C) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1C), (s32)*(s16 *)(param_1 + 0x24), 4); - *(s16 *)(param_1 + 0x28) = func_80012C6C((s32)*(s16 *)(param_1 + 0x28), (s32)*(s16 *)(param_1 + 0x2E), 0x10); - *(s16 *)(param_1 + 0x2A) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2A), (s32)*(s16 *)(param_1 + 0x30), 0x10); - *(s16 *)(param_1 + 0x2C) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2C), (s32)*(s16 *)(param_1 + 0x32), 0x10); - - p = &D_80126940; - *(s32 *)(param_1 + 0x48) = (s32)*(s16 *)(param_1 + 0x28) + (s32)*p; - *(s32 *)(param_1 + 0x4C) = (s32)*(s16 *)(param_1 + 0x2A) + (s32)D_80126942; - *(s32 *)(param_1 + 0x50) = (s32)*(s16 *)(param_1 + 0x2C) + (s32)D_80126944; - func_80049CAC(param_1 + 0x18, (s32)&m1); - - m1.t[0] = *(s16 *)(param_1 + 0x28) + *p; - m1.t[1] = *(s16 *)(param_1 + 0x2A) + D_80126942; - m1.t[2] = *(s16 *)(param_1 + 0x2C) + D_80126944; - svec_in.vx = 0; - svec_in.vy = 0; - svec_in.vz = *(s32 *)(param_1 + 0x10); - ((void (*)(s32, s32, s32))func_8012F14C)((s32)&m1, (s32)&svec_in, (s32)&svec_out); - - *(s32 *)(param_1 + 0x3C) = (s32)svec_out.vx; - *(s32 *)(param_1 + 0x40) = (s32)svec_out.vy; - *(s32 *)(param_1 + 0x44) = (s32)svec_out.vz; -} - - - -extern void (*D_801A41D8[])(void); - -void func_80183194(void *a0) { - D_801A41D8[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_801831D0(void) { - ((s32 (*)(void))func_8012AD50)(); - } - - -extern s32 D_80126B58; -extern s32 func_8012AD50(void *a0); -extern s32 func_80172688(s32 *a0); -extern void func_8012BF4C(s32 *a0, s32 a1); -void func_80182D54(void *a0); - -void func_801831F0(s32 *a0) { - if (func_80172688(&D_80126B58)) { - func_80182D54(a0); - func_8012BF4C(a0, 0x20); - func_8012AD50(a0); - } -} - - -extern s32 D_80126B58; -extern s32 func_80172688(s32 *a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_80182E14(void); -extern void func_8012BF4C(s32 *a0, s32 a1); - -void func_80183248(s32 arg0) { - if (func_80172688(&D_80126B58) == 0) { - if (func_8012BEE8(arg0)) { - func_80182E14(); - *(u16 *)(arg0 + 2) -= 1; - } - return; - } - func_8012BF4C((s32 *)arg0, 0x20); -} - - - -extern void (*D_801A4514[])(void); - -void func_801832B8(void *a0) { - D_801A4514[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -/* Declarations conform VERBATIM to the ones already present in - * src/ov_SC03_014/ov_SC03_014_jr_801848E4.c (lines 58, 2524, 2527, 3139, - * 3222, 3244, 3245). Type mismatches are resolved by casting AT THE USE. */ -extern s32 func_8012C354(s32 a0, s32 a1); -extern s32 func_80029178(s32 arg); -extern s32 func_801788B8(s32 arg0, s32 arg1); -extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); -extern void func_8012CAE4(void *a0); -extern void func_8012A828(s32, s32); -/* not declared anywhere in the TU */ -extern void func_801839A0(void); - -void func_801832F4(void *a0) { - - extern s32 D_801A426C[]; - extern u8 D_801A4204[]; - extern u8 D_801847A8[]; - s32 res1, res2, arr_elem; - void *ptr; - u16 idx; - s16 val; - - res1 = func_8012C354((s32)a0, (s32)D_801A4204); - if (res1 == 0) { - return; - } - - ptr = *(void **)((s32)a0 + 0xDC); - idx = *(u16 *)((s32)ptr + 0xA); - arr_elem = D_801A426C[idx]; - - res1 = func_80029178(arr_elem); - - if ((res1 & 0xFF) == 0) { - res2 = func_801788B8((s32)a0, (s32)func_801839A0); - *(s32 *)((s32)a0 + 0xCC) = res2; - } else { - val = *(s16 *)((s32)a0 + 0x70); - val |= 0x4000; - *(s16 *)((s32)a0 + 0x70) = val; - } - - res2 = func_8012C658(0x8F, *(s16 *)((s32)a0 + 0x70), (s32)a0); - *(s32 *)((s32)a0 + 0x6C) = res2; - - if (res2 == 0) { - func_8012CAE4(a0); - } else { - ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801847A8); - *(u16 *)((s32)a0 + 0x2) = 1; - } -} - - - - -s32 func_801833C8(void *a0) { - void *p1, *p2; - u16 val; - long x; - - p1 = *(void **)(a0 + 0x20); - p2 = *(void **)(a0 + 0x6C); - val = *(u16 *)(p1 + 0x12); - p2 = *(void **)(p2 + 0x20); - val += 0x800; - val &= 0xFFF; - *(u16 *)(p2 + 0x12) = val; - x = 2; - *(u16 *)(a0 + 0x2) = x; - return x; -} - - -void func_801833F0(void) { -} - - -/* Declarations copied VERBATIM from src/ov_SC03_014/ov_SC03_014_jr_801848E4.c - * (func_80029178 @ line 58/3176, func_80029124 @ line 43/3253, - * func_80178CBC @ line 2537). The D_801E3* globals are not declared - * anywhere in the TU. */ -extern s32 func_80029178(s32 arg); -extern void func_80029124(s32 a0, s32 a1); -extern void func_80178CBC(s32 arg0, s32 arg1); - -void func_801833F8(void *a0) { - - extern s32 D_801A4450; - extern s32 D_801A443C; - extern s32 D_801A4438; - extern s32 D_801A44D0; - extern s32 D_801A4464; - extern s32 D_801A4330[]; - extern s32 D_801A43B4[]; - s32 *s0; - s32 *p; - u16 v0; - - s0 = *(s32 **)((char *)a0 + 0xDC); - v0 = *(u16 *)((char *)s0 + 0x8); - - if (!(v0 & 0x8000)) { - v0 = (func_80029178(0x1D)) & 0xFF; - - if (v0 != 0) { - u16 flags2; - D_801A4450 = *(s32 *)((char *)s0 + 0x4); - flags2 = *(u16 *)((char *)s0 + 0x8); - - if (!(flags2 & 0x4000)) { - v0 = *(u16 *)((char *)s0 + 0xC); - D_801A4438 = 0; - D_801A443C = D_801A43B4[v0]; - } else { - D_801A443C = 0; - v0 = *(u16 *)((char *)s0 + 0xC); - func_80029124(D_801A43B4[v0], 1); - D_801A4438 = 2; - } - } else { - D_801A4450 = *(s32 *)((char *)s0 + 0x0); - v0 = *(u16 *)((char *)s0 + 0xC); - D_801A4438 = 0; - D_801A443C = D_801A4330[v0]; - } - - func_80178CBC((s32)a0, (s32)&D_801A4464); - } else { - p = &D_801A44D0; - *p = *(s32 *)((char *)s0 + 0x0); - func_80178CBC((s32)a0, (s32)(p - 7)); - } - - *(u16 *)(a0 + 0x2) = 4; - *(u16 *)(a0 + 0x70) |= 0x8000; -} - - - - -/* Declarations copied VERBATIM from src/ov_SC03_014/ov_SC03_014_jr_801848E4.c - * (lines 43, 45, 58, 65, 2528, 2538, 2712, 3177, 3282). - * Type mismatches resolved by casting AT THE USE (func_80178D18). */ -extern s32 func_801789AC(s32 arg0); -extern void func_80178D18(void); -extern s32 func_80029178(s32 arg); -extern void func_80029514(s32); -extern void func_80029124(s32, s32); -extern void func_80145EE8(s32 param_1); -extern void func_8012C218(void *a0); -extern s32 func_80183748(void); - -void func_80183544(void *arg0) { - - extern s32 D_801A426C[]; - extern void func_8002AC00(s32 arg0); /* not declared anywhere in the TU */ - s32 ptr; - - ptr = *(s32 *)((s32)arg0 + 0xDC); - - if (func_801789AC((s32)arg0) != 0) { - ((void (*)(void *))func_80178D18)(arg0); - - if ((u8)func_80029178(D_801A426C[*(u16 *)(ptr + 0xA)]) != 0) { - if (D_801A426C[*(u16 *)(ptr + 0xA)] == 0x54) { - func_80029514(0x5A); - func_80029124(0xEA, 1); - } - - if ((*(u16 *)(ptr + 0x8) & 0x4000) != 0) { - if ((u8)func_80029178(0x1D) != 0) { - func_80145EE8(0); - } - } - - if (func_80183748() == 1) { - func_8002AC00(0x26); - } - - *(u16 *)((s32)arg0 + 0x70) &= 0x8000; - func_8012C218(*(void **)((s32)arg0 + 0xCC)); - } - - *(u16 *)((s32)arg0 + 0x2) = 2; - } -} - - - -extern void func_8012C218(void *a0); - s32 func_80183664(void * arg0) - { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); - } - - -void func_80183690(void *a0) { - *(short *)(*(int *)((char *)a0 + 0x6c) + 0xfe) = 1; - } - - -void func_801836A0(void *a0) { - *(short *)(*(int *)((char *)a0 + 0x6c) + 0xfe) = 2; - } - - - - -extern void func_80029124(s32, s32); - -void func_801836B0(void *a0) { - - extern s32 D_801A426C[]; - u16 idx = *(u16 *)(*(s32 *)(a0 + 0xDC) + 0xA); - func_80029124(D_801A426C[idx], 1); -} - - - -extern s32 D_80126B58; -extern void func_8014ADA8(s32 a0, s32 a1); - -void func_801836F0(void * arg0) { - s32 temp_v0; - - temp_v0 = *(s32 *)((s32)arg0 + 0xdc); - ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); -} - - -extern s16 func_80174764(void); -s32 func_80183724(void) { - return ((s32 (*)(void))func_80174764)() == 1; -} - - - - -extern s32 func_80029178(s32 arg); - -s32 func_80183748(void) { - - extern s32 D_801A426C[]; - s32 i; - - for (i = 0; i < 0x26; i++) { - if ((u8)func_80029178(D_801A426C[i]) == 0) { - return 0; - } - } - return 1; -} - - - -extern void (*D_801A453C[])(void); - -void func_801837AC(void *a0) { - D_801A453C[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -extern s32 func_8012C354(s32 a0, s32 a1); -extern void func_8012A828(s32, s32); - -void func_801837E8(void *a0) { - - extern u8 D_801A4238[]; - extern u8 D_801A4BFC[]; - extern u8 D_801A49DC[]; - s32 ptr; - unsigned short v1; - unsigned short v0; - - if (func_8012C354((s32)a0, (s32)D_801A4238) == 0) { - return; - } - - ptr = *(s32 *)((s32)a0 + 0x64); - v1 = *(unsigned short *)(ptr + 0x36); - v0 = *(unsigned short *)((s32)a0 + 0x70); - *(unsigned short *)((s32)a0 + 0xFC) = v1; - - if (v0 & 0x4000) { - ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801A4BFC); - *(unsigned short *)((s32)a0 + 0x5C) = 0; - } else { - ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801A49DC); - } - - *(unsigned short *)((s32)a0 + 0x2) = 1; -} - - - - -extern void func_8012C218(void *a0); -extern void func_8012A828(s32, s32); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80183870(void *a0) { - - extern u8 D_801A49EC[]; - extern u8 D_801A4AF4[]; - s16 mode; - - if (*(s16 *)((s32)a0 + 0xFC) != *(s16 *)(*(s32 *)((s32)a0 + 0x64) + 0x36)) { - ((void (*)(void))func_8012C218)(); - return; - } - - mode = *(s16 *)((s32)a0 + 0xFE); - if (mode == 1) { - *(s16 *)((s32)a0 + 0x2) = 2; - *(s32 *)((s32)a0 + 0x1C) = 0x20; - ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801A49EC); - *(s16 *)((s32)a0 + 0x5C) = 0; - func_8002D4C8(0x5BF, 0); - } else if (mode == 2) { - *(s16 *)((s32)a0 + 0x2) = 2; - *(s32 *)((s32)a0 + 0x1C) = 0x20; - ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801A4AF4); - *(u16 *)((s32)a0 + 0x5C) = 0x8C00; - } -} - - - -/* func_80183930 — guarded state-kick: if the s16 at 0x98 is clear, set the - * state word at 0x02 to 1, hand the entity to func_8012A828 with one of two - * script tables selected by the s16 flag at 0xFE (== 1 -> D_801A4BFC, else - * D_801A49DC), then clear that flag. - * - * §71 sibling-first: func_8018A06C (same TU, 0x148 bytes earlier) is the same - * two-arm `((void (*)(s32, void *))func_8012A828)(entity, D_801A4BFC / D_801A49DC)` selector and pins - * the widths: `lh` at 0x98/0xFE, `sh` at 0x02. - */ - -extern void func_8012A828(s32, s32); - -void func_80183930(void *a0) { - - extern u8 D_801A4BFC[]; - extern u8 D_801A49DC[]; - if (*(s16 *)((s32)a0 + 0x98) == 0) { - *(s16 *)((s32)a0 + 0x2) = 1; - if (*(s16 *)((s32)a0 + 0xFE) == 1) { - ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801A4BFC); - } else { - ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801A49DC); - } - *(s16 *)((s32)a0 + 0xFE) = 0; - } -} - - -extern s32 *D_80126B78; -extern u8 D_801A452C[]; -extern s32 func_8012BDBC(s32 a0, s32 a1); -extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80172710(void); -extern s32 func_80178BF8(); -#define gte_SetRotMatrix(r0) __asm__ volatile ( \ - "lw $12, 0( %0 );" \ - "lw $13, 4( %0 );" \ - "ctc2 $12, $0;" \ - "ctc2 $13, $1;" \ - "lw $12, 8( %0 );" \ - "lw $13, 12( %0 );" \ - "lw $14, 16( %0 );" \ - "ctc2 $12, $2;" \ - "ctc2 $13, $3;" \ - "ctc2 $14, $4" \ - : \ - : "r"( r0 ) \ - : "$12", "$13", "$14" ) -#define gte_SetTransMatrix(r0) __asm__ volatile ( \ - "lw $12, 20( %0 );" \ - "lw $13, 24( %0 );" \ - "ctc2 $12, $5;" \ - "lw $14, 28( %0 );" \ - "ctc2 $13, $6;" \ - "ctc2 $14, $7" \ - : \ - : "r"( r0 ) \ - : "$12", "$13", "$14" ) - -s32 aF8018A224() __asm__("func_801839A0"); - -s32 aF8018A224(param_1) - void *param_1; -{ - s32 *m; - s32 obj; - s32 sv0[2]; - s32 sv1[2]; - s32 flag; - - m = (s32 *)((u8 *)D_80126B78 + 0x34); - obj = *(s32 *)((s32)param_1 + 0x64); - - gte_SetRotMatrix(m); - gte_SetTransMatrix(m); - - RotTransSV(D_801A452C, sv0, &flag); - RotTransSV(D_801A452C + 8, sv1, &flag); - - if (func_80135888(*(s32 *)(obj + 0x20), *(s32 *)(obj + 0x58), (s32)sv0, (s32)sv1) == 0) { - return 0; - } - if (func_8012BDBC(obj, 0x300) == 0) { - return 0; - } - *(s16 *)(obj + 0x2) = 3; - func_80178BF8(); - return (s32)func_80172710; -} - - - -// @class: struct -// @stuck: none — MATCH (94 ins). Keys: (1) cache out[0] in a local `o` before the switch so gcc -// holds it in $a0 across the case stores (else it reloads/`lh` per case, +3 ins); (2) declare the -// `in` struct BEFORE `out[2]` so in@sp+0x10 / out@sp+0x20; (3) the 0x14 word is written via -// `*(s32*)&in.lo = D_80126B60` then the high short RMW'd `in.hi -= 0x20` (memory lhu/sh, not reg); -// (4) order the three global assigns B60,B5C,B64 (B60 first → v0/v1/a2 alloc); (5) explicit -// `case 2: break;` after case 3 so gcc emits the `beq $v1,2` test with case1 falling into case3. - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8002D4C8(s32, s32); -extern void func_8012A828(s32, s32); -extern void func_8012B77C(void *, s32, void *); -extern void func_8012B2CC(s32); -extern s32 func_8012C588(s32 a0, s32 a1); - - -void func_80183A98(s32 param_1) { - - extern M2C_UNK D_801B08E4; - extern u8 D_801B06BC; - extern u8 D_80126B5C; - extern s32 D_80126B60; - extern s32 D_80126B64; - s32 iVar1; - struct In in; - s32 out[2]; - s32 t; - s32 o; - - iVar1 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = iVar1; - if (iVar1 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - return; - } - ((void (*)(s32, void *))func_8001C214)(iVar1, &(*(u8 *)&D_801B08E4)); - if ((*(u16 *)(param_1 + 0x70) & 0x1000) == 0) { - func_8002D4C8(0x43A, 0); - } else { - func_8002D4C8(0x6D6, 0); - } - ((void (*)(s32, void *))func_8012A828)(param_1, &D_801B06BC); - *(s16 *)(param_1 + 2) = 1; - *(s32 *)(param_1 + 0x1C) = 100; - - *(s32 *)&in.lo = D_80126B60; - in.hi -= 0x20; - in.w0 = (*(s32 *)&D_80126B5C); - in.w2 = D_80126B64; - func_8012B77C(out, param_1 + 4, &in); - - o = out[0]; - t = *(u16 *)(param_1 + 0x70) & 0xF; - switch (t) { - case 0: - *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = (s16)o; - break; - case 1: - *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = (s16)o; - case 3: - *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = (s16)(o >> 16); - break; - case 2: - break; - } - - if (*(u16 *)(param_1 + 0x70) & 0x1000) { - *(s32 *)(param_1 + 0x1C) = *(s32 *)(param_1 + 0x1C) << 1; - } - func_8012B2CC(param_1); - ((void (*)(s32, s32))func_8012C588)(0xBC, param_1); -} - - - -extern void (*D_801B0758[])(void); - -void func_80183C10(void *a0) { - D_801B0758[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801B076C[])(void); - -void func_80183C4C(void *a0) { - D_801B076C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012CBF4(s32 a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern s32 func_80132EF4(s32 a0, s32 a1); -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern s32 D_801B0744; -extern s32 D_801B0750; -extern u8 D_800D3918[]; -extern s32 D_80126D50; - -void func_80183C88(s32 param_1) { - s32 s0 = param_1; - s32 v; - - func_8012B14C(s0, (s32)&D_801B0744); - if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { - func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), - *(s16 *)(s0 + 0xE), 0, 0); - v = func_80132EF4(s0, 0x22); - if (v != 0) { - *(s16 *)(v + 0x34) = 0x2000; - } - } else { - if (func_8012D5E4(s0, (s32)&D_801B0750, (s32)&D_800D3918, 0x19) == 0 && - (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && - func_8012BEE8(s0) == 0) { - return; - } - } - func_8012C218((void *)s0); -} - - - -// @class: schedule -// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). - -extern void func_8012B2CC(s32 a0); -extern void func_8012B23C(s32 a0); -extern void func_8012B14C(s32 a0, s32 a1); -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_8012AD80(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(void *a0); - -extern int D_801B0760; - -void func_80183D68(int param_1) -{ - SV3 in; - SV3 out; - short c; - - if (*(unsigned short *)(param_1 + 0x34) == 0) { - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); - ((void (*)(void))func_8012B2CC)(); - func_8012B23C(param_1); - ((void (*)(int, void *))func_8012B14C)(param_1, &D_801B0760); - in.a = 0; - in.b = 0; - in.c = 0x10; - ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); - *(short *)(param_1 + 6) = out.a; - *(short *)(param_1 + 0xa) = out.b; - c = out.c; - *(int *)(param_1 + 0x1c) = 0x5a; - *(short *)(param_1 + 0x34) = 1; - *(short *)(param_1 + 0xe) = c; - } - *(short *)(*(int *)(param_1 + 0x20) + 0x10) = - *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; - *(short *)(*(int *)(param_1 + 0x20) + 0x12) = - *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; - *(short *)(*(int *)(param_1 + 0x20) + 0x14) = - *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; - func_8012AD80(param_1); - if (func_8012BEE8(param_1) != 0) { - ((void (*)(int))func_8012C218)(param_1); - } -} - - - -// @class: other -// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); - -extern int D_801B0A14; - -void func_80183E84(int param_1) -{ - int v0; - - v0 = ((int (*)(void))func_8012C1B8)(); - *(int *)(param_1 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(int))func_8012CAE4)(param_1); - } else { - ((int (*)(int, void *))func_8001C214)(v0, &D_801B0A14); - *(short *)(param_1 + 0x2) = 1; - *(short *)(param_1 + 0x34) = 0; - } -} - - - -extern s32 func_8012C588(s32 a0, s32 a1); - -s32 func_80183EE0(s32 a0, s32 a1) { - /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every - LATER function in this TU, which blocks a byte-true decl of a different type. - Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ - extern s32 D_801B4960; - D_801B4960 = a1; - return func_8012C588(0x85, a0); -} - - -extern s32 func_80017DC4(void *a0, void *a1); -extern void func_80017E68(void *a0, void *a1); -extern void func_800D20C0(void *a0, void *a1, s32 a2); -extern void func_800D23D0(void *a0); -extern void func_8012A828(s32, s32); -extern void func_8012C218(void *a0); -extern void func_8012F14C(s32 a0, s32 a1, s32 a2); -extern s32 func_80134510(s32 arg); - -// @class: regalloc-order -// @stuck: none — MATCH (145/145 ins, match_one confirmed) - - - - -s32 func_80183F10(s32 param_1) { - - extern u8 D_801152A8[]; - extern M2C_UNK D_801847A8; - extern s32 D_801B4960; - extern s32 func_8012C354(s32 a0, s32 a1); - extern void RotMatrixZ(s32, void *); - extern void MulMatrix0(s32, void *, s32); - extern s32 D_801B0A30; - extern char * D_801B0A64; - extern char D_801B4940[]; - - S8_80184F08 s60; - SVECTOR_80184F08 sStack_58; - S8_80184F08 s50; - int auStack_48[8]; - s32 iVar5, iVar8; - char *puVar2, *puVar4; - u16 uVar3; - - if (((s32 (*)(s32, void *))func_8012C354)(param_1, &D_801B0A30) == 0) { - ((void (*)(s32))func_8012C218)(param_1); - } - ((void(*)(s32, void *))func_8012A828)(param_1, &(*(s32 *)&D_801847A8)); - iVar5 = *(s32 *)(param_1 + 0x20); - *(s16 *)(param_1 + 0x70) = 0x80; - *(s32 *)(iVar5 + 4) |= 0x50000040; - *(u16 *)(iVar5 + 0x2c) |= 1; - iVar8 = *(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x34; - ((void (*)(s32, s32, void *))func_8012F14C)(iVar8, D_801B4960, &s60); - s50 = s60; - sStack_58.vz = 0x1800; - sStack_58.vy = 0x1800; - sStack_58.vx = 0x1800; - ((void (*)(void *, void *))func_80017DC4)(&sStack_58, auStack_48); - RotMatrixZ(rand() & 0xfff, auStack_48); - MulMatrix0(iVar8, auStack_48, iVar5 + 0x34); - ((void (*)(void *, s32))func_80017E68)(&s50, iVar5 + 0x34); - - /* pool-alloc: gcc routes the loaded pointer through a caller-saved reg ($v0) - before the callee-saved home ($s1) — pin it to reproduce the extra move. */ - { - register char *tmp __asm__("$2"); - tmp = D_801B0A64; - puVar2 = tmp; - } - puVar4 = puVar2 + 0x20; - D_801B0A64 = puVar4; - *(char **)(param_1 + 0xcc) = puVar2; - if (D_801B4940 < puVar4) { - D_801B0A64 = D_801B4940 - 0x120; - } - func_800D20C0(&s60, &sStack_58, 7); - func_800D23D0(&sStack_58); - ((void(*)(void *, void *))RotMatrixYXZ)(&sStack_58, puVar2); - ((void (*)(void *, s32))func_80017E68)(&s60, (s32)puVar2); - - uVar3 = *(u16 *)((char *)&s50 + 2); - if (((s32 (*)(void *))func_80134510)(&s50) != 0 && - (s32)(s16)uVar3 - (s32)*(s16 *)((char *)&s50 + 2) < 0x80) { - *(s16 *)((char *)&s50 + 2) = *(s16 *)((char *)&s50 + 2) - 4; - { - register char *tmp __asm__("$3"); - tmp = D_801B0A64; - puVar2 = tmp; - } - puVar4 = puVar2 + 0x20; - D_801B0A64 = puVar4; - *(char **)(param_1 + 0xd0) = puVar2; - if (D_801B4940 < puVar4) { - D_801B0A64 = D_801B4940 - 0x120; - } - func_800D23D0(&(*(s32 *)&D_801152A8)); - ((void(*)(void *, void *))RotMatrixYXZ)(&(*(s32 *)&D_801152A8), puVar2); - ((void (*)(void *, s32))func_80017E68)(&s50, (s32)puVar2); - } - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; -} - - -extern s32 func_80017758(void *a0, void *a1); -extern void func_8012C218(void *a0); - - -// @class: regalloc-order -// @stuck: none — MATCH (168 ins). Keys: (1) pin param->$s1 via `register int self __asm__("$17")=param_1` -// (natural alloc put the short loop-counter in $s1); (2) block2's guarded dest via a test-temp -// `td=load; if(td){dest=td; ...}` forces the range-split `lw $a1; addu $s3,$a1,$0` the target has; -// (3) counter is `short i` do-while (keeps the `addu $s2,$v0,$0` raw-copy + sll16/sra16 compare); -// (4) gcc-2.7.2 loads s8/s16 via lbu/lhu+shift-extend (not lb/lh) so `signed char *p; *(s16*)buf=*p++` -// emits lbu;sll24;sra24;sh; (5) else-branch zero-byte asm barrier forces `addu $a0,$s1,$0` (else gcc -// reuses the still-live incoming $a0 with a nop delay slot). - -s32 func_80184154(s32 param_1) { - - extern signed char D_801B0A1C[]; - register int self __asm__("$17") = ((int)param_1); - int iVar6; - int iVar1; - unsigned char buf[0x34]; - signed char *p; - short i; - int dest; - int td; - unsigned short t; - - iVar1 = *(int *)(self + 0x1c); - iVar6 = *(int *)(self + 0x20); - *(int *)(self + 0x1c) = iVar1 + 1; - if (iVar1 < 2) { - p = D_801B0A1C; - i = 0; - dest = *(int *)(self + 0xcc); - t = *(unsigned short *)(self + 0x70); - *(short *)(buf + 0x0c) = 0; - *(short *)(buf + 0x0a) = 0; - *(short *)(buf + 0x08) = 0; - *(short *)(buf + 0x1c) = 0; - *(short *)(buf + 0x14) = 0; - *(short *)(buf + 0x04) = 0; - buf[0x22] = 0; - buf[0x21] = 0; - buf[0x20] = 0; - buf[0x2a] = 0; - buf[0x29] = 0; - buf[0x28] = 0; - buf[0x2e] = 0; - buf[0x2d] = 0; - buf[0x2c] = 0; - *(int *)(buf + 0x30) = 0x50000000; - buf[0x25] = t; - buf[0x26] = t; - buf[0x24] = t; - do { - *(short *)(buf + 0x00) = *p++; - *(short *)(buf + 0x02) = *p++; - *(short *)(buf + 0x10) = *p++; - *(short *)(buf + 0x12) = *p++; - *(short *)(buf + 0x18) = *p++; - *(short *)(buf + 0x1a) = *p--; - func_80017758(buf, (void *)dest); - i++; - } while (i < 4); - - td = *(int *)(self + 0xd0); - if (td != 0) { - dest = td; - p = D_801B0A1C; - i = 0; - t = *(unsigned short *)(self + 0x70); - *(short *)(buf + 0x0c) = 0; - *(short *)(buf + 0x0a) = 0; - *(short *)(buf + 0x08) = 0; - *(short *)(buf + 0x1c) = 0; - *(short *)(buf + 0x14) = 0; - *(short *)(buf + 0x04) = 0; - buf[0x22] = 0; - buf[0x21] = 0; - buf[0x20] = 0; - buf[0x2a] = 0; - buf[0x29] = 0; - buf[0x28] = 0; - buf[0x2e] = 0; - buf[0x2d] = 0; - buf[0x2c] = 0; - *(int *)(buf + 0x30) = 0x50000000; - buf[0x25] = t; - buf[0x26] = t; - buf[0x24] = t; - do { - *(short *)(buf + 0x00) = *p++; - *(short *)(buf + 0x02) = *p++; - *(short *)(buf + 0x10) = *p++; - *(short *)(buf + 0x12) = *p++; - *(short *)(buf + 0x18) = *p++; - *(short *)(buf + 0x1a) = *p--; - func_80017758(buf, (void *)dest); - i++; - } while (i < 4); - } - *(short *)(self + 0x70) = *(short *)(self + 0x70) >> 1; - *(unsigned short *)(iVar6 + 0x2c) |= 1; - } else { - __asm__ __volatile__("" : "=r"(self) : "0"(self)); - func_8012C218((void *)self); - } -} - - - -extern void (*D_801B0A68[])(void); - -void func_801843F4(void *a0) { - D_801B0A68[*(u16 *)((s32)a0 + 0x2)](); -} - - - - - diff --git a/src/ov_SC02_016/ov_SC02_016_jr_801810C8.c b/src/ov_SC02_016/ov_SC02_016_jr_801810C8.c new file mode 100644 index 0000000000..58bffaa4db --- /dev/null +++ b/src/ov_SC02_016/ov_SC02_016_jr_801810C8.c @@ -0,0 +1,5004 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +typedef void (*Handler)(struct Entry_8016E95C *); +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +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(); +extern void func_8014607C(void); +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 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 a0, s32 a1, s32 a2); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 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 arg0, s32 arg1, s16 *arg2, s16 *arg3); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 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 short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern s32 func_8014CF04(s32 a0, s32 a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern s32 func_8014D2A0(s32 a0, void *a1, void *a2); +extern s32 func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern s32 func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern s32 func_8014D820(s32 a0, u16 *a1, u16 *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 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(); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +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 s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern s32 func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_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 s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(s16 *a0, s16 *a1); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_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 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 s32 func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_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); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186AAC; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_80186C70[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(s32 arg0); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_80186C98[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_80186CA4[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern void func_8015CC40(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80186B18[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80186D48; +extern void func_8015D380(s32 a0); +extern unsigned char D_80185E2C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_80186D5C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_80186D98[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80186DE0; +extern u16 D_80186DE2; +extern u16 D_80186DE4; +extern s32 D_80186DE8; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80186DF0; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80186AFC; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_80186E74[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80186F24[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern s32 func_80161A60(s32 a0); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern s32 func_80161488(void *a0); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80186F54[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80186FB8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801B2DF8[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80186FDC[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801B2E50[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80187024[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80187014; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, u16 * a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801B268C[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018702C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_80187080[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80187048; +extern s16 D_8018707C; +extern s16 D_8018707A; +extern s16 D_80187078; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018708C[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801B2EB0; +extern u8 D_801B2EB1; +extern u8 D_801B2EB2; +extern u8 D_801B2EB3; +extern u8 D_801B2EB4; +extern u8 D_801B2EB5; +extern u8 D_801B2EB6; +extern u8 D_801B2EB7; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018709C[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801B2EF0; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_801870E0[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018715C[]; +extern s32 D_8018717C[]; +extern u8 D_801871F8[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80187218[]; +extern u8 D_80187238[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_801872D4[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80187350[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801B269C; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018735C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_80187364[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018742C[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018743C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018744C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80187458[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801873B8[]; +extern u8 D_801873CC[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80187470[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80187478[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80187480[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80187488[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80187490[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80187498[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801874A0[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80187554[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018755C[])(void); +extern void func_80169F00(void *a0); +extern char D_8018750C[]; +extern char D_801874CC[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80187594[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801875A0[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_801875E8[])(void); +extern void func_8016AB30(void *a0); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80187664[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801B3210; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80187658[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018769C[]; +extern unsigned short D_801876A4[]; +extern unsigned short D_801876AC[]; +extern unsigned char D_801B3218[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801B3210; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_801876B4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801B334C; +extern M2C_UNK D_801B3350; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801B32D8; +extern void (*D_801876E4[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801B3354[]; +extern u8 D_801B335C[]; +extern u8 D_801B330C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_801876EC[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80187708[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80187710[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187778[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018771C; +extern u8 D_80187728; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_801877AC[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_801877B4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80187808[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018783C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018782C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80187858; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32 _arg0); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_801878D0[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_801878D8[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_801878E0[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_801878E8[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_801878F0[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_801878F8[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80187904[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80187910[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018791C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018792C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018793C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80187944[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018794C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80187954[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018795C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80187964[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018796C[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80187974[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018797C[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80187984[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018798C[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80187994[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018799C[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_801879A4[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_801879AC[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_801879B4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_801879BC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_801879C4[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_801879CC[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_801879D4[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_801879DC[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_801879E4[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_801879EC[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80187A30[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_801879F4; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80187A60[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80187A9C[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern void func_801748EC(void); +extern s32 func_801749C8(); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80187AF4[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80187B04[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80187B0C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175494(void); +extern void (*D_80187C74[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_80187C80[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801B28E4; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern s32 func_801789AC(s32 arg0); +extern s16 D_801B4A60; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801B3A90; +extern short D_801B4AD4; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +extern s32 func_80178D40(s32 arg0, s32 arg1); +extern void func_80179B28(s32 a0); +extern void func_80179B74(u16 *p); +extern void func_80179D30(u16 *a0); +extern void func_80179D78(u16 *a0); +extern void func_80179DCC(short a0); +extern void func_80179DF8(void); +extern void func_80179E1C(short a0); +extern void func_80179E48(s16 a0); +extern void func_80179E74(s16 a0); +extern void func_80179EA0(u16 *a0); +extern void func_80179EE8(short a0); +extern void func_80179F14(s16 a0, s16 a1); +extern void func_80179F44(void); +extern void func_80179F6C(short a0); +extern void func_80179F98(u16 *a0); +extern void func_80179FEC(u16 *a0); +extern void func_8017A040(u16 *a0); +extern s32 D_801B3EBC; +extern void func_8017A094(s32 arg0); +extern void func_8017A0C4(s32 arg0); +extern void func_8017A0F4(void); +extern void func_8017A11C(void); +extern s32 D_801B3EE4; +extern void func_8017A144(s32 a0); +extern void func_8017A180(void); +extern void func_8017A1A8(void); +extern void func_8017A1D0(void); +extern void func_8017A1F8(void); +extern void func_8017A220(void); +extern void func_8017A248(void); +extern void func_8017A270(void); +extern void func_8017A298(void); +extern void func_8017A2C0(void); +extern void func_8017A2E8(void); +extern void func_8017A310(void); +extern void func_8017A338(void); +extern void func_8017A360(void); +extern void func_8017A388(void); +extern s16 D_801B3EA0; +extern s32 func_8017A3B0(void); +extern short D_801B3EDC; +extern short D_801B3ED8; +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); +extern int func_8017A3D8(void); +extern void func_80172310(u8*); +extern void func_80172780(void*); +extern void func_80172894(void*); +extern void func_801729B0(s32); +extern void func_80172B14(s16); +extern void func_80172C50(u16 *); +extern void func_80172D68(s32); +extern void func_801733FC(s16, u16 *); +extern void func_80173460(s32, s32); +extern void func_801734BC(s32, s32); +extern void func_801736B0(s32, s32); +extern void func_801737B8(s16); +extern void func_801738DC(s16); +extern void func_80173A28(s32, s32, s32, s32, s32, s32); +extern void func_80174438(s32); +extern void func_8017A4AC(void); +extern s32 func_8017AD0C(s32 arg0); +extern s32 func_8017AD0C(s32); +extern s32 func_8017ADE8(s32 a0); +extern s32 func_8017AE08(void); +extern void func_8017B0E4(int param_1, int param_2); +extern s16 D_801B3EA4; +extern u16 D_801B3F24; +extern u16 D_801B3F26; +extern u16 D_801B3F28; +extern void func_8017B1D8(void); +extern s32 func_8017B238(s32 param_1, s32 param_2); +extern s32 func_8017B368(s32 param); +extern s32 func_8017B614(s32 param_1, s32 param_2); +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern u8 D_8012694C; +extern s16 D_801B3F1C; +extern s16 D_801B3F1E; +extern s16 D_801B3F20; +extern s16 D_801B3F14; +extern s16 D_801B3F16; +extern s16 D_801B3F18; +extern void func_8017B7A8(void); +extern s16 D_801B3F34; +extern s16 D_801B3F36; +extern s16 D_801B3F38; +extern s16 D_801B3F3C; +extern s16 D_801B3F3E; +extern s16 D_801B3F40; +extern void func_8017B824(void); +extern void func_8017B880(void); +extern s32 func_8017B8E8(s32 src); +extern short D_801B3F2C; +extern short D_801B3F2E; +extern short D_801B3F30; +extern void func_8017B940(void); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); +extern SV4 D_801B3EC4; +extern SV4 D_801B3ECC; +extern void func_8017BA3C(s32 param_1, s32 param_2); +extern s32 func_8017BB34(s32 param_1, s32 param_2); +extern void (*D_801B3EEC[10])(int); +extern void func_8017BC38(int param_1); +extern void func_8017B0E4(int, int); +extern void func_8017BCA0(int param_1); +extern void func_8012A4BC(void); +extern void func_8017BCF4(int param_1); +extern void (*D_801B3EE8)(void); +extern void func_8017BD50(int param_1); +extern void (*D_80187E5C[])(void); +extern void func_8017BE60(void *a0); +extern void func_8017BE9C(void); +extern void func_8017BEA4(void); +extern void func_8017BEAC(void); +extern void func_8017BEB4(void); +extern void (*D_80187E80[])(void); +extern void func_8017BEBC(void *a0); +extern void func_8017C0BC(u8 *p); +extern void (*D_80187E88[])(void); +extern void func_8017C150(void *a0); +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern u8 D_80187E74; +extern void func_8017C18C(s32 a0); +extern void func_8017C230(int a0); +extern void (*D_80187FA0[])(void); +extern void func_8017CC90(void *a0); +extern void func_8012C218(void *a0); +extern void func_8017D038(void); +extern void (*D_80187FF8[])(void); +extern void func_8017D0E8(void *a0); +extern void (*D_8018800C[])(void); +extern void func_8017D714(void *a0); +extern void (*D_80188020[])(void); +extern void func_8017D9B4(void *a0); +extern void func_8017DC70(s32 arg0); +extern void (*D_80188078[])(void); +extern void func_8017EB50(void *a0); +extern void func_8017ED30(void); +extern s32 func_8017EB8C(s32 a0); +extern s32 func_8017EBD0(void); +extern void (*D_80188080[])(void); +extern void func_8017EBF4(void *a0); +extern void func_8017ED58(void); +extern s32 func_8017EC30(s32 a0); +extern void func_8001BFD0(void); +extern void func_800D0C74(u16 a0); +extern void func_800D1E28(void); +extern s32 func_8017EC70(s32 a0); +extern void func_800D1EBC(void); +extern void func_8017ED10(void); +extern void func_8017ED80(void); +extern void (*D_801880AC[])(void); +extern void func_8017EE24(void *a0); +extern void func_8017EF84(s32 a0, s16 *a1); +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern s16 D_801880B0[]; +extern void func_8017EE60(s32 param_1); +extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); +extern void func_8017EF84(s32 param_1, s16 *param_2); +extern void func_8012AD44(s32 *a0, s16 a1); +extern void func_8017F11C(s32 param_1); +extern void func_8012B200(u8 *a0); +extern void func_8017F154(); +extern void func_8017F190(s32 a0); +extern void func_8017F1C8(void *a0); +extern s32 func_8017F264(); +extern u16 D_80126B96; +extern s16 D_80126B98; +extern void func_8017F228(); +extern s32 func_8012DEB8(s32, s32, s32); +extern u16 D_801880E0; +extern u16 D_801880E2; +extern u16 D_801880E4; +extern u16 D_801880E6; +extern u16 D_801880E8; +extern u16 D_801880EA; +extern s32 func_8017F264(s32 a0); +extern void func_8017F33C(void *a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern s32 func_8017F434(s32 a0); +extern void (*D_801880FC[])(void); +extern void func_8017F4A0(void *a0); +extern void func_8017F630(void); +extern void func_8017F600(s32 *param); +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_8017F11C(s32 a0); +extern void func_8017F6A4(s32 param_1); +extern s32 func_8012BEE8(s32); +extern void func_8017F880(s32 a0); +extern void func_8017F8C0(void *a0); +extern Block4 D_801B41C8; +extern Block4 D_801B2BCC; +extern Block4 D_801B2BD0; +extern void func_8017F9F4(s32 a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_8017FABC(s32 a0); +extern void func_8013CB84(void); +extern void func_8017FB54(void); +extern void func_8017FB2C(void); +extern void (*D_801884B0[])(void); +extern void func_8017FBE0(void *a0); +extern s32 D_80188450[]; +extern void func_8017FC1C(s32 a0); +extern void func_8017FCD0(s32 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012931C(struct vec*); +extern void func_8018003C(s32 arg0); +extern code_fn D_80188514[]; +extern s32 func_8012C0EC(s32 a0); +extern void func_801800E4(int param_1); +extern s32 func_8012AD50(void *a0); +extern void func_80180134(void); +extern u8 D_800AF648[]; +extern u16 D_800AF7BE; +extern u8 *D_8018850C[]; +extern void func_801802C8(u8 *a0, u8 *a1); +extern void func_80180154(s32 param_1); +extern u8 *func_801290DC(s32 a0, u8 *a1); +extern void func_8002D4C8(s32 arg0, s32 arg1); +extern void func_801804D4(void); +extern s32 func_8002A04C(s32 a0); +extern void func_8012C098(void *a0); +extern void func_801804F8(int param_1); +extern void func_8012B23C(s32 a0); +extern void func_801806DC(s32 a0); +extern void func_80180728(s32 a0); +extern void func_801805D8(s32 a0); +extern short D_801AFF2C; +extern void func_8012A828(s32, s32); +extern s32 func_8012B744(void *a0, void *a1); +extern void Square0(s32 *a0, s32 *a1); +extern u8 D_801AFB14[]; +extern void func_80180728(s32 param_1); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012CBA4(s32 a0); /* canonical void */ +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern void func_8012ADE4(u8 *a0); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_80180B30(); +extern void func_8018035C(void *a0); +extern void func_8018096C(short*); +extern void (*D_80188618)(void *); +extern void func_80180828(s32 a0); +extern void func_8018096C(short *a0); +extern s32 func_8012BCCC(s32 a0); +extern void func_8018099C(s32 param_1); +extern s16 D_801AFBBC; +extern s16 D_801AFC44; +extern s16 D_801B04DC; +extern void func_80180B30(s32 a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern void func_8012CBA4(s32 a0); +extern void func_80142414(s32 a0, s16 a1); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8018109C(s32 a0, s32 a1); +extern void func_80180F6C(s32 a0); +extern void func_80180F98(s32 a0); +extern void func_80180FE0(s32 a0); +extern s32 D_8018861C; +extern void func_80180BD8(s32 a0); +extern void func_80181054(s32 arg0, s32 arg1, s32 arg2, void *arg3); +extern void func_80180F6C(s32 arg0); +extern void func_80180F98(s32 param_1); +extern void func_8012A828(s32 a0, s32 a1); +extern void func_80181028(void * arg0); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern char D_80188620; +extern void func_8018109C(int param_1, int param_2); +/* ==== end §8b carried decl layer ==== */ + + +#include "common.h" + +extern s32 func_8012B8E4(s32 a0, s32 a1); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012CBA4(s32); +extern void func_80131E00(struct S80131E00*, s32); +extern void func_8012ADE4(u8*); +extern void func_8018035C(void*); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, s32 a1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_801815DC(s32 a0); + +extern char D_80188620; +extern short D_801AF9CC; +extern short D_801AF924; +extern short D_801AFDDC; +extern short D_801B03E4; +extern s32 D_801B42D0; + +void func_801810C8(s32 a0) { + switch (*(u16 *)(a0 + 0x34)) { + case 0: + if (*(s32 *)(a0 + 0x1C) == 7) { + func_8012D5E4(a0, (s32)&D_80188620, (s32)(&D_80188620 + 8), 0xB); + } + break; + + case 1: + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += func_8012B8E4(a0, 6); + break; + + case 2: + if (*(s32 *)(a0 + 0x1C) == 0xA) { + func_8012D5E4(a0, (s32)&D_80188620, (s32)(&D_80188620 + 8), 0xB); + } + break; + + case 3: { + s32 flag; + s32 v; + s16 t; + + if (*(s32 *)(a0 + 0x1C) == *(s32 *)(a0 + 0x1C) / 10 * 10) { + D_801B42D0 += 0x10000; + } + func_8012B178(a0, D_801B42D0); + v = ((s32 (*)(s32))func_8012CBA4)(a0); + if (v & 0x1000) { + ((void (*)(s32, s32))func_80131E00)(a0, 0x12); + flag = 0; + } else if (v == 0x2000) { + flag = 1; + } else { + ((void (*)(s32))func_8012ADE4)(a0); + flag = 1; + } + ((void (*)(s32))func_8018035C)(a0); + func_8012D5E4(a0, (s32)&D_80188620, (s32)(&D_80188620 + 8), 0x11); + t = *(u16 *)(a0 + 0xFE) - 1; + *(u16 *)(a0 + 0xFE) = t; + if (t <= 0) { + func_80143B6C(a0, 0); + *(s16 *)(a0 + 0xFE) = -(D_801B42D0 / 0x10000); + } + if (flag == 1) { + *(s16 *)(a0 + 2) = 2; + *(u16 *)(a0 + 0x34) = 0; + func_8012A828(a0, (s32)&D_801AF9CC); + } + break; + } + + case 5: + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += func_8012B8E4(a0, 6); + if (*(s32 *)(a0 + 0x1C) == 0xC) { + func_801815DC(a0); + } + break; + } + + if (func_8012BEE8(a0)) { + switch (*(u16 *)(a0 + 0x34)) { + case 0: + if (func_8012BD3C(a0, 0x400, 0x4000)) { + *(u16 *)(a0 + 0x34) += 1; + func_8012A828(a0, (s32)&D_801AF924); + *(s32 *)(a0 + 0x1C) = 0xA; + } else { + *(s16 *)(a0 + 2) = 2; + *(u16 *)(a0 + 0x34) = 0; + func_8012A828(a0, (s32)&D_801AF9CC); + } + break; + + case 1: + *(u16 *)(a0 + 0x34) = 2; + *(s32 *)(a0 + 0x1C) = 0x18; + func_8012A828(a0, (s32)&D_801AFDDC); + break; + + case 2: + case 4: + *(s16 *)(a0 + 2) = 2; + *(u16 *)(a0 + 0x34) = 0; + func_8012A828(a0, (s32)&D_801AF9CC); + break; + + case 3: + *(s32 *)(a0 + 0x1C) = 0xA; + *(u16 *)(a0 + 0x34) += 1; + break; + + case 5: { + s16 t; + + t = *(u16 *)(a0 + 0x100) - 1; + *(u16 *)(a0 + 0x100) = t; + if (t == 0) { + *(s16 *)(a0 + 2) = 8; + func_8012A828(a0, (s32)&D_801B03E4); + } else { + *(s32 *)(a0 + 0x1C) = 0x1E; + } + break; + } + } + } +} + + +extern char D_80188634[]; +extern s16 D_801B04DC; +extern void func_8012A828(s32, s32); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); + +void func_8018140C(s32 a0) { + u8 *tbl; + + tbl = (u8 *)D_80188634; + if (!(*(u16 *)(a0 + 0x70) & 0x2000)) { + tbl += 0xC; + } + *(s16 *)(a0 + 0x2) = 7; + if (*(u16 *)(a0 + 0x70) & 0x200) { + ((void (*)(s32, void *))func_8012A828)(a0, &D_801B04DC); + } else { + ((void (*)(s32, void *))func_8012A828)(a0, (void *)*(s32 *)tbl); + } + func_8012B200((u8 *)a0); + func_8012B178(a0, *(s32 *)(tbl + 4)); + *(s32 *)(a0 + 0x1C) = *(s32 *)(tbl + 8); +} + + +extern char D_80188620; +extern s16 D_801AFBBC; +extern s16 D_801AFC44; +extern s16 D_801B04DC; +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012A828(s32, s32); +extern void func_8012AD80(s32 a0); + +void func_801814A8(s32 a0) { + s32 v0; + + func_8012AD80(a0); + if (*(u16 *)(a0 + 0x70) & 0x2000) { + v0 = *(u16 *)(a0 + 0xFE) - 1; + *(u16 *)(a0 + 0xFE) = v0; + if ((s16)v0 <= 0) { + func_80143B6C(a0, 0); + *(u16 *)(a0 + 0xFE) = 8; + } + if (*(u16 *)(a0 + 0x70) & 0x200) { + func_8012D5E4(a0, (s32)&D_80188620, (s32)&D_80188620 + 8, 0x11); + } + } + if (func_8012BEE8(a0)) { + *(u16 *)(a0 + 0x86) |= 2; + *(s16 *)(a0 + 0x2) = 3; + if (*(u16 *)(a0 + 0x86) & 2) { + *(s16 *)(a0 + 0x34) = 1; + *(s32 *)(a0 + 0x1C) = 0x28; + if (*(u16 *)(a0 + 0x70) & 0x200) { + ((void (*)(s32, void *))func_8012A828)(a0, &D_801B04DC); + } else { + ((void (*)(s32, void *))func_8012A828)(a0, &D_801AFBBC); + } + *(u16 *)(a0 + 0xFE) = 0; + } else { + *(s16 *)(a0 + 0x34) = 0; + ((void (*)(s32, void *))func_8012A828)(a0, &D_801AFC44); + *(s32 *)(a0 + 0x1C) = 0x19; + *(u16 *)(a0 + 0x86) |= 2; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801810C8", func_801815DC); + +#include "common.h" + +extern s32 func_8012BEE8(s32 a0); +extern void func_8012B23C(s32 a0); +extern s32 func_8012CBCC(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012A828(s32, s32); +extern s16 D_801AFBBC; +extern s16 D_801AFC44; +extern s16 D_801B04DC; + +void func_80181714(s32 a0) { + register s32 v0; + register s32 v1; + register s32 obj; + + switch (*(u16 *)(a0 + 0x34)) { + case 0: + if (func_8012BEE8(a0) == 0) { + return; + } + *(u16 *)(a0 + 0x34) += 1; + func_8012B23C(a0); + *(s32 *)(*(s32 *)(a0 + 0x20) + 4) &= 0x7FFFFFFF; + *(u16 *)(a0 + 0x5C) = *(u16 *)(*(s32 *)(a0 + 0x78) + 2); + return; + case 1: + if ((func_8012CBCC(a0) & 0x2000) == 0) { + return; + } + func_80143B6C(a0, 1); + *(u16 *)(a0 + 0x34) += 1; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) |= 0x10; + *(s32 *)(a0 + 0x1C) = 0x10; + /* fallthrough */ + case 2: + v0 = func_8004787C((*(s32 *)(a0 + 0x1C) << 7) & 0x780); + v1 = ((v0 << 9) >> 12) + 0x1000; + __asm__ __volatile__(""); + obj = *(s32 *)(a0 + 0x20); + *(s16 *)(obj + 0x1C) = v1; + *(s16 *)(obj + 0x18) = v1; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x1A) = 0x1000 - ((v0 << 10) >> 12); + if (func_8012BEE8(a0) == 0) { + return; + } + *(s16 *)(a0 + 2) = 3; + if (*(u16 *)(a0 + 0x86) & 2) { + *(s16 *)(a0 + 0x34) = 1; + *(s32 *)(a0 + 0x1C) = 0x28; + if (*(u16 *)(a0 + 0x70) & 0x200) { + func_8012A828(a0, &D_801B04DC); + } else { + func_8012A828(a0, &D_801AFBBC); + } + *(u16 *)(a0 + 0xFE) = 0; + } else { + *(s16 *)(a0 + 0x34) = 0; + func_8012A828(a0, &D_801AFC44); + *(s32 *)(a0 + 0x1C) = 0x19; + *(u16 *)(a0 + 0x86) |= 2; + } + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) &= ~0x10; + break; + } +} + + +extern s32 func_8012C354(s32 a0, s32 a1); +extern s32 func_80143970(s32 a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012A828(s32 a0, s32 a1); +extern s32 func_8012B744(void *a0, void *a1); +extern void Square0(s32 *a0, s32 *a1); +extern s32 rand(void); + +extern u8 D_8018852C[]; +extern void (*D_801885C8[])(void); +extern u8 D_80078EB1; +extern short D_801AF9CC; +extern u8 D_801AFB14[]; + +typedef struct { + s32 vx, vy, vz; +} Vec3_1818F8; + +void func_801818F8(s32 a0) { + s32 idx; + s32 sum; + Vec3_1818F8 d; + s32 r; + Vec3_1818F8 *p; + s32 dx, dz; + s32 x; + s32 v1; + s32 y; + register void *s1_ptr __asm__("$17"); + + idx = (*(u16 *)(a0 + 0x70) & 0xF00) >> 8; + + if (func_8012C354(a0, (s32)(D_8018852C + idx * 0x34)) == 0) { + return; + } + + *(u8 *)(a0 + 0xC0) = 1; + *(s32 *)(a0 + 0xB4) = -1; + *(u8 *)(a0 + 0xC1) = 0; + *(s32 *)(a0 + 0xBC) = (s32)D_801885C8; + func_80143970(a0); + + if ((*(u16 *)(a0 + 0x70) & 0x6000) != 0) { + *(s16 *)(a0 + 0x2) = 6; + func_8012A828(a0, (s32)&D_801AF9CC); + return; + } + + if ((*(u16 *)(a0 + 0x70) & 0x1) != 0) { + *(s16 *)(a0 + 0x2) = 0xF; + return; + } + + if ((*(u16 *)(a0 + 0x70) & 0x100) != 0) { + if ((*(u16 *)(a0 + 0x70) & 0x1000) != 0) { + y = (u32)(D_80078EB1 - 7) < 0xC; + *(u16 *)(a0 + 0x102) = y; + if (y == 0) { + func_8012E8A8((u8 *)a0); + *(s16 *)(a0 + 0x2) = 0x11; + return; + } + } + *(s16 *)(a0 + 0x2) = 9; + return; + } + + *(s16 *)(a0 + 0x2) = 1; + *(s16 *)(a0 + 0x34) = 0; + *(u16 *)(a0 + 0x5C) = 0xAA10; + r = rand(); + p = &d; + r = r & 0x1F; + dx = *(s16 *)(a0 + 0x6); + dz = *(s16 *)(a0 + 0x88); + *(s32 *)(a0 + 0x1C) = r + 0x28; + + p->vy = 0; + p->vx = dx - dz; + p->vz = *(s16 *)(a0 + 0xE) - *(s16 *)(a0 + 0x8C); + Square0(&p->vx, &p->vx); + + sum = d.vx + d.vz; + s1_ptr = (void *)(a0 + 0x88); + if (sum > 0x8FFFF) { + *(s16 *)(a0 + 0xFC) = (s16)func_8012B744((void *)(a0 + 4), s1_ptr); + } else { + x = rand() & 0x3FF; + v1 = x - 0x200; + if (v1 >= 0) { + v1 = x + 0x100; + } else { + v1 = x - 0x500; + } + y = (*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + v1) & 0xFFF; + *(s16 *)(a0 + 0xFC) = y; + } + + func_8012A828(a0, (s32)D_801AFB14); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801810C8", func_80181AE8); + +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern short D_801AF9CC; +extern u8 D_801B02EC[]; +extern void func_8012A828(s32, s32); +extern void func_80181054(s32, s32, s32, void*); + +void func_80181CB8(s32 a0) { + if (*(u16 *)(a0 + 0x72) & 0x4000) { + *(s16 *)(a0 + 0x100) = 3; + if (func_8012BD3C(a0, 0x400, 0x40000) != 0) { + func_80181054(a0, 5, 30, (s32)D_801B02EC); + } else { + *(s16 *)(a0 + 2) = 2; + *(s16 *)(a0 + 0x34) = 0; + ((void (*)(s32, void *))func_8012A828)(a0, (void *)&D_801AF9CC); + } + } +} + + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801AF9CC; + void func_80181D3C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 10; + func_8012A828((int)arg0, (int)&D_801AF9CC); + } + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801810C8", func_80181D68); + + +extern void func_8012A828(s32 a0, s32 a1); + extern short D_801B03E4; + void func_80181DEC(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 12; + func_8012A828((int)arg0, (int)&D_801B03E4); + } + + + + +void func_80181E18(void *arg0) { + if (*(u16 *)((s32)arg0 + 0x72) & 0x4000) { + *(u16 *)((s32)arg0 + 0x2) = 9; + *(u16 *)((s32)arg0 + 0x100) = 3; + } +} + + +extern u8 D_801B02EC[]; +extern void func_8012A828(s32, s32); + +void func_80181E40(a0) +s32 a0; +{ + *(s16 *)(a0 + 0x2) = 14; + func_8012A828(a0, &(*(u8 *)D_801B02EC)); + *(s32 *)(a0 + 0x1C) = 0x1e; +} + + +extern u16 D_80126B62; +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern void func_801815DC(s32 a0); +extern s32 func_8012BEE8(s32 a0); + +void func_80181E80(s32 arg0) +{ + s32 v; + unsigned short *p; + unsigned short val; + + if (*(u16 *)(arg0 + 0x70) & 0x1000) { + if ((*(s16 *)&D_80126B62) >= -959) { + *(s16 *)(arg0 + 2) = 9; + return; + } + } + v = func_8012B8E4(arg0, 6); + p = (unsigned short *)(*(s32 *)(arg0 + 0x20) + 0x12); + *p = (unsigned short)(*p + v); + + if (*(s32 *)(arg0 + 0x1C) == 0xC) { + func_801815DC(arg0); + } + + if (func_8012BEE8(arg0) == 0) { + return; + } + + val = *(unsigned short *)(arg0 + 0x100); + val--; + *(unsigned short *)(arg0 + 0x100) = val; + + { + s32 v0_shifted = (s32)val << 16; + if (v0_shifted == 0) { + *(unsigned short *)(arg0 + 0x2) = 0xB; + } else { + *(s32 *)(arg0 + 0x1C) = 0x1E; + } + } +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801810C8", func_80181F54); + +void func_80181FB0(void) { +} + +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern void func_8012B200(u8 *a0); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012E8A8(u8 *a0); + +extern s32 D_80188654[]; +extern s32 D_80188660[]; + +void func_80181FB8(s32 a0) { + s32 s1; + s32 v1; + + switch (*(u16 *)(a0 + 0x34)) { + case 0: + s1 = func_8012B608(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12), *(s16 *)(a0 + 0xFC), 8); + if (s1 == 0) { + *(u16 *)(a0 + 0x34) += 1; + func_8012B200((u8 *)a0); + *(s32 *)(a0 + 0x1C) = 0x1E; + if (*(s16 *)(a0 + 0x102) == 0) { + func_8012B14C(a0, (s32)D_80188654); + } else { + func_8012B14C(a0, (s32)D_80188660); + } + } + v1 = *(s32 *)(a0 + 0x20); + *(u16 *)(v1 + 0x12) = *(u16 *)(v1 + 0x12) + s1; + break; + case 1: + func_8012AD80(a0); + if (func_8012BEE8(a0) != 0) { + if (*(s16 *)(a0 + 0x102) == 0) { + func_8012E8A8((u8 *)a0); + *(s16 *)(a0 + 0x2) = 0x11; + } else { + *(s16 *)(a0 + 0x2) = 9; + } + } + break; + } +} + + +extern void func_8012CBF4(s32 a0); +extern void func_80131E00(); +extern void func_801804F8(int); +extern void func_80180728(s32 a0); + +void func_801820C0(s32 a0) { + s32 ret; + + if (*(s16 *)(a0 + 0xA) >= 0x10) { + ((void (*)(void))func_801804F8)(); + } else { + ret = ((s32 (*)(s32))func_8012CBF4)(a0); + if ((ret & 0x2000) != 0) { + if ((ret & 0x1000) != 0) { + ((void (*)(s32, s32))func_80131E00)(a0, 0x12); + } else { + func_80180728(a0); + } + } + } +} + + +extern void func_8012CBF4(s32 a0); +extern void func_80180728(s32 a0); + +void func_80182140(s32 a0) { + func_8012CBF4(a0); + if (*(u16 *)(a0 + 0x72) & 0x4000) { + func_80180728(a0); + } +} + + +extern u8 D_80188630; + +extern s32 func_8012BCCC(s32 a0); +extern void func_8018140C(s32 a0); + +void func_80182184(void *a0) { + s32 s0 = (s32)a0; + s32 v0 = func_8012BCCC(s0); + if (v0 < *(s32 *)&D_80188630) { + func_8018140C(s0); + } +} + + + +extern void func_80019064(void *a0); + +void func_801821CC(void *a0) { + + extern u8 D_801886BC; + extern void (*D_801886E4[])(void *); + func_80019064(&D_801886BC); + D_801886E4[*(u16 *)((s32)a0 + 0x2)](a0); +} + + +void func_80182224(s32 a0) +{ + s32 s0 = a0; + func_8014E934(a0); + func_8014CC28(s0); + func_8014F3E8(s0); + func_80182274(s0); + func_80147324(0x92F); + func_80146CA0((void *)s0); +} + + +extern void func_80147324(s32 a0); +extern int func_801511E0(int); +extern void func_80154274(s32*, s32); +extern void func_80149020(s32*); +extern void func_80182488(void); +extern s32 func_80172630(u8*); +extern void func_80146CA0(void*); +extern u8 D_801886C4[]; + +void func_80182274(s32 p) +{ + func_80147324(0x451); + ((void (*)(s32))func_801511E0)(p); + ((void (*)(s32, s32))func_80154274)(p, (s32)D_801886C4); + ((void (*)(s32))func_80149020)(p); + *(u8 *)(p + 0xDE) = 0x1E; + *(u8 *)(p + 0xDF) = 0; + func_80182488(); + ((void (*)(s32))func_80172630)(p); + ((void (*)(s32))func_80146CA0)(p); +} + + +/* func_801822E0 @ ov_SC02_016 (subseg ov_SC02_016_jr_8017DC70) — 85 ins. + * + * GATE: .venv/bin/python tools/match_one.py func_801822E0 --binary ov_SC02_016 \ + * --src .run/wave-s40/ov_SC02_016/func_801822E0.c + * + * Exemplar of an OPEN-ONLY h_norm cluster (9 members). Real TU is + * src/ov_SC02_016/ov_SC02_016_jr_8017DC70.c — the immediate NEXT function in that + * file, func_80182434 (already MATCHed, see its comment there), confirms: + * - actor pointer arg is plain `s32 a0` + * - func_80172630 canon extern: `extern s32 func_80172630(u8 *a0);` (cast at call) + * - func_80159B3C canon extern: `extern void func_80159B3C(void *a0);` (cast at call) + * - func_80165718 canon extern: `extern void func_80165718(s32 a0);` (no cast) + * - func_80146A6C canon extern (used 30+ times fleet-wide): + * extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); + * + * `func_801824AC` is DEFINED in this same TU (a few lines below the INCLUDE_ASM + * stub for this function) — a simple "find a free slot, mark it used" scan + * returning the slot index or -1. + * + * Body shape (byte-confirmed against the .s, no residual after first draft): + * func_80015978(a0+4, buf) -- fills a 3-short (SVECTOR-shaped) local from + * the actor's position substruct at a0+4; this + * exact `s16 buf[4]; func_80015978(a0+4,(s32*)buf);` + * idiom is the established fleet form (see + * engine_core.h DEFINE_func_8014A380/8016D778/ + * 8017C908 dedup macros). + * buf[1] -= 0x40 -- immediately after the call. The readback here + * is `lhu` (not `lh`) even though buf is a SIGNED + * s16 array: gcc-2.7.2 always emits `lhu` for a + * plain HImode load that feeds straight into an + * `sh` store (cookbook: "It does NOT cost you the + * lhu on readback" bullet, P30 wave 4). No cast + * needed, no separate unsigned local needed. + * do { ... } while (++i < 3) -- the asm has NO initial top-of-loop test before + * label .L80182318 (s3=0 set, then falls straight + * into the body) -- a genuine do-while in the + * source, not a for-loop gcc happened to rotate. + * if (func_801824AC() >= 0) { func_80146A6C(0x51,...); 3x rand(); func_80146A6C(0x52,...); } + * - the three back-to-back `rand()` calls assign straight to 3 locals in + * source order; gcc's own delay-slot filler moves each captured value into + * a callee-saved reg ($s0/$s1) via the NEXT call's branch-delay slot + * (standard call-crossing-value idiom, cookbook "ORDER" register-allocation + * entry) -- no manual reordering needed, plain sequential C reproduces it. + * - the final random offset is computed into a **s16 local** (not s32): the + * assignment truncates+sign-extends via `sll/sra` in-register (matches the + * target's `sll $s0,$s0,16 / sra $s0,$s0,16` with NO memory round-trip, + * because the s16 value is used immediately as a call argument rather than + * stored to a separate memory slot). + * cnt = *(u8*)(a0+0xDE); *(u8*)(a0+0xDE) = cnt + 0xff; if (cnt == 0) { ... } else { ... } + * - `lbu` (not `lb`) for the read: the "feeds only a truncated store + an + * equality-to-zero test" idiom, so either signedness of the C type reads + * identically; u8 chosen to match the common counter-byte convention used + * elsewhere in this TU. + * - THE ONE non-obvious lever: write the decrement as `cnt + 0xff`, not + * `cnt - 1`. Both are mathematically identical mod 256 (only the low byte + * survives the `sb`), and both compile to a single `addiu`, but gcc-2.7.2 + * picks a DIFFERENT immediate encoding for each source spelling: `cnt - 1` + * emits `addiu $v0,$v1,-1` (imm 0xFFFF, sign-extended -1); `cnt + 0xff` + * emits `addiu $v0,$v1,0xFF` (imm 0x00FF, the literal as typed) — which is + * what the target has. Confirmed the signedness of `cnt` (s8 vs u8) makes + * no difference here; the literal's own spelling is the lever. New + * cookbook idiom candidate (not in §31 as of this match). + */ + +extern void func_80015978(s32 a0, s32 *a1); +extern s32 func_801824AC(void); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern int rand(void); +extern void func_80182434(s32 a0); +extern void func_80159B3C(void *a0); +extern void func_80165718(s32 a0); +extern s32 func_80172630(u8 *a0); + +void func_801822E0(s32 param_1) +{ + s16 buf[4]; + s32 i; + s32 iVar1; + s32 uVar3; + s32 uVar4; + s32 uVar5; + s16 rnd; + u8 cnt; + + func_80015978(param_1 + 4, (s32 *)buf); + buf[1] -= 0x40; + + i = 0; + do { + iVar1 = func_801824AC(); + if (iVar1 >= 0) { + func_80146A6C(0x51, (void *)param_1, buf[0], buf[1], buf[2], iVar1, 0); + + uVar3 = rand(); + uVar4 = rand(); + uVar5 = rand(); + rnd = (uVar3 & 3) * 0x400 + (uVar4 & 3) * 0xfa + (uVar5 & 3) * 0x44; + func_80146A6C(0x52, (void *)param_1, 0, -0x20, 0x10, rnd, 0); + } + i++; + } while (i < 3); + + cnt = *(u8 *)(param_1 + 0xde); + *(u8 *)(param_1 + 0xde) = cnt + 0xff; + if (cnt == 0) { + func_80182434(param_1); + func_80159B3C((void *)param_1); + func_80165718(param_1); + } else { + func_80172630((u8 *)param_1); + } +} + + +/* func_80182434 — actor "enter state 0x92F/0x930" stub: two sound/state pokes, + * the standard `func_8014BC44(actor, actor->0xF2)` animation kick, set 0xA8 = 0x20, + * then hand the actor to func_80151664. + * + * Two load-bearing derivations (both byte-verified against the .s): + * + * 1. The final call TAKES THE ACTOR. The .s sets `addu $a0,$s0,$zero` immediately + * before `jal func_80151664`, but the whole fleet declares + * extern void func_80151664(void); + * (16 TUs + engine_core.h:2924; ov_SC02_016_after.c:3151 records that a + * `void func_80151664(s32)` definition is `conflicting types` everywhere). + * So: cookbook idiom 9 — cast at the CALL SITE, never touch the decl: + * ((void (*)(s32))func_80151664)(a0) + * The .run/ghidra_c seed shows `FUN_80151664()` with no argument and is WRONG + * here; the .s wins. This is the single instruction the previous draft missed. + * + * 2. `sb $v0, 0xA8($a0)` uses $a0 — NOT $s0 — as its base, and lands in the jal's + * delay slot. That needs no local-variable lever (no `s32 s0 = a0;` as the + * sibling DEFINE_func_80152790 template uses): the arg copy into $a0 is emitted + * ahead of the store, so the store simply addresses off the live copy, and + * reorg.c then lifts the last pre-jal insn into the delay slot. Writing a + * separate pointer local here would only add a pseudo. + * + * Declaration surface (D2 pass over the whole TU, one grep): + * func_80147364 -> ov_SC02_016_jr_8017DC70.c:194,360 extern void (u16, s32) + * func_80147324 -> :196,777 extern void (s32) + * func_8014BC44 -> :486 extern void (s32, s32) + * func_80151664 -> :880 extern void (void) [re-declared + * identically below, which is a legal duplicate declaration] + * func_80182434 -> only the INCLUDE_ASM at :3587; no prior prototype anywhere in + * ov_SC02_016 or include/. (The ov_SC03_09x definitions of this + * name are other overlays sharing the VA — different binaries.) + * Recompiled with those four prototypes prepended: still MATCH (21 ins). + */ + +extern void func_80151664(void); + +void func_80182434(s32 a0) +{ + func_80147364(4, 0x92F); + func_80147324(0x930); + func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); + *(u8 *)(a0 + 0xA8) = 0x20; + ((void (*)(s32))func_80151664)(a0); +} + + + +void func_80182488(void) +{ + extern u8 D_801B42EB; + s32 i = 19; + u8 *p = &D_801B42EB; + do { + *p = 0; + i--; + p--; + } while (i >= 0); +} + + + + +s32 func_801824AC(void) +{ + + extern u8 D_801B42D8[]; + s32 i; + u8 v; + u8 *p; + s32 ret; + + i = 0; + v = 1; + p = D_801B42D8; + do { + if (*p == 0) { + *p = v; + ret = i; + goto done; + } + i++; + p++; + } while (i < 20); + ret = -1; +done: + return ret; +} + + + +extern void (*D_801886F0[])(void); + +void func_801824F0(void *a0) { + D_801886F0[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +// @class: regalloc-order +// @stuck: none — MATCH (83 ins). $s3 is a dual-copy of iVar3 used only in the ==0 tail block; natural C coalesces to one $s0, so pin iVar3=$s0 and iVar3b=$s3 (different hard regs prevent gcc coalescing the copy). Also: outer+inner branch polarity inverted (if!=0 / if!=0 puts both short blocks at the tail as beqz targets); base = (int)D_801B42EC + idx*0x40 (materialize form, arg to callees). + +extern void func_801465C0(void); +extern void func_8001CD9C(int, void*); +extern void func_800233CC(void*, unsigned short); +extern void func_80182720(void*); +extern void func_801826F0(s32*); +extern int rand(void); + +void func_8018252C(int param_1) +{ + + extern unsigned char D_801B42EC[]; + register int iVar3 __asm__("$16"); + register int iVar3b __asm__("$19"); + int iVar5; + short sVar2; + + iVar5 = (int)D_801B42EC + *(int *)(param_1 + 0x2c) * 0x40; + iVar3 = ((int (*)(void))func_801465C0)(); + *(int *)(param_1 + 0x20) = iVar3; + iVar3b = iVar3; + if (iVar3 != 0) { + ((void (*)(int, int))func_8001CD9C)(iVar3, iVar5); + ((void (*)(int, int))func_800233CC)(iVar5, 0x10); + ((void (*)(int))func_80182720)(iVar5); + *(unsigned int *)(iVar3 + 4) = *(unsigned int *)(iVar3 + 4) | 0x50000000; + if (*(int *)(param_1 + 0x2c) != 0) { + sVar2 = (rand() & 3) * 0x800 + 0x1000; + *(short *)(iVar3 + 0x1a) = sVar2; + *(short *)(iVar3 + 0x18) = sVar2; + *(unsigned short *)(param_1 + 0x12) = (rand() & 0xf) + 3; + if ((rand() & 1) != 0) { + *(short *)(param_1 + 0x12) = -*(short *)(param_1 + 0x12); + } + *(unsigned short *)(param_1 + 0x1a) = (rand() & 0xf) + 3; + if ((rand() & 1) != 0) { + *(short *)(param_1 + 0x1a) = -*(short *)(param_1 + 0x1a); + } + } else { + *(short *)(iVar3b + 0x1a) = 0x4000; + *(short *)(iVar3b + 0x18) = 0x4000; + } + *(short *)(param_1 + 2) = *(short *)(param_1 + 2) + 1; + } else { + ((void (*)(int))func_801826F0)(param_1); + } +} + + +extern s32 func_80182734(s32 *a0, s32 a1); +extern void func_801826F0(s32 *a0); +extern unsigned char D_801B42EC[]; + +void func_80182678(s32 *a0) +{ + s32 param; + s32 table_base; + + param = *(s32 *)((s32)a0 + 0x2c); + table_base = (s32)D_801B42EC + param * 0x40; + + if (param != 0) { + *(s16 *)((s32)a0 + 0x6) += *(s16 *)((s32)a0 + 0x12); + *(s16 *)((s32)a0 + 0xE) += *(s16 *)((s32)a0 + 0x1A); + + if (func_80182734(a0, table_base) == 0) { + return; + } + } + + func_801826F0(a0); +} + + + + + + + + + + + + + + + + + + +extern void func_80146C3C(void); +extern s8 D_801B42D8; +void func_801826F0(s32 *param_1) +{ + int new_var; +register s32 p __asm__("$4"); +register s32 r __asm__("$3"); + p = (s32) (&D_801B42D8); + r = param_1[0x2c / 4]; + new_var = r; + p += new_var; + *((s8 *) p) = 0; + ((void (*)(void)) func_80146C3C)(); +} + + +void func_80182720(void *a0) { + *(s32 *)((s32)a0 + 0x0) = 0xF0F0F0; + *(s32 *)((s32)a0 + 0x4) = 0; + } + + +/* func_80182734 — scroll/advance one "text-ish" byte pair and pack it into a + * 24-bit-ish word. Returns 1 when the decoded value is <= 0 (nothing written), + * else stores the packed word through a1 and returns 0. + * + * Signature matches the in-TU forward declaration emitted by the func_80182678 + * draft: extern s32 func_80182734(s32 *a0, s32 a1); + * + * Two derivations that mattered (both byte-verified against the .s): + * - Both `-0x20` subtractions and the `sll $v0,$a2,16` in the bnez delay slot + * are reorg.c fill-from-target duplicates, NOT source duplication: one + * `t -= 0x20` after the if reproduces them exactly. + * - `(t << 8) | (t | 0xFF0000)` written as ONE expression is reassociated by + * fold()'s associate/split_tree step into `t | ((t<<8) | 0xFF0000)`, which + * swaps $v0/$v1 on the two temps. Splitting it into three statements gives + * fold nothing to reassociate and reproduces the target's temp lifetimes + * (local-alloc's qty_compare gives the SHORT-lived temps the lower reg, so + * the long-lived `x` correctly lands in $v1 and the pair in $v0). + */ +s32 func_80182734(s32 *a0, s32 a1) { + s32 t; + s32 ret; + + if (*(s32 *)((s32)a0 + 0x30) == 0) { + t = *(u8 *)(a1 + 1); + } else { + t = *(u8 *)(a1 + 2); + } + t -= 0x20; + ret = 1; + if (t > 0) { + if (*(s32 *)((s32)a0 + 0x30) == 0) { + s32 x = t << 8; + s32 y = t | 0xFF0000; + t = x | y; + } else { + t = (t << 16) | 0xFFFF; + } + *(s32 *)a1 = t; + ret = 0; + } + return ret; +} + + + +extern void (*D_80188728[])(void); + +void func_8018279C(void *a0) { + D_80188728[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_801495C4(s32 a0, s32 a1); +void func_80146E90(s32 *a0, s32 a1); + +void func_801827D8(s32 param_1) +{ + u8 pad[0x28]; + func_801495C4(*(s32 *)(param_1 + 0x34), param_1 + 0x4); + func_80146E90((s32 *)param_1, 3); + *(u16 *)(param_1 + 0x2) = *(u16 *)(param_1 + 0x2) + 1; +} + + +extern s32 func_80146E98(s32 a0); +extern void func_80146C3C(); +extern void func_80182874(s32 param_1); + +void func_80182824(s32 param) { + if (func_80146E98(param) != 0) { + ((void (*)(s32))func_80146C3C)(param); + } else { + func_80182874(param); + } +} + + +void func_8018286C(void) { +} + + + + +extern void func_80015978(s32 a0, s32 *a1); +extern void func_801829D8(); + +void func_80182874(s32 param_1) { + + extern u32 *D_80188720[]; + extern Blk8 D_8018873C[]; + s32 buf[2]; + Blk8 A; + Blk8 B; + Blk8 C; + Blk8 D; + u32 *basep; + s32 i; + s32 j; + + basep = D_80188720[*(s32 *)(param_1 + 0x30)]; + *(s16 *)(param_1 + 0x10) = *(s32 *)(param_1 + 0x2c); + func_80015978(param_1 + 4, buf); + for (j = 0; j < 4; j++) { + *(s16 *)&A = 0; + *((s16 *)&A + 1) = 0; + *((s16 *)&A + 2) = 0; + B = A; + C = A; + for (i = 0; i < 4; i++) { + D = D_8018873C[i]; + *(s16 *)(param_1 + 0x12) = i + j; + func_801829D8(param_1, buf, &A, &B, &C, &D, param_1 + 0x10, basep + i); + } + } +} + + +#include "common.h" +#include "../shared/engine_types.h" + + + +// @class: regalloc-order +// @stuck: none — MATCH (223 ins). Giant GTE coord transform. Two levers: (1) vy = {int t=vy-0x10; t+(r&0x1f);} +// blocks the (r&0x1f)-16 reassoc that materialized -0x10 via `li 0xfff0` (+1 ins); (2) inline the one-shot +// r0_00+1 stsv arg so it stays a $v0 temp instead of stealing a saved reg from the reused pSVar6. + + /* 8, align 2 -> lwl/lwr copy */ + /* 0x20 */ + /* 4, align 1 -> lwl/lwr */ + +extern void func_80013F3C(s32); +extern void RotMatrixZ(s32, void *); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern int rand(void); +extern void func_80017714(void *); + +extern SVECTOR_8017E6D8 D_801B47EC[4]; +extern struct PW8017E6D8 D_801B480C; +extern struct PW8017E6D8 D_801B4810; +extern u8 D_801B4814, D_801B4815, D_801B4816, D_801B4818, D_801B4819, D_801B481A; +extern int D_801B481C; + +#define gte_ldv0(r0) __asm__ __volatile__( \ + "lwc2 $0, 0(%0)\n" \ + "lwc2 $1, 4(%0)\n" \ + : : "r"(r0) : "memory") + +#define gte_rt() __asm__ __volatile__( \ + "nop\n" \ + "nop\n" \ + "mvmva 1, 0, 0, 0, 0\n" \ + : : : "memory") + +#define gte_stsv(r0) __asm__ __volatile__( \ + "mfc2 $12, $9\n" \ + "mfc2 $13, $10\n" \ + "mfc2 $14, $11\n" \ + "sh $12, 0(%0)\n" \ + "sh $13, 2(%0)\n" \ + "sh $14, 4(%0)\n" \ + : : "r"(r0) : "$12", "$13", "$14", "memory") + +void func_801829D8(int a, s16 *b, SVECTOR_8017E6D8 *c, SVECTOR_8017E6D8 *d, + SVECTOR_8017E6D8 *e, SVECTOR_8017E6D8 *f, s16 *g, struct PW8017E6D8 *h) +{ + MATRIX_8017E6D8 m; + SVECTOR_8017E6D8 *r0_00; + SVECTOR_8017E6D8 *pSVar6; + SVECTOR_8017E6D8 *r0; + int r; + int mask; + + func_80013F3C((s32)&m); + RotMatrixZ(g[0], &m); + m.t[0] = b[0]; + m.t[1] = b[1]; + m.t[2] = 0; + func_8004914C(&m); + func_800491AC(&m); + + r0_00 = &D_801B47EC[0]; + if (*(s16 *)(a + 0x12) == 0) { + D_801B481C = 0x50000000; + D_801B4814 = 0; + D_801B4815 = 0; + D_801B4816 = 0; + D_801B4818 = 0; + D_801B4819 = 0; + D_801B481A = 0; + } + D_801B480C = h[0]; + D_801B4810 = h[1]; + + f->vx = f->vx + c->vx; + f->vy = f->vy + c->vy; + r = rand(); + mask = f->pad & r; + if (*(u16 *)(a + 0x12) & 1) + f->vx = f->vx + mask; + else + f->vx = f->vx - mask; + r = rand(); + { int t = f->vy - 0x10; f->vy = t + (r & 0x1f); } + + gte_ldv0(c); + gte_rt(); + gte_stsv(r0_00); + + gte_ldv0(f); + gte_rt(); + gte_stsv(r0_00 + 1); + + gte_ldv0(d); + gte_rt(); + r0 = r0_00 + 2; + gte_stsv(r0); + + *d = *f; + r = rand(); + d->vx = d->vx - (f->pad & r); + + gte_ldv0(d); + gte_rt(); + pSVar6 = r0_00 + 3; + gte_stsv(pSVar6); + + r0_00->vz = ((u16 *)b)[2]; + func_80017714(r0_00); + + gte_ldv0(e); + gte_rt(); + gte_stsv(r0); + + *e = *f; + r = rand(); + e->vx = e->vx + (f->pad & r); + + gte_ldv0(e); + gte_rt(); + gte_stsv(pSVar6); + + r0_00->vz = ((u16 *)b)[2]; + func_80017714(r0_00); + + *c = *f; +} + + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801810C8", func_80182D54); + +extern void func_8012A4BC(void); + void func_80182E14(void) { + func_8012A4BC(); + } + + + +extern void (*D_801A41D4[])(void); + +void func_80182E34(void *a0) { + D_801A41D4[*(u8 *)((s32)a0 + 0x4)](); +} + + +INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801810C8", func_80182E70); + + +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); + + +void func_80182FE8(s32 param_1) { + + extern s16 D_80126940; + extern s16 D_80126942; + extern s16 D_80126944; + MATRIX m1; + SVECTOR svec_in; + SVECTOR svec_out; + s16 *p; + + *(s32 *)(param_1 + 0x8) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x8), (s32)*(s16 *)(param_1 + 0xC), 4); + *(s32 *)(param_1 + 0x10) = (s16)func_80012C6C((s32)*(s16 *)(param_1 + 0x10), (s32)*(s16 *)(param_1 + 0x14), 4); + *(s16 *)(param_1 + 0x18) = func_80012ABC((s32)*(s16 *)(param_1 + 0x18), (s32)*(s16 *)(param_1 + 0x20), 4); + *(s16 *)(param_1 + 0x1A) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1A), (s32)*(s16 *)(param_1 + 0x22), 4); + *(s16 *)(param_1 + 0x1C) = func_80012ABC((s32)*(s16 *)(param_1 + 0x1C), (s32)*(s16 *)(param_1 + 0x24), 4); + *(s16 *)(param_1 + 0x28) = func_80012C6C((s32)*(s16 *)(param_1 + 0x28), (s32)*(s16 *)(param_1 + 0x2E), 0x10); + *(s16 *)(param_1 + 0x2A) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2A), (s32)*(s16 *)(param_1 + 0x30), 0x10); + *(s16 *)(param_1 + 0x2C) = func_80012C6C((s32)*(s16 *)(param_1 + 0x2C), (s32)*(s16 *)(param_1 + 0x32), 0x10); + + p = &D_80126940; + *(s32 *)(param_1 + 0x48) = (s32)*(s16 *)(param_1 + 0x28) + (s32)*p; + *(s32 *)(param_1 + 0x4C) = (s32)*(s16 *)(param_1 + 0x2A) + (s32)D_80126942; + *(s32 *)(param_1 + 0x50) = (s32)*(s16 *)(param_1 + 0x2C) + (s32)D_80126944; + func_80049CAC(param_1 + 0x18, (s32)&m1); + + m1.t[0] = *(s16 *)(param_1 + 0x28) + *p; + m1.t[1] = *(s16 *)(param_1 + 0x2A) + D_80126942; + m1.t[2] = *(s16 *)(param_1 + 0x2C) + D_80126944; + svec_in.vx = 0; + svec_in.vy = 0; + svec_in.vz = *(s32 *)(param_1 + 0x10); + ((void (*)(s32, s32, s32))func_8012F14C)((s32)&m1, (s32)&svec_in, (s32)&svec_out); + + *(s32 *)(param_1 + 0x3C) = (s32)svec_out.vx; + *(s32 *)(param_1 + 0x40) = (s32)svec_out.vy; + *(s32 *)(param_1 + 0x44) = (s32)svec_out.vz; +} + + + +extern void (*D_801A41D8[])(void); + +void func_80183194(void *a0) { + D_801A41D8[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_801831D0(void) { + ((s32 (*)(void))func_8012AD50)(); + } + + +extern s32 D_80126B58; +extern s32 func_8012AD50(void *a0); +extern s32 func_80172688(s32 *a0); +extern void func_8012BF4C(s32 *a0, s32 a1); +void func_80182D54(void *a0); + +void func_801831F0(s32 *a0) { + if (func_80172688(&D_80126B58)) { + func_80182D54(a0); + func_8012BF4C(a0, 0x20); + func_8012AD50(a0); + } +} + + +extern s32 D_80126B58; +extern s32 func_80172688(s32 *a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_80182E14(void); +extern void func_8012BF4C(s32 *a0, s32 a1); + +void func_80183248(s32 arg0) { + if (func_80172688(&D_80126B58) == 0) { + if (func_8012BEE8(arg0)) { + func_80182E14(); + *(u16 *)(arg0 + 2) -= 1; + } + return; + } + func_8012BF4C((s32 *)arg0, 0x20); +} + + + +extern void (*D_801A4514[])(void); + +void func_801832B8(void *a0) { + D_801A4514[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +/* Declarations conform VERBATIM to the ones already present in + * src/ov_SC03_014/ov_SC03_014_jr_801848E4.c (lines 58, 2524, 2527, 3139, + * 3222, 3244, 3245). Type mismatches are resolved by casting AT THE USE. */ +extern s32 func_8012C354(s32 a0, s32 a1); +extern s32 func_80029178(s32 arg); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012CAE4(void *a0); +extern void func_8012A828(s32, s32); +/* not declared anywhere in the TU */ +extern void func_801839A0(void); + +void func_801832F4(void *a0) { + + extern s32 D_801A426C[]; + extern u8 D_801A4204[]; + extern u8 D_801847A8[]; + s32 res1, res2, arr_elem; + void *ptr; + u16 idx; + s16 val; + + res1 = func_8012C354((s32)a0, (s32)D_801A4204); + if (res1 == 0) { + return; + } + + ptr = *(void **)((s32)a0 + 0xDC); + idx = *(u16 *)((s32)ptr + 0xA); + arr_elem = D_801A426C[idx]; + + res1 = func_80029178(arr_elem); + + if ((res1 & 0xFF) == 0) { + res2 = func_801788B8((s32)a0, (s32)func_801839A0); + *(s32 *)((s32)a0 + 0xCC) = res2; + } else { + val = *(s16 *)((s32)a0 + 0x70); + val |= 0x4000; + *(s16 *)((s32)a0 + 0x70) = val; + } + + res2 = func_8012C658(0x8F, *(s16 *)((s32)a0 + 0x70), (s32)a0); + *(s32 *)((s32)a0 + 0x6C) = res2; + + if (res2 == 0) { + func_8012CAE4(a0); + } else { + ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801847A8); + *(u16 *)((s32)a0 + 0x2) = 1; + } +} + + + + +s32 func_801833C8(void *a0) { + void *p1, *p2; + u16 val; + long x; + + p1 = *(void **)(a0 + 0x20); + p2 = *(void **)(a0 + 0x6C); + val = *(u16 *)(p1 + 0x12); + p2 = *(void **)(p2 + 0x20); + val += 0x800; + val &= 0xFFF; + *(u16 *)(p2 + 0x12) = val; + x = 2; + *(u16 *)(a0 + 0x2) = x; + return x; +} + + +void func_801833F0(void) { +} + + +/* Declarations copied VERBATIM from src/ov_SC03_014/ov_SC03_014_jr_801848E4.c + * (func_80029178 @ line 58/3176, func_80029124 @ line 43/3253, + * func_80178CBC @ line 2537). The D_801E3* globals are not declared + * anywhere in the TU. */ +extern s32 func_80029178(s32 arg); +extern void func_80029124(s32 a0, s32 a1); +extern void func_80178CBC(s32 arg0, s32 arg1); + +void func_801833F8(void *a0) { + + extern s32 D_801A4450; + extern s32 D_801A443C; + extern s32 D_801A4438; + extern s32 D_801A44D0; + extern s32 D_801A4464; + extern s32 D_801A4330[]; + extern s32 D_801A43B4[]; + s32 *s0; + s32 *p; + u16 v0; + + s0 = *(s32 **)((char *)a0 + 0xDC); + v0 = *(u16 *)((char *)s0 + 0x8); + + if (!(v0 & 0x8000)) { + v0 = (func_80029178(0x1D)) & 0xFF; + + if (v0 != 0) { + u16 flags2; + D_801A4450 = *(s32 *)((char *)s0 + 0x4); + flags2 = *(u16 *)((char *)s0 + 0x8); + + if (!(flags2 & 0x4000)) { + v0 = *(u16 *)((char *)s0 + 0xC); + D_801A4438 = 0; + D_801A443C = D_801A43B4[v0]; + } else { + D_801A443C = 0; + v0 = *(u16 *)((char *)s0 + 0xC); + func_80029124(D_801A43B4[v0], 1); + D_801A4438 = 2; + } + } else { + D_801A4450 = *(s32 *)((char *)s0 + 0x0); + v0 = *(u16 *)((char *)s0 + 0xC); + D_801A4438 = 0; + D_801A443C = D_801A4330[v0]; + } + + func_80178CBC((s32)a0, (s32)&D_801A4464); + } else { + p = &D_801A44D0; + *p = *(s32 *)((char *)s0 + 0x0); + func_80178CBC((s32)a0, (s32)(p - 7)); + } + + *(u16 *)(a0 + 0x2) = 4; + *(u16 *)(a0 + 0x70) |= 0x8000; +} + + + + +/* Declarations copied VERBATIM from src/ov_SC03_014/ov_SC03_014_jr_801848E4.c + * (lines 43, 45, 58, 65, 2528, 2538, 2712, 3177, 3282). + * Type mismatches resolved by casting AT THE USE (func_80178D18). */ +extern s32 func_801789AC(s32 arg0); +extern void func_80178D18(void); +extern s32 func_80029178(s32 arg); +extern void func_80029514(s32); +extern void func_80029124(s32, s32); +extern void func_80145EE8(s32 param_1); +extern void func_8012C218(void *a0); +extern s32 func_80183748(void); + +void func_80183544(void *arg0) { + + extern s32 D_801A426C[]; + extern void func_8002AC00(s32 arg0); /* not declared anywhere in the TU */ + s32 ptr; + + ptr = *(s32 *)((s32)arg0 + 0xDC); + + if (func_801789AC((s32)arg0) != 0) { + ((void (*)(void *))func_80178D18)(arg0); + + if ((u8)func_80029178(D_801A426C[*(u16 *)(ptr + 0xA)]) != 0) { + if (D_801A426C[*(u16 *)(ptr + 0xA)] == 0x54) { + func_80029514(0x5A); + func_80029124(0xEA, 1); + } + + if ((*(u16 *)(ptr + 0x8) & 0x4000) != 0) { + if ((u8)func_80029178(0x1D) != 0) { + func_80145EE8(0); + } + } + + if (func_80183748() == 1) { + func_8002AC00(0x26); + } + + *(u16 *)((s32)arg0 + 0x70) &= 0x8000; + func_8012C218(*(void **)((s32)arg0 + 0xCC)); + } + + *(u16 *)((s32)arg0 + 0x2) = 2; + } +} + + + +extern void func_8012C218(void *a0); + s32 func_80183664(void * arg0) + { + *(short *)((char *)arg0 + 0x2) = 2; + ((void (*)(s32 *))func_8012C218)(*(s32 **)((char *)arg0 + 0xcc)); + } + + +void func_80183690(void *a0) { + *(short *)(*(int *)((char *)a0 + 0x6c) + 0xfe) = 1; + } + + +void func_801836A0(void *a0) { + *(short *)(*(int *)((char *)a0 + 0x6c) + 0xfe) = 2; + } + + + + +extern void func_80029124(s32, s32); + +void func_801836B0(void *a0) { + + extern s32 D_801A426C[]; + u16 idx = *(u16 *)(*(s32 *)(a0 + 0xDC) + 0xA); + func_80029124(D_801A426C[idx], 1); +} + + + +extern s32 D_80126B58; +extern void func_8014ADA8(s32 a0, s32 a1); + +void func_801836F0(void * arg0) { + s32 temp_v0; + + temp_v0 = *(s32 *)((s32)arg0 + 0xdc); + ((void (*)(s32 *, s32))func_8014ADA8)((s32 *)&D_80126B58, *(u16 *)(temp_v0 + 0xc)); +} + + +extern s16 func_80174764(void); +s32 func_80183724(void) { + return ((s32 (*)(void))func_80174764)() == 1; +} + + + + +extern s32 func_80029178(s32 arg); + +s32 func_80183748(void) { + + extern s32 D_801A426C[]; + s32 i; + + for (i = 0; i < 0x26; i++) { + if ((u8)func_80029178(D_801A426C[i]) == 0) { + return 0; + } + } + return 1; +} + + + +extern void (*D_801A453C[])(void); + +void func_801837AC(void *a0) { + D_801A453C[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8012A828(s32, s32); + +void func_801837E8(void *a0) { + + extern u8 D_801A4238[]; + extern u8 D_801A4BFC[]; + extern u8 D_801A49DC[]; + s32 ptr; + unsigned short v1; + unsigned short v0; + + if (func_8012C354((s32)a0, (s32)D_801A4238) == 0) { + return; + } + + ptr = *(s32 *)((s32)a0 + 0x64); + v1 = *(unsigned short *)(ptr + 0x36); + v0 = *(unsigned short *)((s32)a0 + 0x70); + *(unsigned short *)((s32)a0 + 0xFC) = v1; + + if (v0 & 0x4000) { + ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801A4BFC); + *(unsigned short *)((s32)a0 + 0x5C) = 0; + } else { + ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801A49DC); + } + + *(unsigned short *)((s32)a0 + 0x2) = 1; +} + + + + +extern void func_8012C218(void *a0); +extern void func_8012A828(s32, s32); +extern void func_8002D4C8(s32 a0, s32 a1); + +void func_80183870(void *a0) { + + extern u8 D_801A49EC[]; + extern u8 D_801A4AF4[]; + s16 mode; + + if (*(s16 *)((s32)a0 + 0xFC) != *(s16 *)(*(s32 *)((s32)a0 + 0x64) + 0x36)) { + ((void (*)(void))func_8012C218)(); + return; + } + + mode = *(s16 *)((s32)a0 + 0xFE); + if (mode == 1) { + *(s16 *)((s32)a0 + 0x2) = 2; + *(s32 *)((s32)a0 + 0x1C) = 0x20; + ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801A49EC); + *(s16 *)((s32)a0 + 0x5C) = 0; + func_8002D4C8(0x5BF, 0); + } else if (mode == 2) { + *(s16 *)((s32)a0 + 0x2) = 2; + *(s32 *)((s32)a0 + 0x1C) = 0x20; + ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801A4AF4); + *(u16 *)((s32)a0 + 0x5C) = 0x8C00; + } +} + + + +/* func_80183930 — guarded state-kick: if the s16 at 0x98 is clear, set the + * state word at 0x02 to 1, hand the entity to func_8012A828 with one of two + * script tables selected by the s16 flag at 0xFE (== 1 -> D_801A4BFC, else + * D_801A49DC), then clear that flag. + * + * §71 sibling-first: func_8018A06C (same TU, 0x148 bytes earlier) is the same + * two-arm `((void (*)(s32, void *))func_8012A828)(entity, D_801A4BFC / D_801A49DC)` selector and pins + * the widths: `lh` at 0x98/0xFE, `sh` at 0x02. + */ + +extern void func_8012A828(s32, s32); + +void func_80183930(void *a0) { + + extern u8 D_801A4BFC[]; + extern u8 D_801A49DC[]; + if (*(s16 *)((s32)a0 + 0x98) == 0) { + *(s16 *)((s32)a0 + 0x2) = 1; + if (*(s16 *)((s32)a0 + 0xFE) == 1) { + ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801A4BFC); + } else { + ((void (*)(s32, void *))func_8012A828)((s32)a0, D_801A49DC); + } + *(s16 *)((s32)a0 + 0xFE) = 0; + } +} + + +extern s32 *D_80126B78; +extern u8 D_801A452C[]; +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80172710(void); +extern s32 func_80178BF8(); +#define gte_SetRotMatrix(r0) __asm__ volatile ( \ + "lw $12, 0( %0 );" \ + "lw $13, 4( %0 );" \ + "ctc2 $12, $0;" \ + "ctc2 $13, $1;" \ + "lw $12, 8( %0 );" \ + "lw $13, 12( %0 );" \ + "lw $14, 16( %0 );" \ + "ctc2 $12, $2;" \ + "ctc2 $13, $3;" \ + "ctc2 $14, $4" \ + : \ + : "r"( r0 ) \ + : "$12", "$13", "$14" ) +#define gte_SetTransMatrix(r0) __asm__ volatile ( \ + "lw $12, 20( %0 );" \ + "lw $13, 24( %0 );" \ + "ctc2 $12, $5;" \ + "lw $14, 28( %0 );" \ + "ctc2 $13, $6;" \ + "ctc2 $14, $7" \ + : \ + : "r"( r0 ) \ + : "$12", "$13", "$14" ) + +s32 aF8018A224() __asm__("func_801839A0"); + +s32 aF8018A224(param_1) + void *param_1; +{ + s32 *m; + s32 obj; + s32 sv0[2]; + s32 sv1[2]; + s32 flag; + + m = (s32 *)((u8 *)D_80126B78 + 0x34); + obj = *(s32 *)((s32)param_1 + 0x64); + + gte_SetRotMatrix(m); + gte_SetTransMatrix(m); + + RotTransSV(D_801A452C, sv0, &flag); + RotTransSV(D_801A452C + 8, sv1, &flag); + + if (func_80135888(*(s32 *)(obj + 0x20), *(s32 *)(obj + 0x58), (s32)sv0, (s32)sv1) == 0) { + return 0; + } + if (func_8012BDBC(obj, 0x300) == 0) { + return 0; + } + *(s16 *)(obj + 0x2) = 3; + func_80178BF8(); + return (s32)func_80172710; +} + + + +// @class: struct +// @stuck: none — MATCH (94 ins). Keys: (1) cache out[0] in a local `o` before the switch so gcc +// holds it in $a0 across the case stores (else it reloads/`lh` per case, +3 ins); (2) declare the +// `in` struct BEFORE `out[2]` so in@sp+0x10 / out@sp+0x20; (3) the 0x14 word is written via +// `*(s32*)&in.lo = D_80126B60` then the high short RMW'd `in.hi -= 0x20` (memory lhu/sh, not reg); +// (4) order the three global assigns B60,B5C,B64 (B60 first → v0/v1/a2 alloc); (5) explicit +// `case 2: break;` after case 3 so gcc emits the `beq $v1,2` test with case1 falling into case3. + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8002D4C8(s32, s32); +extern void func_8012A828(s32, s32); +extern void func_8012B77C(void *, s32, void *); +extern void func_8012B2CC(s32); +extern s32 func_8012C588(s32 a0, s32 a1); + + +void func_80183A98(s32 param_1) { + + extern M2C_UNK D_801B08E4; + extern u8 D_801B06BC; + extern u8 D_80126B5C; + extern s32 D_80126B60; + extern s32 D_80126B64; + s32 iVar1; + struct In in; + s32 out[2]; + s32 t; + s32 o; + + iVar1 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = iVar1; + if (iVar1 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + return; + } + ((void (*)(s32, void *))func_8001C214)(iVar1, &(*(u8 *)&D_801B08E4)); + if ((*(u16 *)(param_1 + 0x70) & 0x1000) == 0) { + func_8002D4C8(0x43A, 0); + } else { + func_8002D4C8(0x6D6, 0); + } + ((void (*)(s32, void *))func_8012A828)(param_1, &D_801B06BC); + *(s16 *)(param_1 + 2) = 1; + *(s32 *)(param_1 + 0x1C) = 100; + + *(s32 *)&in.lo = D_80126B60; + in.hi -= 0x20; + in.w0 = (*(s32 *)&D_80126B5C); + in.w2 = D_80126B64; + func_8012B77C(out, param_1 + 4, &in); + + o = out[0]; + t = *(u16 *)(param_1 + 0x70) & 0xF; + switch (t) { + case 0: + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = (s16)o; + break; + case 1: + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = (s16)o; + case 3: + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = (s16)(o >> 16); + break; + case 2: + break; + } + + if (*(u16 *)(param_1 + 0x70) & 0x1000) { + *(s32 *)(param_1 + 0x1C) = *(s32 *)(param_1 + 0x1C) << 1; + } + func_8012B2CC(param_1); + ((void (*)(s32, s32))func_8012C588)(0xBC, param_1); +} + + + +extern void (*D_801B0758[])(void); + +void func_80183C10(void *a0) { + D_801B0758[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801B076C[])(void); + +void func_80183C4C(void *a0) { + D_801B076C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012CBF4(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern s32 D_801B0744; +extern s32 D_801B0750; +extern u8 D_800D3918[]; +extern s32 D_80126D50; + +void func_80183C88(s32 param_1) { + s32 s0 = param_1; + s32 v; + + func_8012B14C(s0, (s32)&D_801B0744); + if (((s32 (*)(s32))func_8012CBF4)(s0) != 0) { + func_80146A6C(6, (void *)s0, *(s16 *)(s0 + 0x6), *(s16 *)(s0 + 0xA), + *(s16 *)(s0 + 0xE), 0, 0); + v = func_80132EF4(s0, 0x22); + if (v != 0) { + *(s16 *)(v + 0x34) = 0x2000; + } + } else { + if (func_8012D5E4(s0, (s32)&D_801B0750, (s32)&D_800D3918, 0x19) == 0 && + (*(s16 *)(s0 + 0x70) == 2 || D_80126D50 == 0) && + func_8012BEE8(s0) == 0) { + return; + } + } + func_8012C218((void *)s0); +} + + + +// @class: schedule +// @stuck: none — MATCH (71 ins). Tail schedule: read out.c into an explicit temp BEFORE the 0x5a/1 const stores so gcc hoists its lhu early (load-delay filled by li 0x5a) and stores out.c last from a held reg; without the temp gcc instead deferred out.b's store. in/out are two separate SV3{s16 a,b,c} stack slots (sp+0x10, sp+0x18) for ((void (*)(int, void *, void *))func_8012F214)(a0,&in,&out). 0x34 compare reads u16 (lhu, not lh). + +extern void func_8012B2CC(s32 a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012AD80(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012C218(void *a0); + +extern int D_801B0760; + +void func_80183D68(int param_1) +{ + SV3 in; + SV3 out; + short c; + + if (*(unsigned short *)(param_1 + 0x34) == 0) { + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(*(int *)(param_1 + 0x64) + 0x20) + 0x12); + ((void (*)(void))func_8012B2CC)(); + func_8012B23C(param_1); + ((void (*)(int, void *))func_8012B14C)(param_1, &D_801B0760); + in.a = 0; + in.b = 0; + in.c = 0x10; + ((void (*)(int, void *, void *))func_8012F214)(param_1, &in, &out); + *(short *)(param_1 + 6) = out.a; + *(short *)(param_1 + 0xa) = out.b; + c = out.c; + *(int *)(param_1 + 0x1c) = 0x5a; + *(short *)(param_1 + 0x34) = 1; + *(short *)(param_1 + 0xe) = c; + } + *(short *)(*(int *)(param_1 + 0x20) + 0x10) = + *(short *)(*(int *)(param_1 + 0x20) + 0x10) - 0x80; + *(short *)(*(int *)(param_1 + 0x20) + 0x12) = + *(short *)(*(int *)(param_1 + 0x20) + 0x12) + 4; + *(short *)(*(int *)(param_1 + 0x20) + 0x14) = + *(short *)(*(int *)(param_1 + 0x20) + 0x14) + 5; + func_8012AD80(param_1); + if (func_8012BEE8(param_1) != 0) { + ((void (*)(int))func_8012C218)(param_1); + } +} + + + +// @class: other +// @stuck: none — MATCH (expected); 16-bit sh stores via short* casts, s0=param_1 call-crossing + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); + +extern int D_801B0A14; + +void func_80183E84(int param_1) +{ + int v0; + + v0 = ((int (*)(void))func_8012C1B8)(); + *(int *)(param_1 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(int))func_8012CAE4)(param_1); + } else { + ((int (*)(int, void *))func_8001C214)(v0, &D_801B0A14); + *(short *)(param_1 + 0x2) = 1; + *(short *)(param_1 + 0x34) = 0; + } +} + + + +extern s32 func_8012C588(s32 a0, s32 a1); + +s32 func_80183EE0(s32 a0, s32 a1) { + /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every + LATER function in this TU, which blocks a byte-true decl of a different type. + Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ + extern s32 D_801B4960; + D_801B4960 = a1; + return func_8012C588(0x85, a0); +} + + +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_800D23D0(void *a0); +extern void func_8012A828(s32, s32); +extern void func_8012C218(void *a0); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern s32 func_80134510(s32 arg); + +// @class: regalloc-order +// @stuck: none — MATCH (145/145 ins, match_one confirmed) + + + + +s32 func_80183F10(s32 param_1) { + + extern u8 D_801152A8[]; + extern M2C_UNK D_801847A8; + extern s32 D_801B4960; + extern s32 func_8012C354(s32 a0, s32 a1); + extern void RotMatrixZ(s32, void *); + extern void MulMatrix0(s32, void *, s32); + extern s32 D_801B0A30; + extern char * D_801B0A64; + extern char D_801B4940[]; + + S8_80184F08 s60; + SVECTOR_80184F08 sStack_58; + S8_80184F08 s50; + int auStack_48[8]; + s32 iVar5, iVar8; + char *puVar2, *puVar4; + u16 uVar3; + + if (((s32 (*)(s32, void *))func_8012C354)(param_1, &D_801B0A30) == 0) { + ((void (*)(s32))func_8012C218)(param_1); + } + ((void(*)(s32, void *))func_8012A828)(param_1, &(*(s32 *)&D_801847A8)); + iVar5 = *(s32 *)(param_1 + 0x20); + *(s16 *)(param_1 + 0x70) = 0x80; + *(s32 *)(iVar5 + 4) |= 0x50000040; + *(u16 *)(iVar5 + 0x2c) |= 1; + iVar8 = *(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x34; + ((void (*)(s32, s32, void *))func_8012F14C)(iVar8, D_801B4960, &s60); + s50 = s60; + sStack_58.vz = 0x1800; + sStack_58.vy = 0x1800; + sStack_58.vx = 0x1800; + ((void (*)(void *, void *))func_80017DC4)(&sStack_58, auStack_48); + RotMatrixZ(rand() & 0xfff, auStack_48); + MulMatrix0(iVar8, auStack_48, iVar5 + 0x34); + ((void (*)(void *, s32))func_80017E68)(&s50, iVar5 + 0x34); + + /* pool-alloc: gcc routes the loaded pointer through a caller-saved reg ($v0) + before the callee-saved home ($s1) — pin it to reproduce the extra move. */ + { + register char *tmp __asm__("$2"); + tmp = D_801B0A64; + puVar2 = tmp; + } + puVar4 = puVar2 + 0x20; + D_801B0A64 = puVar4; + *(char **)(param_1 + 0xcc) = puVar2; + if (D_801B4940 < puVar4) { + D_801B0A64 = D_801B4940 - 0x120; + } + func_800D20C0(&s60, &sStack_58, 7); + func_800D23D0(&sStack_58); + ((void(*)(void *, void *))RotMatrixYXZ)(&sStack_58, puVar2); + ((void (*)(void *, s32))func_80017E68)(&s60, (s32)puVar2); + + uVar3 = *(u16 *)((char *)&s50 + 2); + if (((s32 (*)(void *))func_80134510)(&s50) != 0 && + (s32)(s16)uVar3 - (s32)*(s16 *)((char *)&s50 + 2) < 0x80) { + *(s16 *)((char *)&s50 + 2) = *(s16 *)((char *)&s50 + 2) - 4; + { + register char *tmp __asm__("$3"); + tmp = D_801B0A64; + puVar2 = tmp; + } + puVar4 = puVar2 + 0x20; + D_801B0A64 = puVar4; + *(char **)(param_1 + 0xd0) = puVar2; + if (D_801B4940 < puVar4) { + D_801B0A64 = D_801B4940 - 0x120; + } + func_800D23D0(&(*(s32 *)&D_801152A8)); + ((void(*)(void *, void *))RotMatrixYXZ)(&(*(s32 *)&D_801152A8), puVar2); + ((void (*)(void *, s32))func_80017E68)(&s50, (s32)puVar2); + } + *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; +} + + +extern s32 func_80017758(void *a0, void *a1); +extern void func_8012C218(void *a0); + + +// @class: regalloc-order +// @stuck: none — MATCH (168 ins). Keys: (1) pin param->$s1 via `register int self __asm__("$17")=param_1` +// (natural alloc put the short loop-counter in $s1); (2) block2's guarded dest via a test-temp +// `td=load; if(td){dest=td; ...}` forces the range-split `lw $a1; addu $s3,$a1,$0` the target has; +// (3) counter is `short i` do-while (keeps the `addu $s2,$v0,$0` raw-copy + sll16/sra16 compare); +// (4) gcc-2.7.2 loads s8/s16 via lbu/lhu+shift-extend (not lb/lh) so `signed char *p; *(s16*)buf=*p++` +// emits lbu;sll24;sra24;sh; (5) else-branch zero-byte asm barrier forces `addu $a0,$s1,$0` (else gcc +// reuses the still-live incoming $a0 with a nop delay slot). + +s32 func_80184154(s32 param_1) { + + extern signed char D_801B0A1C[]; + register int self __asm__("$17") = ((int)param_1); + int iVar6; + int iVar1; + unsigned char buf[0x34]; + signed char *p; + short i; + int dest; + int td; + unsigned short t; + + iVar1 = *(int *)(self + 0x1c); + iVar6 = *(int *)(self + 0x20); + *(int *)(self + 0x1c) = iVar1 + 1; + if (iVar1 < 2) { + p = D_801B0A1C; + i = 0; + dest = *(int *)(self + 0xcc); + t = *(unsigned short *)(self + 0x70); + *(short *)(buf + 0x0c) = 0; + *(short *)(buf + 0x0a) = 0; + *(short *)(buf + 0x08) = 0; + *(short *)(buf + 0x1c) = 0; + *(short *)(buf + 0x14) = 0; + *(short *)(buf + 0x04) = 0; + buf[0x22] = 0; + buf[0x21] = 0; + buf[0x20] = 0; + buf[0x2a] = 0; + buf[0x29] = 0; + buf[0x28] = 0; + buf[0x2e] = 0; + buf[0x2d] = 0; + buf[0x2c] = 0; + *(int *)(buf + 0x30) = 0x50000000; + buf[0x25] = t; + buf[0x26] = t; + buf[0x24] = t; + do { + *(short *)(buf + 0x00) = *p++; + *(short *)(buf + 0x02) = *p++; + *(short *)(buf + 0x10) = *p++; + *(short *)(buf + 0x12) = *p++; + *(short *)(buf + 0x18) = *p++; + *(short *)(buf + 0x1a) = *p--; + func_80017758(buf, (void *)dest); + i++; + } while (i < 4); + + td = *(int *)(self + 0xd0); + if (td != 0) { + dest = td; + p = D_801B0A1C; + i = 0; + t = *(unsigned short *)(self + 0x70); + *(short *)(buf + 0x0c) = 0; + *(short *)(buf + 0x0a) = 0; + *(short *)(buf + 0x08) = 0; + *(short *)(buf + 0x1c) = 0; + *(short *)(buf + 0x14) = 0; + *(short *)(buf + 0x04) = 0; + buf[0x22] = 0; + buf[0x21] = 0; + buf[0x20] = 0; + buf[0x2a] = 0; + buf[0x29] = 0; + buf[0x28] = 0; + buf[0x2e] = 0; + buf[0x2d] = 0; + buf[0x2c] = 0; + *(int *)(buf + 0x30) = 0x50000000; + buf[0x25] = t; + buf[0x26] = t; + buf[0x24] = t; + do { + *(short *)(buf + 0x00) = *p++; + *(short *)(buf + 0x02) = *p++; + *(short *)(buf + 0x10) = *p++; + *(short *)(buf + 0x12) = *p++; + *(short *)(buf + 0x18) = *p++; + *(short *)(buf + 0x1a) = *p--; + func_80017758(buf, (void *)dest); + i++; + } while (i < 4); + } + *(short *)(self + 0x70) = *(short *)(self + 0x70) >> 1; + *(unsigned short *)(iVar6 + 0x2c) |= 1; + } else { + __asm__ __volatile__("" : "=r"(self) : "0"(self)); + func_8012C218((void *)self); + } +} + + + +extern void (*D_801B0A68[])(void); + +void func_801843F4(void *a0) { + D_801B0A68[*(u16 *)((s32)a0 + 0x2)](); +} + + + + + + diff --git a/src/ov_SC02_021/ov_SC02_021_jr_8017C294.c b/src/ov_SC02_021/ov_SC02_021_jr_8017C294.c index bc308d99ed..cc577b1e85 100644 --- a/src/ov_SC02_021/ov_SC02_021_jr_8017C294.c +++ b/src/ov_SC02_021/ov_SC02_021_jr_8017C294.c @@ -3762,572 +3762,3 @@ void func_8017E940(s32 a0) { INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017C294", func_8017EA5C); INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017C294", func_8017EB00); - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017C294", func_8017ECFC); - - -extern void (*D_8018389C[])(void); - -void func_8017EDE8(void *a0) { - D_8018389C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_80178CBC(s32 a0, s32 a1); - extern short D_80183884; - void func_8017EE24(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - func_80178CBC((int)arg0, (int)&D_80183884); - } - - - - - -s32 func_8017EE50(void) { - - extern s32 D_80193744; - return !(D_80193744 ^ 1); -} - - -extern void func_800291F0(s32 a0, s32 a1); -extern void func_80029514(s32 a0); -extern void func_80162714(void); -extern u16 D_80078EAC; -extern u8 D_80078EB1; -extern u8 D_80078EB0; - -void func_8017EE68(void) { - func_800291F0(0, D_80078EAC * 1440 + D_80078EB1 * 60 + D_80078EB0); - func_80029514(0x104); - func_80162714(); -} - - -extern void func_80029514(s32 arg); - void func_8017EED8(void) { - func_80029514(0xFA); - } - - -extern void func_80029124(s32 a0, s32 a1); -extern void func_80029514(s32 a0); - -void func_8017EEF8(void) { - func_80029514(0x118); - func_80029124(0xF9, 1); - func_80029124(0xFA, 0); - func_80029124(0x109, 1); -} - - -extern void func_80029514(s32 a0); -extern void func_80029124(s32 a0, s32 a1); -extern s32 func_801788B8(s32 a0, s32 a1); -extern s32 func_8017F1B4(s32 a0); - -void func_8017EF3C(s32 arg0) { - func_80029514(0x118); - func_80029124(0xF9, 0); - func_80029124(0xFA, 1); - func_801788B8(arg0, (s32)func_8017F1B4); -} - - -extern void func_800D0F4C(s32 arg); - void func_8017EF90(void) { - func_800D0F4C(0x57); - } - - -extern s32 func_80029204(s32 a0); -extern void func_80162760(void); -extern u8 D_80193528[]; - -s32 func_8017EFB0(void) { - s32 s0 = func_80029204(0); - s32 v1; - if (s0 == 0) - return 1; - func_80162760(); - v1 = *(s32 *)D_80193528; - if (v1 < s0) - v1 += 0x80520; - return (v1 - s0) < 0x2D0; -} - - -void func_8017F014(void) { - extern u16 D_80078EAC; - extern u8 D_80078EB0; - extern u8 D_80078EB1; - extern u8 D_80193528[]; - *(s32 *)D_80193528 = D_80078EAC * 1440 + D_80078EB1 * 60 + D_80078EB0; -} - - -extern int func_80178970(void); -extern s32 D_801835A4; -extern void (*D_8018DC00)(void *); -extern void func_8012A828(s32 a0, void *a1); -extern void func_8012E8E0(s32 a0, s32 a1); -extern void func_80178D18(void); - -void func_8017F064(arg0) -void *arg0; -{ - extern int func_80178970(void); - extern void func_80178D18(void); - extern void func_8012E8E0(s32 a0, s32 a1); - extern void func_8012A828(s32 a0, void *a1); - extern s32 D_801835A4; - extern void (*D_8018DC00)(void *); - - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)((s32)arg0); - *(s16 *)((s32)arg0 + 2) = 1; - func_8012E8E0((s32)arg0, (s32)&D_801835A4); - func_8012A828((s32)arg0, (s32)&D_8018DC00); - } -} - - -extern void func_8012CAE4(void *a0); -extern s32 func_8012C1B8(void); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern void func_8012E8E0(s32 a0, s32 a1); -extern s16 D_801902A0; -extern s32 D_801835A4; -extern void (*D_8018DC00)(void *); - -void func_8017F0C4(s32 param) { - s32 x; - s32 v1; - - x = func_80029504(); - if (x < 0xF0) { v1 = 0; goto chk; } - if (x < 0xFA) { v1 = 1; goto chk; } - if (x < 0x104) { v1 = 2; goto chk; } - if (x < 0x10E) { v1 = 3; goto chk; } - if (x < 0x118) { v1 = 4; } else { v1 = 5; } -chk: - if (v1 == 0 || v1 == 5) { - func_8012CAE4((void *)param); - return; - } - *(s32 *)(param + 0x20) = func_8012C1B8(); - if (*(s32 *)(param + 0x20) == 0) { - func_8012CAE4((void *)param); - } - func_8001C214(*(s32 *)(param + 0x20), (s32)&D_801902A0); - *(u16 *)(param + 0x2) = 1; - func_8012E8E0(param, (s32)&D_801835A4); - func_8012A828(param, (void *)&D_8018DC00); - *(u16 *)(*(s32 *)(param + 0x68) + 0xC) = 0x7FFF; -} - - -extern s32 func_8012BD14(s32 a0); -extern s32 func_80178BF8(); -extern void func_80172710(void); - -s32 func_8017F1B4(s32 param_1) { - register s32 obj __asm__("$16") = param_1; - s32 ptr; - s32 ptr2; - s32 result; - - ptr = *(s32 *)((char *)obj + 0x64); - if (*(u16 *)((char *)ptr + 0x2) != 1) { - return 0; - } - result = func_8012BD14(ptr); - if (result < 0x4001) { - ptr2 = *(s32 *)((char *)obj + 0x64); - *(u16 *)((char *)ptr2 + 0x2) = 3; - func_80178BF8(); - return (s32)func_80172710; - } - return 0; -} - - -s32 func_8017F220(void) { - return 0x19; - } - - - -extern void (*D_8018393C[])(void); - -void func_8017F228(void *a0) { - D_8018393C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017C294", func_8017F264); - -typedef struct { - u8 r; /* 0x00 */ - u8 g; /* 0x01 */ - u8 b; /* 0x02 */ - u8 cd; /* 0x03 */ -} Col4_8017F2FC; - -typedef struct { - s32 unk0; /* 0x00 */ - s16 unk4; /* 0x04 */ - s16 unk6; /* 0x06 */ -} Gte8_8017F2FC; - -extern void func_8012EFB8(s32 a0); -extern void func_80015954(s32 a0, s32 a1); - -void func_8017F2FC(s32 a0) { - Gte8_8017F2FC sp10; - Col4_8017F2FC col; - s32 *owner; - s32 t; - - extern u16 D_800B99DA; - extern Col4_8017F2FC D_801838BC; - extern Col4_8017F2FC D_801838D8; - extern Col4_8017F2FC D_801838F4; - extern Col4_8017F2FC D_80183910; - - owner = *(s32 **)(a0 + 0x20); - - if (((s32 (*)(s32, s32))func_8012EFB8)(a0 + 0xFC, (s32)&sp10) & ~0x1000) { - owner[1] |= 0x80000000; - } else { - owner[1] &= 0x7FFFFFFF; - } - - func_80015954((s32)&sp10, a0 + 4); - - t = (D_800B99DA & 1) << 2; - col.r = t + 0x40; - col.g = t + 0x40; - col.b = t + 0x60; - - D_801838BC = col; - D_801838D8 = col; - D_801838F4 = col; - D_80183910 = col; -} - - - -extern void (*D_80183944[])(void); - -void func_8017F40C(void *a0) { - D_80183944[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012AD50(void *a0); - void func_8017F448(void) { - ((s32 (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017C294", func_8017F468); - - -extern void (*D_80183950[])(void); - -void func_8017F590(void *a0) { - D_80183950[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017F5CC(void *a0) { - *(short *)((char *)a0 + 0x2) = *(unsigned short *)((char *)a0 + 0x2) + 1; - *(int *)((char *)a0 + 0x14) = 0x20000; - } - - -INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017C294", func_8017F5E4); - -extern void func_80015978(s32 a0, s32 *a1); -extern s32 func_8012EF34(s32 a0, s32 a1); -extern void func_80017D98(void *a0); -extern void func_8001739C(void *a0); - -extern s16 D_8018395C; -extern s16 D_80183964; -extern s16 D_8018396C; -extern s16 D_80183958; -extern s16 D_80183960; -extern s16 D_80183968; - -#define gte_ldv3(r0, r1, r2) __asm__ volatile ( \ - "lwc2 $0, 0( %0 );" \ - "lwc2 $1, 4( %0 );" \ - "lwc2 $2, 0( %1 );" \ - "lwc2 $3, 4( %1 );" \ - "lwc2 $4, 0( %2 );" \ - "lwc2 $5, 4( %2 )" \ - : \ - : "r"( r0 ), "r"( r1 ), "r"( r2 ) ) - -#define gte_rtpt() __asm__ volatile ("nop;nop;rtpt") - -#define gte_stsxy3(r0, r1, r2) __asm__ volatile ( \ - "swc2 $12, 0( %0 );" \ - "swc2 $13, 0( %1 );" \ - "swc2 $14, 0( %2 )" \ - : \ - : "r"( r0 ), "r"( r1 ), "r"( r2 ) \ - : "memory" ) - -#define gte_stszotz(r0) __asm__ volatile ( \ - "mfc2 $12, $19;" \ - "nop;" \ - "sra $12, $12, 2;" \ - "sw $12, 0( %0 )" \ - : \ - : "r"( r0 ) \ - : "$12", "memory" ) - -#define gte_stflg(r0) __asm__ volatile ( \ - "cfc2 $12, $31;" \ - "nop;" \ - "sw $12, 0( %0 )" \ - : \ - : "r"( r0 ) \ - : "$12", "memory" ) - -#define gte_SetRotMatrix(r0) __asm__ volatile ( \ - "lw $12, 0( %0 );" \ - "lw $13, 4( %0 );" \ - "ctc2 $12, $0;" \ - "ctc2 $13, $1;" \ - "lw $12, 8( %0 );" \ - "lw $13, 12( %0 );" \ - "lw $14, 16( %0 );" \ - "ctc2 $12, $2;" \ - "ctc2 $13, $3;" \ - "ctc2 $14, $4" \ - : \ - : "r"( r0 ) \ - : "$12", "$13", "$14" ) - -#define gte_SetTransMatrix(r0) __asm__ volatile ( \ - "lw $12, 20( %0 );" \ - "lw $13, 24( %0 );" \ - "ctc2 $12, $5;" \ - "lw $14, 28( %0 );" \ - "ctc2 $13, $6;" \ - "ctc2 $14, $7" \ - : \ - : "r"( r0 ) \ - : "$12", "$13", "$14" ) - -typedef struct { - s16 x; /* +0x0 */ - s16 y; /* +0x2 */ - s16 c; /* +0x4 */ - s16 pad; /* +0x6 */ -} Vtx_8017F6A8; /* 0x08 */ - -typedef struct { - Vtx_8017F6A8 v[3]; /* +0x00 +0x08 +0x10 */ - u8 r0, g0, b0, code; /* +0x18 .. +0x1B */ - u8 r1, g1, b1, pad1; /* +0x1C .. +0x1F */ - u8 r2, g2, b2, pad2; /* +0x20 .. +0x23 */ - u32 color; /* +0x24 */ -} Prim_8017F6A8; /* 0x28 */ - -typedef struct { - u16 x; /* +0x0 */ - u16 y; /* +0x2 */ - u16 z; /* +0x4 */ -} Pos_8017F6A8; /* 0x06 -> 8-byte frame stride */ - -typedef struct { - u16 vx; /* +0x0 */ - u16 vy; /* +0x2 */ - u16 vz; /* +0x4 */ - u16 pad; /* +0x6 */ -} Sxy_8017F6A8; /* 0x08 */ - -typedef struct { - s16 m[3][3]; /* +0x00, padded to 0x14 */ - s32 t[3]; /* +0x14 +0x18 +0x1C */ -} Mtx_8017F6A8; /* 0x20 */ - -void func_8017F6A8(s32 arg0) -{ - Prim_8017F6A8 prim; /* sp+0x10 */ - Pos_8017F6A8 wpos; /* sp+0x38 */ - Pos_8017F6A8 spos; /* sp+0x40 */ - Sxy_8017F6A8 sxy[4]; /* sp+0x48 */ - Mtx_8017F6A8 mtx; /* sp+0x68 */ - s32 otz; /* sp+0x88 */ - s32 flag; /* sp+0x8C */ - s32 t; - - func_80015978(arg0 + 4, (s32 *)&wpos); - if ((func_8012EF34((s32)&wpos, (s32)&spos) & ~0x1000) == 0) { - gte_stszotz(&otz); - D_8018395C = spos.z; - D_80183964 = spos.z; - D_8018396C = spos.z; - func_80017D98(&mtx); - mtx.t[2] = 0; - mtx.t[1] = 0; - mtx.t[0] = 0; - gte_SetRotMatrix(&mtx); - gte_SetTransMatrix(&mtx); - gte_ldv3(&D_80183958, &D_80183960, &D_80183968); - gte_rtpt(); - gte_stsxy3(&sxy[0], &sxy[1], &sxy[2]); - gte_stflg(&flag); - if (flag >= 0) { - prim.b0 = 0xC0; - prim.g0 = 0xC0; - prim.r0 = 0xC0; - prim.b1 = 0x40; - prim.g1 = 0x20; - prim.r1 = 0x20; - prim.b2 = 0x40; - prim.g2 = 0x20; - prim.r2 = 0x20; - prim.color = 0x50000000; - prim.v[0].x = sxy[0].vx + spos.x; - prim.v[0].y = sxy[0].vy + spos.y; - prim.v[1].x = sxy[1].vx + spos.x; - prim.v[1].y = sxy[1].vy + spos.y; - prim.v[2].x = sxy[2].vx + spos.x; - prim.v[2].y = sxy[2].vy + spos.y; - prim.v[0].c = otz; - func_8001739C(&prim); - t = sxy[1].vy; - prim.v[1].y = spos.y - t; - func_8001739C(&prim); - t = sxy[2].vx; - prim.v[2].x = spos.x - t; - func_8001739C(&prim); - prim.v[1].y = sxy[1].vy + spos.y; - func_8001739C(&prim); - } - } -} - - - -extern void (*D_80183970[])(void); - -void func_8017F8C8(void *a0) { - D_80183970[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_8001CD50(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); - -void func_8017F904(void *a0) -{ - - extern u8 D_80193530[]; - s32 s1; - u8 *p; - - s1 = *(s32 *)((s32)a0 + 0x20); - p = D_80193530 + *(s32 *)((s32)a0 + 0x2C) * 0x40; - func_8001CD50(s1, (s32)p); - *(s16 *)(s1 + 0x1E) = 0xCCC; - *(s16 *)(s1 + 0x10) = 0x400; - *(s16 *)(s1 + 0x1A) = 0; - *(s16 *)(s1 + 0x18) = 0; - *(s32 *)(s1 + 4) = *(s32 *)(s1 + 4) | 0x50000000; - func_800233CC(p, 0x80); - p[2] = 0xFF; - p[1] = 0xFF; - p[0] = 0xFF; - p[5] = 0x40; - p[4] = 0x40; - p[6] = 0x80; - *(s32 *)((s32)a0 + 0x1C) = 0x10; - *(u16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; -} - - - - -/* Declaration reconciliation with src/ov_SC03_118/ov_SC03_118_jr_8017FB84.c: - * - D_80193530: the TU already declares it at line 4526 as `extern u8 D_80193530[];` - * (used by the banked func_801885D0 just above the splice point). The draft had - * `extern s32 D_80193530[]` -> "conflicting types". Lever (A): conform the decl - * VERBATIM and keep the disagreement at the use site, which already casts the - * decayed pointer to s32. Zero bytes change. - * - func_801292C8: not declared anywhere in this TU, but src/shared/engine_core.h - * declares it as `extern void func_801292C8(u8 *a0);` inside four DEFINE_ macros - * (6304/8491/13623/13794). None of those macros is expanded in this TU today, but - * conforming to that shape now makes the splice conflict-proof if one ever is. - * $a0 already holds the incoming pointer, so passing it costs no instruction - * (jal + nop delay slot, exactly as in the target). - */ - -extern void func_801292C8(u8 *a0); - -void func_8017F9C8(void *a0) { - - extern u8 D_80193530[]; - s32 v0; - s32 v1; - s32 a1; - s32 a2; - u8 *v1ptr; - - v0 = *(s32 *)((s32)a0 + 0x1C); - v1 = *(s32 *)((s32)a0 + 0x2C); - a1 = v0 - 1; - /* §21 zero-byte re-tie barrier: without it gcc's scheduler hoists the 0x2C load - * (and its sll) ahead of the 0x1C load + addiu pair -- the 4-slot SCHEDULE-REORDER - * residual. Folding the shift into the address expression fixes the order but then - * swaps $v0/$v1 across the sll/lui pair (REGALLOC-PERM). The re-tie keeps the - * in-place `v1 <<= 6` form (so the shift stays in $v1) AND anchors it after the - * two loads. Emits no code. */ - __asm__ __volatile__("" : "=r"(v1) : "0"(v1)); - v1 = v1 << 6; - a2 = (s32)D_80193530 + v1; - v1ptr = *(u8 **)((s32)a0 + 0x20); - - *(s32 *)((s32)a0 + 0x1C) = a1; - - if (!(a1 == -1)) { - v0 = 0x10 - a1; - *(u16 *)((s32)v1ptr + 0x1A) = v0 << 8; - *(u16 *)((s32)v1ptr + 0x18) = v0 << 8; - - v1 = *(s32 *)((s32)a0 + 0x1C); - v0 = (v1 << 8) - v1; - if (v0 < 0) { - v0 = v0 + 0xF; - } - v0 = (u32)v0 >> 4; - - *(u8 *)(a2 + 0x2) = v0; - *(u8 *)(a2 + 0x1) = v0; - *(u8 *)(a2 + 0x0) = v0; - - v0 = *(s32 *)((s32)a0 + 0x1C) << 2; - *(u8 *)(a2 + 0x5) = v0; - *(u8 *)(a2 + 0x4) = v0; - - *(u8 *)(a2 + 0x6) = *(s32 *)((s32)a0 + 0x1C) << 3; - } else { - func_801292C8((u8 *)a0); - } -} - - - - - diff --git a/src/ov_SC02_021/ov_SC02_021_jr_8017ECFC.c b/src/ov_SC02_021/ov_SC02_021_jr_8017ECFC.c new file mode 100644 index 0000000000..5c90bb6942 --- /dev/null +++ b/src/ov_SC02_021/ov_SC02_021_jr_8017ECFC.c @@ -0,0 +1,3344 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +typedef void (*Handler)(struct Entry_8016E95C *); +typedef struct { s16 m[3][3]; s32 t[3]; } MATRIX_8017D5C8_8017D5C8; +typedef struct { s16 vx, vy, vz, pad; } SVECTOR_8017D5C8_8017D5C8; +typedef struct { + u16 x; /* 0x0 */ + u16 y; /* 0x2 */ + u16 z; /* 0x4 */ + u16 w; /* 0x6 */ +} Vec4h_8017E608; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +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 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern 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(); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 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 a0, s32 a1, s32 a2); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 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 arg0, s32 arg1, s16 *arg2, s16 *arg3); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 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 short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern s32 func_8014CF04(s32 a0, s32 a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern s32 func_8014D2A0(s32 a0, void *a1, void *a2); +extern s32 func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern s32 func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern s32 func_8014D820(s32 a0, u16 *a1, u16 *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_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(); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_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 s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern s32 func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_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 s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(s16 *a0, s16 *a1); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_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 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 s32 func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_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); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_801820F8; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801822BC[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(s32 arg0); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801822E4[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801822F0[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern void func_8015CC40(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80182164[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80182394; +extern void func_8015D380(s32 a0); +extern unsigned char D_80181478[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_801823A8[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801823E4[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018242C; +extern u16 D_8018242E; +extern u16 D_80182430; +extern s32 D_80182434; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018243C; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80182148; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801824C0[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80182570[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern s32 func_80161A60(s32 a0); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern s32 func_80161488(void *a0); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_801825A0[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_80182604; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_80191B90[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_80182628[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_80191BE8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80182670[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80182660; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, u16 * a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_80191428[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_80182678[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801826CC[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_80182694; +extern s16 D_801826C8; +extern s16 D_801826C6; +extern s16 D_801826C4; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801826D8[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_80191C48; +extern u8 D_80191C49; +extern u8 D_80191C4A; +extern u8 D_80191C4B; +extern u8 D_80191C4C; +extern u8 D_80191C4D; +extern u8 D_80191C4E; +extern u8 D_80191C4F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801826E8[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_80191C88; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018272C[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_801827A8[]; +extern s32 D_801827C8[]; +extern u8 D_80182844[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80182864[]; +extern u8 D_80182884[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80182920[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018299C[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_80191438; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_801829A8[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801829B0[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_80182A78[])(void); +extern void func_80166618(void *a0); +extern void (*D_80182A88[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_80182A98[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80182AA4[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_80182A04[]; +extern u8 D_80182A18[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_80182ABC[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_80182AC4[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_80182ACC[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_80182AD4[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_80182ADC[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_80182AE4[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_80182AEC[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80182BA0[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_80182BA8[])(void); +extern void func_80169F00(void *a0); +extern char D_80182B58[]; +extern char D_80182B18[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_80182BE0[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_80182BEC[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80182C34[])(void); +extern void func_8016AB30(void *a0); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80182CB0[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_80191FA8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80182CA4[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80182CE8[]; +extern unsigned short D_80182CF0[]; +extern unsigned short D_80182CF8[]; +extern unsigned char D_80191FB0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_80191FA8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80182D00[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801920E4; +extern M2C_UNK D_801920E8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_80192070; +extern void (*D_80182D30[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801920EC[]; +extern u8 D_801920F4[]; +extern u8 D_801920A4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80182D38[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80182D54[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80182D5C[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80182DC4[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80182D68; +extern u8 D_80182D74; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80182DF8[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80182E00[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80182E54[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80182E88[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80182E78[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80182EA4; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32 _arg0); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80182F1C[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80182F24[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80182F2C[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80182F34[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80182F3C[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80182F44[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80182F50[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80182F5C[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80182F68[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80182F78[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80182F88[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80182F90[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80182F98[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80182FA0[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80182FA8[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80182FB0[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80182FB8[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80182FC0[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80182FC8[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80182FD0[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80182FD8[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80182FE0[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80182FE8[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80182FF0[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80182FF8[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80183000[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80183008[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80183010[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80183018[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80183020[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80183028[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80183030[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80183038[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern s16 D_80126B0C; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018307C[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80183040; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_801830AC[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_801830E8[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126950; +extern void func_801748EC(void); +extern s32 func_801749C8(); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80183140[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80183150[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80183158[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175494(void); +extern void (*D_801832C0[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801832CC[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_80191680; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern s32 func_801789AC(s32 arg0); +extern s16 D_80193828; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_80192828; +extern short D_8019389C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +extern s32 func_80178D40(s32 arg0, s32 arg1); +extern void func_80179B28(s32 a0); +extern void func_80179B74(u16 *p); +extern void func_80179D30(u16 *a0); +extern void func_80179D78(u16 *a0); +extern void func_80179DCC(short a0); +extern void func_80179DF8(void); +extern void func_80179E1C(short a0); +extern void func_80179E48(s16 a0); +extern void func_80179E74(s16 a0); +extern void func_80179EA0(u16 *a0); +extern void func_80179EE8(short a0); +extern void func_80179F14(s16 a0, s16 a1); +extern void func_80179F44(void); +extern void func_80179F6C(short a0); +extern void func_80179F98(u16 *a0); +extern void func_80179FEC(u16 *a0); +extern void func_8017A040(u16 *a0); +extern s32 D_80192C54; +extern void func_8017A094(s32 arg0); +extern void func_8017A0C4(s32 arg0); +extern void func_8017A0F4(void); +extern void func_8017A11C(void); +extern s32 D_80192C7C; +extern void func_8017A144(s32 a0); +extern void func_8017A180(void); +extern void func_8017A1A8(void); +extern void func_8017A1D0(void); +extern void func_8017A1F8(void); +extern void func_8017A220(void); +extern void func_8017A248(void); +extern void func_8017A270(void); +extern void func_8017A298(void); +extern void func_8017A2C0(void); +extern void func_8017A2E8(void); +extern void func_8017A310(void); +extern void func_8017A338(void); +extern void func_8017A360(void); +extern void func_8017A388(void); +extern s16 D_80192C38; +extern s32 func_8017A3B0(void); +extern short D_80192C74; +extern short D_80192C70; +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); +extern int func_8017A3D8(void); +extern void func_80172310(u8*); +extern void func_80172780(void*); +extern void func_80172894(void*); +extern void func_801729B0(s32); +extern void func_80172B14(s16); +extern void func_80172C50(u16 *); +extern void func_80172D68(s32); +extern void func_801733FC(s16, u16 *); +extern void func_80173460(s32, s32); +extern void func_801734BC(s32, s32); +extern void func_801736B0(s32, s32); +extern void func_801737B8(s16); +extern void func_801738DC(s16); +extern void func_80173A28(s32, s32, s32, s32, s32, s32); +extern void func_80174438(s32); +extern void func_8017A4AC(void); +extern s32 func_8017AD0C(s32 arg0); +extern s32 func_8017AD0C(s32); +extern s32 func_8017ADE8(s32 a0); +extern s32 func_8017AE08(void); +extern void func_8017B0E4(int param_1, int param_2); +extern s16 D_80192C3C; +extern u16 D_80192CBC; +extern u16 D_80192CBE; +extern u16 D_80192CC0; +extern void func_8017B1D8(void); +extern s32 func_8017B238(s32 param_1, s32 param_2); +extern s32 func_8017B368(s32 param); +extern s32 func_8017B614(s32 param_1, s32 param_2); +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern u8 D_8012694C; +extern s16 D_80192CB4; +extern s16 D_80192CB6; +extern s16 D_80192CB8; +extern s16 D_80192CAC; +extern s16 D_80192CAE; +extern s16 D_80192CB0; +extern void func_8017B7A8(void); +extern s16 D_80192CCC; +extern s16 D_80192CCE; +extern s16 D_80192CD0; +extern s16 D_80192CD4; +extern s16 D_80192CD6; +extern s16 D_80192CD8; +extern void func_8017B824(void); +extern void func_8017B880(void); +extern s32 func_8017B8E8(s32 src); +extern short D_80192CC4; +extern short D_80192CC6; +extern short D_80192CC8; +extern void func_8017B940(void); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); +extern SV4 D_80192C5C; +extern SV4 D_80192C64; +extern void func_8017BA3C(s32 param_1, s32 param_2); +extern s32 func_8017BB34(s32 param_1, s32 param_2); +extern void (*D_80192C84[10])(int); +extern void func_8017BC38(int param_1); +extern void func_8017B0E4(int, int); +extern void func_8017BCA0(int param_1); +extern void func_8012A4BC(void); +extern void func_8017BCF4(int param_1); +extern void (*D_80192C80)(void); +extern void func_8017BD50(int param_1); +extern void (*D_801834A8[])(void); +extern void func_8017BE60(void *a0); +extern void func_8017BE9C(void); +extern void func_8017BEA4(void); +extern void func_8017BEAC(void); +extern void func_8017BEB4(void); +extern void (*D_801834CC[])(void); +extern void func_8017BEBC(void *a0); +extern void func_8017C0BC(u8 *p); +extern void (*D_801834D4[])(void); +extern void func_8017C150(void *a0); +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern u8 D_801834C0; +extern void func_8017C18C(s32 a0); +extern void func_8017C230(int a0); +extern void func_8017C294(s32 arg0); +extern void (*D_8018352C[])(void); +extern void func_8017D174(void *a0); +extern void func_8017D418(void); +extern s32 func_8017D1B0(s32 a0); +extern s32 func_8017D1F4(void); +extern void (*D_80183534[])(void); +extern void func_8017D218(void *a0); +extern void func_8017D440(void); +extern s32 func_8017D254(s32 a0); +extern void func_8001BFD0(void); +extern void func_800D1E28(void); +extern s32 func_8017D294(u8 *a0); +extern s32 func_800D1EBC(void); +extern void func_8017D328(void); +extern void (*D_80183540[])(void); +extern void func_8017D348(void *a0); +extern void func_800D0C74(u16 a0); +extern s32 func_8017D384(u8 *a0); +extern void func_8012A018(s32 a0, s32 a1); +extern void func_8012A094(s32 a0); +extern void func_8017D500(void *a0); +extern void func_8017D468(void); +extern void (*D_8018356C[])(void); +extern void func_8017D53C(s32 param_1); +extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); +extern void func_8017D5C8(s32 param_1, s16 *param_2); +extern s32 D_80193818; +extern void func_8017D7A4(void); +extern void (*D_80183594[])(void); +extern void func_8017D7E0(void *a0); +extern void func_8012CAE4(void *a0); +extern s32 func_8012C1B8(void); +extern void func_8001C2C4(s32 a0); +extern void func_8017D81C(void *a0); +extern void func_8017E410(s32 param_1, u32 *param_2); +extern s32 func_8017E4DC(s32 arg0, s32 arg1, s32 *arg2); +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8017E608(s32 a0, s32 a1, s16 a2); +extern u16 D_800B99D8; +extern u8 *func_8012913C(s32 arg); +extern void func_8017E734(s32 arg0); +extern void func_8017E824(s32 arg0); +extern void (*D_8018359C[])(void); +extern void func_8017E8CC(void *a0); +extern u8 * func_8017E908(void); +extern Block4 D_80191968; +extern Block4 D_8019196C; +extern u8 *func_8017E908(void); +extern void func_801292C8(u8 *a0); +extern void func_8017E940(s32 a0); +/* ==== end §8b carried decl layer ==== */ + +extern s32 func_80029504(void); +extern int func_800D0F8C(int a0); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern u8 D_801836A4[]; +extern u8 D_801836EC[]; +extern u8 D_8018371C[]; +extern u8 D_8018385C[]; + +void func_8017ECFC(void *a0) { + s32 t; + s32 v; + + *(short *)((char *)a0 + 0x2) = 2; + t = func_80029504(); + v = 0; + if (t >= 0xF0) { + if (t < 0xFA) { + v = 1; + } else if (t < 0x104) { + v = 2; + } else if (t < 0x10E) { + v = 3; + } else if (t < 0x118) { + v = 4; + } else { + v = 5; + } + } + switch (v) { + case 0: + case 5: + default: + return; + case 1: + func_80178B18((s32)a0, (s32)D_801836A4); + break; + case 2: + func_80178B18((s32)a0, (s32)D_801836EC); + break; + case 3: + case 4: + if (func_800D0F8C(0x57) != 0) { + func_80178B18((s32)a0, (s32)D_8018385C); + } else { + func_80178B18((s32)a0, (s32)D_8018371C); + } + break; + } +} + + + +extern void (*D_8018389C[])(void); + +void func_8017EDE8(void *a0) { + D_8018389C[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_80178CBC(s32 a0, s32 a1); + extern short D_80183884; + void func_8017EE24(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 2; + func_80178CBC((int)arg0, (int)&D_80183884); + } + + + + + +s32 func_8017EE50(void) { + + extern s32 D_80193744; + return !(D_80193744 ^ 1); +} + + +extern void func_800291F0(s32 a0, s32 a1); +extern void func_80029514(s32 a0); +extern void func_80162714(void); +extern u16 D_80078EAC; +extern u8 D_80078EB1; +extern u8 D_80078EB0; + +void func_8017EE68(void) { + func_800291F0(0, D_80078EAC * 1440 + D_80078EB1 * 60 + D_80078EB0); + func_80029514(0x104); + func_80162714(); +} + + +extern void func_80029514(s32 arg); + void func_8017EED8(void) { + func_80029514(0xFA); + } + + +extern void func_80029124(s32 a0, s32 a1); +extern void func_80029514(s32 a0); + +void func_8017EEF8(void) { + func_80029514(0x118); + func_80029124(0xF9, 1); + func_80029124(0xFA, 0); + func_80029124(0x109, 1); +} + + +extern void func_80029514(s32 a0); +extern void func_80029124(s32 a0, s32 a1); +extern s32 func_801788B8(s32 a0, s32 a1); +extern s32 func_8017F1B4(s32 a0); + +void func_8017EF3C(s32 arg0) { + func_80029514(0x118); + func_80029124(0xF9, 0); + func_80029124(0xFA, 1); + func_801788B8(arg0, (s32)func_8017F1B4); +} + + +extern void func_800D0F4C(s32 arg); + void func_8017EF90(void) { + func_800D0F4C(0x57); + } + + +extern s32 func_80029204(s32 a0); +extern void func_80162760(void); +extern u8 D_80193528[]; + +s32 func_8017EFB0(void) { + s32 s0 = func_80029204(0); + s32 v1; + if (s0 == 0) + return 1; + func_80162760(); + v1 = *(s32 *)D_80193528; + if (v1 < s0) + v1 += 0x80520; + return (v1 - s0) < 0x2D0; +} + + +void func_8017F014(void) { + extern u16 D_80078EAC; + extern u8 D_80078EB0; + extern u8 D_80078EB1; + extern u8 D_80193528[]; + *(s32 *)D_80193528 = D_80078EAC * 1440 + D_80078EB1 * 60 + D_80078EB0; +} + + +extern int func_80178970(void); +extern s32 D_801835A4; +extern void (*D_8018DC00)(void *); +extern void func_8012A828(s32 a0, void *a1); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_80178D18(void); + +void func_8017F064(arg0) +void *arg0; +{ + extern int func_80178970(void); + extern void func_80178D18(void); + extern void func_8012E8E0(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern s32 D_801835A4; + extern void (*D_8018DC00)(void *); + + if (func_80178970() != 0) { + ((void (*)(s32))func_80178D18)((s32)arg0); + *(s16 *)((s32)arg0 + 2) = 1; + func_8012E8E0((s32)arg0, (s32)&D_801835A4); + func_8012A828((s32)arg0, (s32)&D_8018DC00); + } +} + + +extern void func_8012CAE4(void *a0); +extern s32 func_8012C1B8(void); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_8012E8E0(s32 a0, s32 a1); +extern s16 D_801902A0; +extern s32 D_801835A4; +extern void (*D_8018DC00)(void *); + +void func_8017F0C4(s32 param) { + s32 x; + s32 v1; + + x = func_80029504(); + if (x < 0xF0) { v1 = 0; goto chk; } + if (x < 0xFA) { v1 = 1; goto chk; } + if (x < 0x104) { v1 = 2; goto chk; } + if (x < 0x10E) { v1 = 3; goto chk; } + if (x < 0x118) { v1 = 4; } else { v1 = 5; } +chk: + if (v1 == 0 || v1 == 5) { + func_8012CAE4((void *)param); + return; + } + *(s32 *)(param + 0x20) = func_8012C1B8(); + if (*(s32 *)(param + 0x20) == 0) { + func_8012CAE4((void *)param); + } + func_8001C214(*(s32 *)(param + 0x20), (s32)&D_801902A0); + *(u16 *)(param + 0x2) = 1; + func_8012E8E0(param, (s32)&D_801835A4); + func_8012A828(param, (void *)&D_8018DC00); + *(u16 *)(*(s32 *)(param + 0x68) + 0xC) = 0x7FFF; +} + + +extern s32 func_8012BD14(s32 a0); +extern s32 func_80178BF8(); +extern void func_80172710(void); + +s32 func_8017F1B4(s32 param_1) { + register s32 obj __asm__("$16") = param_1; + s32 ptr; + s32 ptr2; + s32 result; + + ptr = *(s32 *)((char *)obj + 0x64); + if (*(u16 *)((char *)ptr + 0x2) != 1) { + return 0; + } + result = func_8012BD14(ptr); + if (result < 0x4001) { + ptr2 = *(s32 *)((char *)obj + 0x64); + *(u16 *)((char *)ptr2 + 0x2) = 3; + func_80178BF8(); + return (s32)func_80172710; + } + return 0; +} + + +s32 func_8017F220(void) { + return 0x19; + } + + + +extern void (*D_8018393C[])(void); + +void func_8017F228(void *a0) { + D_8018393C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017ECFC", func_8017F264); + +typedef struct { + u8 r; /* 0x00 */ + u8 g; /* 0x01 */ + u8 b; /* 0x02 */ + u8 cd; /* 0x03 */ +} Col4_8017F2FC; + +typedef struct { + s32 unk0; /* 0x00 */ + s16 unk4; /* 0x04 */ + s16 unk6; /* 0x06 */ +} Gte8_8017F2FC; + +extern void func_8012EFB8(s32 a0); +extern void func_80015954(s32 a0, s32 a1); + +void func_8017F2FC(s32 a0) { + Gte8_8017F2FC sp10; + Col4_8017F2FC col; + s32 *owner; + s32 t; + + extern u16 D_800B99DA; + extern Col4_8017F2FC D_801838BC; + extern Col4_8017F2FC D_801838D8; + extern Col4_8017F2FC D_801838F4; + extern Col4_8017F2FC D_80183910; + + owner = *(s32 **)(a0 + 0x20); + + if (((s32 (*)(s32, s32))func_8012EFB8)(a0 + 0xFC, (s32)&sp10) & ~0x1000) { + owner[1] |= 0x80000000; + } else { + owner[1] &= 0x7FFFFFFF; + } + + func_80015954((s32)&sp10, a0 + 4); + + t = (D_800B99DA & 1) << 2; + col.r = t + 0x40; + col.g = t + 0x40; + col.b = t + 0x60; + + D_801838BC = col; + D_801838D8 = col; + D_801838F4 = col; + D_80183910 = col; +} + + + +extern void (*D_80183944[])(void); + +void func_8017F40C(void *a0) { + D_80183944[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012AD50(void *a0); + void func_8017F448(void) { + ((s32 (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017ECFC", func_8017F468); + + +extern void (*D_80183950[])(void); + +void func_8017F590(void *a0) { + D_80183950[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017F5CC(void *a0) { + *(short *)((char *)a0 + 0x2) = *(unsigned short *)((char *)a0 + 0x2) + 1; + *(int *)((char *)a0 + 0x14) = 0x20000; + } + + +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017ECFC", func_8017F5E4); + +extern void func_80015978(s32 a0, s32 *a1); +extern s32 func_8012EF34(s32 a0, s32 a1); +extern void func_80017D98(void *a0); +extern void func_8001739C(void *a0); + +extern s16 D_8018395C; +extern s16 D_80183964; +extern s16 D_8018396C; +extern s16 D_80183958; +extern s16 D_80183960; +extern s16 D_80183968; + +#define gte_ldv3(r0, r1, r2) __asm__ volatile ( \ + "lwc2 $0, 0( %0 );" \ + "lwc2 $1, 4( %0 );" \ + "lwc2 $2, 0( %1 );" \ + "lwc2 $3, 4( %1 );" \ + "lwc2 $4, 0( %2 );" \ + "lwc2 $5, 4( %2 )" \ + : \ + : "r"( r0 ), "r"( r1 ), "r"( r2 ) ) + +#define gte_rtpt() __asm__ volatile ("nop;nop;rtpt") + +#define gte_stsxy3(r0, r1, r2) __asm__ volatile ( \ + "swc2 $12, 0( %0 );" \ + "swc2 $13, 0( %1 );" \ + "swc2 $14, 0( %2 )" \ + : \ + : "r"( r0 ), "r"( r1 ), "r"( r2 ) \ + : "memory" ) + +#define gte_stszotz(r0) __asm__ volatile ( \ + "mfc2 $12, $19;" \ + "nop;" \ + "sra $12, $12, 2;" \ + "sw $12, 0( %0 )" \ + : \ + : "r"( r0 ) \ + : "$12", "memory" ) + +#define gte_stflg(r0) __asm__ volatile ( \ + "cfc2 $12, $31;" \ + "nop;" \ + "sw $12, 0( %0 )" \ + : \ + : "r"( r0 ) \ + : "$12", "memory" ) + +#define gte_SetRotMatrix(r0) __asm__ volatile ( \ + "lw $12, 0( %0 );" \ + "lw $13, 4( %0 );" \ + "ctc2 $12, $0;" \ + "ctc2 $13, $1;" \ + "lw $12, 8( %0 );" \ + "lw $13, 12( %0 );" \ + "lw $14, 16( %0 );" \ + "ctc2 $12, $2;" \ + "ctc2 $13, $3;" \ + "ctc2 $14, $4" \ + : \ + : "r"( r0 ) \ + : "$12", "$13", "$14" ) + +#define gte_SetTransMatrix(r0) __asm__ volatile ( \ + "lw $12, 20( %0 );" \ + "lw $13, 24( %0 );" \ + "ctc2 $12, $5;" \ + "lw $14, 28( %0 );" \ + "ctc2 $13, $6;" \ + "ctc2 $14, $7" \ + : \ + : "r"( r0 ) \ + : "$12", "$13", "$14" ) + +typedef struct { + s16 x; /* +0x0 */ + s16 y; /* +0x2 */ + s16 c; /* +0x4 */ + s16 pad; /* +0x6 */ +} Vtx_8017F6A8; /* 0x08 */ + +typedef struct { + Vtx_8017F6A8 v[3]; /* +0x00 +0x08 +0x10 */ + u8 r0, g0, b0, code; /* +0x18 .. +0x1B */ + u8 r1, g1, b1, pad1; /* +0x1C .. +0x1F */ + u8 r2, g2, b2, pad2; /* +0x20 .. +0x23 */ + u32 color; /* +0x24 */ +} Prim_8017F6A8; /* 0x28 */ + +typedef struct { + u16 x; /* +0x0 */ + u16 y; /* +0x2 */ + u16 z; /* +0x4 */ +} Pos_8017F6A8; /* 0x06 -> 8-byte frame stride */ + +typedef struct { + u16 vx; /* +0x0 */ + u16 vy; /* +0x2 */ + u16 vz; /* +0x4 */ + u16 pad; /* +0x6 */ +} Sxy_8017F6A8; /* 0x08 */ + +typedef struct { + s16 m[3][3]; /* +0x00, padded to 0x14 */ + s32 t[3]; /* +0x14 +0x18 +0x1C */ +} Mtx_8017F6A8; /* 0x20 */ + +void func_8017F6A8(s32 arg0) +{ + Prim_8017F6A8 prim; /* sp+0x10 */ + Pos_8017F6A8 wpos; /* sp+0x38 */ + Pos_8017F6A8 spos; /* sp+0x40 */ + Sxy_8017F6A8 sxy[4]; /* sp+0x48 */ + Mtx_8017F6A8 mtx; /* sp+0x68 */ + s32 otz; /* sp+0x88 */ + s32 flag; /* sp+0x8C */ + s32 t; + + func_80015978(arg0 + 4, (s32 *)&wpos); + if ((func_8012EF34((s32)&wpos, (s32)&spos) & ~0x1000) == 0) { + gte_stszotz(&otz); + D_8018395C = spos.z; + D_80183964 = spos.z; + D_8018396C = spos.z; + func_80017D98(&mtx); + mtx.t[2] = 0; + mtx.t[1] = 0; + mtx.t[0] = 0; + gte_SetRotMatrix(&mtx); + gte_SetTransMatrix(&mtx); + gte_ldv3(&D_80183958, &D_80183960, &D_80183968); + gte_rtpt(); + gte_stsxy3(&sxy[0], &sxy[1], &sxy[2]); + gte_stflg(&flag); + if (flag >= 0) { + prim.b0 = 0xC0; + prim.g0 = 0xC0; + prim.r0 = 0xC0; + prim.b1 = 0x40; + prim.g1 = 0x20; + prim.r1 = 0x20; + prim.b2 = 0x40; + prim.g2 = 0x20; + prim.r2 = 0x20; + prim.color = 0x50000000; + prim.v[0].x = sxy[0].vx + spos.x; + prim.v[0].y = sxy[0].vy + spos.y; + prim.v[1].x = sxy[1].vx + spos.x; + prim.v[1].y = sxy[1].vy + spos.y; + prim.v[2].x = sxy[2].vx + spos.x; + prim.v[2].y = sxy[2].vy + spos.y; + prim.v[0].c = otz; + func_8001739C(&prim); + t = sxy[1].vy; + prim.v[1].y = spos.y - t; + func_8001739C(&prim); + t = sxy[2].vx; + prim.v[2].x = spos.x - t; + func_8001739C(&prim); + prim.v[1].y = sxy[1].vy + spos.y; + func_8001739C(&prim); + } + } +} + + + +extern void (*D_80183970[])(void); + +void func_8017F8C8(void *a0) { + D_80183970[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); + +void func_8017F904(void *a0) +{ + + extern u8 D_80193530[]; + s32 s1; + u8 *p; + + s1 = *(s32 *)((s32)a0 + 0x20); + p = D_80193530 + *(s32 *)((s32)a0 + 0x2C) * 0x40; + func_8001CD50(s1, (s32)p); + *(s16 *)(s1 + 0x1E) = 0xCCC; + *(s16 *)(s1 + 0x10) = 0x400; + *(s16 *)(s1 + 0x1A) = 0; + *(s16 *)(s1 + 0x18) = 0; + *(s32 *)(s1 + 4) = *(s32 *)(s1 + 4) | 0x50000000; + func_800233CC(p, 0x80); + p[2] = 0xFF; + p[1] = 0xFF; + p[0] = 0xFF; + p[5] = 0x40; + p[4] = 0x40; + p[6] = 0x80; + *(s32 *)((s32)a0 + 0x1C) = 0x10; + *(u16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; +} + + + + +/* Declaration reconciliation with src/ov_SC03_118/ov_SC03_118_jr_8017FB84.c: + * - D_80193530: the TU already declares it at line 4526 as `extern u8 D_80193530[];` + * (used by the banked func_801885D0 just above the splice point). The draft had + * `extern s32 D_80193530[]` -> "conflicting types". Lever (A): conform the decl + * VERBATIM and keep the disagreement at the use site, which already casts the + * decayed pointer to s32. Zero bytes change. + * - func_801292C8: not declared anywhere in this TU, but src/shared/engine_core.h + * declares it as `extern void func_801292C8(u8 *a0);` inside four DEFINE_ macros + * (6304/8491/13623/13794). None of those macros is expanded in this TU today, but + * conforming to that shape now makes the splice conflict-proof if one ever is. + * $a0 already holds the incoming pointer, so passing it costs no instruction + * (jal + nop delay slot, exactly as in the target). + */ + +extern void func_801292C8(u8 *a0); + +void func_8017F9C8(void *a0) { + + extern u8 D_80193530[]; + s32 v0; + s32 v1; + s32 a1; + s32 a2; + u8 *v1ptr; + + v0 = *(s32 *)((s32)a0 + 0x1C); + v1 = *(s32 *)((s32)a0 + 0x2C); + a1 = v0 - 1; + /* §21 zero-byte re-tie barrier: without it gcc's scheduler hoists the 0x2C load + * (and its sll) ahead of the 0x1C load + addiu pair -- the 4-slot SCHEDULE-REORDER + * residual. Folding the shift into the address expression fixes the order but then + * swaps $v0/$v1 across the sll/lui pair (REGALLOC-PERM). The re-tie keeps the + * in-place `v1 <<= 6` form (so the shift stays in $v1) AND anchors it after the + * two loads. Emits no code. */ + __asm__ __volatile__("" : "=r"(v1) : "0"(v1)); + v1 = v1 << 6; + a2 = (s32)D_80193530 + v1; + v1ptr = *(u8 **)((s32)a0 + 0x20); + + *(s32 *)((s32)a0 + 0x1C) = a1; + + if (!(a1 == -1)) { + v0 = 0x10 - a1; + *(u16 *)((s32)v1ptr + 0x1A) = v0 << 8; + *(u16 *)((s32)v1ptr + 0x18) = v0 << 8; + + v1 = *(s32 *)((s32)a0 + 0x1C); + v0 = (v1 << 8) - v1; + if (v0 < 0) { + v0 = v0 + 0xF; + } + v0 = (u32)v0 >> 4; + + *(u8 *)(a2 + 0x2) = v0; + *(u8 *)(a2 + 0x1) = v0; + *(u8 *)(a2 + 0x0) = v0; + + v0 = *(s32 *)((s32)a0 + 0x1C) << 2; + *(u8 *)(a2 + 0x5) = v0; + *(u8 *)(a2 + 0x4) = v0; + + *(u8 *)(a2 + 0x6) = *(s32 *)((s32)a0 + 0x1C) << 3; + } else { + func_801292C8((u8 *)a0); + } +} + + + + + + diff --git a/src/ov_SC03_117/ov_SC03_117_jr_8017BEBC.c b/src/ov_SC03_117/ov_SC03_117_jr_8017BEBC.c index a6bca21d54..40fc698098 100644 --- a/src/ov_SC03_117/ov_SC03_117_jr_8017BEBC.c +++ b/src/ov_SC03_117/ov_SC03_117_jr_8017BEBC.c @@ -4112,1875 +4112,3 @@ void func_8017E6A0(s32 param_1) { func_80178B18(param_1, &D_8018868C); func_8012AD44((s32 *)param_1, 2); } - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_8017E6EC); - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_8017E99C); - -extern s32 D_801886FC[]; -extern void func_8017EE78(s32); - -void func_8017E9BC(s32 s0) { - typedef void (*FuncPtr)(void); - FuncPtr fn; - s16 v0; - - fn = (FuncPtr)D_801886FC[*(u16*)(s0 + 2)]; - fn(); - - v0 = *(s16*)(s0 + 0x10A); - if (v0 != 0) { - func_8017EE78(s0); - } -} - - -#include "common.h" - - -extern Block4 D_801CE398; -extern Block4 D_801CCEF8; -extern u8 D_801CCEFC[]; -extern Block4 D_801CE39C; -extern s32 func_8012C194(void); -extern void func_8001CD50(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern s32 func_80029178(s32 arg); - -void func_8017EA1C(s32 a0) { - register u8 *s0 __asm__("$16"); - register s32 *s1 __asm__("$17"); - register s32 *s2 __asm__("$18"); - s32 *v0; - - s2 = (s32 *)a0; - s1 = (s32 *)((s32 (*)(void))func_8012C194)(); - *(s32 *)((s8 *)s2 + 0xD0) = s1; - if (s1 != 0) { - s0 = (u8 *)&D_801CE398; - func_8001CD50(s1, (s32 *)s0); - func_800233CC(s0, 0xE0); - *(Block4 *)s0 = D_801CCEF8; - D_801CE39C = (*(Block4 *)D_801CCEFC); - *(s16 *)((s8 *)s1 + 0x18) = 0x1000; - *(s16 *)((s8 *)s1 + 0x1A) = 0x1000; - *(s16 *)((s8 *)s1 + 0x10) = 0xC00; - *(u16 *)((s8 *)s1 + 0x2C) = 0xC040; - *(s32 *)((s8 *)s1 + 0x4) |= 0x50000000; - *(s16 *)((s8 *)s1 + 0x8) = *(u16 *)((s8 *)s2 + 0x6); - *(s16 *)((s8 *)s1 + 0xA) = *(u16 *)((s8 *)s2 + 0xA) - 0x30; - *(s16 *)((s8 *)s1 + 0xC) = *(u16 *)((s8 *)s2 + 0xE); - *(s16 *)((s8 *)s2 + 0xE0) = 0; - } - if ((func_80029178(0xBB) & 0xFF) != 0) { - *(u8 *)&D_801CE398 = 0xFF; - } -} - - -#include "common.h" - - - -extern Block4 D_801CE398; - -void func_8017EB34(s32 a0) { - register s32 *work __asm__("$6"); - register s32 x __asm__("$3"); - register s16 r __asm__("$3"); - s16 y; - s32 t; - s32 c; - s32 n; - - work = (s32 *)a0; - if (*(volatile s32 *)((char *)work + 0xD0) == 0) { - return; - } - - x = *(volatile s32 *)((char *)work + 0x94); - y = x; - if ((s16)x >= 0x11) { - t = 0x20 - x; - y = t; - if ((s16)t < 0) { - y = 0; - } - } - - c = *(volatile u16 *)((char *)work + 0xE0) + 1; - *(u16 *)((char *)work + 0xE0) = c; - - r = n = c + y * 3 + 0x40; - if ((s16)n >= 0x100) { - r = 0xFF; - } - *(u8 *)&D_801CE398 = r; -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_8017EBCC); - -typedef void (*Fn8017ECC4)(void); - -extern void func_80181A30(s16 *arg0); - -extern u8 D_80188630[]; -extern Fn8017ECC4 D_801885FC; -extern s32 D_80188600; -extern u8 D_8018862C[]; -extern s16 D_801CE2DE[]; -extern s16 D_801CE2D8[]; -extern s16 D_801885FE[]; - -void func_8017ECC4(s32 arg0, u16 arg1) -{ - typedef struct { u8 b[8]; } Blk8; - u8 *p; - u8 *q; - s32 i; - s32 j; - s32 n; - - n = *(s16 *)(arg0 + 0xFE); - q = (u8 *)&D_801CE2D8; - if (n < 6) { - if (*(s16 *)(arg0 + 0x100) != 0) { - (*(s16 *)(arg0 + 0x100))--; - } else { - *(s16 *)((s32)&D_801CE2DE + (n << 5)) = 0x200; - *(u16 *)(arg0 + 0xFE) = *(u16 *)(arg0 + 0xFE) + 1; - *(s16 *)(arg0 + 0x100) = 2; - } - } - - for (j = 0; j < 6; j++, q += 0x20) { - i = j * 8; - p = q + 8; - if (*(s16 *)(p - 2) != 0) { - if (arg1 == 0) { - if ((u32)*(u16 *)(p + 0x10) < 0x20) { - *(u16 *)(p + 0x10) = *(u16 *)(p + 0x10) + 8; - *(u16 *)(p + 0x12) = *(u16 *)(p + 0x12) + 0x20; - } - } else { - if (*(u16 *)(p + 0x10) != 0) { - *(u16 *)(p + 0x10) = *(u16 *)(p + 0x10) - 8; - *(u16 *)(p + 0x12) = *(u16 *)(p + 0x12) - 0x20; - } - } - } - *(u16 *)q = *(u16 *)((s32)&D_801885FC + i) + *(u16 *)(arg0 + 6); - *(u16 *)(p - 6) = *(u16 *)((s32)&D_801885FE + i) + *(u16 *)(arg0 + 0xA); - *(u16 *)(p - 4) = *(u16 *)((s32)&D_80188600 + i) + *(u16 *)(arg0 + 0xE); - *(Blk8 *)p = *(Blk8 *)((s32)&D_8018862C + i); - func_80181A30((s16 *)q); - } -} - - -extern u8 D_8018870C[]; -extern u16 D_80188744[]; -extern u16 D_80188756; - -void func_8017EE78(s32 s0) { - u16 *ptr; - s16 idx; - u16 cnt; - - idx = *(s16 *)(s0 + 0x102); - MoveImage(&D_8018870C[idx * 8], 0x358, 0x1C0); - ptr = &D_80188756; - idx = *(s16 *)(s0 + 0x102); - *ptr = D_80188744[idx]; - MoveImage(ptr - 1, 0x170, 0x100); - cnt = *(u16 *)(s0 + 0x102) + 1; - *(u16 *)(s0 + 0x102) = cnt; - if ((s16)cnt >= 7) { - *(u16 *)(s0 + 0x102) = 0; - } -} - - -extern s32 func_80029178(s32 arg); - s32 func_8017EF14(void) { - return func_80029178(0xBB) & 0xFF; - } - - -extern void func_800D0CE0(void); - void func_8017EF34(void) { - func_800D0CE0(); - } - - -extern void func_8012B200(void *a0); -extern s32 rand(void); -extern void func_8012AD44(s32 *a0, s16 a1); - -void func_8017EF54(s32 param_1) -{ - func_8012B200((void *)param_1); - *(s32 *)(param_1 + 0x10) = - (*(s16 *)(param_1 + 0x6) - *(s16 *)(*(s32 *)(param_1 + 0x64) + 0x6)) << 13; - *(s32 *)(param_1 + 0x18) = - (*(s16 *)(param_1 + 0xE) - *(s16 *)(*(s32 *)(param_1 + 0x64) + 0xE)) << 13; - *(s32 *)(param_1 + 0x14) = -(((rand() & 7) + 0x18) << 16); - *(u16 *)(param_1 + 0x106) = rand() & 0xF0; - *(u16 *)(param_1 + 0x108) = rand() & 0xF0; - ((void (*)(s32 *, s16))func_8012AD44)((s32 *)param_1, 2); -} - - - -extern void (*D_80188788[])(void); - -void func_8017EFF0(void *a0) { - D_80188788[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017F02C(s32 arg0) { - extern u8 D_801CE3D8[]; - extern u8 D_801CE3F8[]; - s32 var_s1; - - switch (*(u16 *)(arg0 + 0x34)) { - case 0: - *(u16 *)(arg0 + 0x52) = *(u16 *)(arg0 + 0x52) - 0x80; - if (((s32)*(u16 *)(arg0 + 0x52) << 0x10) < 0) { - *(u16 *)(arg0 + 0x52) = 0; - } - var_s1 = *(s32 *)(arg0 + 0xCC); - *(s16 *)(var_s1 + 0xA) = *(u16 *)(arg0 + 0xA) + *(u16 *)(arg0 + 0x52); - if (*(s16 *)(arg0 + 0x52) == 0) { - *(u16 *)(arg0 + 0x34) = *(u16 *)(arg0 + 0x34) + 1; - } - func_8017F410(arg0); - break; - case 1: - if (func_8017F474(arg0) != 0) { - *(s32 *)(arg0 + 0x1C) = 0x70; - *(u16 *)(arg0 + 0x34) = *(u16 *)(arg0 + 0x34) + 1; - func_8012C588(0x2B0, arg0); - } - break; - case 2: - if (func_8012BEE8(arg0) != 0) { - var_s1 = *(s32 *)(arg0 + 0xCC); - if ((var_s1 != 0) && (*(s16 *)(var_s1 + 0x18) != 0)) { - *(s16 *)(var_s1 + 0x18) -= 0x100; - *(u16 *)(var_s1 + 0x1C) -= 0x100; - } - if (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) != 0) { - *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) -= 0x100; - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x1C) -= 0x100; - } - if ((*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) < 0x800) && (func_8017F4C4(arg0) != 0)) { - if (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) == 0) { - *(s32 *)(var_s1 + 4) |= 0x80000000; - *(s32 *)(*(s32 *)(arg0 + 0x20) + 4) |= 0x80000000; - *(u16 *)(*(s32 *)(arg0 + 0x64) + 0xE2) = 1; - func_80016714(var_s1, 0x84); - func_8012C218(arg0); - return; - } - } - } - break; - } - func_8017F2D8(&D_801CE3D8, 0x160, 0x153); - func_8017F2D8(&D_801CE3F8, 0x160, 0x155); -} - - - -extern void (*D_80188794[])(void); - -void func_8017F25C(void *a0) { - D_80188794[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -void func_8017F298(void *a0, u16 a1, u16 a2) { - u16 buf[4]; - - buf[2] = 0x10; - buf[0] = a1; - buf[1] = a2; - buf[3] = 1; - StoreImage((s32)&buf, (void *)a0); -} - - -extern void func_800599B8(u16 *, s32 *); - -void func_8017F2D8(s32 *a0, u16 a1, u16 a2) { - s32 t; - s32 i; - u16 buf[4]; - - t = a0[7]; - - i = 7; - do { - a0[i] = a0[i - 1]; - i--; - } while (i > 0); - - a0[i] = t; - - buf[2] = 0x10; - buf[0] = a1; - buf[1] = a2; - buf[3] = 1; - - func_800599B8(buf, a0); -} - - -typedef struct { u8 b[4]; } Blk4; - -extern s32 func_8012C194(void); -extern void func_800233CC(void *, unsigned short); -extern void func_8001CD9C(int, void *); -extern void func_8017F410(s32); - -extern u8 D_801CE418[]; -extern u8 D_801CCF04[]; -extern u8 D_801CCEFC[]; -extern u8 D_801CE41C[]; - -void func_8017F344(s32 s2) { - s32 s1; - u8 *s0; - - s1 = func_8012C194(); - *(s32 *)(s2 + 0xD0) = s1; - if (s1 != 0) { - s0 = D_801CE418; - func_8001CD9C(s1, s0); - func_800233CC(D_801CE418, 0xE0); - *(Blk4 *)D_801CE418 = *(Blk4 *)D_801CCF04; - *(Blk4 *)D_801CE41C = *(Blk4 *)D_801CCEFC; - *(u16 *)(s1 + 0x18) = 0x1000; - *(u16 *)(s1 + 0x2C) = 0x40; - *(s32 *)(s1 + 4) |= 0x50000000; - func_8017F410(s2); - } -} - - -void func_8017F410(s32 a0) { - s32 a1; - u16 h; - u16 w; - - a1 = *(s32 *)(a0 + 0xD0); - if (a1 != 0) { - *(u16 *)(a1 + 0x8) = *(u16 *)(a0 + 0x6); - h = *(u16 *)(a0 + 0x52); - w = *(u16 *)(a0 + 0xA); - *(u16 *)(a1 + 0xA) = w + (((s16)h >> 1) - 0x1C0); - *(u16 *)(a1 + 0xC) = *(u16 *)(a0 + 0xE); - *(u16 *)(a1 + 0x1A) = (0x380 - (s16) *(u16 *)(a0 + 0x52)) * 8 + 0x1000; - } -} - - -s32 func_8017F474(void *a0) { - s32 *w = *(s32 **)((s32)a0 + 0xD0); - - if (w == 0) { - return 1; - } - if (*(s16 *)((s32)w + 0x18) < 0x4000) { - *(s16 *)((s32)w + 0x18) += 0x400; - *(u16 *)((s32)w + 0x1A) += 0x180; - return 0; - } - return 1; -} - - -extern void func_80016714(void *a0, s32 a1); -extern u8 D_801CE418[]; - -s32 func_8017F4C4(void *param) { - void *h; - register u8 *p __asm__("$5"); - register s32 c __asm__("$3"); - s32 t; - s16 x; - - h = *(void **)((s32)param + 0xD0); - if (h == 0) { - return 1; - } - p = D_801CE418; - c = *p; - if (c != 0) { - t = c - 0x10; - c = t; - if (t < 0) { - c = 0; - } - *p = (u8)c; - } - x = *(s16 *)((s32)h + 0x18); - if (x > 0) { - *(s16 *)((s32)h + 0x18) = x - 0x400; - *(u16 *)((s32)h + 0x1A) -= 0x200; - if (*(s16 *)((s32)h + 0x18) <= 0) { - *(s16 *)((s32)h + 0x18) = 0; - } else { - return 0; - } - } - func_80016714(h, 0x38); - *(s32 *)((s32)param + 0xD0) = 0; - return 1; -} - - - -extern void (*D_8018879C[])(void); - -void func_8017F568(void *a0) { - D_8018879C[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_8017F5A4); - - -extern void (*D_801887D4[])(void); - -void func_8017F750(void *a0) { - D_801887D4[*(u16 *)((s32)a0 + 0x2)](); -} - - -typedef struct { - u16 x, y, z, w; -} Vec4h_F78C; - -extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); -extern u16 D_801887A8; -extern u16 D_801887AA; -extern u16 D_801887AC; -extern u16 D_801887AE; -extern u16 D_801887B0; -extern u16 D_801887B2; - -s32 func_8017F78C(s32 a0) { - Vec4h_F78C p1; - Vec4h_F78C p2; - s32 result; - - p1.z = D_801887B0; - p2.z = D_801887B2; - p1.y = p2.y = D_801887AC; - p1.x = p2.x = (s16)D_801887A8 >> 1; - if (func_8012DEB8(a0, (s32)&p1, (s32)&p2)) { - result = 1; - goto save; - } - - p1.x = p2.x = (s16)D_801887AA >> 1; - if (func_8012DEB8(a0, (s32)&p1, (s32)&p2)) { - result = 1; - goto save; - } - - p1.y = p2.y = D_801887AE; - if (func_8012DEB8(a0, (s32)&p1, (s32)&p2)) { - result = 1; - goto save; - } - - p1.x = p2.x = (s16)D_801887A8 >> 1; - result = func_8012DEB8(a0, (s32)&p1, (s32)&p2) != 0; - -save: - return result; -} - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern s32 func_80029178(s32 arg); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8017E99C(s32 a0); -extern void func_8017EA1C(); -extern s32 func_8012C588(s32 a0, s32 a1); -extern void func_8001C810(s32 a0, s32 a1); -extern void func_8012AD50(s32); -extern u8 D_801B8F08[]; -extern u8 D_801BAA88[]; - -void func_8017F894(void *a0) { - s32 v0; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)a0 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(a0); - return; - } - if ((func_80029178(0xBB) & 0xFF) != 0) { - func_8001C214(*(s32 *)((s32)a0 + 0x20), (s32)D_801B8F08); - func_8017E99C((s32)a0); - func_8017EA1C((s32)a0); - *(s16 *)((s32)a0 + 0x10A) = 1; - func_8012C588(0x2B0, (s32)a0); - return; - } - func_8001C810(*(s32 *)((s32)a0 + 0x20), (s32)D_801BAA88); - *(u32 *)(*(s32 *)((s32)a0 + 0x20) + 4) |= 0x8000; - *(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x28) = 0x1000100; - v0 = func_8012C588(0x1D7, (s32)a0); - if (v0 != 0) { - *(s32 *)((s32)a0 + 0xCC) = v0; - } - func_8012AD50((s32)a0); -} - - -void func_8017F97C(void) { -} - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_8017F984); - -extern void func_80132784(s32 a0, s32 a1, u32 a2); -extern void func_8017EF54(s32); - -void func_8017FA00(s32 param_1) { - s32 s0 = param_1; - if (*(s16 *)(s0 + 0x70) != 0) { - *(s16 *)(s0 + 0xE) = 0; - *(s16 *)(s0 + 0xA) = 0; - *(s16 *)(s0 + 6) = 0; - func_80132784(s0, *(s32 *)(s0 + 0x64), *(u16 *)(s0 + 0x70)); - *(s16 *)(s0 + 6) = *(s32 *)(*(s32 *)(s0 + 0x20) + 0x48); - *(s16 *)(s0 + 10) = *(s32 *)(*(s32 *)(s0 + 0x20) + 0x4C); - *(s16 *)(s0 + 14) = *(s32 *)(*(s32 *)(s0 + 0x20) + 0x50); - if (*(s16 *)(*(s32 *)(s0 + 0x64) + 0x108) != 0) { - ((void (*)(void *))func_8017EF54)(s0); - } - } -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_8017FA90); - -void func_8017FB04(s32 s1) -{ - extern void func_8012C1B8(void); - extern void func_8012CAE4(void *a0); - extern void func_8001C214(s32 a0, s32 a1); - extern void func_8017F344(s32 a0); - extern void func_8017F298(void *a0, u16 a1, u16 a2); - extern void func_8012AD50(s32 a0); - extern u8 D_801BEB68[]; - extern u8 D_801BD738[]; - extern u8 D_801CE3D8[]; - extern u8 D_801CE3F8[]; - - s32 s0; - u32 s2; - - s0 = ((s32 (*)(void))func_8012C1B8)(); - if (s0 == 0) { - goto L_8017FB7C; - } - func_8001C214(s0, (s32)D_801BEB68); - *(u16 *)(s0 + 0x2C) |= 0x10; - *(u16 *)(s1 + 0xA) -= 0x10; - *(u32 *)(s0 + 0x28) = 0x1800180; - *(s32 *)(s1 + 0x20) = s0; - *(u16 *)(s1 + 0x52) = 0x380; - s0 = ((s32 (*)(void))func_8012C1B8)(); - if (s0 != 0) { - goto L_8017FB8C; - } - -L_8017FB7C: - func_8012CAE4((void *)s1); - return; - -L_8017FB8C: - func_8001C214(s0, (s32)D_801BD738); - *(u32 *)(s0 + 0x28) = 0x1800180; - *(u16 *)(s0 + 0x2C) |= 0x10; - *(u16 *)(s0 + 0x8) = *(u16 *)(s1 + 0x6); - *(u16 *)(s0 + 0xA) = *(u16 *)(s1 + 0xA) + *(u16 *)(s1 + 0x52); - *(u16 *)(s0 + 0xC) = *(u16 *)(s1 + 0xE); - *(u16 *)(s0 + 0x12) = 0x100; - *(s32 *)(s1 + 0xCC) = s0; - func_8017F344(s1); - func_8017F298(D_801CE3D8, 0x160, 0x153); - func_8017F298(D_801CE3F8, 0x160, 0x154); - -L_8017FC14: - func_8012AD50(s1); -} - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C810(s32 a0, s32 a1); -extern void func_8012AD50(s32); -extern u8 D_801C0F18[]; - -void func_8017FC30(void *param_1) -{ - s32 v0; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)param_1 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(param_1); - return; - } - func_8001C810(v0, (s32)D_801C0F18); - *(u32 *)(*(s32 *)((s32)param_1 + 0x20) + 4) |= 0x50000000; - *(s32 *)(*(s32 *)((s32)param_1 + 0x20) + 0x28) = 0x2000300; - *(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x2C) |= 0x10; - *(s16 *)((s32)param_1 + 0xA) = -0x680; - *(s16 *)((s32)param_1 + 0x6) = 0; - *(s16 *)((s32)param_1 + 0xE) = 0x15C0; - func_8012AD50((s32)param_1); -} - - -void func_8017FCD4(s32 param_1) { - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) += 2; -} - - -extern s32 func_80029504(void); -extern void func_8012C1B8(void); -extern void func_8001C2C4(s32 a0); -extern void func_8012B2CC(s32 a0); -extern void func_8012B14C(s32 a0, void *a1); -extern void func_8012AD50(s32 a0); -extern void func_8012CAE4(void *a0); -extern void (*D_801887A4)(void); - -void func_8017FCF0(void *a0) { - register s32 v0 __asm__("$2"); - register s32 s0 __asm__("$16"); - register s32 p __asm__("$4"); - s32 buf[3]; - - s0 = (s32)a0; - if ((u32)(v0 = func_80029504()) >= 1000 || - (u32)(v0 = func_80029504()) < 900 || - (v0 = ((s32 (*)(void))func_8012C1B8)(), *(s32 *)(s0 + 0x20) = v0, v0 == 0)) { - func_8012CAE4((void *)s0); - return; - } - func_8001C2C4(v0); - *(s16 *)(*(s32 *)(s0 + 0x20) + 0x10) = 0x400; - func_8012B2CC(s0); - buf[1] = 0; - buf[0] = 0; - buf[2] = 0xC0000; - func_8012B14C(s0, buf); - p = s0; - *(s16 *)(p + 0x5C) = 0x800; - __asm__ __volatile__("" : : "r"(p)); - *(s32 *)(p + 0x58) = (s32)&D_801887A4 | 0x40000000; - func_8012AD50(p); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_8017FDB4); - - -extern void (*D_801887DC[])(void); - -void func_8017FE68(void *a0) { - D_801887DC[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8012BF4C(s32 *a0, s16 a1); -extern void func_8012AD50(s32); -void func_8017FEA4(s32 *a0) { - func_8012BF4C(a0, 0); - func_8012AD50(a0); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_8017FED8); - - - -extern void (*D_801887E8[])(void); - -void func_80180010(void *a0) { - D_801887E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8018004C(void *a0) { - *(s16 *)((char *)a0 + 0x2) += 1; - *(s32 *)((char *)a0 + 0x14) = 0x20000; - } - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_80180064); - -/* func_8018012C — projected 4-way mirrored triangle fan (banked twin ov_SC01_084:func_80185C0C) */ - -extern void func_80015978(s32 a0, s32 *a1); -extern s16 D_801887F4; /* vert0 .vx/.vy word */ -extern s16 D_801887FC; /* vert0 .vz */ -extern s16 D_80188804; /* vert1 .vx/.vy */ -extern s16 D_801887F0; /* vert1 .vz */ -extern s16 D_801887F8; /* vert2 .vx/.vy */ -extern s16 D_80188800; /* vert2 .vz */ - -/* NOTE: shared DEFINE_func_8012EF34() spells `void func_8012EF34(s32,s32)`; - * this call site consumes the leaked $v0, so declare s32 return here. */ -extern s32 func_8012EF34(s32 a0, s32 a1); -extern void func_80017D98(void *a0); -extern void func_8001739C(void *a0); - -/* === macros below spelled EXACTLY as destination TU lines 2693-2795 === */ - -#define gte_ldv3(r0, r1, r2) __asm__ volatile ( \ - "lwc2 $0, 0( %0 );" \ - "lwc2 $1, 4( %0 );" \ - "lwc2 $2, 0( %1 );" \ - "lwc2 $3, 4( %1 );" \ - "lwc2 $4, 0( %2 );" \ - "lwc2 $5, 4( %2 )" \ - : \ - : "r"( r0 ), "r"( r1 ), "r"( r2 ) ) - -#define gte_rtpt() __asm__ volatile ("nop;nop;rtpt") - -#define gte_stsxy3(r0, r1, r2) __asm__ volatile ( \ - "swc2 $12, 0( %0 );" \ - "swc2 $13, 0( %1 );" \ - "swc2 $14, 0( %2 )" \ - : \ - : "r"( r0 ), "r"( r1 ), "r"( r2 ) \ - : "memory" ) - -#define gte_stszotz(r0) __asm__ volatile ( \ - "mfc2 $12, $19;" \ - "nop;" \ - "sra $12, $12, 2;" \ - "sw $12, 0( %0 )" \ - : \ - : "r"( r0 ) \ - : "$12", "memory" ) - -#define gte_stflg(r0) __asm__ volatile ( \ - "cfc2 $12, $31;" \ - "nop;" \ - "sw $12, 0( %0 )" \ - : \ - : "r"( r0 ) \ - : "$12", "memory" ) - -#define gte_SetRotMatrix(r0) __asm__ volatile ( \ - "lw $12, 0( %0 );" \ - "lw $13, 4( %0 );" \ - "ctc2 $12, $0;" \ - "ctc2 $13, $1;" \ - "lw $12, 8( %0 );" \ - "lw $13, 12( %0 );" \ - "lw $14, 16( %0 );" \ - "ctc2 $12, $2;" \ - "ctc2 $13, $3;" \ - "ctc2 $14, $4" \ - : \ - : "r"( r0 ) \ - : "$12", "$13", "$14" ) - -#define gte_SetTransMatrix(r0) __asm__ volatile ( \ - "lw $12, 20( %0 );" \ - "lw $13, 24( %0 );" \ - "ctc2 $12, $5;" \ - "lw $14, 28( %0 );" \ - "ctc2 $13, $6;" \ - "ctc2 $14, $7" \ - : \ - : "r"( r0 ) \ - : "$12", "$13", "$14" ) - -typedef struct { - s16 x; /* +0x0 */ - s16 y; /* +0x2 */ - s16 c; /* +0x4 */ - s16 pad; /* +0x6 */ -} Vtx_8018012C; /* 0x08 */ - -typedef struct { - Vtx_8018012C v[3]; /* +0x00 +0x08 +0x10 */ - u8 r0, g0, b0, code; /* +0x18 .. +0x1B */ - u8 r1, g1, b1, pad1; /* +0x1C .. +0x1F */ - u8 r2, g2, b2, pad2; /* +0x20 .. +0x23 */ - u32 color; /* +0x24 */ -} Prim_8018012C; /* 0x28 */ - -typedef struct { - u16 x; /* +0x0 */ - u16 y; /* +0x2 */ - u16 z; /* +0x4 */ -} Pos_8018012C; /* 0x06 -> 8-byte frame stride */ - -typedef struct { - u16 vx; /* +0x0 */ - u16 vy; /* +0x2 */ - u16 vz; /* +0x4 */ - u16 pad; /* +0x6 */ -} Sxy_8018012C; /* 0x08 */ - -typedef struct { - s16 m[3][3]; /* +0x00, padded to 0x14 */ - s32 t[3]; /* +0x14 +0x18 +0x1C */ -} Mtx_8018012C; /* 0x20 */ - -void func_8018012C(s32 arg0) -{ - Prim_8018012C prim; /* sp+0x10 */ - Pos_8018012C wpos; /* sp+0x38 */ - Pos_8018012C spos; /* sp+0x40 */ - Sxy_8018012C sxy[4]; /* sp+0x48 */ - Mtx_8018012C mtx; /* sp+0x68 */ - s32 otz; /* sp+0x88 */ - s32 flag; /* sp+0x8C */ - s32 t; - Prim_8018012C *p = &prim; - - func_80015978(arg0 + 4, (s32 *)&wpos); - if ((func_8012EF34((s32)&wpos, (s32)&spos) & ~0x1000) == 0) { - gte_stszotz(&otz); - D_801887F4 = spos.z; - D_801887FC = spos.z; - D_80188804 = spos.z; - func_80017D98(&mtx); - /* emitted 0x84/0x80/0x7C -> source runs t[2] first */ - mtx.t[2] = 0; - mtx.t[1] = 0; - mtx.t[0] = 0; - gte_SetRotMatrix(&mtx); - gte_SetTransMatrix(&mtx); - gte_ldv3(&D_801887F0, &D_801887F8, &D_80188800); - gte_rtpt(); - gte_stsxy3(&sxy[0], &sxy[1], &sxy[2]); - gte_stflg(&flag); - if (flag >= 0) { - p->b0 = 0xC0; - p->g0 = 0xC0; - p->r0 = 0xC0; - p->b1 = 0x40; - p->g1 = 0x20; - p->r1 = 0x20; - p->b2 = 0x40; - p->g2 = 0x20; - p->r2 = 0x20; - p->color = 0x50000000; - p->v[0].x = sxy[0].vx + spos.x; - p->v[0].y = sxy[0].vy + spos.y; - p->v[1].x = sxy[1].vx + spos.x; - p->v[1].y = sxy[1].vy + spos.y; - p->v[2].x = sxy[2].vx + spos.x; - p->v[2].y = sxy[2].vy + spos.y; - p->v[0].c = otz; - func_8001739C(p); - t = sxy[1].vy; - p->v[1].y = spos.y - t; - func_8001739C(p); - t = sxy[2].vx; - p->v[2].x = spos.x - t; - func_8001739C(p); - p->v[1].y = sxy[1].vy + spos.y; - func_8001739C(p); - } - } -} - - - -extern void (*D_80188808[])(void); - -void func_80180358(void *a0) { - D_80188808[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8001CD50(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); - -void func_80180394(void *a0) -{ - extern u8 D_801CE458[]; - s32 s1; - u8 *p; - - s1 = *(s32 *)((s32)a0 + 0x20); - p = D_801CE458 + *(s32 *)((s32)a0 + 0x2C) * 0x40; - func_8001CD50(s1, (s32)p); - *(s16 *)(s1 + 0x1E) = 0xCCC; - *(s16 *)(s1 + 0x10) = 0x400; - *(s16 *)(s1 + 0x1A) = 0; - *(s16 *)(s1 + 0x18) = 0; - *(s32 *)(s1 + 4) = *(s32 *)(s1 + 4) | 0x50000000; - func_800233CC(p, 0x20); - p[5] = 0x40; - p[4] = 0x40; - p[2] = 0; - p[1] = 0; - p[0] = 0; - p[6] = 0x80; - *(s32 *)((s32)a0 + 0x1C) = 0x10; - *(u16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_80180454); - - -extern void (*D_80188810[])(void); - -void func_801804DC(void *a0) { - D_80188810[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_80180518); - -extern s32 rand(void); -extern u16 D_800B99DA; -extern u8 *func_801290DC(s32 arg0, u8 *arg1); - -void func_80180558(s32 param_1) -{ - u16 sp10[3]; - s32 i; - s32 r; - - if ((D_800B99DA & 3) == 0) { - sp10[1] = *(u16 *)(param_1 + 0xA); - for (i = 0; i < 2; i++) { - r = rand(); - { - register s32 t __asm__("$3") = *(u16 *)(param_1 + 6) - 0x20; - sp10[0] = t + (r & 0x3F); - } - r = rand(); - { - register s32 u __asm__("$3") = *(u16 *)(param_1 + 0xE) - 0x20; - sp10[2] = u + (r & 0x3F); - } - func_801290DC(0x66, (u8 *)sp10); - } - } -} - - - -extern void (*D_80188818[])(void); - -void func_801805EC(void *a0) { - D_80188818[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern u8 D_800D387C[]; -extern u8 D_800D3888[]; -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); -extern s32 rand(void); - -void func_80180628(int param_1) -{ - int p; - register s32 r1 __asm__("$16"); - register s32 r2 __asm__("$17"); - s16 r3, r4, r5; - s16 v; - s16 v2; - s32 unk_frame_pad[4]; - - p = *(int *)(param_1 + 0x20); - *(u8 **)(p + 0x20) = D_800D387C; - *(u8 *)(p + 0x27) = 0x9c; - *(u32 *)(p + 4) = *(u32 *)(p + 4) | 0x60000000; - - func_80128EA8(*(s32 *)(param_1 + 0x20), param_1 + 0x24, (s32)D_800D3888); - - *(s32 *)(param_1 + 0x14) = 0xFFFC0000; - *(s32 *)(param_1 + 0x1C) = 0x3C; - *(s32 *)(param_1 + 0x10) = *(s32 *)(param_1 + 4); - *(s32 *)(param_1 + 0x18) = *(s32 *)(param_1 + 0xC); - - r1 = rand(); - r2 = rand(); - r3 = rand(); - v = (r1 & 3) * 1024; - v += (r2 & 3) * 250; - v += (r3 & 3) * 68; - *(s16 *)(p + 0x10) = v; - r4 = rand(); - v2 = (r4 & 3) * 2048 + 0x1000; - *(s16 *)(p + 0x1A) = v2; - *(s16 *)(p + 0x18) = v2; - r5 = rand(); - *(s16 *)(param_1 + 0x2E) = (r5 & 3) + 1; - *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; -} - - -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80128ED8(s32 param_1, s32 *param_2); -extern void func_801292C8(u8 *a0); - -void func_80180748(s32 a0) { - s32 pad[4]; - s32 s1; - s16 temp; - s32 v0; - - *(u16 *)(a0 + 0x2C) += *(u16 *)(a0 + 0x2E); - - s1 = *(s32 *)(a0 + 0x20); - - temp = *(u16 *)(s1 + 0x10) + 0x71; - *(u16 *)(s1 + 0x10) = temp; - v0 = func_8004787C(temp); - *(u16 *)(a0 + 0x6) = *(u16 *)(a0 + 0x12) + (*(s16 *)(a0 + 0x2C) * v0) / 4096; - - v0 = func_80047948(*(s16 *)(s1 + 0x10)); - *(u16 *)(a0 + 0xE) = *(u16 *)(a0 + 0x1A) + (*(s16 *)(a0 + 0x2C) * v0) / 4096; - - *(s32 *)(a0 + 0x14) += 0xFFFF4000; - *(s32 *)(a0 + 0x8) += *(s32 *)(a0 + 0x14); - - *(u16 *)(s1 + 0x1A) += 0xCC; - *(u16 *)(s1 + 0x18) = *(u16 *)(s1 + 0x1A); - - if ((*(s32 *)(a0 + 0x1C) & 3) == 0) { - func_80128ED8(*(s32 *)(a0 + 0x20), (s32 *)(a0 + 0x24)); - } - - *(s32 *)(a0 + 0x1C) -= 1; - if (*(s32 *)(a0 + 0x1C) == -1) { - func_801292C8((u8 *)a0); - } -} - - -extern void (*D_80188B40[])(void); - -void func_80180874(void *a0) { - D_80188B40[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s16 D_80188820[]; - -void func_801808B0(s32 param_1) -{ - *(s32 *)(param_1 + 0xcc) = func_80180AB4(param_1, D_80188820, 0x300, 0x180, 0x84); - if (*(s32 *)(param_1 + 0xcc) == 0) { - func_8012CAE4(param_1); - return; - } - *(s32 *)(param_1 + 0xd0) = func_80180AB4(param_1, D_80188820, 0x310, 0x180, 0x85); - if (*(s32 *)(param_1 + 0xd0) == 0) { - func_80016714(*(void **)(param_1 + 0xcc), 0x38); - func_8012CAE4(param_1); - return; - } - *(s16 *)(param_1 + 2) = 1; -} - - -INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_8018094C); - -void func_801809C0(void) { -} - -extern u16 D_80188B20[]; -extern s32 D_801C4F44; - -void func_801809C8(s32 a0) { - u16 t; - - t = *(u16 *)(a0 + 0xFC); - *(u8 *)(*(s32 *)(a0 + 0xCC) + 0x27) = 0x86; - *(u8 *)(*(s32 *)(a0 + 0xD0) + 0x27) = 0x87; - func_800183E0((s32)&D_801C4F44 + (((u8 *)D_80188B20)[(s16)t] << 4)); - func_800183E0((s32)&D_801C4F44 + 0x100 + (((u8 *)D_80188B20)[(s16)t] << 4)); - *(u16 *)(a0 + 0xFC) = (t + 1) & 0x1F; -} - - -extern void func_80016714(void *a0, s32 a1); -extern void func_8012C098(void *a0); - -void func_80180A70(s32 param_1) { - func_80016714(*(void **)(param_1 + 0xCC), 0x38); - func_80016714(*(void **)(param_1 + 0xD0), 0x38); - func_8012C098(param_1); -} - - -extern s32 func_8012C194(void); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -s32 func_80180AB4(s32 a0, s32 a1, s16 a2, s16 a3, s32 a4) { - s32 obj; - - obj = func_8012C194(); - if (obj == 0) { - return 0; - } - func_8001CB6C((u8 *)obj, a1, a2, a3); - *(u16 *)(obj + 0x10) = 0xC00; - *(u16 *)(obj + 0x1A) = 0x2D00; - *(u16 *)(obj + 0x18) = 0x2D00; - *(u8 *)(obj + 0x27) = a4; - *(u16 *)(obj + 0x2C) = 0xC008; - *(u16 *)(obj + 8) = *(u16 *)(a0 + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(a0 + 0xA) - 0x24; - *(u16 *)(obj + 0xC) = *(u16 *)(a0 + 0xE); - return obj; -} - - - -extern void (*D_80188B5C[])(void); - -void func_80180B88(void *a0) { - D_80188B5C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012AD50(s32); - -void func_80180BC4(void *a0) -{ - s32 v0; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((s32)a0 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(a0); - return; - } - func_8001C214(v0, 0); - func_8012AD50((s32)a0); -} - - -extern s32 func_80029178(s32 arg); -extern void func_8012AD50(s32); -extern u8 D_80188B4C[]; - -void func_80180C18(void *a0) { - if ((func_80029178(0xBB) & 0xFF) != 0) { - *(s32 *)((s32)a0 + 0x58) = (s32)D_80188B4C; - *(s16 *)((s32)a0 + 0x5C) = 0x80; - func_8012AD50((s32)a0); - } -} - - -void func_80180C68(void) { -} - - -s32 func_80180C70(void) { - return 73; -} - - -extern void func_8013373C(s32 arg0); - void func_80180C78(void) { - func_8013373C(0); - } - - -extern s32 D_801CE8BC; -void func_80180C98(void) { - if (D_801CE8BC == 0) { - if ((func_80029178(0xBB) & 0xFF) != 0) { - func_8013373C(0); - } - D_801CE8BC += 1; - } -} - - - -extern void func_801819C4(void *a0); - -void func_80180CF0(void *a0) { - - extern void (*D_801C0F9C[])(void); - D_801C0F9C[*(u16 *)((s32)a0 + 0x2)](); - if (*(u16 *)((s32)a0 + 0x0) != 0) { - *(s32 *)((s32)a0 + 0xE8) = *(s32 *)((s32)a0 + 0xE8) + 1; - if ((*(s32 *)((s32)a0 + 0xE8) & 0xF) == 0) { - func_801819C4(a0); - } - } -} - - - -extern s32 rand(void); -extern s32 func_8012C354(s32 *a0, s32 a1); -extern void func_8012A828(s32, s32); -extern void func_80143994(s32 *a0, s32 a1); - - -void func_80180D6C(void *arg0) { - - extern s32 D_801C0F30; - extern s32 D_801C0F74; - extern s32 D_801C348C; - s32 t; - - if (func_8012C354(arg0, &D_801C0F30)) { - *(u8 *)((char *)arg0 + 0xC0) = 1; - *(s32 *)((char *)arg0 + 0xB4) = -1; - *(s32 **)((char *)arg0 + 0xBC) = &D_801C0F74; - *(u32 *)((char *)arg0 + 0xC4) |= 1; - *(s32 *)((char *)arg0 + 0xE4) = -((rand() % 8 + 0xC) << 16); - ((void (*)(s32 *, s32))func_8012A828)(arg0, &D_801C348C); - func_80143994(arg0, 0x1000); - t = *(u16 *)((char *)arg0 + 0x70) & 0x10; - if (t != 0) { - t = 3; - } else { - t = 1; - } - *(s16 *)((char *)arg0 + 0x2) = t; - } -} - - - -extern s32 rand(void); -extern void func_8012B200(void *a0); - -void func_80180E2C(void *a0) { - s16 r; - s16 t; - - r = rand(); - *(u16 *)((s32)a0 + 0x104) = *(u16 *)((s32)a0 + 0xFC); - t = r; - func_8012B200(a0); - if (*(u16 *)((s32)a0 + 0x70) & 1) { - *(s32 *)((s32)a0 + 0x1C) = (s16)(r % 1800) + 0xE10; - } else { - *(s32 *)((s32)a0 + 0x1C) = (s16)(r % 60) + 0x78; - } - *(s16 *)((s32)a0 + 0xFE) = t % 32 + 0xA; - *(s16 *)((s32)a0 + 0x2) = 2; -} - - - -extern void func_80181900(s32 *a0, s32 a1, s32 a2); -extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); -extern void func_8012B178(s32 a0, s32 a1); -extern void func_8012CBF4(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern s32 func_801819AC(void); -extern s32 rand(void); - -void func_80180F54(s32 a0) { - s32 sp10[2]; - s32 t; - s32 r; - - func_80181900(sp10, a0, a0 + 0x102); - t = sp10[0]; - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = t; - r = func_8012B608(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12), t >> 16, - *(s16 *)(a0 + 0xFE)); - *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = - *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + r; - func_8012B178(a0, *(s32 *)(a0 + 0xE4)); - func_8012CBF4(a0); - if ((*(u16 *)(a0 + 0x70) & 2) == 0) { - if (func_8012BEE8(a0)) { - if (*(s32 *)(a0 + 0xE0) == 0) { - if (((s32 (*)(s32))func_801819AC)(a0)) { - if (*(u16 *)(a0 + 0x70) & 1) { - *(s32 *)(a0 + 0x1C) = rand() % 0x708 + 0xE10; - } else { - *(s32 *)(a0 + 0x1C) = rand() % 0x3C + 0x78; - } - } else { - *(s16 *)(a0 + 0x2) = 5; - } - } else { - *(s16 *)(a0 + 0x2) = 1; - } - } - } -} - - - -extern s32 rand(void); -extern void func_8012B200(void *a0); -extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); - -void func_801810C4(s32 a0) { - u8 auStack_18[8]; - s32 tmp; - s32 base; - s32 off; - s32 val; - - func_8012B200((void *)a0); - *(s32 *)(a0 + 0x1C) = rand() % 128 + 0x80; - *(s16 *)(a0 + 0xFE) = rand() % 32 + 10; - func_8012B0B4((unsigned int *)auStack_18, rand() % 0x1000, - rand() % *(s32 *)(a0 + 0xDC)); - tmp = *(s32 *)auStack_18; - *(s16 *)(a0 + 0x102) = *(u16 *)(a0 + 0x88) + tmp; - *(s16 *)(a0 + 0x106) = *(u16 *)(a0 + 0x8C) + (tmp >> 16); - if (*(u16 *)(a0 + 0x70) & 0x20) { - off = rand() % 256; - base = *(s16 *)(a0 + 0xFC); - if (rand() & 1) { - val = base + off; - } else { - val = base - off; - } - *(s16 *)(a0 + 0x104) = val; - } else { - *(s16 *)(a0 + 0x104) = *(u16 *)(a0 + 0xFC) - rand() % 256; - } - *(s16 *)(a0 + 0x2) = 4; -} - - - -extern s32 func_8012B77C(s32 out, s32 from, s32 to); -extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); -extern void func_8012B178(s32 a0, s32 a1); -extern void func_8012CBF4(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); -extern s32 rand(void); - -void func_80181258(s32 a0) { - - extern u16 D_80126B62; - s32 sp10[6]; - u8 sp28[8]; - s16 q; - s32 t; - s32 r; - - *(s16 *)((s32)sp10 + 0x2) = *(u16 *)(a0 + 0x102); - *(s16 *)((s32)sp10 + 0xA) = *(u16 *)(a0 + 0x106); - q = *(u16 *)(a0 + 0x104); - *(s16 *)((s32)sp10 + 0x6) = q; - if ((*(u16 *)(a0 + 0x70) & 0x20) == 0) { - *(s16 *)((s32)sp10 + 0x6) = q + D_80126B62; - } else { - *(s16 *)((s32)sp10 + 0x6) = q + *(u16 *)(a0 + 0x8A); - } - - func_8012B77C((s32)sp28, a0 + 4, (s32)sp10); - t = *(s32 *)sp28; - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = t; - r = func_8012B608(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12), t >> 16, - *(s16 *)(a0 + 0xFE)); - *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = - *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + r; - func_8012B178(a0, *(s32 *)(a0 + 0xE4)); - func_8012CBF4(a0); - if (func_8012BEE8(a0)) { - s32 base; - s32 off; - s32 val; - - *(s32 *)(a0 + 0x1C) = rand() % 128 + 0x80; - *(s16 *)(a0 + 0xFE) = rand() % 32 + 10; - func_8012B0B4((unsigned int *)sp28, rand() % 0x1000, - rand() % *(s32 *)(a0 + 0xDC)); - t = *(s32 *)sp28; - *(s16 *)(a0 + 0x102) = *(u16 *)(a0 + 0x88) + t; - *(s16 *)(a0 + 0x106) = *(u16 *)(a0 + 0x8C) + (t >> 16); - if (*(u16 *)(a0 + 0x70) & 0x20) { - off = rand() % 256; - base = *(s16 *)(a0 + 0xFC); - if (rand() & 1) { - val = base + off; - } else { - val = base - off; - } - *(s16 *)(a0 + 0x104) = val; - } else { - *(s16 *)(a0 + 0x104) = *(u16 *)(a0 + 0xFC) - rand() % 256; - } - } -} - - - -extern s32 rand(void); -extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); -/* Declarations conformed VERBATIM to the TU's existing ones - * (ov_SC02_035_jr_8017BEBC.c:5139 and :5117) — type disagreements are - * pushed to casts at the use sites below. Zero codegen change. */ -extern void func_80181900(s32 *a0, s32 a1, s32 a2); -extern void func_8012B200(void *a0); -extern void func_8012B2CC(s32 a0); -extern void func_8012B178(s32 a0, s32 a1); - -void func_801814AC(s32 a0) { - s16 sp10[4]; - s32 sp18[2]; - s16 r; - s32 t; - s32 u; - - r = rand(); - func_8012B0B4((unsigned int *)sp18, (s16)(r % 4095), (s16)(r % 128) + 0xC0); - - t = sp18[0]; - sp10[1] = -0x30; - sp10[0] = t; - sp10[2] = t >> 16; - func_80181900(sp18, a0, (s32)sp10); - - u = sp18[0]; - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = u; - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = u >> 16; - func_8012B200((void *)a0); - func_8012B2CC(a0); - func_8012B178(a0, *(s32 *)(a0 + 0xE4) + 0xFFFE0000); - *(s16 *)(a0 + 0x2) = 6; - *(s16 *)(a0 + 0x34) = 0; -} - - - -extern void func_80181900(s32 *a0, s32 a1, s32 a2); -extern s32 func_8012B8E4(s32 a0, s32 a1); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012CBF4(s32 a0); -extern void func_8012B200(void *a0); -extern void func_8012B178(s32 a0, s32 a1); -extern void func_8002D4C8(s32 a0, s32 a1); -extern s32 func_801818D4(s32 a0); -extern s32 rand(void); - -void func_801815B8(s32 a0) { - - extern u8 D_801C0F6C[]; - s32 sp10[2]; - s32 t; - s32 u; - - switch (*(u16 *)(a0 + 0x34)) { - case 0: - if (((s32 (*)(s32))func_8012CBF4)(a0)) { - *(s32 *)(a0 + 0x1C) = 0x1E; - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = 0; - *(s16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1; - } else if (*(s16 *)(a0 + 0x100) < *(s16 *)(a0 + 0xA)) { - *(s16 *)(a0 + 0xA) = *(s16 *)(a0 + 0x100); - *(s32 *)(a0 + 0x1C) = 0x1E; - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = 0; - *(s16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1; - } - break; - case 1: - t = func_8012B8E4(a0, 6); - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = - *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + t; - if (func_8012BEE8(a0)) { - if (rand() & 1) { - *(s16 *)(a0 + 0x2) = 1; - } else { - *(s16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1; - func_8012B200((void *)a0); - *(s32 *)(a0 + 0x1C) = 0x20; - func_8002D4C8(0x6FF, 0); - } - } - break; - case 2: - func_80181900(sp10, a0, (s32)D_801C0F6C); - u = sp10[0]; - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = u; - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = u >> 16; - func_8012B178(a0, *(s32 *)(a0 + 0xE4) + 0xFFF80000); - func_8012CBF4(a0); - if (func_801818D4(a0) == 1) { - *(s16 *)(a0 + 0x2) = 1; - } else if (func_8012BEE8(a0)) { - *(s16 *)(a0 + 0x2) = 1; - } - break; - default: - *(s16 *)(a0 + 0x2) = 1; - break; - } -} - - - -extern s32 func_8012BEE8(s32 a0); -extern s32 func_8012E778(s32 a0, s32 a1); -extern void func_8012E88C(s32 a0); -extern void func_8012A828(s32, s32); - -void func_80181754(void *arg0) { - - extern s32 D_801C348C; - if (func_8012BEE8((s32)arg0)) { - if (!func_8012E778((s32)arg0, 0xA000C8)) { - { - s32 t; - t = *(u16 *)((char *)arg0 + 0x70) & 0x10; - *(s16 *)((char *)arg0 + 0x2) = (t == 0) ? 1 : 3; - } - *(s16 *)((char *)arg0 + 0x5C) = - *(u16 *)(*(s32 *)((char *)arg0 + 0x78) + 0x2); - *(s16 *)((char *)arg0 + 0x76) = - *(u16 *)(*(s32 *)((char *)arg0 + 0x78)); - *(s16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x18) = - *(s16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x1A) = - *(s16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x1C) = 0x1000; - *(u16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x2C) &= 0x10; - func_8012E88C((s32)arg0); - ((void (*)(s32 *, s32))func_8012A828)(arg0, &D_801C348C); - } - } -} - - -extern void func_8002A04C(s32 a0); -extern void func_8012C218(void *a0); - - -extern void func_8012E8A8(u8 *a0); - -void func_80181810(void *arg0) { - func_8002A04C((s32)arg0); - - if ((*(s16 *)((char *)arg0 + 0x70) & 0x8000) != 0) { - s32 v1 = *(s32 *)((char *)arg0 + 0x20); - *(s16 *)((char *)arg0 + 0x2) = 0x7; - *(s8 *)((char *)arg0 + 0xC1) = 0; - *(s32 *)((char *)arg0 + 0x1C) = 0x40; - *(s16 *)((char *)arg0 + 0x5E) = 0; - *(s16 *)((char *)arg0 + 0x5C) = 0; - *(s16 *)((char *)v1 + 0x12) = 0; - *(s16 *)((char *)v1 + 0x10) = 0; - func_8012E8A8((u8 *)arg0); - *(s16 *)((char *)arg0 + 0x6) = *(u16 *)((char *)arg0 + 0x88); - *(s16 *)((char *)arg0 + 0xA) = *(u16 *)((char *)arg0 + 0x8A); - *(s16 *)((char *)arg0 + 0xE) = *(u16 *)((char *)arg0 + 0x8C); - } else { - func_8012C218(arg0); - } -} - - -extern void func_8012A828(s32 a0, s32 a1); - extern s32 D_801C348C; - void func_8018189C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 1; - *(short *)((char *)arg0 + 0x5c) = *(unsigned short *)(*(int *)((char *)arg0 + 0x78) + 0x2); - func_8012A828((int)arg0, (int)&D_801C348C); - } - - - -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - extern u8 D_801C0FBC[]; - s32 func_801818D4(s32 arg0) { - return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801C0FBC[0], &D_801C0FBC[8], 5) != 0; - } - - - - -/* func_80181900 — MATCH (43 ins). Family of 10 / 430 templatable ins. - * Keys: - * (1) `la $v1,D_80126CBA` + `lh 0($v1)` + `addiu $a0,$v1,-6` is ONE POINTER LOCAL - * (`s16 *q = &D_80126CBA;` then `q - 3`), NOT two externs. A plain `D_80126CBA` - * read folds %lo into the load (`lui %hi / lh %lo(sym)($r)`) and `&D_80126CB4` - * would emit its own second lui — 2 extra ins. The full-address materialisation - * is the tell that the C bound the address to a variable. - * (2) `s32 sp10[4]; s32 sp20;` in THAT declaration order => sp+0x10 / sp+0x20; the - * 3 halfword fields are written `*(s16 *)((s32)sp10 + 0x2/0x6/0xA)` — same form - * as the matched siblings (src/ov_SC03_099/ov_SC03_099_jr_8017BEBC.c:4779). - * (3) The TU declares `extern void func_80181900(s32 *, s32, s32);` at file scope - * 3x (:5197 :5285 :5319), so an `s32 *` return is a HARD cc1 `conflicting types` - * error. The trailing `addu $v0,$s0,$zero` therefore comes from a $2-pinned temp. - * (4) The pin is load-bearing twice: pinning the POST-CALL temp to $v0 is what stops - * sched2 hoisting the return copy into the load-delay slot (unpinned => `lw $v1 / - * move $v0,$s0 / sw $v1,0($v0)`, 42 ins, LENGTH-DRIFT -1). Tried and rejected: - * `s32 sp20[2]`, `a0[0] =`, a named s32 temp, a cast-return — all identical DIFF. - * (5) `rv = (s32)a0;` alone is DELETED by flow ($2 is dead at the end of a void fn). - * The empty volatile asm keeps it live and emits zero bytes (#APP/#NO_APP only). - * Verified: spliced into the real TU, cc1 emits the identical instruction stream and - * exactly the same 10 diagnostics as the unmodified TU (zero new). */ -extern s32 func_8012B77C(s32 out, s32 from, s32 to); - -void func_80181900(s32 *a0, s32 a1, s32 a2) { - - extern s16 D_80126CBA; - s32 sp10[4]; - s32 sp20; - s16 *q; - u16 *p; - s16 t; - register s32 rv __asm__("$2"); - - q = &D_80126CBA; - if (*q == 0) { - p = (u16 *)(q - 3); - *(s32 *)(a1 + 0xE0) = 0; - } else { - p = (u16 *)(a1 + 0x88); - *(s32 *)(a1 + 0xE0) = 1; - } - *(s16 *)((s32)sp10 + 0x2) = p[0] + *(u16 *)a2; - t = p[1] + *(u16 *)(a2 + 2); - *(s16 *)((s32)sp10 + 0x6) = t; - *(s16 *)(a1 + 0x100) = t; - *(s16 *)((s32)sp10 + 0xA) = p[2] + *(u16 *)(a2 + 4); - func_8012B77C((s32)&sp20, a1 + 4, (s32)sp10); - rv = sp20; - *a0 = rv; - rv = (s32)a0; - __asm__ __volatile__("" : : "r" (rv)); -} - - - -extern u8 D_80078EC1; - s32 func_801819AC(void) { - return (D_80078EC1 ^ 0x15) == 0; - } - - - -extern s32 func_8012BD14(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); - -/* The `register ... __asm__("$4")` pin on the FIRST call argument is load-bearing. - * The target sets $a0 = 0x6FE in the ENTRY block (dbr steals it into the `bnez` - * delay slot -- sched.md D1 backward fill), but a plain `s32 id = 0x6FE;` local is - * rematerialised at the use site (single-set constant pseudo -> REG_EQUIV), so the - * `li` sinks past the label into the join block and dbr fills the slot with the - * if-body's `lui` instead (SHIFT-DRIFT/+1). Pinning the local to $a0 makes the `li` - * a hard-reg set that stays where it is written, and the call's arg move degenerates - * to a deleted `(set (reg 4) (reg 4))`. */ -void func_801819C4(void *a0) { - register s32 id __asm__("$4"); - s32 vol; - s32 t; - - vol = 0x7F; - t = func_8012BD14((s32)a0); - id = 0x6FE; - if (t > 0x1000) { - vol -= (t - 0x1000) / 0x2700; - } - func_8002D4C8(id, (vol | 0x1000) & 0xFFFF); -} - - -#include "common.h" - -/* func_80181A30 (ov_SC03_117, ov_SC03_117_jr_8017BEBC) — MATCH (148 ins) - * - * Tapered-beam / laser quad renderer. Builds a 4-vertex SVECTOR quad in local - * space (x = 0 .. arg0->len, y = -/+ half-width, the near half-width at 0x18 and - * the far one at 0x1A), rotates it with the caller's angle triple (0x08) through - * func_80049CAC + func_80017E8C, allocates ONE 0x24-byte POLY_G4 out of - * func_80010A08, projects the quad straight into the packet's four xy slots with - * RotTransPers4, and links the packet into the current double-buffer OT with the - * inline PSY-Q addPrim pair. If arg0->flags (0x1C) has bit 30, it also emits a - * 1-word 0xE1000200 DR_TPAGE prim carrying the semi-transparency mode - * ((flags >> 23) & 0x60) and chains that in front of the poly. - * - * FRAME 0x88 = 0x28 outgoing args (RotTransPers4 takes 10) + v[4] (0x20) + - * mtx (0x20) + opz/flag (8) + 6 saved regs (0x18). Locals are declared in - * increasing-address order, so v/mtx/opz/flag land at 0x28/0x48/0x68/0x6C. - * - * LEVERS (each byte-checked against asm/.../func_80181A30.s) - * - * - `ot` is computed BEFORE the `len == 0` early return: sched1 never moves an - * insn across a bb boundary, and the target has the whole - * lui/lhu/lui/addiu/sll run plus `addu $s4,$v0,$v1` (the beqz delay slot) - * ahead of the branch. Computing it after the guard costs 5 insns of drift. - * - * - `(otz << 2) + (u32)ot`, NOT `ot + otz`: gcc keeps the written operand order - * for the `addu`, and the target is `addu $s0, $v0, $s4` (offset first). - * Same reason `&D_800A6610[idx << 14]` gives `addu $s4, $v0, $v1`. - * - * - `mp` (a pointer local bound to &mtx) is what puts the matrix address in a - * callee-saved register ($s0) and turns both call-site setups into `addu - * $aN,$s0,$zero` moves. Passing &mtx directly re-materialises - * `addiu $aN,$sp,0x48` at each site. The mtx.t[] stores stay sp-relative - * because they are written through the array, not through mp. - * - * - Every `*(u16 *)(arg0 + N)` / `*(u32 *)(arg0 + N)` is spelled out at each - * use instead of being cached in a local: the quad stores take the address of - * v[], and poly is a heap pointer, so gcc cannot disambiguate them from the - * arg0 loads and re-loads each one — which is exactly the target's two - * `lhu 0x18($s2)`, two `lhu 0x1A($s2)`, two `lw 0x10($s2)`, two - * `lw 0x14($s2)`. `len` IS a local (one `lhu 0x6($s2)`, three uses). - * - * - `u16` reads + `>> 1`: `lhu` then `srl` (combine rewrites the ashiftrt to - * lshiftrt because the zero_extend proves the sign bit clear), then `negu`. - * - * - `otz` is u32 so the 0x1000 bound test emits `sltiu`, and the `+ 1` is a - * separate statement AFTER the flag test so dbr can steal it for the `bnez` - * delay slot (the target keeps `addu $a0,$v0,$zero` and `addiu $a0,$a0,1` as - * two insns; `ret + 1` in one expression folds them into one `addiu`). - * - * - THE TAIL CLUSTER (the last 9 mismatches). Two facts decide it: - * (a) `q[3] = 1` (byte 3) OVERLAPS the word at q[0], so sched sees a real - * memory dependence and the `lw 0($v0)` MUST be written after the sb — - * reading `*(u32 *)q` before it inverts the dep into an anti-edge and - * drags the load above `sb`/`lw 0x1C($s2)` (2 mismatches, var_e). - * (b) With the load after the sb, its dest is a single-set pseudo, so - * `adjust_priority`'s BIRTHING BOOST (sched.md §1.7) raises it to - * 0x7f000001, it wins every tie the moment it is ready, and it sinks - * past `or`/`sw 4($v0)` (9 mismatches). The target has it competing - * normally at priority 2 and winning the T-16 tie against the `ori` - * only on `potential_hazard` (memory beats ALU). - * `register u32 qt __asm__("$4")` fixes BOTH the boost and the allocation in - * one zero-byte edit: it is the whole residual. (A dead - * `__asm__ volatile("":"=r"(qt))` boost-kill also reorders correctly but - * leaves the $a0/$a1 pair swapped — 5 mismatches; sharing ONE temp across - * both addPrim halves kills the boost too but makes it a global allocno that - * loses $v1 in the FIRST addPrim — 7 mismatches. The pin alone is minimal.) - * - * DECLARATIONS / integration surface: `func_80049CAC` and `D_800B9A02` are - * spelled VERBATIM as the destination TU already has them at file scope - * (ov_SC03_117_jr_8017BEBC.c L2643 and L2464/L2466), so they merge silently. - * `D_800A6610`, `func_80010A08`, `func_80017E8C` and `RotTransPers4` have NO - * file-scope declaration anywhere in that TU, so they are block-scoped here to - * keep the blast radius on the rest of the TU at zero. The two local typedefs - * do not collide with any name in the TU. - */ - -typedef struct { s16 vx, vy, vz, pad; } SV_1A30; -typedef struct { s16 m[3][3]; s32 t[3]; } MTX_1A30; /* 0x20 bytes */ - -void func_80181A30(s16 *arg0) -{ - extern u8 D_800A6610[]; - extern short D_800B9A02; - extern void func_80049CAC(s32 a0, s32 a1); - extern void *func_80010A08(s32); - extern void func_80017E8C(void *); - extern s32 RotTransPers4(void *, void *, void *, void *, - s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); - - SV_1A30 v[4]; /* sp+0x28 */ - MTX_1A30 mtx; /* sp+0x48 */ - s32 opz; /* sp+0x68 */ - s32 flag; /* sp+0x6C */ - - u32 *ot; - u32 *otp; - u8 *poly; - u8 *q; - void *mp; - u16 len; - u32 otz; - register u32 qt __asm__("$4"); /* §17 pin — kills the birthing boost AND - keeps the $a0/$a1 pair in target order */ - - ot = (u32 *)&D_800A6610[(*(u16 *)&D_800B9A02) << 14]; - len = *(u16 *)(arg0 + 3); - if (len == 0) { - return; - } - - v[0].vx = 0; - v[0].vy = -(*(u16 *)(arg0 + 0xC) >> 1); - v[0].vz = 0; - v[1].vx = 0; - v[1].vy = *(u16 *)(arg0 + 0xC) >> 1; - v[1].vz = 0; - v[2].vx = len; - v[2].vy = -(*(u16 *)(arg0 + 0xD) >> 1); - v[2].vz = 0; - v[3].vx = len; - v[3].vy = *(u16 *)(arg0 + 0xD) >> 1; - v[3].vz = 0; - - mp = &mtx; - func_80049CAC((s32)(arg0 + 4), (s32)mp); - - mtx.t[0] = arg0[0]; - mtx.t[1] = arg0[1]; - mtx.t[2] = arg0[2]; - - poly = (u8 *)func_80010A08(0x24); - *(u32 *)(poly + 0x04) = *(u32 *)(arg0 + 8); - *(u32 *)(poly + 0x0C) = *(u32 *)(arg0 + 8); - *(u32 *)(poly + 0x14) = *(u32 *)(arg0 + 0xA); - *(u32 *)(poly + 0x1C) = *(u32 *)(arg0 + 0xA); - poly[3] = 8; /* setlen(poly, 8) */ - poly[7] = 0x38; /* setcode POLY_G4 */ - - func_80017E8C(mp); - - otz = RotTransPers4(&v[0], &v[1], &v[2], &v[3], - (s32 *)(poly + 0x08), (s32 *)(poly + 0x10), - (s32 *)(poly + 0x18), (s32 *)(poly + 0x20), - &opz, &flag); - - if ((flag & 0xFFFFEFFF) != 0) { - return; - } - otz = otz + 1; - if (otz >= 0x1000) { - return; - } - - otp = (u32 *)((otz << 2) + (u32)ot); - - /* addPrim(otp, poly) */ - *(u32 *)poly = (*(u32 *)poly & 0xFF000000) | (*otp & 0xFFFFFF); - *otp = (*otp & 0xFF000000) | ((u32)poly & 0xFFFFFF); - - if (*(u32 *)(arg0 + 0xE) & 0x40000000) { - poly[7] |= 2; /* semi-transparent */ - q = (u8 *)func_80010A08(8); - q[3] = 1; /* setlen(q, 1) */ - qt = *(u32 *)q; - *(u32 *)(q + 4) = ((*(u32 *)(arg0 + 0xE) >> 23) & 0x60) | 0xE1000200; - /* addPrim(otp, q) */ - *(u32 *)q = (qt & 0xFF000000) | (*otp & 0xFFFFFF); - *otp = (*otp & 0xFF000000) | ((u32)q & 0xFFFFFF); - } -} - diff --git a/src/ov_SC03_117/ov_SC03_117_jr_8017E6EC.c b/src/ov_SC03_117/ov_SC03_117_jr_8017E6EC.c new file mode 100644 index 0000000000..8125f0d0e2 --- /dev/null +++ b/src/ov_SC03_117/ov_SC03_117_jr_8017E6EC.c @@ -0,0 +1,4717 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +typedef void (*Handler)(struct Entry_8016E95C *); +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +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(); +extern void func_8014607C(void); +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 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 a0, s32 a1, s32 a2); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 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 arg0, s32 arg1, s16 *arg2, s16 *arg3); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 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 short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern s32 func_8014CF04(s32 a0, s32 a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern s32 func_8014D2A0(s32 a0, void *a1, void *a2); +extern s32 func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern s32 func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern s32 func_8014D820(s32 a0, u16 *a1, u16 *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_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(); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_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 s32 func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_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 s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(s16 *a0, s16 *a1); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_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 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 s32 func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_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); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_80186EEC; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_801870B0[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(s32 arg0); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_801870D8[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_801870E4[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern void func_8015CC40(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_80186F58[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_80187188; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018626C[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018719C[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_801871D8[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_80187220; +extern u16 D_80187222; +extern u16 D_80187224; +extern s32 D_80187228; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_80187230; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_80186F3C; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_801872B4[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_80187364[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern s32 func_80161A60(s32 a0); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern s32 func_80161488(void *a0); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_80187394[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_801873F8; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801CD188[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018741C[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801CD1E0[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_80187464[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_80187454; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, u16 * a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801CC988[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018746C[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_801874C0[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern s32 D_80187488; +extern s16 D_801874BC; +extern s16 D_801874BA; +extern s16 D_801874B8; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_801874CC[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801CD240; +extern u8 D_801CD241; +extern u8 D_801CD242; +extern u8 D_801CD243; +extern u8 D_801CD244; +extern u8 D_801CD245; +extern u8 D_801CD246; +extern u8 D_801CD247; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_801874DC[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801CD280; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_80187520[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018759C[]; +extern s32 D_801875BC[]; +extern u8 D_80187638[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_80187658[]; +extern u8 D_80187678[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_80187714[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_80187790[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801CC998; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018779C[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_801877A4[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018786C[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018787C[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018788C[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_80187898[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_801877F8[]; +extern u8 D_8018780C[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_801878B0[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_801878B8[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_801878C0[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_801878C8[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_801878D0[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_801878D8[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_801878E0[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_80187994[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018799C[])(void); +extern void func_80169F00(void *a0); +extern char D_8018794C[]; +extern char D_8018790C[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_801879D4[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_801879E0[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern u16 D_80126B5E; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_80187A28[])(void); +extern void func_8016AB30(void *a0); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_80187AA4[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801CD5A0; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_80187A98[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_80187ADC[]; +extern unsigned short D_80187AE4[]; +extern unsigned short D_80187AEC[]; +extern unsigned char D_801CD5A8[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801CD5A0; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_80187AF4[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801CD6DC; +extern M2C_UNK D_801CD6E0; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801CD668; +extern void (*D_80187B24[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801CD6E4[]; +extern u8 D_801CD6EC[]; +extern u8 D_801CD69C[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_80187B2C[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_80187B48[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_80187B50[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_80187BB8[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80187B5C; +extern u8 D_80187B68; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_80187BEC[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_80187BF4[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_80187C48[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_80187C7C[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_80187C6C[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_80187C98; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32 _arg0); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_80187D10[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_80187D18[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_80187D20[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_80187D28[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_80187D30[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_80187D38[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_80187D44[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_80187D50[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_80187D5C[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_80187D6C[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_80187D7C[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_80187D84[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_80187D8C[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_80187D94[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_80187D9C[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_80187DA4[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_80187DAC[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_80187DB4[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_80187DBC[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_80187DC4[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_80187DCC[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_80187DD4[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_80187DDC[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_80187DE4[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_80187DEC[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_80187DF4[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_80187DFC[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_80187E04[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_80187E0C[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_80187E14[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_80187E1C[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_80187E24[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_80187E2C[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_80187E70[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_80187E34; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_80187EA0[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_80187EDC[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_80187F34[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_80187F44[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_80187F4C[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175494(void); +extern void (*D_801880B4[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_801880C0[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801CCBE0; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern s32 func_801789AC(s32 arg0); +extern s16 D_801CE8D0; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801CDE20; +extern short D_801CE944; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +extern s32 func_80178D40(s32 arg0, s32 arg1); +extern void func_80179B28(s32 a0); +extern void func_80179B74(u16 *p); +extern void func_80179D30(u16 *a0); +extern void func_80179D78(u16 *a0); +extern void func_80179DCC(short a0); +extern void func_80179DF8(void); +extern void func_80179E1C(short a0); +extern void func_80179E48(s16 a0); +extern void func_80179E74(s16 a0); +extern void func_80179EA0(u16 *a0); +extern void func_80179EE8(short a0); +extern void func_80179F14(s16 a0, s16 a1); +extern void func_80179F44(void); +extern void func_80179F6C(short a0); +extern void func_80179F98(u16 *a0); +extern void func_80179FEC(u16 *a0); +extern void func_8017A040(u16 *a0); +extern s32 D_801CE24C; +extern void func_8017A094(s32 arg0); +extern void func_8017A0C4(s32 arg0); +extern void func_8017A0F4(void); +extern void func_8017A11C(void); +extern s32 D_801CE274; +extern void func_8017A144(s32 a0); +extern void func_8017A180(void); +extern void func_8017A1A8(void); +extern void func_8017A1D0(void); +extern void func_8017A1F8(void); +extern void func_8017A220(void); +extern void func_8017A248(void); +extern void func_8017A270(void); +extern void func_8017A298(void); +extern void func_8017A2C0(void); +extern void func_8017A2E8(void); +extern void func_8017A310(void); +extern void func_8017A338(void); +extern void func_8017A360(void); +extern void func_8017A388(void); +extern s16 D_801CE230; +extern s32 func_8017A3B0(void); +extern void func_80172310(u8*); +extern void func_80172780(void*); +extern void func_80172894(void*); +extern void func_801729B0(s32); +extern void func_80172B14(s16); +extern void func_80172C50(u16 *); +extern void func_80172D68(s32); +extern void func_801733FC(s16, u16 *); +extern void func_80173460(s32, s32); +extern void func_801734BC(s32, s32); +extern void func_801736B0(s32, s32); +extern void func_801737B8(s16); +extern void func_801738DC(s16); +extern void func_80173A28(s32, s32, s32, s32, s32, s32); +extern void func_80174438(s32); +extern void func_8017A4AC(void); +extern s32 func_8017AD0C(s32 arg0); +extern s32 func_8017AD0C(s32); +extern s32 func_8017ADE8(s32 a0); +extern s32 func_8017AE08(void); +extern void func_8017B0E4(int param_1, int param_2); +extern s16 D_801CE234; +extern u16 D_801CE2B4; +extern u16 D_801CE2B6; +extern u16 D_801CE2B8; +extern void func_8017B1D8(void); +extern s32 func_8017B238(s32 param_1, s32 param_2); +extern s32 func_8017B368(s32 param); +extern s32 func_8017B614(s32 param_1, s32 param_2); +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern u8 D_8012694C; +extern s16 D_801CE2AC; +extern s16 D_801CE2AE; +extern s16 D_801CE2B0; +extern s16 D_801CE2A4; +extern s16 D_801CE2A6; +extern s16 D_801CE2A8; +extern void func_8017B7A8(void); +extern s16 D_801CE2C4; +extern s16 D_801CE2C6; +extern s16 D_801CE2C8; +extern s16 D_801CE2CC; +extern s16 D_801CE2CE; +extern s16 D_801CE2D0; +extern void func_8017B824(void); +extern void func_8017B880(void); +extern s32 func_8017B8E8(s32 src); +extern short D_801CE2BC; +extern short D_801CE2BE; +extern short D_801CE2C0; +extern void func_8017B940(void); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); +extern SV4 D_801CE254; +extern SV4 D_801CE25C; +extern void func_8017BA3C(s32 param_1, s32 param_2); +extern s32 func_8017BB34(s32 param_1, s32 param_2); +extern void (*D_801CE27C[10])(int); +extern void func_8017BC38(int param_1); +extern void func_8017B0E4(int, int); +extern void func_8017BCA0(int param_1); +extern void func_8012A4BC(void); +extern void func_8017BCF4(int param_1); +extern void (*D_801CE278)(void); +extern void func_8017BD50(int param_1); +extern void (*D_8018829C[])(void); +extern void func_8017BE60(void *a0); +extern void func_8017BE9C(void); +extern void func_8017BEA4(void); +extern void func_8017BEAC(void); +extern void func_8017BEB4(void); +extern void func_8017BEBC(s32 arg0); +extern void (*D_80188358[])(void); +extern void func_8017CD9C(void *a0); +extern void func_8017CDD8(s32 a0); +extern void func_8017CE18(s32 param); +extern void func_8017CE94(s32 a0); +extern void func_8017CEF4(void); +extern void func_8017CEFC(void); +extern s32 func_8017CF24(void); +extern s16 func_8017CF40(void); +extern void func_8017CF50(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8017CFB0(s32 a0); +extern void func_8013C9C4(void * arg0); +extern void func_8017D07C(s32 a0); +extern void func_8017D248(s32 a0); +extern void func_8017D2A4(void); +extern void func_8017D300(int param_1); +extern void func_8017D364(int param_1); +extern void func_8017D414(s32 p); +extern void func_8017D4D8(s32 a0); +extern void func_8017D598(s32 param_1); +extern void func_8017D5DC(s32 a0, s16 *a1, s16 a2); +extern void func_8017D6A8(s32 a0); +extern void (*D_801883FC[])(void); +extern void func_8017D804(void *a0); +extern void func_8017D840(void *a0); +extern void (*D_8018841C[])(void); +extern void func_8017D8A0(void *a0); +extern s32 func_800D222C(s32 a0, void *a1, s32 a2); +extern s32 func_8001CF30(void *a0); +extern void func_8017D8DC(s32 param_1); +extern void func_8017DAA0(u8 *p); +extern void (*D_80188424[])(void); +extern void func_8017DB34(void *a0); +extern u8 D_80188410; +extern void func_8017DB70(s32 a0); +extern void func_8017DC14(int a0); +extern void (*D_8018847C[])(void); +extern void func_8017DC78(void *a0); +extern void func_8017DFC0(void); +extern s32 func_8017DCB4(s32 a0); +extern s32 func_8017DCF8(void); +extern void (*D_80188484[])(void); +extern void func_8017DD1C(void *a0); +extern void func_8017E0A0(void); +extern s32 func_8017DD58(s32 a0); +extern void func_8017E0C8(void); +extern s32 func_8017DD9C(s32 a0); +extern void func_8001BFD0(void); +extern void func_800D1E28(void); +extern s32 func_8017DDDC(u8 *a0); +extern void func_800D1EBC(void); +extern void func_8017DE58(void); +extern void (*D_80188498[])(void); +extern void func_8017DE78(void *a0); +extern s32 func_8017DEB4(u8 *a0); +extern void (*D_801884A4[])(void); +extern void func_8017DF44(void *a0); +extern void func_8017E0F0(void); +extern s32 func_8017DF80(s32 a0); +extern void (*D_801884C4[])(void); +extern void func_8017DFE8(void *a0); +extern void func_80171A80(s32*, s32); +extern s32 func_80171990(u8*); +extern void func_8017E024(s32 *a0); +extern void func_8017E058(void *a0); +extern void (*D_801884EC[])(void); +extern void func_8017E1DC(void *a0); +extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); +extern void func_8017E300(s32 param_1, s16 *param_2); +extern void func_8017EBCC(void); +extern void func_8012AD44(s32 *param_1, s16 param_2); +extern void (*D_8018868C)(void *); +extern void func_8017E6A0(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +/* func_8017E6EC — ov_SC03_117 six-way state-machine dispatcher */ +extern void func_8013C9C4(void *a0); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012A828(s32 a0, s32 a1); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8017EB34(s32); +extern void func_8017ECC4(s32 arg0, u16 arg1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_80029124(s32, s32); +extern void func_8002959C(void); +extern void func_80180C78(void); +extern s32 func_80178970(void); +extern void func_80178D18(void); +extern void func_8017E99C(s32 a0); +extern s16 D_8018503C; +extern u8 D_80185018; +extern u8 D_801884F4[]; + +void func_8017E6EC(void *arg0) { + register s32 t __asm__("$2"); + s32 c; + s32 s0; + + switch (*(u16 *)((s32)arg0 + 0x34)) { + case 0: + if ((*(u32 *)((s32)arg0 + 0x1C) & 7) == 0) { + func_8013C9C4(&D_8018503C); + } + if (func_8012BEE8((s32)arg0) != 0) { + *(u32 *)(*(s32 *)((s32)arg0 + 0x20) + 0x24) = 0; + s0 = 0; + do { + func_8012C658(0x1E0, s0, (s32)arg0); + s0 = s0 + 1; + } while (s0 < 0xB); + func_8012A828((s32)arg0, (s32)&D_801884F4); + func_8002D4C8(0x866, 0); + *(u16 *)((s32)arg0 + 0x34) = *(u16 *)((s32)arg0 + 0x34) + 1; + } + ((void (*)(void *))func_8017EB34)(arg0); + break; + case 1: + if ((*(u16 *)((s32)arg0 + 0x72) & 0x4000) != 0) { + func_8002D4C8(0x866, 0); + } + c = *(s32 *)((s32)arg0 + 0x94); + if (c == 0x10) { + t = *(u16 *)((s32)arg0 + 0x106) + 1; + *(u16 *)((s32)arg0 + 0x106) = t; + if ((t << 16) >> 16 == 2) { + *(u16 *)((s32)arg0 + 0x98) = 0; + t = *(u16 *)((s32)arg0 + 0x34) + 1; + *(u16 *)((s32)arg0 + 0x34) = t; + func_8002D4C8(0x865, 0); + } + } + if ((*(u32 *)((s32)arg0 + 0x1C) & 7) == 0) { + func_8013C9C4(&D_8018503C); + } + t = *(u32 *)((s32)arg0 + 0x1C) + 1; + *(u32 *)((s32)arg0 + 0x1C) = t; + ((void (*)(void *))func_8017EB34)(arg0); + break; + case 2: + func_8017ECC4((s32)arg0, 0); + ((void (*)(void *))func_8017EB34)(arg0); + c = *(s16 *)((s32)arg0 + 0xFE); + if (c != 6) { + break; + } + t = *(u16 *)((s32)arg0 + 0x34); + *(s32 *)((s32)arg0 + 0x1C) = 0x10; + goto lab_e958; + case 3: + func_8017ECC4((s32)arg0, 0); + if (func_8012BEE8((s32)arg0)) { + *(u16 *)((s32)arg0 + 0x5C) = 0; + *(u16 *)((s32)arg0 + 0x108) = 1; + *(u16 *)((s32)arg0 + 0x10A) = 1; + func_8012C588(0x23A, (s32)arg0); + *(u16 *)((s32)arg0 + 0xE2) = 0; + func_8002D4C8(0x868, 0); + goto lab_e954; + } + break; + case 4: + func_8017ECC4((s32)arg0, 1); + if ((*(u32 *)((s32)arg0 + 0x1C) & 0xF) == 0) { + func_8013C9C4(&D_80185018); + } + t = *(u32 *)((s32)arg0 + 0x1C) + 1; + *(u32 *)((s32)arg0 + 0x1C) = t; + if (*(s16 *)((s32)arg0 + 0xE2) == 0) { + break; + } + func_80029124(0xBB, 1); + func_8002959C(); + func_8002D4C8(4, 0x868); + func_80180C78(); +lab_e954: + t = *(u16 *)((s32)arg0 + 0x34); +lab_e958: + t = t + 1; + *(u16 *)((s32)arg0 + 0x34) = t; + break; + case 5: + break; + } + + if (((s32 (*)(void *))func_80178970)(arg0) != 0) { + ((void (*)(void *))func_80178D18)(arg0); + func_8017E99C((s32)arg0); + } +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017E6EC", func_8017E99C); + +extern s32 D_801886FC[]; +extern void func_8017EE78(s32); + +void func_8017E9BC(s32 s0) { + typedef void (*FuncPtr)(void); + FuncPtr fn; + s16 v0; + + fn = (FuncPtr)D_801886FC[*(u16*)(s0 + 2)]; + fn(); + + v0 = *(s16*)(s0 + 0x10A); + if (v0 != 0) { + func_8017EE78(s0); + } +} + + +#include "common.h" + + +extern Block4 D_801CE398; +extern Block4 D_801CCEF8; +extern u8 D_801CCEFC[]; +extern Block4 D_801CE39C; +extern s32 func_8012C194(void); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern s32 func_80029178(s32 arg); + +void func_8017EA1C(s32 a0) { + register u8 *s0 __asm__("$16"); + register s32 *s1 __asm__("$17"); + register s32 *s2 __asm__("$18"); + s32 *v0; + + s2 = (s32 *)a0; + s1 = (s32 *)((s32 (*)(void))func_8012C194)(); + *(s32 *)((s8 *)s2 + 0xD0) = s1; + if (s1 != 0) { + s0 = (u8 *)&D_801CE398; + func_8001CD50(s1, (s32 *)s0); + func_800233CC(s0, 0xE0); + *(Block4 *)s0 = D_801CCEF8; + D_801CE39C = (*(Block4 *)D_801CCEFC); + *(s16 *)((s8 *)s1 + 0x18) = 0x1000; + *(s16 *)((s8 *)s1 + 0x1A) = 0x1000; + *(s16 *)((s8 *)s1 + 0x10) = 0xC00; + *(u16 *)((s8 *)s1 + 0x2C) = 0xC040; + *(s32 *)((s8 *)s1 + 0x4) |= 0x50000000; + *(s16 *)((s8 *)s1 + 0x8) = *(u16 *)((s8 *)s2 + 0x6); + *(s16 *)((s8 *)s1 + 0xA) = *(u16 *)((s8 *)s2 + 0xA) - 0x30; + *(s16 *)((s8 *)s1 + 0xC) = *(u16 *)((s8 *)s2 + 0xE); + *(s16 *)((s8 *)s2 + 0xE0) = 0; + } + if ((func_80029178(0xBB) & 0xFF) != 0) { + *(u8 *)&D_801CE398 = 0xFF; + } +} + + +#include "common.h" + + + +extern Block4 D_801CE398; + +void func_8017EB34(s32 a0) { + register s32 *work __asm__("$6"); + register s32 x __asm__("$3"); + register s16 r __asm__("$3"); + s16 y; + s32 t; + s32 c; + s32 n; + + work = (s32 *)a0; + if (*(volatile s32 *)((char *)work + 0xD0) == 0) { + return; + } + + x = *(volatile s32 *)((char *)work + 0x94); + y = x; + if ((s16)x >= 0x11) { + t = 0x20 - x; + y = t; + if ((s16)t < 0) { + y = 0; + } + } + + c = *(volatile u16 *)((char *)work + 0xE0) + 1; + *(u16 *)((char *)work + 0xE0) = c; + + r = n = c + y * 3 + 0x40; + if ((s16)n >= 0x100) { + r = 0xFF; + } + *(u8 *)&D_801CE398 = r; +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017E6EC", func_8017EBCC); + +typedef void (*Fn8017ECC4)(void); + +extern void func_80181A30(s16 *arg0); + +extern u8 D_80188630[]; +extern Fn8017ECC4 D_801885FC; +extern s32 D_80188600; +extern u8 D_8018862C[]; +extern s16 D_801CE2DE[]; +extern s16 D_801CE2D8[]; +extern s16 D_801885FE[]; + +void func_8017ECC4(s32 arg0, u16 arg1) +{ + typedef struct { u8 b[8]; } Blk8; + u8 *p; + u8 *q; + s32 i; + s32 j; + s32 n; + + n = *(s16 *)(arg0 + 0xFE); + q = (u8 *)&D_801CE2D8; + if (n < 6) { + if (*(s16 *)(arg0 + 0x100) != 0) { + (*(s16 *)(arg0 + 0x100))--; + } else { + *(s16 *)((s32)&D_801CE2DE + (n << 5)) = 0x200; + *(u16 *)(arg0 + 0xFE) = *(u16 *)(arg0 + 0xFE) + 1; + *(s16 *)(arg0 + 0x100) = 2; + } + } + + for (j = 0; j < 6; j++, q += 0x20) { + i = j * 8; + p = q + 8; + if (*(s16 *)(p - 2) != 0) { + if (arg1 == 0) { + if ((u32)*(u16 *)(p + 0x10) < 0x20) { + *(u16 *)(p + 0x10) = *(u16 *)(p + 0x10) + 8; + *(u16 *)(p + 0x12) = *(u16 *)(p + 0x12) + 0x20; + } + } else { + if (*(u16 *)(p + 0x10) != 0) { + *(u16 *)(p + 0x10) = *(u16 *)(p + 0x10) - 8; + *(u16 *)(p + 0x12) = *(u16 *)(p + 0x12) - 0x20; + } + } + } + *(u16 *)q = *(u16 *)((s32)&D_801885FC + i) + *(u16 *)(arg0 + 6); + *(u16 *)(p - 6) = *(u16 *)((s32)&D_801885FE + i) + *(u16 *)(arg0 + 0xA); + *(u16 *)(p - 4) = *(u16 *)((s32)&D_80188600 + i) + *(u16 *)(arg0 + 0xE); + *(Blk8 *)p = *(Blk8 *)((s32)&D_8018862C + i); + func_80181A30((s16 *)q); + } +} + + +extern u8 D_8018870C[]; +extern u16 D_80188744[]; +extern u16 D_80188756; + +void func_8017EE78(s32 s0) { + u16 *ptr; + s16 idx; + u16 cnt; + + idx = *(s16 *)(s0 + 0x102); + MoveImage(&D_8018870C[idx * 8], 0x358, 0x1C0); + ptr = &D_80188756; + idx = *(s16 *)(s0 + 0x102); + *ptr = D_80188744[idx]; + MoveImage(ptr - 1, 0x170, 0x100); + cnt = *(u16 *)(s0 + 0x102) + 1; + *(u16 *)(s0 + 0x102) = cnt; + if ((s16)cnt >= 7) { + *(u16 *)(s0 + 0x102) = 0; + } +} + + +extern s32 func_80029178(s32 arg); + s32 func_8017EF14(void) { + return func_80029178(0xBB) & 0xFF; + } + + +extern void func_800D0CE0(void); + void func_8017EF34(void) { + func_800D0CE0(); + } + + +extern void func_8012B200(void *a0); +extern s32 rand(void); +extern void func_8012AD44(s32 *a0, s16 a1); + +void func_8017EF54(s32 param_1) +{ + func_8012B200((void *)param_1); + *(s32 *)(param_1 + 0x10) = + (*(s16 *)(param_1 + 0x6) - *(s16 *)(*(s32 *)(param_1 + 0x64) + 0x6)) << 13; + *(s32 *)(param_1 + 0x18) = + (*(s16 *)(param_1 + 0xE) - *(s16 *)(*(s32 *)(param_1 + 0x64) + 0xE)) << 13; + *(s32 *)(param_1 + 0x14) = -(((rand() & 7) + 0x18) << 16); + *(u16 *)(param_1 + 0x106) = rand() & 0xF0; + *(u16 *)(param_1 + 0x108) = rand() & 0xF0; + ((void (*)(s32 *, s16))func_8012AD44)((s32 *)param_1, 2); +} + + + +extern void (*D_80188788[])(void); + +void func_8017EFF0(void *a0) { + D_80188788[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8017F02C(s32 arg0) { + extern u8 D_801CE3D8[]; + extern u8 D_801CE3F8[]; + s32 var_s1; + + switch (*(u16 *)(arg0 + 0x34)) { + case 0: + *(u16 *)(arg0 + 0x52) = *(u16 *)(arg0 + 0x52) - 0x80; + if (((s32)*(u16 *)(arg0 + 0x52) << 0x10) < 0) { + *(u16 *)(arg0 + 0x52) = 0; + } + var_s1 = *(s32 *)(arg0 + 0xCC); + *(s16 *)(var_s1 + 0xA) = *(u16 *)(arg0 + 0xA) + *(u16 *)(arg0 + 0x52); + if (*(s16 *)(arg0 + 0x52) == 0) { + *(u16 *)(arg0 + 0x34) = *(u16 *)(arg0 + 0x34) + 1; + } + func_8017F410(arg0); + break; + case 1: + if (func_8017F474(arg0) != 0) { + *(s32 *)(arg0 + 0x1C) = 0x70; + *(u16 *)(arg0 + 0x34) = *(u16 *)(arg0 + 0x34) + 1; + func_8012C588(0x2B0, arg0); + } + break; + case 2: + if (func_8012BEE8(arg0) != 0) { + var_s1 = *(s32 *)(arg0 + 0xCC); + if ((var_s1 != 0) && (*(s16 *)(var_s1 + 0x18) != 0)) { + *(s16 *)(var_s1 + 0x18) -= 0x100; + *(u16 *)(var_s1 + 0x1C) -= 0x100; + } + if (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) != 0) { + *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) -= 0x100; + *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x1C) -= 0x100; + } + if ((*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) < 0x800) && (func_8017F4C4(arg0) != 0)) { + if (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) == 0) { + *(s32 *)(var_s1 + 4) |= 0x80000000; + *(s32 *)(*(s32 *)(arg0 + 0x20) + 4) |= 0x80000000; + *(u16 *)(*(s32 *)(arg0 + 0x64) + 0xE2) = 1; + func_80016714(var_s1, 0x84); + func_8012C218(arg0); + return; + } + } + } + break; + } + func_8017F2D8(&D_801CE3D8, 0x160, 0x153); + func_8017F2D8(&D_801CE3F8, 0x160, 0x155); +} + + + +extern void (*D_80188794[])(void); + +void func_8017F25C(void *a0) { + D_80188794[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +void func_8017F298(void *a0, u16 a1, u16 a2) { + u16 buf[4]; + + buf[2] = 0x10; + buf[0] = a1; + buf[1] = a2; + buf[3] = 1; + StoreImage((s32)&buf, (void *)a0); +} + + +extern void func_800599B8(u16 *, s32 *); + +void func_8017F2D8(s32 *a0, u16 a1, u16 a2) { + s32 t; + s32 i; + u16 buf[4]; + + t = a0[7]; + + i = 7; + do { + a0[i] = a0[i - 1]; + i--; + } while (i > 0); + + a0[i] = t; + + buf[2] = 0x10; + buf[0] = a1; + buf[1] = a2; + buf[3] = 1; + + func_800599B8(buf, a0); +} + + +typedef struct { u8 b[4]; } Blk4; + +extern s32 func_8012C194(void); +extern void func_800233CC(void *, unsigned short); +extern void func_8001CD9C(int, void *); +extern void func_8017F410(s32); + +extern u8 D_801CE418[]; +extern u8 D_801CCF04[]; +extern u8 D_801CCEFC[]; +extern u8 D_801CE41C[]; + +void func_8017F344(s32 s2) { + s32 s1; + u8 *s0; + + s1 = func_8012C194(); + *(s32 *)(s2 + 0xD0) = s1; + if (s1 != 0) { + s0 = D_801CE418; + func_8001CD9C(s1, s0); + func_800233CC(D_801CE418, 0xE0); + *(Blk4 *)D_801CE418 = *(Blk4 *)D_801CCF04; + *(Blk4 *)D_801CE41C = *(Blk4 *)D_801CCEFC; + *(u16 *)(s1 + 0x18) = 0x1000; + *(u16 *)(s1 + 0x2C) = 0x40; + *(s32 *)(s1 + 4) |= 0x50000000; + func_8017F410(s2); + } +} + + +void func_8017F410(s32 a0) { + s32 a1; + u16 h; + u16 w; + + a1 = *(s32 *)(a0 + 0xD0); + if (a1 != 0) { + *(u16 *)(a1 + 0x8) = *(u16 *)(a0 + 0x6); + h = *(u16 *)(a0 + 0x52); + w = *(u16 *)(a0 + 0xA); + *(u16 *)(a1 + 0xA) = w + (((s16)h >> 1) - 0x1C0); + *(u16 *)(a1 + 0xC) = *(u16 *)(a0 + 0xE); + *(u16 *)(a1 + 0x1A) = (0x380 - (s16) *(u16 *)(a0 + 0x52)) * 8 + 0x1000; + } +} + + +s32 func_8017F474(void *a0) { + s32 *w = *(s32 **)((s32)a0 + 0xD0); + + if (w == 0) { + return 1; + } + if (*(s16 *)((s32)w + 0x18) < 0x4000) { + *(s16 *)((s32)w + 0x18) += 0x400; + *(u16 *)((s32)w + 0x1A) += 0x180; + return 0; + } + return 1; +} + + +extern void func_80016714(void *a0, s32 a1); +extern u8 D_801CE418[]; + +s32 func_8017F4C4(void *param) { + void *h; + register u8 *p __asm__("$5"); + register s32 c __asm__("$3"); + s32 t; + s16 x; + + h = *(void **)((s32)param + 0xD0); + if (h == 0) { + return 1; + } + p = D_801CE418; + c = *p; + if (c != 0) { + t = c - 0x10; + c = t; + if (t < 0) { + c = 0; + } + *p = (u8)c; + } + x = *(s16 *)((s32)h + 0x18); + if (x > 0) { + *(s16 *)((s32)h + 0x18) = x - 0x400; + *(u16 *)((s32)h + 0x1A) -= 0x200; + if (*(s16 *)((s32)h + 0x18) <= 0) { + *(s16 *)((s32)h + 0x18) = 0; + } else { + return 0; + } + } + func_80016714(h, 0x38); + *(s32 *)((s32)param + 0xD0) = 0; + return 1; +} + + + +extern void (*D_8018879C[])(void); + +void func_8017F568(void *a0) { + D_8018879C[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017E6EC", func_8017F5A4); + + +extern void (*D_801887D4[])(void); + +void func_8017F750(void *a0) { + D_801887D4[*(u16 *)((s32)a0 + 0x2)](); +} + + +typedef struct { + u16 x, y, z, w; +} Vec4h_F78C; + +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern u16 D_801887A8; +extern u16 D_801887AA; +extern u16 D_801887AC; +extern u16 D_801887AE; +extern u16 D_801887B0; +extern u16 D_801887B2; + +s32 func_8017F78C(s32 a0) { + Vec4h_F78C p1; + Vec4h_F78C p2; + s32 result; + + p1.z = D_801887B0; + p2.z = D_801887B2; + p1.y = p2.y = D_801887AC; + p1.x = p2.x = (s16)D_801887A8 >> 1; + if (func_8012DEB8(a0, (s32)&p1, (s32)&p2)) { + result = 1; + goto save; + } + + p1.x = p2.x = (s16)D_801887AA >> 1; + if (func_8012DEB8(a0, (s32)&p1, (s32)&p2)) { + result = 1; + goto save; + } + + p1.y = p2.y = D_801887AE; + if (func_8012DEB8(a0, (s32)&p1, (s32)&p2)) { + result = 1; + goto save; + } + + p1.x = p2.x = (s16)D_801887A8 >> 1; + result = func_8012DEB8(a0, (s32)&p1, (s32)&p2) != 0; + +save: + return result; +} + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern s32 func_80029178(s32 arg); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8017E99C(s32 a0); +extern void func_8017EA1C(); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_8012AD50(s32); +extern u8 D_801B8F08[]; +extern u8 D_801BAA88[]; + +void func_8017F894(void *a0) { + s32 v0; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)a0 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(a0); + return; + } + if ((func_80029178(0xBB) & 0xFF) != 0) { + func_8001C214(*(s32 *)((s32)a0 + 0x20), (s32)D_801B8F08); + func_8017E99C((s32)a0); + func_8017EA1C((s32)a0); + *(s16 *)((s32)a0 + 0x10A) = 1; + func_8012C588(0x2B0, (s32)a0); + return; + } + func_8001C810(*(s32 *)((s32)a0 + 0x20), (s32)D_801BAA88); + *(u32 *)(*(s32 *)((s32)a0 + 0x20) + 4) |= 0x8000; + *(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x28) = 0x1000100; + v0 = func_8012C588(0x1D7, (s32)a0); + if (v0 != 0) { + *(s32 *)((s32)a0 + 0xCC) = v0; + } + func_8012AD50((s32)a0); +} + + +void func_8017F97C(void) { +} + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017E6EC", func_8017F984); + +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern void func_8017EF54(s32); + +void func_8017FA00(s32 param_1) { + s32 s0 = param_1; + if (*(s16 *)(s0 + 0x70) != 0) { + *(s16 *)(s0 + 0xE) = 0; + *(s16 *)(s0 + 0xA) = 0; + *(s16 *)(s0 + 6) = 0; + func_80132784(s0, *(s32 *)(s0 + 0x64), *(u16 *)(s0 + 0x70)); + *(s16 *)(s0 + 6) = *(s32 *)(*(s32 *)(s0 + 0x20) + 0x48); + *(s16 *)(s0 + 10) = *(s32 *)(*(s32 *)(s0 + 0x20) + 0x4C); + *(s16 *)(s0 + 14) = *(s32 *)(*(s32 *)(s0 + 0x20) + 0x50); + if (*(s16 *)(*(s32 *)(s0 + 0x64) + 0x108) != 0) { + ((void (*)(void *))func_8017EF54)(s0); + } + } +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017E6EC", func_8017FA90); + +void func_8017FB04(s32 s1) +{ + extern void func_8012C1B8(void); + extern void func_8012CAE4(void *a0); + extern void func_8001C214(s32 a0, s32 a1); + extern void func_8017F344(s32 a0); + extern void func_8017F298(void *a0, u16 a1, u16 a2); + extern void func_8012AD50(s32 a0); + extern u8 D_801BEB68[]; + extern u8 D_801BD738[]; + extern u8 D_801CE3D8[]; + extern u8 D_801CE3F8[]; + + s32 s0; + u32 s2; + + s0 = ((s32 (*)(void))func_8012C1B8)(); + if (s0 == 0) { + goto L_8017FB7C; + } + func_8001C214(s0, (s32)D_801BEB68); + *(u16 *)(s0 + 0x2C) |= 0x10; + *(u16 *)(s1 + 0xA) -= 0x10; + *(u32 *)(s0 + 0x28) = 0x1800180; + *(s32 *)(s1 + 0x20) = s0; + *(u16 *)(s1 + 0x52) = 0x380; + s0 = ((s32 (*)(void))func_8012C1B8)(); + if (s0 != 0) { + goto L_8017FB8C; + } + +L_8017FB7C: + func_8012CAE4((void *)s1); + return; + +L_8017FB8C: + func_8001C214(s0, (s32)D_801BD738); + *(u32 *)(s0 + 0x28) = 0x1800180; + *(u16 *)(s0 + 0x2C) |= 0x10; + *(u16 *)(s0 + 0x8) = *(u16 *)(s1 + 0x6); + *(u16 *)(s0 + 0xA) = *(u16 *)(s1 + 0xA) + *(u16 *)(s1 + 0x52); + *(u16 *)(s0 + 0xC) = *(u16 *)(s1 + 0xE); + *(u16 *)(s0 + 0x12) = 0x100; + *(s32 *)(s1 + 0xCC) = s0; + func_8017F344(s1); + func_8017F298(D_801CE3D8, 0x160, 0x153); + func_8017F298(D_801CE3F8, 0x160, 0x154); + +L_8017FC14: + func_8012AD50(s1); +} + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_8012AD50(s32); +extern u8 D_801C0F18[]; + +void func_8017FC30(void *param_1) +{ + s32 v0; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)param_1 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(param_1); + return; + } + func_8001C810(v0, (s32)D_801C0F18); + *(u32 *)(*(s32 *)((s32)param_1 + 0x20) + 4) |= 0x50000000; + *(s32 *)(*(s32 *)((s32)param_1 + 0x20) + 0x28) = 0x2000300; + *(u16 *)(*(s32 *)((s32)param_1 + 0x20) + 0x2C) |= 0x10; + *(s16 *)((s32)param_1 + 0xA) = -0x680; + *(s16 *)((s32)param_1 + 0x6) = 0; + *(s16 *)((s32)param_1 + 0xE) = 0x15C0; + func_8012AD50((s32)param_1); +} + + +void func_8017FCD4(s32 param_1) { + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) += 2; +} + + +extern s32 func_80029504(void); +extern void func_8012C1B8(void); +extern void func_8001C2C4(s32 a0); +extern void func_8012B2CC(s32 a0); +extern void func_8012B14C(s32 a0, void *a1); +extern void func_8012AD50(s32 a0); +extern void func_8012CAE4(void *a0); +extern void (*D_801887A4)(void); + +void func_8017FCF0(void *a0) { + register s32 v0 __asm__("$2"); + register s32 s0 __asm__("$16"); + register s32 p __asm__("$4"); + s32 buf[3]; + + s0 = (s32)a0; + if ((u32)(v0 = func_80029504()) >= 1000 || + (u32)(v0 = func_80029504()) < 900 || + (v0 = ((s32 (*)(void))func_8012C1B8)(), *(s32 *)(s0 + 0x20) = v0, v0 == 0)) { + func_8012CAE4((void *)s0); + return; + } + func_8001C2C4(v0); + *(s16 *)(*(s32 *)(s0 + 0x20) + 0x10) = 0x400; + func_8012B2CC(s0); + buf[1] = 0; + buf[0] = 0; + buf[2] = 0xC0000; + func_8012B14C(s0, buf); + p = s0; + *(s16 *)(p + 0x5C) = 0x800; + __asm__ __volatile__("" : : "r"(p)); + *(s32 *)(p + 0x58) = (s32)&D_801887A4 | 0x40000000; + func_8012AD50(p); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017E6EC", func_8017FDB4); + + +extern void (*D_801887DC[])(void); + +void func_8017FE68(void *a0) { + D_801887DC[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8012BF4C(s32 *a0, s16 a1); +extern void func_8012AD50(s32); +void func_8017FEA4(s32 *a0) { + func_8012BF4C(a0, 0); + func_8012AD50(a0); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017E6EC", func_8017FED8); + + + +extern void (*D_801887E8[])(void); + +void func_80180010(void *a0) { + D_801887E8[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_8018004C(void *a0) { + *(s16 *)((char *)a0 + 0x2) += 1; + *(s32 *)((char *)a0 + 0x14) = 0x20000; + } + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017E6EC", func_80180064); + +/* func_8018012C — projected 4-way mirrored triangle fan (banked twin ov_SC01_084:func_80185C0C) */ + +extern void func_80015978(s32 a0, s32 *a1); +extern s16 D_801887F4; /* vert0 .vx/.vy word */ +extern s16 D_801887FC; /* vert0 .vz */ +extern s16 D_80188804; /* vert1 .vx/.vy */ +extern s16 D_801887F0; /* vert1 .vz */ +extern s16 D_801887F8; /* vert2 .vx/.vy */ +extern s16 D_80188800; /* vert2 .vz */ + +/* NOTE: shared DEFINE_func_8012EF34() spells `void func_8012EF34(s32,s32)`; + * this call site consumes the leaked $v0, so declare s32 return here. */ +extern s32 func_8012EF34(s32 a0, s32 a1); +extern void func_80017D98(void *a0); +extern void func_8001739C(void *a0); + +/* === macros below spelled EXACTLY as destination TU lines 2693-2795 === */ + +#define gte_ldv3(r0, r1, r2) __asm__ volatile ( \ + "lwc2 $0, 0( %0 );" \ + "lwc2 $1, 4( %0 );" \ + "lwc2 $2, 0( %1 );" \ + "lwc2 $3, 4( %1 );" \ + "lwc2 $4, 0( %2 );" \ + "lwc2 $5, 4( %2 )" \ + : \ + : "r"( r0 ), "r"( r1 ), "r"( r2 ) ) + +#define gte_rtpt() __asm__ volatile ("nop;nop;rtpt") + +#define gte_stsxy3(r0, r1, r2) __asm__ volatile ( \ + "swc2 $12, 0( %0 );" \ + "swc2 $13, 0( %1 );" \ + "swc2 $14, 0( %2 )" \ + : \ + : "r"( r0 ), "r"( r1 ), "r"( r2 ) \ + : "memory" ) + +#define gte_stszotz(r0) __asm__ volatile ( \ + "mfc2 $12, $19;" \ + "nop;" \ + "sra $12, $12, 2;" \ + "sw $12, 0( %0 )" \ + : \ + : "r"( r0 ) \ + : "$12", "memory" ) + +#define gte_stflg(r0) __asm__ volatile ( \ + "cfc2 $12, $31;" \ + "nop;" \ + "sw $12, 0( %0 )" \ + : \ + : "r"( r0 ) \ + : "$12", "memory" ) + +#define gte_SetRotMatrix(r0) __asm__ volatile ( \ + "lw $12, 0( %0 );" \ + "lw $13, 4( %0 );" \ + "ctc2 $12, $0;" \ + "ctc2 $13, $1;" \ + "lw $12, 8( %0 );" \ + "lw $13, 12( %0 );" \ + "lw $14, 16( %0 );" \ + "ctc2 $12, $2;" \ + "ctc2 $13, $3;" \ + "ctc2 $14, $4" \ + : \ + : "r"( r0 ) \ + : "$12", "$13", "$14" ) + +#define gte_SetTransMatrix(r0) __asm__ volatile ( \ + "lw $12, 20( %0 );" \ + "lw $13, 24( %0 );" \ + "ctc2 $12, $5;" \ + "lw $14, 28( %0 );" \ + "ctc2 $13, $6;" \ + "ctc2 $14, $7" \ + : \ + : "r"( r0 ) \ + : "$12", "$13", "$14" ) + +typedef struct { + s16 x; /* +0x0 */ + s16 y; /* +0x2 */ + s16 c; /* +0x4 */ + s16 pad; /* +0x6 */ +} Vtx_8018012C; /* 0x08 */ + +typedef struct { + Vtx_8018012C v[3]; /* +0x00 +0x08 +0x10 */ + u8 r0, g0, b0, code; /* +0x18 .. +0x1B */ + u8 r1, g1, b1, pad1; /* +0x1C .. +0x1F */ + u8 r2, g2, b2, pad2; /* +0x20 .. +0x23 */ + u32 color; /* +0x24 */ +} Prim_8018012C; /* 0x28 */ + +typedef struct { + u16 x; /* +0x0 */ + u16 y; /* +0x2 */ + u16 z; /* +0x4 */ +} Pos_8018012C; /* 0x06 -> 8-byte frame stride */ + +typedef struct { + u16 vx; /* +0x0 */ + u16 vy; /* +0x2 */ + u16 vz; /* +0x4 */ + u16 pad; /* +0x6 */ +} Sxy_8018012C; /* 0x08 */ + +typedef struct { + s16 m[3][3]; /* +0x00, padded to 0x14 */ + s32 t[3]; /* +0x14 +0x18 +0x1C */ +} Mtx_8018012C; /* 0x20 */ + +void func_8018012C(s32 arg0) +{ + Prim_8018012C prim; /* sp+0x10 */ + Pos_8018012C wpos; /* sp+0x38 */ + Pos_8018012C spos; /* sp+0x40 */ + Sxy_8018012C sxy[4]; /* sp+0x48 */ + Mtx_8018012C mtx; /* sp+0x68 */ + s32 otz; /* sp+0x88 */ + s32 flag; /* sp+0x8C */ + s32 t; + Prim_8018012C *p = &prim; + + func_80015978(arg0 + 4, (s32 *)&wpos); + if ((func_8012EF34((s32)&wpos, (s32)&spos) & ~0x1000) == 0) { + gte_stszotz(&otz); + D_801887F4 = spos.z; + D_801887FC = spos.z; + D_80188804 = spos.z; + func_80017D98(&mtx); + /* emitted 0x84/0x80/0x7C -> source runs t[2] first */ + mtx.t[2] = 0; + mtx.t[1] = 0; + mtx.t[0] = 0; + gte_SetRotMatrix(&mtx); + gte_SetTransMatrix(&mtx); + gte_ldv3(&D_801887F0, &D_801887F8, &D_80188800); + gte_rtpt(); + gte_stsxy3(&sxy[0], &sxy[1], &sxy[2]); + gte_stflg(&flag); + if (flag >= 0) { + p->b0 = 0xC0; + p->g0 = 0xC0; + p->r0 = 0xC0; + p->b1 = 0x40; + p->g1 = 0x20; + p->r1 = 0x20; + p->b2 = 0x40; + p->g2 = 0x20; + p->r2 = 0x20; + p->color = 0x50000000; + p->v[0].x = sxy[0].vx + spos.x; + p->v[0].y = sxy[0].vy + spos.y; + p->v[1].x = sxy[1].vx + spos.x; + p->v[1].y = sxy[1].vy + spos.y; + p->v[2].x = sxy[2].vx + spos.x; + p->v[2].y = sxy[2].vy + spos.y; + p->v[0].c = otz; + func_8001739C(p); + t = sxy[1].vy; + p->v[1].y = spos.y - t; + func_8001739C(p); + t = sxy[2].vx; + p->v[2].x = spos.x - t; + func_8001739C(p); + p->v[1].y = sxy[1].vy + spos.y; + func_8001739C(p); + } + } +} + + + +extern void (*D_80188808[])(void); + +void func_80180358(void *a0) { + D_80188808[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); + +void func_80180394(void *a0) +{ + extern u8 D_801CE458[]; + s32 s1; + u8 *p; + + s1 = *(s32 *)((s32)a0 + 0x20); + p = D_801CE458 + *(s32 *)((s32)a0 + 0x2C) * 0x40; + func_8001CD50(s1, (s32)p); + *(s16 *)(s1 + 0x1E) = 0xCCC; + *(s16 *)(s1 + 0x10) = 0x400; + *(s16 *)(s1 + 0x1A) = 0; + *(s16 *)(s1 + 0x18) = 0; + *(s32 *)(s1 + 4) = *(s32 *)(s1 + 4) | 0x50000000; + func_800233CC(p, 0x20); + p[5] = 0x40; + p[4] = 0x40; + p[2] = 0; + p[1] = 0; + p[0] = 0; + p[6] = 0x80; + *(s32 *)((s32)a0 + 0x1C) = 0x10; + *(u16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017E6EC", func_80180454); + + +extern void (*D_80188810[])(void); + +void func_801804DC(void *a0) { + D_80188810[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017E6EC", func_80180518); + +extern s32 rand(void); +extern u16 D_800B99DA; +extern u8 *func_801290DC(s32 arg0, u8 *arg1); + +void func_80180558(s32 param_1) +{ + u16 sp10[3]; + s32 i; + s32 r; + + if ((D_800B99DA & 3) == 0) { + sp10[1] = *(u16 *)(param_1 + 0xA); + for (i = 0; i < 2; i++) { + r = rand(); + { + register s32 t __asm__("$3") = *(u16 *)(param_1 + 6) - 0x20; + sp10[0] = t + (r & 0x3F); + } + r = rand(); + { + register s32 u __asm__("$3") = *(u16 *)(param_1 + 0xE) - 0x20; + sp10[2] = u + (r & 0x3F); + } + func_801290DC(0x66, (u8 *)sp10); + } + } +} + + + +extern void (*D_80188818[])(void); + +void func_801805EC(void *a0) { + D_80188818[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern s32 rand(void); + +void func_80180628(int param_1) +{ + int p; + register s32 r1 __asm__("$16"); + register s32 r2 __asm__("$17"); + s16 r3, r4, r5; + s16 v; + s16 v2; + s32 unk_frame_pad[4]; + + p = *(int *)(param_1 + 0x20); + *(u8 **)(p + 0x20) = D_800D387C; + *(u8 *)(p + 0x27) = 0x9c; + *(u32 *)(p + 4) = *(u32 *)(p + 4) | 0x60000000; + + func_80128EA8(*(s32 *)(param_1 + 0x20), param_1 + 0x24, (s32)D_800D3888); + + *(s32 *)(param_1 + 0x14) = 0xFFFC0000; + *(s32 *)(param_1 + 0x1C) = 0x3C; + *(s32 *)(param_1 + 0x10) = *(s32 *)(param_1 + 4); + *(s32 *)(param_1 + 0x18) = *(s32 *)(param_1 + 0xC); + + r1 = rand(); + r2 = rand(); + r3 = rand(); + v = (r1 & 3) * 1024; + v += (r2 & 3) * 250; + v += (r3 & 3) * 68; + *(s16 *)(p + 0x10) = v; + r4 = rand(); + v2 = (r4 & 3) * 2048 + 0x1000; + *(s16 *)(p + 0x1A) = v2; + *(s16 *)(p + 0x18) = v2; + r5 = rand(); + *(s16 *)(param_1 + 0x2E) = (r5 & 3) + 1; + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; +} + + +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_801292C8(u8 *a0); + +void func_80180748(s32 a0) { + s32 pad[4]; + s32 s1; + s16 temp; + s32 v0; + + *(u16 *)(a0 + 0x2C) += *(u16 *)(a0 + 0x2E); + + s1 = *(s32 *)(a0 + 0x20); + + temp = *(u16 *)(s1 + 0x10) + 0x71; + *(u16 *)(s1 + 0x10) = temp; + v0 = func_8004787C(temp); + *(u16 *)(a0 + 0x6) = *(u16 *)(a0 + 0x12) + (*(s16 *)(a0 + 0x2C) * v0) / 4096; + + v0 = func_80047948(*(s16 *)(s1 + 0x10)); + *(u16 *)(a0 + 0xE) = *(u16 *)(a0 + 0x1A) + (*(s16 *)(a0 + 0x2C) * v0) / 4096; + + *(s32 *)(a0 + 0x14) += 0xFFFF4000; + *(s32 *)(a0 + 0x8) += *(s32 *)(a0 + 0x14); + + *(u16 *)(s1 + 0x1A) += 0xCC; + *(u16 *)(s1 + 0x18) = *(u16 *)(s1 + 0x1A); + + if ((*(s32 *)(a0 + 0x1C) & 3) == 0) { + func_80128ED8(*(s32 *)(a0 + 0x20), (s32 *)(a0 + 0x24)); + } + + *(s32 *)(a0 + 0x1C) -= 1; + if (*(s32 *)(a0 + 0x1C) == -1) { + func_801292C8((u8 *)a0); + } +} + + +extern void (*D_80188B40[])(void); + +void func_80180874(void *a0) { + D_80188B40[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s16 D_80188820[]; + +void func_801808B0(s32 param_1) +{ + *(s32 *)(param_1 + 0xcc) = func_80180AB4(param_1, D_80188820, 0x300, 0x180, 0x84); + if (*(s32 *)(param_1 + 0xcc) == 0) { + func_8012CAE4(param_1); + return; + } + *(s32 *)(param_1 + 0xd0) = func_80180AB4(param_1, D_80188820, 0x310, 0x180, 0x85); + if (*(s32 *)(param_1 + 0xd0) == 0) { + func_80016714(*(void **)(param_1 + 0xcc), 0x38); + func_8012CAE4(param_1); + return; + } + *(s16 *)(param_1 + 2) = 1; +} + + +INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017E6EC", func_8018094C); + +void func_801809C0(void) { +} + +extern u16 D_80188B20[]; +extern s32 D_801C4F44; + +void func_801809C8(s32 a0) { + u16 t; + + t = *(u16 *)(a0 + 0xFC); + *(u8 *)(*(s32 *)(a0 + 0xCC) + 0x27) = 0x86; + *(u8 *)(*(s32 *)(a0 + 0xD0) + 0x27) = 0x87; + func_800183E0((s32)&D_801C4F44 + (((u8 *)D_80188B20)[(s16)t] << 4)); + func_800183E0((s32)&D_801C4F44 + 0x100 + (((u8 *)D_80188B20)[(s16)t] << 4)); + *(u16 *)(a0 + 0xFC) = (t + 1) & 0x1F; +} + + +extern void func_80016714(void *a0, s32 a1); +extern void func_8012C098(void *a0); + +void func_80180A70(s32 param_1) { + func_80016714(*(void **)(param_1 + 0xCC), 0x38); + func_80016714(*(void **)(param_1 + 0xD0), 0x38); + func_8012C098(param_1); +} + + +extern s32 func_8012C194(void); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +s32 func_80180AB4(s32 a0, s32 a1, s16 a2, s16 a3, s32 a4) { + s32 obj; + + obj = func_8012C194(); + if (obj == 0) { + return 0; + } + func_8001CB6C((u8 *)obj, a1, a2, a3); + *(u16 *)(obj + 0x10) = 0xC00; + *(u16 *)(obj + 0x1A) = 0x2D00; + *(u16 *)(obj + 0x18) = 0x2D00; + *(u8 *)(obj + 0x27) = a4; + *(u16 *)(obj + 0x2C) = 0xC008; + *(u16 *)(obj + 8) = *(u16 *)(a0 + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(a0 + 0xA) - 0x24; + *(u16 *)(obj + 0xC) = *(u16 *)(a0 + 0xE); + return obj; +} + + + +extern void (*D_80188B5C[])(void); + +void func_80180B88(void *a0) { + D_80188B5C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8012AD50(s32); + +void func_80180BC4(void *a0) +{ + s32 v0; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)a0 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(a0); + return; + } + func_8001C214(v0, 0); + func_8012AD50((s32)a0); +} + + +extern s32 func_80029178(s32 arg); +extern void func_8012AD50(s32); +extern u8 D_80188B4C[]; + +void func_80180C18(void *a0) { + if ((func_80029178(0xBB) & 0xFF) != 0) { + *(s32 *)((s32)a0 + 0x58) = (s32)D_80188B4C; + *(s16 *)((s32)a0 + 0x5C) = 0x80; + func_8012AD50((s32)a0); + } +} + + +void func_80180C68(void) { +} + + +s32 func_80180C70(void) { + return 73; +} + + +extern void func_8013373C(s32 arg0); + void func_80180C78(void) { + func_8013373C(0); + } + + +extern s32 D_801CE8BC; +void func_80180C98(void) { + if (D_801CE8BC == 0) { + if ((func_80029178(0xBB) & 0xFF) != 0) { + func_8013373C(0); + } + D_801CE8BC += 1; + } +} + + + +extern void func_801819C4(void *a0); + +void func_80180CF0(void *a0) { + + extern void (*D_801C0F9C[])(void); + D_801C0F9C[*(u16 *)((s32)a0 + 0x2)](); + if (*(u16 *)((s32)a0 + 0x0) != 0) { + *(s32 *)((s32)a0 + 0xE8) = *(s32 *)((s32)a0 + 0xE8) + 1; + if ((*(s32 *)((s32)a0 + 0xE8) & 0xF) == 0) { + func_801819C4(a0); + } + } +} + + + +extern s32 rand(void); +extern s32 func_8012C354(s32 *a0, s32 a1); +extern void func_8012A828(s32, s32); +extern void func_80143994(s32 *a0, s32 a1); + + +void func_80180D6C(void *arg0) { + + extern s32 D_801C0F30; + extern s32 D_801C0F74; + extern s32 D_801C348C; + s32 t; + + if (func_8012C354(arg0, &D_801C0F30)) { + *(u8 *)((char *)arg0 + 0xC0) = 1; + *(s32 *)((char *)arg0 + 0xB4) = -1; + *(s32 **)((char *)arg0 + 0xBC) = &D_801C0F74; + *(u32 *)((char *)arg0 + 0xC4) |= 1; + *(s32 *)((char *)arg0 + 0xE4) = -((rand() % 8 + 0xC) << 16); + ((void (*)(s32 *, s32))func_8012A828)(arg0, &D_801C348C); + func_80143994(arg0, 0x1000); + t = *(u16 *)((char *)arg0 + 0x70) & 0x10; + if (t != 0) { + t = 3; + } else { + t = 1; + } + *(s16 *)((char *)arg0 + 0x2) = t; + } +} + + + +extern s32 rand(void); +extern void func_8012B200(void *a0); + +void func_80180E2C(void *a0) { + s16 r; + s16 t; + + r = rand(); + *(u16 *)((s32)a0 + 0x104) = *(u16 *)((s32)a0 + 0xFC); + t = r; + func_8012B200(a0); + if (*(u16 *)((s32)a0 + 0x70) & 1) { + *(s32 *)((s32)a0 + 0x1C) = (s16)(r % 1800) + 0xE10; + } else { + *(s32 *)((s32)a0 + 0x1C) = (s16)(r % 60) + 0x78; + } + *(s16 *)((s32)a0 + 0xFE) = t % 32 + 0xA; + *(s16 *)((s32)a0 + 0x2) = 2; +} + + + +extern void func_80181900(s32 *a0, s32 a1, s32 a2); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012CBF4(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_801819AC(void); +extern s32 rand(void); + +void func_80180F54(s32 a0) { + s32 sp10[2]; + s32 t; + s32 r; + + func_80181900(sp10, a0, a0 + 0x102); + t = sp10[0]; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = t; + r = func_8012B608(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12), t >> 16, + *(s16 *)(a0 + 0xFE)); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + r; + func_8012B178(a0, *(s32 *)(a0 + 0xE4)); + func_8012CBF4(a0); + if ((*(u16 *)(a0 + 0x70) & 2) == 0) { + if (func_8012BEE8(a0)) { + if (*(s32 *)(a0 + 0xE0) == 0) { + if (((s32 (*)(s32))func_801819AC)(a0)) { + if (*(u16 *)(a0 + 0x70) & 1) { + *(s32 *)(a0 + 0x1C) = rand() % 0x708 + 0xE10; + } else { + *(s32 *)(a0 + 0x1C) = rand() % 0x3C + 0x78; + } + } else { + *(s16 *)(a0 + 0x2) = 5; + } + } else { + *(s16 *)(a0 + 0x2) = 1; + } + } + } +} + + + +extern s32 rand(void); +extern void func_8012B200(void *a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); + +void func_801810C4(s32 a0) { + u8 auStack_18[8]; + s32 tmp; + s32 base; + s32 off; + s32 val; + + func_8012B200((void *)a0); + *(s32 *)(a0 + 0x1C) = rand() % 128 + 0x80; + *(s16 *)(a0 + 0xFE) = rand() % 32 + 10; + func_8012B0B4((unsigned int *)auStack_18, rand() % 0x1000, + rand() % *(s32 *)(a0 + 0xDC)); + tmp = *(s32 *)auStack_18; + *(s16 *)(a0 + 0x102) = *(u16 *)(a0 + 0x88) + tmp; + *(s16 *)(a0 + 0x106) = *(u16 *)(a0 + 0x8C) + (tmp >> 16); + if (*(u16 *)(a0 + 0x70) & 0x20) { + off = rand() % 256; + base = *(s16 *)(a0 + 0xFC); + if (rand() & 1) { + val = base + off; + } else { + val = base - off; + } + *(s16 *)(a0 + 0x104) = val; + } else { + *(s16 *)(a0 + 0x104) = *(u16 *)(a0 + 0xFC) - rand() % 256; + } + *(s16 *)(a0 + 0x2) = 4; +} + + + +extern s32 func_8012B77C(s32 out, s32 from, s32 to); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012CBF4(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern s32 rand(void); + +void func_80181258(s32 a0) { + + extern u16 D_80126B62; + s32 sp10[6]; + u8 sp28[8]; + s16 q; + s32 t; + s32 r; + + *(s16 *)((s32)sp10 + 0x2) = *(u16 *)(a0 + 0x102); + *(s16 *)((s32)sp10 + 0xA) = *(u16 *)(a0 + 0x106); + q = *(u16 *)(a0 + 0x104); + *(s16 *)((s32)sp10 + 0x6) = q; + if ((*(u16 *)(a0 + 0x70) & 0x20) == 0) { + *(s16 *)((s32)sp10 + 0x6) = q + D_80126B62; + } else { + *(s16 *)((s32)sp10 + 0x6) = q + *(u16 *)(a0 + 0x8A); + } + + func_8012B77C((s32)sp28, a0 + 4, (s32)sp10); + t = *(s32 *)sp28; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = t; + r = func_8012B608(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12), t >> 16, + *(s16 *)(a0 + 0xFE)); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + r; + func_8012B178(a0, *(s32 *)(a0 + 0xE4)); + func_8012CBF4(a0); + if (func_8012BEE8(a0)) { + s32 base; + s32 off; + s32 val; + + *(s32 *)(a0 + 0x1C) = rand() % 128 + 0x80; + *(s16 *)(a0 + 0xFE) = rand() % 32 + 10; + func_8012B0B4((unsigned int *)sp28, rand() % 0x1000, + rand() % *(s32 *)(a0 + 0xDC)); + t = *(s32 *)sp28; + *(s16 *)(a0 + 0x102) = *(u16 *)(a0 + 0x88) + t; + *(s16 *)(a0 + 0x106) = *(u16 *)(a0 + 0x8C) + (t >> 16); + if (*(u16 *)(a0 + 0x70) & 0x20) { + off = rand() % 256; + base = *(s16 *)(a0 + 0xFC); + if (rand() & 1) { + val = base + off; + } else { + val = base - off; + } + *(s16 *)(a0 + 0x104) = val; + } else { + *(s16 *)(a0 + 0x104) = *(u16 *)(a0 + 0xFC) - rand() % 256; + } + } +} + + + +extern s32 rand(void); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +/* Declarations conformed VERBATIM to the TU's existing ones + * (ov_SC02_035_jr_8017BEBC.c:5139 and :5117) — type disagreements are + * pushed to casts at the use sites below. Zero codegen change. */ +extern void func_80181900(s32 *a0, s32 a1, s32 a2); +extern void func_8012B200(void *a0); +extern void func_8012B2CC(s32 a0); +extern void func_8012B178(s32 a0, s32 a1); + +void func_801814AC(s32 a0) { + s16 sp10[4]; + s32 sp18[2]; + s16 r; + s32 t; + s32 u; + + r = rand(); + func_8012B0B4((unsigned int *)sp18, (s16)(r % 4095), (s16)(r % 128) + 0xC0); + + t = sp18[0]; + sp10[1] = -0x30; + sp10[0] = t; + sp10[2] = t >> 16; + func_80181900(sp18, a0, (s32)sp10); + + u = sp18[0]; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = u; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = u >> 16; + func_8012B200((void *)a0); + func_8012B2CC(a0); + func_8012B178(a0, *(s32 *)(a0 + 0xE4) + 0xFFFE0000); + *(s16 *)(a0 + 0x2) = 6; + *(s16 *)(a0 + 0x34) = 0; +} + + + +extern void func_80181900(s32 *a0, s32 a1, s32 a2); +extern s32 func_8012B8E4(s32 a0, s32 a1); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012B200(void *a0); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_801818D4(s32 a0); +extern s32 rand(void); + +void func_801815B8(s32 a0) { + + extern u8 D_801C0F6C[]; + s32 sp10[2]; + s32 t; + s32 u; + + switch (*(u16 *)(a0 + 0x34)) { + case 0: + if (((s32 (*)(s32))func_8012CBF4)(a0)) { + *(s32 *)(a0 + 0x1C) = 0x1E; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = 0; + *(s16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1; + } else if (*(s16 *)(a0 + 0x100) < *(s16 *)(a0 + 0xA)) { + *(s16 *)(a0 + 0xA) = *(s16 *)(a0 + 0x100); + *(s32 *)(a0 + 0x1C) = 0x1E; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = 0; + *(s16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1; + } + break; + case 1: + t = func_8012B8E4(a0, 6); + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + t; + if (func_8012BEE8(a0)) { + if (rand() & 1) { + *(s16 *)(a0 + 0x2) = 1; + } else { + *(s16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1; + func_8012B200((void *)a0); + *(s32 *)(a0 + 0x1C) = 0x20; + func_8002D4C8(0x6FF, 0); + } + } + break; + case 2: + func_80181900(sp10, a0, (s32)D_801C0F6C); + u = sp10[0]; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = u; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = u >> 16; + func_8012B178(a0, *(s32 *)(a0 + 0xE4) + 0xFFF80000); + func_8012CBF4(a0); + if (func_801818D4(a0) == 1) { + *(s16 *)(a0 + 0x2) = 1; + } else if (func_8012BEE8(a0)) { + *(s16 *)(a0 + 0x2) = 1; + } + break; + default: + *(s16 *)(a0 + 0x2) = 1; + break; + } +} + + + +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012E778(s32 a0, s32 a1); +extern void func_8012E88C(s32 a0); +extern void func_8012A828(s32, s32); + +void func_80181754(void *arg0) { + + extern s32 D_801C348C; + if (func_8012BEE8((s32)arg0)) { + if (!func_8012E778((s32)arg0, 0xA000C8)) { + { + s32 t; + t = *(u16 *)((char *)arg0 + 0x70) & 0x10; + *(s16 *)((char *)arg0 + 0x2) = (t == 0) ? 1 : 3; + } + *(s16 *)((char *)arg0 + 0x5C) = + *(u16 *)(*(s32 *)((char *)arg0 + 0x78) + 0x2); + *(s16 *)((char *)arg0 + 0x76) = + *(u16 *)(*(s32 *)((char *)arg0 + 0x78)); + *(s16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x18) = + *(s16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x1A) = + *(s16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x1C) = 0x1000; + *(u16 *)(*(s32 *)((char *)arg0 + 0x20) + 0x2C) &= 0x10; + func_8012E88C((s32)arg0); + ((void (*)(s32 *, s32))func_8012A828)(arg0, &D_801C348C); + } + } +} + + +extern void func_8002A04C(s32 a0); +extern void func_8012C218(void *a0); + + +extern void func_8012E8A8(u8 *a0); + +void func_80181810(void *arg0) { + func_8002A04C((s32)arg0); + + if ((*(s16 *)((char *)arg0 + 0x70) & 0x8000) != 0) { + s32 v1 = *(s32 *)((char *)arg0 + 0x20); + *(s16 *)((char *)arg0 + 0x2) = 0x7; + *(s8 *)((char *)arg0 + 0xC1) = 0; + *(s32 *)((char *)arg0 + 0x1C) = 0x40; + *(s16 *)((char *)arg0 + 0x5E) = 0; + *(s16 *)((char *)arg0 + 0x5C) = 0; + *(s16 *)((char *)v1 + 0x12) = 0; + *(s16 *)((char *)v1 + 0x10) = 0; + func_8012E8A8((u8 *)arg0); + *(s16 *)((char *)arg0 + 0x6) = *(u16 *)((char *)arg0 + 0x88); + *(s16 *)((char *)arg0 + 0xA) = *(u16 *)((char *)arg0 + 0x8A); + *(s16 *)((char *)arg0 + 0xE) = *(u16 *)((char *)arg0 + 0x8C); + } else { + func_8012C218(arg0); + } +} + + +extern void func_8012A828(s32 a0, s32 a1); + extern s32 D_801C348C; + void func_8018189C(void * arg0) { + *(short *)((char *)arg0 + 0x2) = 1; + *(short *)((char *)arg0 + 0x5c) = *(unsigned short *)(*(int *)((char *)arg0 + 0x78) + 0x2); + func_8012A828((int)arg0, (int)&D_801C348C); + } + + + +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); + extern u8 D_801C0FBC[]; + s32 func_801818D4(s32 arg0) { + return ((s32 (*)(s32, void *, void *, s32))func_8012D5E4)(arg0, &D_801C0FBC[0], &D_801C0FBC[8], 5) != 0; + } + + + + +/* func_80181900 — MATCH (43 ins). Family of 10 / 430 templatable ins. + * Keys: + * (1) `la $v1,D_80126CBA` + `lh 0($v1)` + `addiu $a0,$v1,-6` is ONE POINTER LOCAL + * (`s16 *q = &D_80126CBA;` then `q - 3`), NOT two externs. A plain `D_80126CBA` + * read folds %lo into the load (`lui %hi / lh %lo(sym)($r)`) and `&D_80126CB4` + * would emit its own second lui — 2 extra ins. The full-address materialisation + * is the tell that the C bound the address to a variable. + * (2) `s32 sp10[4]; s32 sp20;` in THAT declaration order => sp+0x10 / sp+0x20; the + * 3 halfword fields are written `*(s16 *)((s32)sp10 + 0x2/0x6/0xA)` — same form + * as the matched siblings (src/ov_SC03_099/ov_SC03_099_jr_8017BEBC.c:4779). + * (3) The TU declares `extern void func_80181900(s32 *, s32, s32);` at file scope + * 3x (:5197 :5285 :5319), so an `s32 *` return is a HARD cc1 `conflicting types` + * error. The trailing `addu $v0,$s0,$zero` therefore comes from a $2-pinned temp. + * (4) The pin is load-bearing twice: pinning the POST-CALL temp to $v0 is what stops + * sched2 hoisting the return copy into the load-delay slot (unpinned => `lw $v1 / + * move $v0,$s0 / sw $v1,0($v0)`, 42 ins, LENGTH-DRIFT -1). Tried and rejected: + * `s32 sp20[2]`, `a0[0] =`, a named s32 temp, a cast-return — all identical DIFF. + * (5) `rv = (s32)a0;` alone is DELETED by flow ($2 is dead at the end of a void fn). + * The empty volatile asm keeps it live and emits zero bytes (#APP/#NO_APP only). + * Verified: spliced into the real TU, cc1 emits the identical instruction stream and + * exactly the same 10 diagnostics as the unmodified TU (zero new). */ +extern s32 func_8012B77C(s32 out, s32 from, s32 to); + +void func_80181900(s32 *a0, s32 a1, s32 a2) { + + extern s16 D_80126CBA; + s32 sp10[4]; + s32 sp20; + s16 *q; + u16 *p; + s16 t; + register s32 rv __asm__("$2"); + + q = &D_80126CBA; + if (*q == 0) { + p = (u16 *)(q - 3); + *(s32 *)(a1 + 0xE0) = 0; + } else { + p = (u16 *)(a1 + 0x88); + *(s32 *)(a1 + 0xE0) = 1; + } + *(s16 *)((s32)sp10 + 0x2) = p[0] + *(u16 *)a2; + t = p[1] + *(u16 *)(a2 + 2); + *(s16 *)((s32)sp10 + 0x6) = t; + *(s16 *)(a1 + 0x100) = t; + *(s16 *)((s32)sp10 + 0xA) = p[2] + *(u16 *)(a2 + 4); + func_8012B77C((s32)&sp20, a1 + 4, (s32)sp10); + rv = sp20; + *a0 = rv; + rv = (s32)a0; + __asm__ __volatile__("" : : "r" (rv)); +} + + + +extern u8 D_80078EC1; + s32 func_801819AC(void) { + return (D_80078EC1 ^ 0x15) == 0; + } + + + +extern s32 func_8012BD14(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); + +/* The `register ... __asm__("$4")` pin on the FIRST call argument is load-bearing. + * The target sets $a0 = 0x6FE in the ENTRY block (dbr steals it into the `bnez` + * delay slot -- sched.md D1 backward fill), but a plain `s32 id = 0x6FE;` local is + * rematerialised at the use site (single-set constant pseudo -> REG_EQUIV), so the + * `li` sinks past the label into the join block and dbr fills the slot with the + * if-body's `lui` instead (SHIFT-DRIFT/+1). Pinning the local to $a0 makes the `li` + * a hard-reg set that stays where it is written, and the call's arg move degenerates + * to a deleted `(set (reg 4) (reg 4))`. */ +void func_801819C4(void *a0) { + register s32 id __asm__("$4"); + s32 vol; + s32 t; + + vol = 0x7F; + t = func_8012BD14((s32)a0); + id = 0x6FE; + if (t > 0x1000) { + vol -= (t - 0x1000) / 0x2700; + } + func_8002D4C8(id, (vol | 0x1000) & 0xFFFF); +} + + +#include "common.h" + +/* func_80181A30 (ov_SC03_117, ov_SC03_117_jr_8017BEBC) — MATCH (148 ins) + * + * Tapered-beam / laser quad renderer. Builds a 4-vertex SVECTOR quad in local + * space (x = 0 .. arg0->len, y = -/+ half-width, the near half-width at 0x18 and + * the far one at 0x1A), rotates it with the caller's angle triple (0x08) through + * func_80049CAC + func_80017E8C, allocates ONE 0x24-byte POLY_G4 out of + * func_80010A08, projects the quad straight into the packet's four xy slots with + * RotTransPers4, and links the packet into the current double-buffer OT with the + * inline PSY-Q addPrim pair. If arg0->flags (0x1C) has bit 30, it also emits a + * 1-word 0xE1000200 DR_TPAGE prim carrying the semi-transparency mode + * ((flags >> 23) & 0x60) and chains that in front of the poly. + * + * FRAME 0x88 = 0x28 outgoing args (RotTransPers4 takes 10) + v[4] (0x20) + + * mtx (0x20) + opz/flag (8) + 6 saved regs (0x18). Locals are declared in + * increasing-address order, so v/mtx/opz/flag land at 0x28/0x48/0x68/0x6C. + * + * LEVERS (each byte-checked against asm/.../func_80181A30.s) + * + * - `ot` is computed BEFORE the `len == 0` early return: sched1 never moves an + * insn across a bb boundary, and the target has the whole + * lui/lhu/lui/addiu/sll run plus `addu $s4,$v0,$v1` (the beqz delay slot) + * ahead of the branch. Computing it after the guard costs 5 insns of drift. + * + * - `(otz << 2) + (u32)ot`, NOT `ot + otz`: gcc keeps the written operand order + * for the `addu`, and the target is `addu $s0, $v0, $s4` (offset first). + * Same reason `&D_800A6610[idx << 14]` gives `addu $s4, $v0, $v1`. + * + * - `mp` (a pointer local bound to &mtx) is what puts the matrix address in a + * callee-saved register ($s0) and turns both call-site setups into `addu + * $aN,$s0,$zero` moves. Passing &mtx directly re-materialises + * `addiu $aN,$sp,0x48` at each site. The mtx.t[] stores stay sp-relative + * because they are written through the array, not through mp. + * + * - Every `*(u16 *)(arg0 + N)` / `*(u32 *)(arg0 + N)` is spelled out at each + * use instead of being cached in a local: the quad stores take the address of + * v[], and poly is a heap pointer, so gcc cannot disambiguate them from the + * arg0 loads and re-loads each one — which is exactly the target's two + * `lhu 0x18($s2)`, two `lhu 0x1A($s2)`, two `lw 0x10($s2)`, two + * `lw 0x14($s2)`. `len` IS a local (one `lhu 0x6($s2)`, three uses). + * + * - `u16` reads + `>> 1`: `lhu` then `srl` (combine rewrites the ashiftrt to + * lshiftrt because the zero_extend proves the sign bit clear), then `negu`. + * + * - `otz` is u32 so the 0x1000 bound test emits `sltiu`, and the `+ 1` is a + * separate statement AFTER the flag test so dbr can steal it for the `bnez` + * delay slot (the target keeps `addu $a0,$v0,$zero` and `addiu $a0,$a0,1` as + * two insns; `ret + 1` in one expression folds them into one `addiu`). + * + * - THE TAIL CLUSTER (the last 9 mismatches). Two facts decide it: + * (a) `q[3] = 1` (byte 3) OVERLAPS the word at q[0], so sched sees a real + * memory dependence and the `lw 0($v0)` MUST be written after the sb — + * reading `*(u32 *)q` before it inverts the dep into an anti-edge and + * drags the load above `sb`/`lw 0x1C($s2)` (2 mismatches, var_e). + * (b) With the load after the sb, its dest is a single-set pseudo, so + * `adjust_priority`'s BIRTHING BOOST (sched.md §1.7) raises it to + * 0x7f000001, it wins every tie the moment it is ready, and it sinks + * past `or`/`sw 4($v0)` (9 mismatches). The target has it competing + * normally at priority 2 and winning the T-16 tie against the `ori` + * only on `potential_hazard` (memory beats ALU). + * `register u32 qt __asm__("$4")` fixes BOTH the boost and the allocation in + * one zero-byte edit: it is the whole residual. (A dead + * `__asm__ volatile("":"=r"(qt))` boost-kill also reorders correctly but + * leaves the $a0/$a1 pair swapped — 5 mismatches; sharing ONE temp across + * both addPrim halves kills the boost too but makes it a global allocno that + * loses $v1 in the FIRST addPrim — 7 mismatches. The pin alone is minimal.) + * + * DECLARATIONS / integration surface: `func_80049CAC` and `D_800B9A02` are + * spelled VERBATIM as the destination TU already has them at file scope + * (ov_SC03_117_jr_8017BEBC.c L2643 and L2464/L2466), so they merge silently. + * `D_800A6610`, `func_80010A08`, `func_80017E8C` and `RotTransPers4` have NO + * file-scope declaration anywhere in that TU, so they are block-scoped here to + * keep the blast radius on the rest of the TU at zero. The two local typedefs + * do not collide with any name in the TU. + */ + +typedef struct { s16 vx, vy, vz, pad; } SV_1A30; +typedef struct { s16 m[3][3]; s32 t[3]; } MTX_1A30; /* 0x20 bytes */ + +void func_80181A30(s16 *arg0) +{ + extern u8 D_800A6610[]; + extern short D_800B9A02; + extern void func_80049CAC(s32 a0, s32 a1); + extern void *func_80010A08(s32); + extern void func_80017E8C(void *); + extern s32 RotTransPers4(void *, void *, void *, void *, + s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); + + SV_1A30 v[4]; /* sp+0x28 */ + MTX_1A30 mtx; /* sp+0x48 */ + s32 opz; /* sp+0x68 */ + s32 flag; /* sp+0x6C */ + + u32 *ot; + u32 *otp; + u8 *poly; + u8 *q; + void *mp; + u16 len; + u32 otz; + register u32 qt __asm__("$4"); /* §17 pin — kills the birthing boost AND + keeps the $a0/$a1 pair in target order */ + + ot = (u32 *)&D_800A6610[(*(u16 *)&D_800B9A02) << 14]; + len = *(u16 *)(arg0 + 3); + if (len == 0) { + return; + } + + v[0].vx = 0; + v[0].vy = -(*(u16 *)(arg0 + 0xC) >> 1); + v[0].vz = 0; + v[1].vx = 0; + v[1].vy = *(u16 *)(arg0 + 0xC) >> 1; + v[1].vz = 0; + v[2].vx = len; + v[2].vy = -(*(u16 *)(arg0 + 0xD) >> 1); + v[2].vz = 0; + v[3].vx = len; + v[3].vy = *(u16 *)(arg0 + 0xD) >> 1; + v[3].vz = 0; + + mp = &mtx; + func_80049CAC((s32)(arg0 + 4), (s32)mp); + + mtx.t[0] = arg0[0]; + mtx.t[1] = arg0[1]; + mtx.t[2] = arg0[2]; + + poly = (u8 *)func_80010A08(0x24); + *(u32 *)(poly + 0x04) = *(u32 *)(arg0 + 8); + *(u32 *)(poly + 0x0C) = *(u32 *)(arg0 + 8); + *(u32 *)(poly + 0x14) = *(u32 *)(arg0 + 0xA); + *(u32 *)(poly + 0x1C) = *(u32 *)(arg0 + 0xA); + poly[3] = 8; /* setlen(poly, 8) */ + poly[7] = 0x38; /* setcode POLY_G4 */ + + func_80017E8C(mp); + + otz = RotTransPers4(&v[0], &v[1], &v[2], &v[3], + (s32 *)(poly + 0x08), (s32 *)(poly + 0x10), + (s32 *)(poly + 0x18), (s32 *)(poly + 0x20), + &opz, &flag); + + if ((flag & 0xFFFFEFFF) != 0) { + return; + } + otz = otz + 1; + if (otz >= 0x1000) { + return; + } + + otp = (u32 *)((otz << 2) + (u32)ot); + + /* addPrim(otp, poly) */ + *(u32 *)poly = (*(u32 *)poly & 0xFF000000) | (*otp & 0xFFFFFF); + *otp = (*otp & 0xFF000000) | ((u32)poly & 0xFFFFFF); + + if (*(u32 *)(arg0 + 0xE) & 0x40000000) { + poly[7] |= 2; /* semi-transparent */ + q = (u8 *)func_80010A08(8); + q[3] = 1; /* setlen(q, 1) */ + qt = *(u32 *)q; + *(u32 *)(q + 4) = ((*(u32 *)(arg0 + 0xE) >> 23) & 0x60) | 0xE1000200; + /* addPrim(otp, q) */ + *(u32 *)q = (qt & 0xFF000000) | (*otp & 0xFFFFFF); + *otp = (*otp & 0xFF000000) | ((u32)q & 0xFFFFFF); + } +} + +