From d2a79deff2423d42cec987e1529f2da9f1bd9267 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Sun, 26 Jul 2026 22:16:48 -0600 Subject: [PATCH] =?UTF-8?q?feat(phase-29):=20ALL=20THREE=20BEHEMOTHS=20BAN?= =?UTF-8?q?KED=20=E2=80=94=20func=5F80183814=20(5,122),=20func=5F8017DC1C?= =?UTF-8?q?=20(1,518),=20func=5F8017D2DC=20(1,586)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zero functions >1000 ins remain unmatched anywhere in the fleet. func_80183814 (5,122 ins — the LARGEST function in the game) — round 2 closed it: length 5127->5122 exact, structural residual 36->0, register-sensitive 1201->0, frame -256 -> -0xF8 exact, saves 10 -> .mask 0x807f0000 exact. Verified independently (R14): match_one MATCH (5122 ins). ROUND 1's DIAGNOSIS WAS WRONG and the agent refuted it properly: the +5 length was a SYMPTOM, not the lever, and the §83d max_reg/cse.c:8340 story does not hold — a 15-line reproducer reproduced the case-0/3 CSE exactly (so it cannot be max_reg-gated), max_qty only gates extension ACROSS blocks, and the target leaves $s7/$fp unused (no pressure story). Confirmed from a second direction: C01 has the identical two groups over the identical symbols with ZERO residual, because a `break` puts a CODE_LABEL between them. The two biggest levers were pure DECLARATION SCOPE (§45/§76), not pins. func_8017DC1C (1,518) — MATCH first round, pin-free, zero __asm__ dials. NOT a jr fn (0 mid-fn jr). func_8017D2DC (1,586) — MATCH first round (banked in the previous commit). BANKING ORDER MATTERS — a new failure mode found and worked around: banking func_8017DC1C BEFORE the carve chain broke the build. Its draft establishes the canon for 39 previously-undeclared externs; jr_isolate_all's re-partition (overlay_src_split) then DROPPED ALL 39 across the new split boundary (`D_801C1EB0 undeclared`), leaving them in NEITHER file. The §77 preamble-drop class, in a third tool. FIX = ordering, not patching: run the §81 carve chain FIRST on a clean tree (gated BYTE-IDENTICAL), then bank. Reverted, re-sequenced, both banked clean. R22 clean-fleet 140/140 BYTE-IDENTICAL; tools-health OK; dedup 1886/0; 0 NON_MATCHING (G4). Fleet: instr 81.6 -> 81.7% · distinct-code 69.1 -> 69.3% · fn-count 89.52%. --- config/overlays.mk | 2 +- config/splat.ov_SC07_006.yaml | 3 + docs/progress.fleet.md | 16 +- src/ov_SC07_006/ov_SC07_006_jr_8017BEBC.c | 320 +- src/ov_SC07_006/ov_SC07_006_jr_80183814.c | 5376 +++++++++++++++++++++ 5 files changed, 5598 insertions(+), 119 deletions(-) create mode 100644 src/ov_SC07_006/ov_SC07_006_jr_80183814.c diff --git a/config/overlays.mk b/config/overlays.mk index aa6510b61..0b29fb574 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -3639,7 +3639,7 @@ ov_SC07_006_ELF := $(ov_SC07_006_OUT).elf ov_SC07_006_MAPFILE := $(ov_SC07_006_OUT).map ov_SC07_006_LD_SCRIPT := $(ov_SC07_006_OUT).ld ov_SC07_006_SPLAT_YAML := config/splat.ov_SC07_006.yaml -ov_SC07_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_006.o,tail2.data.o,ov_SC07_006_jr_80131340.o,tail3.data.o,ov_SC07_006_jr_80135888.o,tail4.data.o,ov_SC07_006_jr_80135A4C.o,tail5.data.o,ov_SC07_006_jr_80135D20.o,tail6.data.o,ov_SC07_006_jr_8013F350.o,tail7.data.o,ov_SC07_006_jr_80140608.o,tail8.data.o,ov_SC07_006_jr_80154C24.o,ov_SC07_006_jr_801588CC.o,tail9.data.o,ov_SC07_006_jr_8015C32C.o,tail10.data.o,ov_SC07_006_jr_8017AE2C.o,ov_SC07_006_jr_8017BEBC.o,tail11.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC07_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_006.o,tail2.data.o,ov_SC07_006_jr_80131340.o,tail3.data.o,ov_SC07_006_jr_80135888.o,tail4.data.o,ov_SC07_006_jr_80135A4C.o,tail5.data.o,ov_SC07_006_jr_80135D20.o,tail6.data.o,ov_SC07_006_jr_8013F350.o,tail7.data.o,ov_SC07_006_jr_80140608.o,tail8.data.o,ov_SC07_006_jr_80154C24.o,ov_SC07_006_jr_801588CC.o,tail9.data.o,ov_SC07_006_jr_8015C32C.o,tail10.data.o,ov_SC07_006_jr_8017AE2C.o,ov_SC07_006_jr_8017BEBC.o,tail11.data.o,ov_SC07_006_jr_80183814.o,tail12.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC07_006/ov_SC07_006_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC07_006/ov_SC07_006_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24 build/src/ov_SC07_006/ov_SC07_006_jr_801588CC.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28 diff --git a/config/splat.ov_SC07_006.yaml b/config/splat.ov_SC07_006.yaml index deb81c3ea..5891e66a2 100644 --- a/config/splat.ov_SC07_006.yaml +++ b/config/splat.ov_SC07_006.yaml @@ -105,6 +105,7 @@ segments: - [0x341d4, c, ov_SC07_006_jr_8015C32C] - [0x52cd4, c, ov_SC07_006_jr_8017AE2C] - [0x53d64, c, ov_SC07_006_jr_8017BEBC] + - [0x5b6bc, c, ov_SC07_006_jr_80183814] - [0x62268, data, tail] - [0xcba20, .rodata, ov_SC07_006] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xcba34, data, tail2] @@ -128,6 +129,8 @@ segments: - [0xccb40, .rodata, ov_SC07_006_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xccb54, .rodata, ov_SC07_006_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xccb74, data, tail11] + - [0xccb8c, .rodata, ov_SC07_006_jr_80183814] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0xccbe0, data, tail12] - [0xCE214, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xCE217] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/docs/progress.fleet.md b/docs/progress.fleet.md index 780957688..9791725f0 100644 --- a/docs/progress.fleet.md +++ b/docs/progress.fleet.md @@ -4,17 +4,17 @@ # cross-binary collapsible-byte leverage: docs/duplicates.cross.md. # THREE progress metrics (all matter — see the labels): -FLEET fn-count byte-ident: 316656 / 353719 = 89.52% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay) -FLEET instr-weighted : 10729648 / 13141652 = 81.6% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number) -FLEET distinct-code(uniq): 3895626 / 5634875 = 69.1% (65197/87459 unique fns; the DISTINCT-RE number) +FLEET fn-count byte-ident: 316659 / 353720 = 89.52% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay) +FLEET instr-weighted : 10736288 / 13141652 = 81.7% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number) +FLEET distinct-code(uniq): 3902266 / 5634875 = 69.3% (65199/87459 unique fns; the DISTINCT-RE number) MAIN game-code weighted : 436 / 60201 = 0.7% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-06-14; caveat is R34: no independent second oracle for a PS-X EXE, NOT drift) - (fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 10729212 / 13081451 = 82.0%) + (fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 10735852 / 13081451 = 82.1%) -FLEET REAL substantive : 314801 (of which dedup-shared 239530 via 1886 groups / 239604 instances) +FLEET REAL substantive : 314804 (of which dedup-shared 239530 via 1886 groups / 239604 instances) FLEET LINKED PsyQ objs : 959 FLEET NON_MATCHING : 7 (0 in any default build — G4) -FLEET INCLUDE_ASM stubs : 37056 -FLEET matchable : 353719 +FLEET INCLUDE_ASM stubs : 37054 +FLEET matchable : 353720 | binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % | |---|---:|---:|---:|---:|---:|---:| @@ -152,7 +152,7 @@ FLEET matchable : 353719 | ov_SC07_000 | 2279 | 1742 | 0 | 2281 | 2521 | 90.5% | | ov_SC07_001 | 2263 | 1738 | 0 | 2265 | 2454 | 92.3% | | ov_SC07_002 | 2291 | 1738 | 0 | 2295 | 2579 | 89.0% | -| ov_SC07_006 | 2061 | 1555 | 0 | 2141 | 2455 | 87.2% | +| ov_SC07_006 | 2064 | 1555 | 0 | 2144 | 2456 | 87.3% | | ov_SC07_007 | 2058 | 1586 | 0 | 2142 | 2613 | 82.0% | | ov_SC07_008 | 2248 | 1738 | 0 | 2248 | 2386 | 94.2% | | ov_SC07_009 | 2257 | 1738 | 0 | 2259 | 2430 | 93.0% | diff --git a/src/ov_SC07_006/ov_SC07_006_jr_8017BEBC.c b/src/ov_SC07_006/ov_SC07_006_jr_8017BEBC.c index 507b1cfd9..1f64563d0 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_8017BEBC.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_8017BEBC.c @@ -3777,7 +3777,216 @@ INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017D8A INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017DA30); -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017DC1C); +/* func_8017DC1C @ ov_SC07_006 (subseg ov_SC07_006_jr_8017BEBC) — behemoth #8, 1,518 ins. + * + * GATE: .venv/bin/python tools/match_one.py func_8017DC1C \ + * --c .run/giants/s21_func_8017DC1C_b1.c \ + * --asm-subdir asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC + * => MATCH (1518 ins) [pin-free; run through the §77 probe copy, + * see "PROBE" below — SVECTOR2 is a SHARED type] + * + * NOT BANKED. match_one masks jal/HI16/LO16 and never links. Independently checked + * here (the three things match_one is blind to): + * §81 0 `jr $vX` — no jump table, NO carve chain needed. (`jr $ra` only.) + * §84 0 `%lo(SYM+N)` in the emitted asm — no derived offsets. + * §87 all 64 D_ symbols resolve as dlabels in asm/ov_SC07_006/data/tail.data.s. + * + * PROBE (§77): SVECTOR2 lives in src/shared/engine_types.h, which match_one cannot see + * (-Iinclude only). Gate through: + * { echo '#include "common.h"'; + * echo '#include "../src/shared/engine_types.h"'; + * cat this_file; } > probe.c + * The include is deliberately NOT in this file: the real TU + * src/ov_SC07_006/ov_SC07_006_jr_8017BEBC.c already reaches engine_types.h via + * `#include "../shared/engine_core.h"`, so adding it here would be a double include. + * + * ------------------------------------------------------------------ what it is + * A morph/keyframe blender. 25 statements, each interpolating one model's vertex + * block from keyframe `b` toward keyframe `a` by the 1.12 fixed-point factor `t`. + * ZERO `jal`: the 25 statements are 25 expansions of ONE `static inline` helper. + * + * ------------------------------------------------------------------ the levers + * L1 `static inline`, NOT a macro and NOT an out-of-line static. THE structural + * lever. What each piece of evidence actually proves — stated honestly: + * (a) 0 jal + 25 byte-identical 60-ins bodies => the body is EXPANDED in + * place 25 times, not called. Rules out the out-of-line `static` + * (measured: func_8017DC1C collapses to 199 ins, 25 real calls). + * (b) FRAME 0x258 = 600 = 25 * 24. Each expansion of the body's block-scope + * locals gets its OWN 24 bytes of frame (measured: 1 body = 24, + * 2 expansions = 48, 25 = 600). This confirms 25 in-place expansions + * and means the frame is FREE — no padding hack is needed. It does NOT + * discriminate inline-vs-macro: the macro spelling ALSO frames 600. + * (c) the DISCRIMINATOR is the instruction count. `static inline` = 1518 + * (MATCH); the equivalent macro = 1537 (+19, LENGTH-DRIFT). Do not + * "simplify" this into a macro. + * (d) the `addu $a3,$a2,$zero` in the same-symbol blocks (1,2,3,4,8,9,10,11, + * 15,16) is integrate.c's copy_to_mode_reg of the SECOND argument after + * cse folded the two identical global loads into one register. + * L2 the body assigns the two pointer PARAMS to LOCALS (`pb = b; pa = a;`) and + * walks the locals. Incrementing the params directly loses BOTH preheader + * moves (`addu $t2,$a3,$zero` / `addu $t0,$a2,$zero`): with the params readonly + * the arg reg and the loop biv are one pseudo and combine folds the copy into + * the load. 2 moves x 25 blocks = 50 ins. + * L3 `i = o->n;` is read BEFORE the two copies. Source order here survives into + * the schedule: the target fills the `lw $t3,0x10($a1)` load-delay with the + * `pb` copy and the `beqz` delay with the `pa` copy. With the copies first, + * the count load needs a `nop` AND the reorg pass steals the `pb` copy into + * the `j` delay slot (which the target leaves as `nop`). + * L4 increment order `d++; pb++; pa++;` — the reverse of the read order. + * loop.c PREPENDS each biv to loop_iv_list, so the preheader giv-init order + * (`$a3=pa+4`, `$a2=pb+4`, `$a1=d+4`) is the reverse of the increment order. + * All 6 permutations measured; this is the only one that puts the three + * `+4` givs in the target's registers. See the report's table. + * L5 the else-branch is INDEX arithmetic, not a mask: `(u32 *)&o->dst + (o->dst >> 2)` + * gives `srl 2; sll 2; addiu 0xC; addu` — 4 separate insns. `o->dst & ~3` + * would collapse to a single `andi 0xfffc`. `dst` must be UNSIGNED (`srl`, not `sra`). + * L6 `o->mode == 1` is a literal and stays one: an EQUALITY test has no `slti` + * form on MIPS, so the 1 is always materialised (`addiu $vX,$zero,1`). The + * §78/`slti` literal-position law does NOT apply to `==` — do not "fix" this + * into a variable. + * + * Drop-one ablations (all on the b1 base, all measured) — see s21_8017DC1C_report.md. + */ +/* ---- the object ---------------------------------------------------------- * + * mode == 1 : `dst` (+0x0C) is a POINTER to the vertex block. + * otherwise : the vertex block is INLINE and `dst` is a byte count; the data + * starts at ((u32 *)&o->dst)[o->dst >> 2]. + * `n` (+0x10) is the vertex count either way. */ +typedef struct { + s32 unk0; /* 0x00 */ + s32 mode; /* 0x04 */ + s32 unk8; /* 0x08 */ + u32 dst; /* 0x0C */ + s32 n; /* 0x10 */ +} Morph_8017DC1C; + +/* ---- per-overlay globals (ov_SC07_006 tail.data) ------------------------- * + * Every one of these is an initialised POINTER word in asm/ov_SC07_006/data/ + * tail.data.s (e.g. D_801BF4F4 = .word D_801AD4DC, D_801C1E14 = .word D_801BFD0C). + * None of them is declared anywhere in the tree today — these spellings are free + * choices and establish the canon. */ +extern Morph_8017DC1C *D_801BF4F4; +extern Morph_8017DC1C *D_801BF4F8; +extern Morph_8017DC1C *D_801BF4FC; +extern Morph_8017DC1C *D_801BF500; +extern Morph_8017DC1C *D_801BF504; +extern Morph_8017DC1C *D_801BF508; +extern Morph_8017DC1C *D_801BF50C; +extern Morph_8017DC1C *D_801BF510; +extern Morph_8017DC1C *D_801BF514; +extern Morph_8017DC1C *D_801BF518; +extern Morph_8017DC1C *D_801BF51C; +extern Morph_8017DC1C *D_801BF520; +extern Morph_8017DC1C *D_801BF524; +extern Morph_8017DC1C *D_801BF528; +extern Morph_8017DC1C *D_801BF52C; +extern Morph_8017DC1C *D_801BF530; +extern Morph_8017DC1C *D_801BF534; +extern Morph_8017DC1C *D_801BF538; +extern Morph_8017DC1C *D_801BF650; +extern Morph_8017DC1C *D_801BF65C; +extern Morph_8017DC1C *D_801BF660; +extern Morph_8017DC1C *D_801BF684; +extern Morph_8017DC1C *D_801BF6A4; +extern Morph_8017DC1C *D_801BF6A8; +extern Morph_8017DC1C *D_801BF6AC; + +extern SVECTOR2 *D_801C1E14; +extern SVECTOR2 *D_801C1E18; +extern SVECTOR2 *D_801C1E1C; +extern SVECTOR2 *D_801C1E20; +extern SVECTOR2 *D_801C1E24; +extern SVECTOR2 *D_801C1E28; +extern SVECTOR2 *D_801C1E2C; +extern SVECTOR2 *D_801C1E30; +extern SVECTOR2 *D_801C1E34; +extern SVECTOR2 *D_801C1E38; +extern SVECTOR2 *D_801C1E3C; +extern SVECTOR2 *D_801C1E40; +extern SVECTOR2 *D_801C1E44; +extern SVECTOR2 *D_801C1E48; +extern SVECTOR2 *D_801C1E4C; +extern SVECTOR2 *D_801C1E50; +extern SVECTOR2 *D_801C1E54; +extern SVECTOR2 *D_801C1E58; +extern SVECTOR2 *D_801C1E60; +extern SVECTOR2 *D_801C1E64; +extern SVECTOR2 *D_801C1E68; +extern SVECTOR2 *D_801C1E6C; +extern SVECTOR2 *D_801C1E70; +extern SVECTOR2 *D_801C1E74; +extern SVECTOR2 *D_801C1E78; +extern SVECTOR2 *D_801C1E7C; +extern SVECTOR2 *D_801C1E80; +extern SVECTOR2 *D_801C1E84; +extern SVECTOR2 *D_801C1E88; +extern SVECTOR2 *D_801C1E8C; +extern SVECTOR2 *D_801C1E90; +extern SVECTOR2 *D_801C1E94; +extern SVECTOR2 *D_801C1E98; +extern SVECTOR2 *D_801C1E9C; +extern SVECTOR2 *D_801C1EA0; +extern SVECTOR2 *D_801C1EA4; +extern SVECTOR2 *D_801C1EA8; +extern SVECTOR2 *D_801C1EAC; +extern SVECTOR2 *D_801C1EB0; + + +/* MUST be `inline` — see L1. 25 expansions == 1518 ins, 0 jal, frame 25*24=0x258. */ +static inline void morph_lerp(Morph_8017DC1C *o, SVECTOR2 *b, SVECTOR2 *a, s32 t) +{ + SVECTOR2 *d; + SVECTOR2 *pa; + SVECTOR2 *pb; + s32 i; + + if (o->mode == 1) { + d = (SVECTOR2 *)o->dst; + } else { + d = (SVECTOR2 *)((u32 *)&o->dst + (o->dst >> 2)); + } + i = o->n; /* L3: before the copies */ + pb = b; /* L2 */ + pa = a; /* L2 */ + for (; i != 0; i--) { + d->vx = pb->vx + (((pa->vx - pb->vx) * t) >> 12); + d->vy = pb->vy + (((pa->vy - pb->vy) * t) >> 12); + d->vz = pb->vz + (((pa->vz - pb->vz) * t) >> 12); + d++; /* L4: reverse of the read order */ + pb++; + pa++; + } +} + +void func_8017DC1C(s32 t) +{ + morph_lerp(D_801BF4F4, D_801C1E14, D_801C1E18, t); + morph_lerp(D_801BF4F8, D_801C1E1C, D_801C1E1C, t); + morph_lerp(D_801BF4FC, D_801C1E20, D_801C1E20, t); + morph_lerp(D_801BF500, D_801C1E24, D_801C1E24, t); + morph_lerp(D_801BF504, D_801C1E28, D_801C1E28, t); + morph_lerp(D_801BF508, D_801C1E40, D_801C1E50, t); + morph_lerp(D_801BF50C, D_801C1E44, D_801C1E54, t); + morph_lerp(D_801BF510, D_801C1E48, D_801C1E58, t); + morph_lerp(D_801BF514, D_801C1E4C, D_801C1E4C, t); + morph_lerp(D_801BF518, D_801C1E60, D_801C1E60, t); + morph_lerp(D_801BF51C, D_801C1E64, D_801C1E64, t); + morph_lerp(D_801BF520, D_801C1E68, D_801C1E68, t); + morph_lerp(D_801BF524, D_801C1E80, D_801C1E90, t); + morph_lerp(D_801BF528, D_801C1E84, D_801C1E94, t); + morph_lerp(D_801BF52C, D_801C1E88, D_801C1E98, t); + morph_lerp(D_801BF530, D_801C1E8C, D_801C1E8C, t); + morph_lerp(D_801BF534, D_801C1E9C, D_801C1E9C, t); + morph_lerp(D_801BF538, D_801C1EA0, D_801C1EA4, t); + morph_lerp(D_801BF650, D_801C1EA4, D_801C1EA8, t); + morph_lerp(D_801BF65C, D_801C1E2C, D_801C1E38, t); + morph_lerp(D_801BF660, D_801C1E30, D_801C1E3C, t); + morph_lerp(D_801BF684, D_801C1EAC, D_801C1E34, t); + morph_lerp(D_801BF6A4, D_801C1E6C, D_801C1E78, t); + morph_lerp(D_801BF6A8, D_801C1E70, D_801C1E7C, t); + morph_lerp(D_801BF6AC, D_801C1E74, D_801C1EB0, t); +} + INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017F3D4); @@ -3824,112 +4033,3 @@ INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80182D4 INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80182F3C); INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80183374); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80183814); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8018881C); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189098); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_801890FC); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189708); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8018984C); - - - -void func_80189AC8(void *a0) { - - extern void (*D_8018EB2C[])(void); - D_8018EB2C[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -void func_80189B04(void *a0) { - - extern void (*D_8018EB44[])(void); - D_8018EB44[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189B40); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C00); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C14); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C28); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C3C); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C50); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C64); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C78); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C8C); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189CA0); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189CB4); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189CC8); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189CDC); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189CF0); - -extern void func_8017D040(s8 a0); -void func_80189D18(void) { - func_8017D040(0); -} - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189D38); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189D58); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189D78); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189D98); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189DB8); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189EF4); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189F70); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189FDC); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8018A124); - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8018A150); - -void func_8018A284(void) { -} - - - -void func_8018A28C(void *a0) { - - extern void (*D_8018EB54[])(void); - D_8018EB54[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -extern s32 func_8012AD50(void *a0); - void func_8018A2C8(u8 *a0) { - *(s16 *)(a0 + 0xFC) = 0; - *(u16 *)(a0 + 0x72) |= 0x1000; - ((void (*)(void))func_8012AD50)(); - } - - -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8018A2F4); - diff --git a/src/ov_SC07_006/ov_SC07_006_jr_80183814.c b/src/ov_SC07_006/ov_SC07_006_jr_80183814.c new file mode 100644 index 000000000..9dd3f4b4b --- /dev/null +++ b/src/ov_SC07_006/ov_SC07_006_jr_80183814.c @@ -0,0 +1,5376 @@ +#include "common.h" +#include "../shared/engine_core.h" + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +extern void func_80128288(void); +extern void func_80128158(void); +extern void func_801285E4(void); +extern void func_80128178(void); +extern void func_80128678(void); +extern void func_80128198(void); +extern void func_80128714(void); +extern void func_801281B8(void); +extern void func_8013E67C(void); +extern void func_801281D8(void); +extern void func_8013E558(void); +extern void func_801281F8(void); +extern s32 func_80128218(void); +extern void func_80128A28(void); +extern void func_80128228(void); +extern void func_80128AF4(void); +extern void func_80128248(void); +extern void func_801282EC(void); +extern void func_80128268(void); +extern void func_80011B7C(int); +extern void func_801282CC(void); +extern void func_8001C0C8(void); +extern void func_80015310(void); +extern void func_80129258(void); +extern void func_801378F0(void); +extern void func_80010E14(void); +extern s16 currentLocationId; +extern s32 func_80029504(void); +extern s32 func_800CF854(s32); +extern s32 func_80128998(void); +extern s32 func_801289F0(void); +extern s32 func_801288E8(s32); +extern s32 func_80128940(s32); +extern s32 func_80029178(s32); +extern s32 func_801288B0(void); +extern void func_80011C10(void); +extern void func_8012832C(void); +extern void func_80129220(void); +extern void func_80011E24(void); +extern void func_80128C14(void); +extern void func_8002AEF8(void); +extern void func_800CFBBC(void); +extern void SsUtReverbOff(void); +extern void func_8013C98C(void); +extern void func_80129C40(s32 a0); +extern void func_800D0630(void); +extern void func_80145CEC(void); +extern void func_80144B9C(); +extern u8 D_800B9A17; +extern u8 D_800B9A10; +extern void func_80128420(void); +extern s32 func_800D0588(void); +extern void func_801284B8(void); +extern void func_80175308(); +extern void func_8016E8F0(void); +extern void func_80175494(void); +extern u8 D_800B9A64; +extern void func_801284F0(void); +extern void func_80146074(void); +extern void func_8012853C(void); +extern void func_80178608(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80011A3C(void); +extern short currentLocationId; +extern short D_800B99F2; +extern void func_80128564(void); +extern u8 D_800B9A11; +extern void func_801285D4(void); +extern s32 func_800D18DC(void); +extern void func_8014607C(void); +extern void func_801287B8(void); +extern void func_80029444(void); +extern void func_800D1754(void); +extern void func_8014ED28(s32 _arg0); +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); +extern int func_801288E8(int arg0); +extern int func_80128940(int arg0); +extern void func_80010AE0(s32 a0); +extern void func_80018450(s32 a0, s32 a1); +extern void func_800183E0(s32 a0); +extern void func_80128D60(s32 a0, s32 *a1, s32 *a2); +extern s32 func_80128DB4(s32 a0, s32 *a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_80128FAC(u16 *arg0); +extern s16 D_8011DB2C; +extern s16 D_8011DB30; +extern s32 D_80126AEC; +extern void func_80129010(void); +extern u8 *func_8012913C(s32 a0); +extern u8 * func_801290DC(s32 a0, u8 *a1); +extern void func_8001D074(s32 a, s32 b); +extern u8 *func_801291C0(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 * func_8012913C(s32 arg0); +extern void func_80016714(void *a0, s32 a1); +extern u8 * func_801291C0(void); +extern void func_80129248(s16 a0); +extern void func_801292C8(u8 *a0); +extern void func_8012927C(void); +extern void func_8012931C(struct vec *a0); +extern void func_80129350(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s16 D_800B9AAC[]; +extern s16 D_800B9AAE[]; +extern s16 D_800B9AB0[]; +extern s16 D_800B9AB2[]; +extern s16 D_800B9AB4[]; +extern s16 D_800B9AB6[]; +extern s16 D_800B9AB8[]; +extern s16 D_800B9ABA[]; +extern void func_80129398(void); +extern s16 D_80114EE0; +extern void func_80129428(void); +extern void func_8012943C(void); +extern s32 D_8005128C; +extern u8 D_800B9A78; +extern void func_801298F4(void *arg0); +extern void func_801299C8(s32 a, s32 b, s32 c); +extern void func_8012944C(void); +extern unsigned short D_800B99F0; +extern struct BigCopy D_80126DB8; +extern u8 D_80126948[]; +extern struct BigCopy D_80114EE8; +extern s32 D_80126E60[]; +extern s8 D_801150D6; +extern s8 D_801152C0; +extern u8 D_80127504; +extern void func_800144D4(void); +extern void func_80129C40(s32 _arg0); +extern void func_8012A328(); +extern void func_80053308(s32); +extern s32 func_80012F74(s32, s32, s32, s32); /* canonical s32 (engine_core); (s16)-cast the return for the sll/sra */ +extern void GsSetRefView2L(void *); +extern s8 D_801150D6; /* canonical (engine_core macro): s8 — access via *(u8*)& for lbu */ +extern s32 D_80126F04[]; +extern u8 D_80126948[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_80126FA8[]; +extern struct BigCopy D_80126DB8;/* canonical (engine_core macro): struct BigCopy — (s32*)& at use */ +extern u8 D_800AF630[]; /* canonical (sibling): u8[] — cast (s32*) at use */ +extern s32 D_800AE688[]; +extern s32 D_801151D4; /* canonical (10 siblings): scalar s32 — store (s32)ptr */ +extern void func_80129CF8(void); +extern void func_8012A018(s32 a, s32 b); +extern void func_80129FF4(void); +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void func_8012A018(s32 a0, s32 a1); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern s16 D_80126940; +extern s16 D_80126942; +extern s16 D_80126944; +extern void *memcpy(void *, const void *, unsigned int); +extern void func_8012A094(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8012A0E0(void); +extern s32 D_80120204; +extern s32 D_80120200; +extern s32 D_8012020C; +extern s32 D_80120208; +extern s16 D_80120218; +extern s16 D_80120210; +extern s16 D_8012021A; +extern s16 D_80120212; +extern s16 D_8012021C; +extern s16 D_80120214; +extern s16 D_80120226; +extern s16 D_80120220; +extern s16 D_80120228; +extern s16 D_80120222; +extern s16 D_8012022A; +extern s16 D_80120224; +extern s32 D_80120294; +extern s16 D_80120298; +extern s16 D_8012029A; +extern void func_8012A110(void); +extern void func_8012A2F4(void); +extern s16 D_80127080; +extern s16 D_801152C2; +extern void func_8012A304(s32 a0, s32 a1); +extern void func_8012A464(void); +extern s32 D_801151D4; +extern void func_8012A4BC(void); +extern void func_8012A598(void *a0); +extern void func_8012A568(void (*a0)(void)); +extern void func_8012A62C(s32); +extern void func_8012A5F8(void (*a0)(void), s32 a1); +extern void func_8012A62C(s32 a0); +extern void func_8012A7D4(void *a0, void *a1); +extern s32 func_8012A6D0(void *a0, void *a1); +extern s16 func_8012A68C(void); +extern s32 func_80047D3C(s32 a0); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 func_8012A6D0(void* a0, void* a1); +extern s16 func_8012A79C(s16 *a0, s16 *a1); +extern s16 func_8012A758(void); +extern void func_8012A7D4(void *arg0, void *arg1); +extern void func_8012AAAC(void); +extern void func_8012A828(s32 a0, void * a1); +extern int func_8012ACE0(void *a0); +extern void func_8012A860(void *a0, int a1); +extern void func_8012A8B0(u8 *a0, s32 a1); +extern void func_8012A8E8(void); +extern u8 D_801202A0[]; +extern u16 D_801270C0; +extern void func_8012A988(u8 *a0); +extern void func_8012A908(void); +extern s32 func_8012ACE0(void *a0); +extern void func_8012ACA0(void *arg0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern s32 func_8012AD50(void * arg0); +extern void func_8012AD64(s32 *a0, s16 a1); +extern void func_8012AD6C(void *a0); +extern void func_8012AD80(s32 a0); +extern void func_8012ADE4(u8 *a0); +extern s32 *D_80126B78; +extern s32 *D_80126B90; +extern s32 D_80126B58; +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80013478(s32 a0, s32 a1); +extern s32 func_8012AE00(s32 a0); +extern s32 func_8012AF0C(s32 a0, s32 a1); +extern s32 func_80134510(s32 arg); +extern s32 func_8012B030(u8 *a0); +extern int func_80047948(int a0); +extern int func_8004787C(int a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_8012B14C(s32 a0, s32 a1); +extern void func_8012B178(s32 a0, s32 a1); +extern void func_8012B1B4(s32 a0, s32 a1); +extern void func_8012B200(u8 *a0); +extern void func_8012B21C(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8012B260(u8 *a0); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern void RotMatrixYXZ(void *m, void *p); +extern void func_8012B370(int a0); +extern void func_8004978C(s16 *a0, void *a1); +extern void func_8012B414(int a0); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012B6D4(s16 *a0, s16 *a1); +extern s32 func_8012B70C(s16 *a0, s16 *a1); +extern s32 ratan2(s32 x, s32 y); +extern s32 func_8012B744(void *a0, void *a1); +extern s16 D_80126CB8; +extern s16 D_80126CB4; +extern s32 func_8012B864(s32 a0); +extern s32 func_8012B8A4(s16 *a0); +extern s32 func_8012B8E4(s32 arg0, s32 arg1); +extern s32 func_8012BA10(s32 arg0, s32 arg1); +extern s32 func_8012BB3C(s32 arg0, s32 arg1, u32 arg2, s32 arg3); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); +extern s16 D_80126CBA; +extern s32 func_8012BCCC(s32 a0); +extern void func_80013350(s32 a0, void *a1); +extern u8 D_80126B5C; +extern void func_8012BD14(s32 a0); +extern s32 func_8012BDBC(s32 a0, s32 a1); +extern s32 func_8012BD3C(s32 a0, s32 a1, s32 a2); +extern void func_8012BE98(s32 a0, u16 *a1); +extern void func_8012BE54(s32 a0); +extern s32 func_800132BC(s32 a0, s32 a1); +extern void func_8012BE98(s32 arg0, u16 * arg1); +extern s32 func_8012BEE8(s32 a0); +extern s32 func_8012BF10(s32 a0, s32 a1); +extern void func_8012BF4C(s32 *a0, s32 a1); +extern void func_8012BF54(void *a0); +extern void func_8012BF68(void *a0); +extern s16 D_80126CB0; +extern s32 func_8012BF7C(s16 *a0); +extern s16 D_80126CAC; +extern short D_80126CAE; +extern int func_8012BFA8(short *a0); +extern s32 D_801274D4; +extern s32 D_801274E0; +extern s32 func_8012C044(s32 a0); +extern void func_8012C218(void *a0); +extern void func_8012C098(void *param_1); +extern s32 func_8012C0EC(s32 a0); +extern void func_8012C194(void); +extern void func_8001CFDC(s32 a, s32 b); +extern void func_8012C1B8(void); +extern u8 D_800B3DF0[]; +extern s32 func_8012C1DC(s32 a0); +extern u8 D_80126720[]; +extern u16 * func_8012C284(u16 *a0); +extern u8 D_80120194[]; +extern s32 func_8012C2D0(void); +extern s32 func_8012C31C(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern u8 D_80078EAE; +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012C438(s32 a0, s32 a1); +extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C51C(void *a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern void func_8012C724(s32 a0, s32 a1); +extern s32 func_8012C750(s32 a0); +extern s32 func_8012C820(u8 *a0); +extern u16 D_801274E4[]; +extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); +extern s32 func_8012CC88(); +extern u8 D_800D3918[]; +extern void func_8012CBA4(s32 a0); +extern void func_8012CBCC(s32 a0); +extern void func_8012CBF4(s32 a0); +extern void func_8012CC1C(s32 arg0, s32 arg1); +extern void func_8012CC40(s32 arg0, s32 arg1); +extern void func_8012CC64(s32 a0, s32 a1); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern s32 func_8012CE2C(s32 a0); +extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); +extern void func_8012CFA8(s32 arg0); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_8012D3B4(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012D098(u16 *param_1, u32 param_2); +extern void func_8012D098(); +extern void func_8012D38C(int a0); +extern void func_8012D3AC(void); +extern s32 AddPrim(s32, void *); +extern s32 RotTransPers(s32, s32, s32 *, s32 *); +extern void SetLineF2(void *); +extern void *func_80010A08(s32); +extern void func_8004914C(void *); +extern void func_800491AC(void *); +extern s32 D_800A651C; +extern u8 D_800AF648; +extern s16 D_800B9A02; +extern void func_8012D4B4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8012D5DC(void); +extern s16 D_80126B98; +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern int func_8012D664(); +extern void func_8012D624(s32 a0); +extern s32 func_8012D714(s32 param_1, u32 param_2); +extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_8014C978(void); +extern s32 func_8012DB84(void); +extern s32 func_8012DE2C(s32 a0); +extern s32 func_8012DDA4(void); +extern s32 func_8012DBD0(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8012DF34(s32 a0, s32 a1, s32 a2); +extern s16 D_80126B9A; +extern u8 D_801152A8[]; +extern void func_8012DFBC(void); +extern void func_8012DFCC(void); +extern void func_8012E014(); +extern void func_8012E138(); +extern void func_8012DFD4(u8 *a0); +extern s32 func_8012E27C(void); +extern void func_8012E284(void); +extern s32 GetTPage(s32, s32, s32, s32); +extern s32 func_8005A600(s32, s32, s32, s32, s32); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void func_8012E32C(void); +extern s32 func_8012E470(s32 a0); +extern void func_8012E4C8(s32 a0); +extern s32 func_8012E504(s32 a0, s32 a1); +extern s32 func_8012E544(s32 a0); +extern s32 func_8012E57C(s32 a0, s32 a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_8012E688(s32 param_1, u16 param_2, u16 param_3); +extern s32 func_8012E778(int param_1, int param_2); +extern void func_8012E88C(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012EA90(s32 param_1, s32 param_2, s32 *param_3); +extern void func_8012EC04(s32 param_1, s32 param_2, s32 *param_3); +extern s32 func_8002A4FC(s32 a0); +extern s32 func_8012EECC(s32 a0); +extern void func_8012EFB8(s32 a0); +extern void func_8012EF34(s32 a0, s32 a1); +extern void func_8012EF70(s32 a0, s32 a1); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2); +extern void RotTransSV(s32 a0, s32 a1, void *a2); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2); +extern void func_8012F2E8(s32 a0, s32 a1, s32 a2); +extern s16 D_80126CB6; +extern void func_8012F374(s32 a0, s32 a1); +extern void *memcpy(void *, const void *, u32); +extern u8 D_80126C38; +extern u8 D_80126C40; +extern u16 D_80126B94; +extern u16 D_80126B96; +extern void func_8012F568(s32 param_1, s32 param_2, s32 param_3, s32 param_4, s32 param_5, s32 param_6); +extern void func_80131B14(); +extern void func_80131E00(struct S80131E00 *a0, s32 a1); +extern s32 func_80131A34(s32, s32); +extern void func_80131CA8(int a0, int a1); +extern void func_8012F5F4(s32 arg0); +extern void func_80131C78(s32 a0); +extern void func_8012F68C(s32 arg0); +extern void func_8012F75C(s32 a0); +extern s32 func_8012BEE8(s32); +extern void func_8012F7B4(s32 a0); +extern void func_80131170(); +extern void func_80131CA8(); +extern void func_8012F828(int param_1); +extern void func_80131340(s32 a0); +extern void func_8012F87C(s32 a0); +extern void func_8012F8C8(int param_1); +extern void func_8012F91C(s32 a0); +extern s32 func_80131A34(s32 a0, s32 a1); +extern void func_80131CA8(s32 a0, s32 a1); +extern void func_8012F968(s32 param_1); +extern void func_801319E0(s32 a0); +extern s32 func_80143B6C(s32 a0, s32 a1); +extern void func_8012FB54(s32 a0); +extern void func_8012FC30(s32 a0); +extern void func_8012FCA4(int a0); +extern void func_80131B14(void); +extern void func_8012FCC4(int param_1); +extern void func_8012FDA8(int param_1); +extern void func_80131170(s32 a0, s32 a1, s32 a2); +extern void func_8012FE70(s32 a0); +extern void func_8012FF00(s32 a0); +extern void func_8012FF4C(s32 a0); +extern void func_80130D48(s32 a0); +extern void func_8012FF98(u8 *a0); +extern s32 func_80131AC8(void *a0); +extern void func_8013001C(void *a0); +extern void func_80130088(void *a0); +extern s32 func_8012BCCC(s32); +extern void func_801300F4(s32 a0); +extern void func_801301E8(u8 *a0); +extern void func_80130278(s32 arg0); +extern void func_80130314(s32 a0); +extern void func_80130360(s32 a0); +extern void func_8012E364(void); +extern void func_801303A0(s32 a0); +extern void func_801303EC(void *a0); +extern void func_80143CD4(s32 a0); +extern void func_800CB0E8(s32 a0); +extern void func_80130438(s32 a0); +extern void func_801319E0(int); +extern int func_80131D68(int, int); +extern int func_8012BEE8(int); +extern void func_80131CA8(int, int); +extern void func_80130514(int param_1); +extern void func_801305CC(u8 *a0); +extern void func_8012CBF4(s32); +extern s32 func_80131D68(s32 a0, s32 a1); +extern void func_80130650(s32 a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80130740(void *a0, u16 *a1); +extern s32 func_801312D0(s32 a0, void *a1); +extern void func_801307B0(s32 a0); +extern void func_80130858(s32 a0); +extern void func_80130898(u8 *a0); +extern void func_801308DC(s32 a0); +extern void func_80166244(); +extern void func_80130974(int param_1); +extern void func_80130A18(u8 *a0); +extern void func_80130AC4(s32 a0); +extern int func_80131A34(int a0, int a1); +extern void func_80130AF0(int param_1); +extern void func_80130D0C(s32 a0); +extern void func_80131170(s32 p, s32 b, s32 c); +extern s32 func_801312D0(s32 param_1, void *param_2); +extern void func_8002A04C(s32 a0); +extern void func_801319E0(s32 arg0); +extern s32 func_80131CF4(s32 a0); +extern int func_80131D68(int a0, int a1); +extern void func_80131E38(u8 *a0); +extern void func_80131E7C(s32 a0); +extern void func_80131EE4(void); +extern void func_80131EEC(void *a0); +extern void func_80131F28(void *a0); +extern void func_80131F64(void *a0); +extern void func_80131FA0(void *a0); +extern void func_80131FDC(void *a0); +extern void func_801320D0(void); +extern void func_8001C214(int, int); +extern void func_801320D8(int param_1); +extern void func_80132144(int param_1); +extern void func_801321B0(int param_1); +extern void func_8013221C(int param_1); +extern void func_8005C324(int dst, int src, int n) __asm__("memcpy"); /* Phase-24: 0x8005C324 is named memcpy for overlays (whale needs it); keep the non-builtin C name here (else built-in codegen), emit via asm-label */ +extern void func_801325B8(int a0, int a1, int a2, int a3, int a4); +extern void func_80132288(int *param_1, int *param_2, int param_3); +extern void func_801325B8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_8013240C(s32 a0); +extern void func_8013277C(void); +extern void func_80020F34(s32 a0, s32 a1); +extern void func_80054514(s32 a0, s32 a1); +extern void func_80132784(s32 a0, s32 a1, u32 a2); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_80132DC4(s32 a0, s32 a1, s32 a2); +extern s32 func_80132E6C(s16 *a0); +extern void func_80132EC4(void *a0, s16 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_801330E0(s16 *a0, s16 *a1, s32 a2); +extern void func_80133060(u8 *a0, s32 *a1, s32 a2); +extern void func_8013339C(short *param_1, short *param_2); +extern s32 func_8013361C(s16 *a0, s16 *a1, s16 *a2, s16 *a3); +extern void func_80136BC4(s32 a0); +extern void func_801336E8(void *a0, int a1, int a2); +extern void func_80136BC4(s32); +extern void func_8013373C(s16 arg0); +extern s32 func_80133784(s32 arg0, void *arg1, s32 arg2); +extern s32 func_80133CD4(); +extern s32 func_80134310(Vec3s *a0, Vec3s *a1, s32 a2); +extern s32 func_8013435C(s16 *a0, s16 *a1, s32 a2, s16 *a3); +extern s32 func_801343C4(s32 angle, s32 p1, s32 p2); +extern s32 func_801345F8(s32 arg); +extern s32 func_80134A28(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int param_1, s16 param_2, s16 param_3, int param_4); +extern s32 func_80134C20(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_80134FB8(s32 a0, s32 a1, s32 a2); +extern int func_80134A74(int, s16, s16, int); +extern int func_80135168(u16 arg0, u16 *p1, u16 *p2); +extern s16 func_80135480(void *param_1, s32 param_2, s16 *param_3, s16 *param_4); +extern s32 func_80136334(void *arg0, s32 arg1, s32 arg2); +extern s32 func_801365B8(void *arg0, s32 arg1, s32 arg2); +extern s32 func_80136824(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80136A94(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80136C3C(void); +extern void func_80136C1C(void); +extern void func_80136C44(void); +extern void func_80136C4C(void); +extern void func_80136C54(void); +extern void func_80136D00(void); +extern void SetLineG2(void *); +extern void func_80136D08(s32 arg0, s32 arg1); +extern u16 D_80126CC4; +extern M2C_UNK func_800153CC(M2C_UNK, u16, M2C_UNK, M2C_UNK, s32, s32); +extern void func_80136DFC(void); +extern void func_80136EC4(void); +extern short D_800B9A02; +extern u8 D_800A6518[]; +extern void GsSortLine(void *a0, void *a1, s32 a2); +extern void func_80136ECC(s16 a0, s16 a1, s16 a2, s16 a3, u8 r, u8 g, u8 b); +extern void func_80137030(s16 a0, s16 a1); +extern void ApplyMatrixSV(void *m, Svec_801372B0 *in, Svec_801372B0 *out); +extern void aGsSortLine(Gline_801372B0 *p, void *ot, s32 z) __asm__("GsSortLine"); +extern void aF80137030(s32 x, s32 y) __asm__("func_80137030"); +extern void func_80137178(s32 x, s32 y); +extern u8 D_800AF630[]; +extern u16 aD800B9A02 __asm__("D_800B9A02"); +extern void func_801372B0(void); +extern void func_80137614(s32 a0, s32 a1, s32 a2); +extern void func_801375EC(s32 a0, s16 a1); +extern s32 func_801399A8(void); +extern void func_801377B4(s32 a0, s32 a1, s32 a2); +extern s32 func_8013767C(s32 a0); +extern void func_801376E8(); +extern void func_801376C8(int a0); +extern s32 D_80127524; +extern s32 D_80127528; +extern void func_80137840(s32 a0); +extern void func_80139634(void *); +extern void func_80139DC8(void); +extern s16 D_8012752E; +extern void func_801379D8(void); +extern void func_801379EC(void); +extern void func_80138BE0(s32 a0); +extern void func_80137BD8(s32 a0); +extern void func_8013A380(void); +extern void func_801379FC(void); +extern void func_80138BE0(int p); +extern void func_80137B80(void); +extern void func_801392FC(); +extern void func_801397B0(s32 a0); +extern void func_80137DD4(s32 a0, u8 *a1, u8 *a2); +extern void func_80139680(s32 a0, u8 *a1); +extern u16 D_800B99D8; +extern int func_80137D08(int arg0, int arg1, short arg2); +extern void func_80137FD8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80137DD4(s32 ent, u8 *arg, u8 *work); +extern void func_801387B8(s32 arg0); +extern void func_80138948(void *a0); +extern s16 func_80138DB8(s32 a0, u8 a1, s32 a2); +extern void func_80138B88(s32 a0); +extern void func_8013895C(s32 a0); +extern s16 D_80127540[4]; +extern s32 func_80139D04(s32 a0, s32 a1); +extern s32 func_80138DE0(s32 a0, s32 a1, s32 a2); +extern void func_80139B18(s32 a0); +extern void func_80138AB4(s32 a0); +extern void func_80138C30(void *a0); +extern void func_8013A9F8(s32 a0, s32 a1); +extern void func_80138D58(s32 a0, u16 a1); +extern s32 func_80014E80(s32 a0, s32 a1); +extern s32 func_8013914C(s32 a0, s32 a1); +extern void func_800599B8(u16 *); +extern u16 D_80127C0C[]; +extern s32 D_80127548[]; +extern s32 func_80138ED0(u8 *param_1, u32 param_2, u8 *param_3); +extern s32 func_80139220(s32 a0); +extern void func_801391F0(void *a0); +extern void func_801392C8(void *a0); +extern void func_801395D4(void *); +extern s32 GetTPage(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80052460(s32 a0, s32 a1, s32 a2); +extern void func_801392FC(s32 arg0, s32 arg1, u8 *arg2); +extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3); +extern void func_80139634(void *a0); +extern void func_80139680(s32 arg0, u8 * arg1); +extern void func_8001931C(void); +extern s16 D_8012752C; +extern void func_80139788(void); +extern void GsSortSprite(void *a0, u8 *a1, s32 a2); +extern void func_801397B0(s32 arg0); +extern void func_8013A8B0(s32 *a0); +extern void func_80139914(s32 arg0); +extern u16 D_80126A08; +extern s16 D_801269F4; +extern s32 D_801269F0; +extern s32 *D_80126A30; +extern void func_80139954(void); +extern s32 D_80126A3C; +extern s32 func_801399F0(s32 a0); +extern s32 D_80127520; +extern void func_80139A34(s32 a0); +extern s32 D_80127530[4]; +extern void func_80139A44(s32 a0, u16 a1); +extern void func_80139A68(s32 a0, u16 a1); +extern void func_80139A8C(s32 a0); +extern void func_80139C7C(u8 *a0); +extern s16 D_8012811A; +extern void func_80139DEC(void); +extern void func_80139DF4(s32 a0); +extern void func_80139E84(s32 a0); +extern void func_80139F0C(s32 a0); +extern void func_80139FBC(struct obj *a0); +extern s32 func_8001B22C(void *a0); +extern void func_80139FE8(void *a0); +extern void func_8013A0A4(struct S8013A0A4 *a0); +extern void func_8013A164(struct S8013A164 *a0); +extern void func_8013A1E8(s32 a0); +extern void func_8013A250(struct S8013A250 *a0); +extern void func_8013A2BC(s32 a0); +extern void func_8013A378(void); +extern u8 D_8011DA80[]; +extern void func_8013A530(); +extern void func_8013A448(void *a0); +extern void func_8013A4C4(struct S8013A4C4 *a0); +extern void func_80015D4C(); +extern void func_80015F04(); +extern void func_8013AA24(s32 a0, s32 a1); +extern void func_8013A530(int param_1); +extern void func_8013A860(void); +extern s32 func_8013A8BC(void); +extern void func_8013A9B4(s32 a0, s32 a1); +extern s32 func_8013A8FC(s32 arg0); +extern void func_8013AD38(void *a0, s32 a1, void *a2, void *a3); +extern void func_8013B204(s32 a0, s32 a1); +extern void func_8013AF20(); +extern void func_8013B274(s32 a0, s32 a1, void *a2); +extern s32 func_8013AB54(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8013AF20(u32 *param_1, u16 *param_2, u16 *param_3, u8 *param_4); +extern void func_8013CA14(void); +extern void func_8013CABC(void); +extern void func_8013CAE8(void); +extern void func_8013CB20(void); +extern void func_8013CB5C(void); +extern void func_8013CF68(); +extern void func_8013D9B0(); +extern void func_8013D064(void); +extern s32 func_8013D13C(void); +extern void func_8013D164(void); +extern void func_8013D178(void); +extern void func_8013D330(void); +extern void func_8013D53C(); +extern void func_8013DD68(); +extern void func_8013D8FC(void); +extern void func_8013CF68(void); +extern void func_8013D3D4(int param_1, int param_2); +extern void func_8013DBE4(int param_1); +extern s32 func_8013E054(void); +extern int SquareRoot12(int a0); +extern int func_8013E064(s16 *a0, s16 *a1); +extern int func_8013E0FC(s16 *a0, s16 *a1); +extern int func_8013E194(s16 *a0, s16 *a1); +extern void Square12(s32 *a0, s32 *a1); +extern s32 func_8013E22C(struct VecA *a0, struct VecB *a1); +extern s32 func_8013E298(s16 *a0); +extern int func_8013E2C4(short *a0); +extern void *D_801274CC; +extern s32 func_8013E410(void); +extern s32 func_8013E448(s32 a0); +extern void func_8013E370(void); +extern s32 (*D_801274D0)(s32); +extern s32 D_801274D8; +extern s32 D_801274DC; +extern s32 func_8013E448(s32 param_1); +extern void func_800D24A0(s32 a0); +extern void func_80141788(void); +extern void *D_8011DB24; +extern s32 func_800D0EC4(void); +extern void func_80141874(void); +extern u8 D_800B9A15; +extern unsigned char D_800B9A13; +extern u16 D_80115110; +extern unsigned short D_80115112; +extern void func_8013E588(void * _arg0); +extern void func_801754A8(void); +extern s32 func_80014ED4(s32); +extern s32 func_80015018(s32); +extern void func_800190AC(void); +extern void func_80141C04(void); +extern void func_8013E5E8(void); +extern void func_8013E83C(void); +extern void func_8013E6AC(void); +extern void func_800D24A0(s32 arg); +extern void func_8013E814(void); +extern void func_8013E83C(); +extern void func_8013E958(); +extern s32 func_80141C50(void); +extern void func_8013F244(void); +extern void func_8013FAF8(s16 a0, s16 a1); +extern void func_8013E958(void); +extern u8 D_801151C8[]; +extern s32 D_801151D0; +extern u16 D_8011511A; +extern u16 D_8011511E; +extern s32 D_80115130; +extern s16 D_8011514C; +extern void func_8013EA54(void); +extern s32 func_8013F350(void); /* §30#2 widened: def returns live $v0; callers discard */ +extern s16 func_8014168C(s16 a0); +extern s32 func_8014032C(s32 a0, s32 a1); +extern unsigned char *func_80141CA4(void); +extern void func_8013EB7C(void); +extern u16 D_80115112; +extern void func_8013ED6C(void); +extern s32 func_8013EE10(); +extern void func_8013F138(void); +extern void func_800D2624(void); +extern unsigned short D_80115114; +extern unsigned short D_80115118; +extern void func_8013F1BC(void); +extern void func_80141C0C(s32); +extern void func_80140E6C(void); +extern void func_80140F00(void); +extern s32 *func_80140958(s32 *, s32, s32); +extern int func_80141100(int); +extern s16 func_8014168C(s16); +extern s32 func_8013FFD8(s16, s32, s32 *); +extern void func_80024054(void *a0, void *a1); +extern s32 *func_800D2650(s32 *, void *, s32, s32, s32, s32); +extern s32 func_800D27DC(s32, s32 *, void *, s32, s32); +extern s32 *func_800D29F8(s32, s32, void *, s32, s32); +extern void func_8013FAF8(s16 arg0, s16 arg1); +extern s32 func_80028D58(void); +extern s32 func_80028DE0(void); +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_801407F4(void); +extern int func_800D2CA8(int, int); +extern void func_800D2D10(int, int, void *, int); +extern int func_80029FE4(void); +extern char *func_8002AAB4(void); +extern char *strcpy(char *, const char *); +extern int func_8002A26C(void); +extern int func_8002A2B0(void); +extern int func_8002A4B8(void); +extern int func_8002A998(void); +extern int func_8002A9DC(void); +extern int func_8002A728(void); +extern int func_8002A76C(void); +extern int func_80029FD4(void); +extern s32 func_8002A1B4(void); +extern short func_8002A28C(void); +extern short func_8002A27C(void); +extern s32 func_8002A400(void); +extern short func_8002A4D8(void); +extern short func_8002A4C8(void); +extern s32 func_8002A8E0(void); +extern short func_8002A9B8(void); +extern short func_8002A9A8(void); +extern s32 func_8002A670(void); +extern short func_8002A748(void); +extern short func_8002A738(void); +extern int func_801412A8(int, int, int, int, int, int); +extern int func_80141100(int param_1); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_801415C0(s32 param_1, s32 param_2); +extern u8 D_80115148[]; +extern u8 D_80115149[]; +extern u8 D_80115158[]; +extern u8 D_8011514D; +extern u8 D_8011515C; +extern s32 func_800D11F0(s32 a0); +extern s32 func_800D1658(s32 a0); +extern s32 func_801416D4(s16 param_1); +extern void func_8001903C(void); +extern void func_801417C4(void); +extern u8 D_800B9A16; +extern u16 D_80115114; +extern void func_801417F8(void); +extern void func_80141C0C(s32 param_1); +extern s32 func_80015144(void); +extern u16 D_8011511C; +extern s32 func_80029178(s32 arg); +extern unsigned char D_80112C04[]; +extern unsigned char D_80112C50[]; +extern unsigned char D_80112C9C[]; +extern unsigned char D_80112CE8[]; +extern unsigned char D_80112D38[]; +extern unsigned char D_80112D78[]; +extern unsigned char D_80112DBC[]; +extern unsigned char D_80112DF4[]; +extern unsigned char D_80112E14[]; +extern unsigned char D_80112E40[]; +extern unsigned char D_80112E6C[]; +extern unsigned char D_80112EBC[]; +extern unsigned char D_80112F0C[]; +extern unsigned char D_80112F48[]; +extern unsigned char D_80112F9C[]; +extern unsigned char D_80112FDC[]; +extern unsigned char D_8011302C[]; +extern unsigned char D_80113074[]; +extern unsigned char D_801130B8[]; +extern unsigned char D_801130E8[]; +extern unsigned char D_80113138[]; +extern unsigned char D_8011317C[]; +extern unsigned char D_801131A8[]; +extern unsigned char D_801131E8[]; +extern unsigned char D_80113214[]; +extern unsigned char D_80113254[]; +extern unsigned char D_80113278[]; +extern unsigned char D_801132B8[]; +extern unsigned char D_801132E4[]; +extern unsigned char D_80113324[]; +extern unsigned char D_80113360[]; +extern unsigned char D_801133A4[]; +extern unsigned char D_801133F4[]; +extern unsigned char D_80113440[]; +extern unsigned char D_80113474[]; +extern unsigned char D_801134B0[]; +extern unsigned char D_801134FC[]; +extern unsigned char D_80113530[]; +extern unsigned char D_80113554[]; +extern unsigned char D_801135A8[]; +extern unsigned char D_80113600[]; +extern unsigned char D_80113650[]; +extern unsigned char D_80113694[]; +extern unsigned char D_801136DC[]; +extern unsigned char D_80113724[]; +extern unsigned char D_80113744[]; +extern unsigned char D_80113770[]; +extern unsigned char D_80113794[]; +extern unsigned char D_801137D8[]; +extern unsigned char D_8011381C[]; +extern unsigned char D_8011383C[]; +extern unsigned char D_8011386C[]; +extern unsigned char D_801138A4[]; +extern unsigned char D_801138D0[]; +extern unsigned char D_80113900[]; +extern unsigned char D_80113944[]; +extern unsigned char D_80113964[]; +extern unsigned char D_8011399C[]; +extern unsigned char D_801139E8[]; +extern unsigned char D_80113A28[]; +extern unsigned char D_80113A50[]; +extern unsigned char D_80113A84[]; +extern unsigned char D_80113AB0[]; +extern unsigned char D_80113AE0[]; +extern unsigned char D_80113B34[]; +extern unsigned char D_80113B68[]; +extern unsigned char D_80113BA4[]; +extern unsigned char D_80113BC0[]; +extern unsigned char D_80113BF0[]; +extern unsigned char D_80113C20[]; +extern unsigned char D_80113C3C[]; +extern unsigned char D_80113C7C[]; +extern unsigned char * func_80141CA4(void); +extern void func_80142414(s32 a0, s16 a1); +extern void func_80142454(s32 a0); +extern void func_801424E4(short *param_1); +extern void func_801425CC(void *a0); +extern void func_8001CA1C(s32 a0, s32 a1); +extern s32 func_8012AD50(void *a0); +extern void func_80142608(s32 param_1); +extern void func_801426D4(s32 a0); +extern void func_80142740(int param_1); +extern void func_80142778(u8 *a1); +extern void func_801427DC(void); +extern void func_801427E4(void); +extern void func_801427EC(int param_1); +extern s32 func_80142DB8(s32 *a0); +extern s32 func_80142D38(s32 *a0); +extern void func_80142BB4(s32 *a0, s32 a1, s32 a2); +extern void func_801428CC(s32 *a0); +extern void func_8014292C(int param_1); +extern void func_80142978(int param_1); +extern void func_801429C4(int param_1); +extern void func_80142A80(void); +extern void func_80142C7C(void); +extern void func_80142C84(s32 a0); +extern void func_80142C9C(s32 * arg0); +extern void func_80142B2C(); +extern void func_80142DC4(int param_1); +extern void func_80142E38(int param_1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80142EC0(s32 param_1); +extern void func_80142FFC(s32 *a0); +extern void func_8014305C(int param_1); +extern void func_80143188(s32 *a0); +extern int func_8001CA88(int, void *); +extern void func_800233CC(void *, unsigned short); +extern void func_801431E8(s32 param_1); +extern void func_80142C9C(s32 *a0); +extern void func_801432FC(s32 *a0); +extern void func_80143390(s32 *a0); +extern void func_80143458(s32 param_1); +extern void func_8014358C(s32 param_1); +extern s32 rand(void); +extern void func_80143640(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801437D8(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80143970(s32 a0); +extern s32 func_8012C658(s32 a0, s32 a1, s32 a2); +extern void func_80143994(s32 a0, s32 a1); +extern void func_801439C0(u8 *a0); +extern s16 D_801152AC; +extern s16 D_801152AA; +extern void func_801439FC(s32 a0); +extern void func_80143B30(void *a0); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80143B6C(s32 arg0, s32 arg1); +extern void func_80143BDC(u16 *a0); +extern void func_80143C38(void *a0); +extern void func_80143C74(s32 a0, s32 a1); +extern void func_80143C98(void *a0); +extern void func_80143E68(void *a0); +extern void func_80143EA4(void); +extern void func_80143EAC(void); +extern void func_80143EB4(void); +extern s32 func_8004787C(s32 a0); +extern void func_80143EBC(s32 a0); +extern void func_80144054(void *a0); +extern void func_801442F8(int param_1); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80144364(int param_1); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern void func_80144558(u8 *param_1); +extern void func_801446A4(int param_1); +extern void func_8014477C(void *param_1); +extern void func_80144880(s32 param_1); +extern void func_80144988(s32 a0); +extern void func_801449C8(void *a0); +extern void func_80144A04(s32 *a0); +extern void func_80144A2C(void *a0); +extern void func_80144A68(s32 *a0); +extern void func_80144A90(void); +extern void func_80144A98(u8 *a0); +extern void func_80144B14(); +extern void func_80144AEC(s32 *a0); +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern void func_80145B24(void); +extern void func_80145934(void); +extern void func_80145A2C(void); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_80078EC0; +extern void func_80145BF8(void); +extern void func_80145C54(void); +extern void func_80146014(s32 a0); +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(); +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C3C(u8 *a0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern volatile s32 D_80127090; +extern volatile s32 D_80127094; +extern volatile s32 D_80127098; +extern void func_80147F78(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80148038(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148D44(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(); +extern s32 func_801498E0(s32 *a0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 func_80149FB0(s32 a0); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8014A1B0(s32 a0, s32 a1); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern u8 D_80078E78[]; +extern s32 func_8016F1C4(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_8014BD60(s32 a0, s32 a1); +extern void func_8014B084(void); +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 a0, s32 a1, void* a2); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern struct Packed8 D_80126C98; +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern void func_8014CF04(); +extern void func_8014CD80(); +extern void func_8014D2A0(); +extern s32 func_8014D12C(); +extern void func_8014D0A4(s32 a0); +extern void func_8014D610(); +extern s32 func_8014D4C0(); +extern void func_8014D438(s32 a0); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern void func_8014D820(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern void func_8014DF94(s32 arg0); +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); /* canonical (engine_core.h:11555) */ +extern s32 func_8014E284(s32 a0, s16 *arg1, s16 *arg2); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E48C(s32 a0); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern u16 D_800B99DA; +extern s32 D_801150D8; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014ED80(struct SubED80 *a0); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014F4C0(); +extern s32 func_8014F468(void); +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern void func_8014FA04(s32 a0); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern void func_801504D8(u16 *a0); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B28(int param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 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(); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void func_80152C80(s32* a0); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern u8 D_80062C04[]; +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern S801563EC *func_801563EC(u16 idx); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern S801563EC * func_801563EC(u16 idx); +extern s32 func_801564B0(s32 a0); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(void *a0); +extern void func_801567BC(s32 a0); +extern B8 D_80128120[]; +extern B8 D_80128138[]; +extern S8 D_80126AF0[]; +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern s32 func_80135260(s32 a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void func_8014CC28(s32 a0); /* defined */ +extern s32 func_8014F3E8(); /* 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 void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_80157808(s32 a0); +extern void func_801577C8(int param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +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 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 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 func_80158038(void *); +extern void func_80158000(void *a0); +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 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 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 void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +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 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 int rand(void); +extern void func_80158F00(int param_1); +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 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 u8 D_80110C3C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_8013C938(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +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 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 func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +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 func_8015A2A0(s32 a0); +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 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 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(); +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(void); +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 func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern void func_8014D738(void); +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 func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80161240(void *a0); +extern void func_80161C24(s32, s32); +extern void func_8015C7E4(u16 *param_1); +extern void func_8015C944(int param_1); +extern void func_8015CA28(u16 *param_1); +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 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 func_8014E6A0(void); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +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 void func_80154150(int, int); +extern void func_80149374(int, int); +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_8015F89C(void *arg0); +extern void func_8015F9A4(void *arg0); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +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 void func_8015E5B0(u8*); +extern void func_8015E344(u16 *param_1); +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern s32 func_8013C9C4(s32 *a0); +extern void func_8015E5B0(u8 *self); +extern void func_8015E698(u16 *param_1); +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 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 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_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F948(s32 *param_1); +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 void func_8015FD74(int param_1); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern void func_8015FE70(u16 *param_1); +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_801602A4(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_80160A74(s32 *a0); +extern void func_80160920(unsigned short *param_1); +extern void func_801609B8(u16 *param_1); +extern void func_80160A28(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 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(); +extern s32 func_80161A60(s32 a0); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161374(); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(); +extern void func_80161774(); +extern s32 func_8016197C(s32 a0, s32 a1); +extern s32 func_80161488(void *a0); +extern void func_80161888(); +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 void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern void func_800D1734(void *); +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 void func_8016216C(void); +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(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 void func_80162760(void); +extern void func_801627C0(void); +extern void func_80162834(void *a0); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +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_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, s32 a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +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 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 func_80164744(s32 param_1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +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 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 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 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 func_801656D0(s32 a0, s32 a1); +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 u8 D_80078EC2; +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(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 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(); +extern void func_80165E90(void); +extern void func_80166018(void *a0); +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 func_801663FC(void *a0); +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern void func_80166618(void *a0); +extern void func_80166654(void *a0); +extern void func_801678B4(void *a0); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80017758(void *a0, void *a1); +extern int func_80029178(int); +extern void func_80168070(); +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_80166F58(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_801681FC(s32 param_1); +extern void func_80168430(s32 param_1); +extern void func_80168640(s32 a0); +extern Blk20 D_800AE620; +extern s32 RotMatrixX(s32 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_80168664(void *arg0); +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_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_80168D58(void *a0); +extern void func_80168F40(void *arg0); +extern void func_8016901C(void *a0); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void func_80169830(void *a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_80169B80(void *a0); +extern void func_80169F00(void *a0); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A700(void *a0); +extern s32 func_80016A5C(); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016AB30(void *a0); +extern void func_8016B234(void); +extern void func_800D22E4(s32 a0); +extern void func_8016AFB0(s32 a0); +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 func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +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 void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +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 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void func_8016BBA4(void *a0); +extern void func_8016BF50(s32); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8016BD78(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(); +extern void func_8016C83C(s32 a0); +extern void func_8016CB84(void *a0); +extern void func_8016D19C(void *a0); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016DBD8(u8 *a0); +extern void func_8016DA30(int param_1); +extern void func_8016DEA4(void *a0); +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_800D20C0(void *a0, void *a1, s32 a2); +extern void func_800D23D0(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_8016E460(void *arg0, void *arg1); +extern void func_8016E5B8(void *a0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern s32 D_80115218; +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +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 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); +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 func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +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 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 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 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 func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +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 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 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 func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +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 func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +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 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 func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +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 func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +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 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 func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +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 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 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 func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +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 func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_8017118C(u8 * a0); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +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 func_801714E4(void *a0); +extern struct B16 D_800A5E88; +extern struct B16 D_800A5E98; +extern struct B16 D_800A5EA8; +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_8017248C(s32, s32); +extern s32 ratan2(s32, s32); +extern void func_80172170(s32, s32); +extern void func_80146D90(s32); +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_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 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 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 struct S80126B38 D_80126B38; +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +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(); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern s16 D_80126B3A; +extern s16 D_8011F9C8; +extern void func_8013E588(void*); +extern void func_80173BC0(u8* a0); +extern void func_80173C64(u8 *a0); +extern u8 D_800D5DB8; +extern void func_80173CB4(s32 a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +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 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 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_80174684(void* a0); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern s32 func_8016F0AC(); +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 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_80174BF4(void *a0); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(); +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 s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern s32 func_80175218(void * param_1); +extern s32 func_80175268(s32 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_80175414(s32 _arg0); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern void func_80175590(void *arg0); +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +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(); +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_801775E0(s32 param_1, s32 param_2); +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 void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8017869C(s32 a0); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern void func_80178840(int param_1); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern int func_801789AC(void); +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 void func_80178BF8(s32 _unused0, s32 _unused1); +extern M2C_UNK func_80178D40(s32 arg0, s32 arg1); +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +extern void func_80179B28(s32 a0); +extern void func_80179B74(s16 *a0); +extern void func_80179D30(u16 *a0); +extern void func_80179D78(u16 *a0); +extern void func_80179B74(short *); +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_80179B74(short *p); +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 void func_8017A094(s32 arg0); +extern void func_8017A0C4(s32 arg0); +extern void func_8017A0F4(void); +extern void func_8017A11C(void); +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 s32 func_8017A3B0(void); +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); +extern int func_8017A3D8(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 void func_8012A418(void); +extern void func_8017B1D8(void); +extern void func_8017B614(void *, s32); +extern s32 func_8017B238(s32 param_1, s32 param_2); +extern s32 func_8017B368(s32 param); +extern s32 func_8017B490(s32 param); +extern void func_8017B7A8(void); +extern void func_8017B824(void); +extern void func_8017B880(void); +extern s32 func_8017B8E8(s32 src); +extern void func_8017B940(void); +extern s32 func_8017BB34(s32 param_1, s32 param_2); +extern void func_8017BC38(int param_1); +extern void func_8017B0E4(int, int); +extern void func_8017BCA0(int param_1); +extern void func_8017BCF4(int param_1); +extern void func_8017BD50(int param_1); +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 func_8017CDBC(void *a0); +extern s32 func_8017CE3C(void); +extern void func_8017CE60(void *a0); +extern s32 func_8017CE9C(void *a0); +extern void func_8001BFD0(void); +extern void func_800D1E28(void); +extern s32 func_8017CEB8(u8 *a0); +extern void func_800D1EBC(void); +extern void func_8017CF34(void); +extern void func_8017D0F4(void *a0); +extern void func_8017D868(void *a0); +/* ==== end §8b carried decl layer ==== */ + +/* + * func_80183814 -- ov_SC07_006 (jr / 21-case jump-table state machine), 5,122 ins. + * ROUND 2 deliverable, 2026-07-26. Generated by .run/giants/s21_g21_build.py. + * + * STATUS (measured, not claimed): + * tools/match_one.py func_80183814 --c \ + * --asm-subdir asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC + * -> MATCH (5122 ins) + * + * Round-1 left 5127 ins / 36 structurally-unmatched / 1201 register-sensitive. + * This draft: 5122 ins (= target), 0 structural, 0 register-sensitive, + * .frame $sp,248 (= target -0xF8), .mask 0x807f0000 (= ra + $s0..$s6, 8 saves). + * + * match_one is a CANDIDATE gate: it masks jal/HI16/LO16 and never links, so it + * is blind to a wrong callee (S87), a duplicated jump table (S81) and a + * mis-derived %lo (S84). .run/giants/s21_g21_reloc_verify.py closes all three + * by RESOLVING every relocation (symbol + implicit REL addend) and comparing it + * with the address the target names at the same index: + * 359/359 jal callees OK, 60/60 internal j destinations OK, + * 406/406 %hi/%lo data addresses OK (incl. the 6 derived-offset sites). + * The ONLY unresolved relocation is the switch table itself: this object emits a + * local .rodata table where the target uses jtbl_801F4CE4. That is the 3-step + * jr carve chain, owned by banking. NOT yet whole-binary verified. + * + * LEVERS (all drop-one ablated on this final base; every one is load-bearing): + * L1 cases 0/3, 2nd call group: reach the three &D_8018E27C-class addresses via + * a DISTINCT base symbol (S84 idiom). Without it gcc CSEs the address + * constants across the two call groups that share one basic block, burning + * 2 callee-saved registers and renaming every register downstream. + * drop -> 5132 ins, 26 structural, 773 reg, frame 256, 10 saves. + * *** THIS IS A HAND-PLACED DIAL, NOT RECOVERED ORIGINAL SOURCE. *** + * Address arithmetic verified: 0x8018E2DC-0x60 == 0x8018E27C etc. (6/6). + * L2 the template's own locals (p,q,s0,s1,s4,s5) declared inside the template + * block instead of at function scope. drop -> 6 structural, 754 reg. + * L3 KIND==1 template instances carry a preheader compare constant, spelled in + * the for-init: `for (s4=S, kk=1, q=&D_801F61C0[S]; ...)` + `p[1] == kk`. + * drop -> 5116 ins, 14 structural, 7 saves (target has 8). + * *** ALSO A DIAL: it makes 4 of the 35 template instances differ in source + * from the other 31. See the report; the natural spelling is UNKNOWN. *** + * L4 the audio ramp's `t`/`idx` declared inside its `if (r >= c)` block. + * drop -> 5121 ins, 1 structural, 288 reg. (This also buys the last + * instruction: case 9's delay-slot `li $a0,0x3AC`.) + * L5 morph/lerp: `pb = msb;` initialised BEFORE `pa = msa;`. drop -> 35 reg. + * L6 morph/lerp: pointer bumps ordered `md += 4; pb += 4; pa += 4;`. + * drop -> 45 reg. + * L7 case 19 reads the 0xA field SIGNED: `(*(s16*)(s0+0xA) - 0x8B) - (rand()&0x3F)`. + * The unsigned spelling lets combine reassociate to `mem - (r + 0x8B)`. + * drop -> 1 structural, 1 reg. (`(u16)(...)` cast barrier measures identical.) + * + * Round-1 levers retained unchanged: the 35x spawn template (one definition, + * S83b), the running-pointer walk, `rand() % (u32)x` -> divu, the + * `(s32)((u8*)p + (X+0xC))` cast barrier, the morph pa/pb copy walk (S83e), and + * NO dead `pad[32]` (S83c -- that block is gcc's spill area). + */ +#include "common.h" + +extern s32 func_8004787C(s32 a0); +extern void func_8017FDF8(s32 a0); +extern void func_8017F9AC(s32 a0, void *a1); +extern void func_8017D8A4(s32 a0, void *a1, void *a2, s32 a3, s32 a4); +extern void func_800599B8(u16*); +extern s32 func_8012C658(s32 a0, s32 a1, s32 a2); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8017F5D4(s32 a0); +extern void func_801805D4(s32 a0, void *a1); +extern void func_8001C214(s32, s32); +extern void func_8001D0E8(s32 a0, s32 a1, s32 a2); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80016224(s32 a0, s32 a1); +extern void func_8012EC04(s32 a0, s32 a1, s32 *a2); +extern void func_8012F14C(s32, s32, s32); +extern s32 func_8012C51C(void*, s32); +extern s32 rand(void); +extern int func_80178970(void); +extern void func_80178D18(void); +extern void func_801802EC(s32 a0); +extern void func_80180924(s32 a0); +extern void func_80180CFC(s32 a0, void *a1); +extern void func_80181148(s32 a0); +extern void func_8018163C(s32 a0); +extern void func_80181924(s32 a0, void *a1); +extern void func_80182268(s32 a0, s32 a1); +extern void func_801823F8(s32 a0); +extern void func_801826E0(s32 a0, s32 a1); +extern void func_801828A4(s32 a0); +extern void func_80182B8C(s32 a0, s32 a1); +extern void func_80181E64(s32 a0, s32 a1); +extern void func_80182000(s32 a0, s32 a1); +extern void func_80182158(s32 a0); +extern void func_80181C74(s32 a0, s32 a1); +extern void func_80182D4C(s32 a0, s32 a1); +extern void func_80128EA8(s32, s32, s32); +extern void func_80143C74(s32, s32); + +extern u8 D_8018E27C; +extern u8 D_8018E288; +extern u8 D_8018E294; +extern u8 D_8018E2A0; +extern u8 D_8018E2DC; +extern u8 D_8018E2E8; +extern u8 D_8018E2F4; +extern u8 D_8018E300; +extern u8 D_8018DFC0; +extern u8 D_8018DFC8; +extern u8 D_8018DFD0; +extern u8 D_8018DFD8; +extern u8 D_8018DFE0; +extern u8 D_8018DFE8; +extern u8 D_8018DFF0; +extern u8 D_8018DFF8; +extern u8 D_8018E000; +extern u8 D_8018E008; +extern u8 D_8018E010; +extern u8 D_8018E018; +extern s32 D_8018E034[]; +extern u8 D_8018DF10; +extern s32 D_801BFCB4; +extern s32 D_801BFCBC; +extern s32 D_801BFCC4; +extern u8 D_801BF540; +extern u8 D_801BF588; +extern u8 D_801BFCCC; +extern s32 *D_801BF5CC; +extern u8 D_801BF630; +extern u8 D_801BFCDC; +extern u8 D_801BF658; +extern u8 D_801BFCE4; +extern u8 D_801BF68C; +extern u8 D_801BFCEC; +extern u8 D_801CAA38; +extern u8 D_8018E020; +extern u8 D_8018E028; +extern u8 D_8018E030; +extern u8 D_8018E3A8; +extern u8 D_801BF60C; +extern s32 D_801BFCD4; +extern s16 *D_801C1E14; +extern s16 *D_801C1E18; +extern u8 D_801BF6CC; +extern u8 D_801CA678; +extern s32 *D_801BF604; +extern s32 *D_801BF650; +extern s16 *D_801C1EA0; +extern s16 *D_801C1EA4; +extern s16 *D_801C1EA8; +extern s32 D_801F61C0[]; + +void func_80183814(void *a0) { + s32 sp18[8]; + s16 sp38[4]; + s16 sp40[10]; + s32 s3; + s32 s0; + s32 s1; + s32 s4; + s32 s5; + s32 c; + s32 r; + s32 t; + s32 idx; + s32 ok; + s32 *p; + s32 *q; + + s0 = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + s3 = s0 + (func_8004787C(*(s16 *)((s32)a0 + 0xFE)) >> 4); + *(u16 *)((s32)a0 + 0xFE) = (*(u16 *)((s32)a0 + 0xFE) + 0x300) & 0xFFF; + if (*(u16 *)((s32)a0 + 0x34) < 0x11) { + *(s32 *)((s32)a0 + 0x8) = + (*(s16 *)((s32)a0 + 0x8A) << 16) + + (func_8004787C(*(s16 *)((s32)a0 + 0x104)) << 7); + *(u16 *)((s32)a0 + 0x104) = *(u16 *)((s32)a0 + 0x104) + 0x40; + } + + switch (*(u16 *)((s32)a0 + 0x34)) { + case 0: + *(s16 *)((s32)a0 + 0xFC) = *(s16 *)((s32)a0 + 0xFC) + 8; + func_8017F9AC(s3, a0); + func_8017D8A4(D_801BFCB4 + 0x3C, &D_8018E27C, &D_8018E27C + 0x30, s3, 1); + func_8017D8A4(D_801BFCB4 + 0x48, &D_8018E288, &D_8018E288 + 0x30, s3, 1); + func_8017D8A4(D_801BFCB4 + 0x54, &D_8018E294, &D_8018E294 + 0x30, s3, 1); + func_8017D8A4(D_801BFCB4 + 0x60, &D_8018E2A0, &D_8018E2A0 + 0x30, s3, 1); + func_8017FDF8(func_8004787C(*(s16 *)((s32)a0 + 0xFC))); + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + ((void (*)(void *, s32))func_800599B8)(&D_8018DFC0, D_8018E034[t]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 9; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFC8, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x12; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFD0, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x1B; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFD8, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x24; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFE0, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x2D; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFE8, D_8018E034[idx]); + ok = 1; + } else { + ok = 0; + } + if (ok != 0) { + *(u16 *)((s32)a0 + 0x102) = *(u16 *)((s32)a0 + 0x102) + 0x1C7; + } + if (*(s16 *)((s32)a0 + 0xFC) != 0x200) { + break; + } + s1 = 0; + do { + s0 = func_8012C658(0x3AC, 0, (s32)a0); + if (s0 != 0) { + *(u16 *)(s0 + 0xE) = *(u16 *)(s0 + 0xE) - 0x2D; + *(u16 *)(s0 + 0xA) = *(u16 *)(s0 + 0xA) - 0x47; + *(u16 *)(s0 + 0x6) = *(u16 *)(s0 + 0x6) - 5; + } + s1 += 1; + } while (s1 < 0x10); + func_8002D4C8(0xBBE, 0); + func_8017F5D4(0x1000); + func_8017D8A4(D_801BFCB4 + 0x3C, &D_8018E27C, &D_8018E27C + 0x30, 0x1000, 1); + func_8017D8A4(D_801BFCB4 + 0x48, &D_8018E288, &D_8018E288 + 0x30, 0x1000, 1); + func_8017D8A4(D_801BFCB4 + 0x54, &D_8018E294, &D_8018E294 + 0x30, 0x1000, 1); + func_8017D8A4(D_801BFCB4 + 0x60, &D_8018E2A0, &D_8018E2A0 + 0x30, 0x1000, 1); + *(u16 *)((s32)a0 + 0x34) = 1; + func_801805D4(s3, a0); + ((void (*)(s32, void *))func_8001C214)(*(s32 *)((s32)a0 + 0x20), &D_801BF540); + func_8001D0E8(*(s32 *)((s32)a0 + 0x20), 0x280, 0x1E0); + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400; + func_8012A828((s32)a0, &D_801BFCBC); + func_8017D8A4(D_801BFCBC + 0x3C, &D_8018E2DC - 0x60, &D_8018E2DC - 0x30, s3, 1); + func_8017D8A4(D_801BFCBC + 0x48, &D_8018E2E8 - 0x60, &D_8018E2E8 - 0x30, s3, 1); + func_8017D8A4(D_801BFCBC + 0x54, &D_8018E2F4 - 0x60, &D_8018E2F4 - 0x30, s3, 1); + break; + case 1: + *(s16 *)((s32)a0 + 0xFC) = *(s16 *)((s32)a0 + 0xFC) + 8; + func_801805D4(s3, a0); + func_8017D8A4(D_801BFCBC + 0x3C, &D_8018E27C, &D_8018E27C + 0x30, s3, 1); + func_8017D8A4(D_801BFCBC + 0x48, &D_8018E288, &D_8018E288 + 0x30, s3, 1); + func_8017D8A4(D_801BFCBC + 0x54, &D_8018E294, &D_8018E294 + 0x30, s3, 1); + func_8017FDF8(func_8004787C(*(s16 *)((s32)a0 + 0xFC))); + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + ((void (*)(void *, s32))func_800599B8)(&D_8018DFC0, D_8018E034[t]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 9; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFC8, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x12; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFD0, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x1B; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFD8, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x24; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFE0, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x2D; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFE8, D_8018E034[idx]); + ok = 1; + } else { + ok = 0; + } + if (ok != 0) { + *(u16 *)((s32)a0 + 0x102) = *(u16 *)((s32)a0 + 0x102) + 0x1C7; + } + if (*(s16 *)((s32)a0 + 0xFC) < 0x400) { + break; + } + *(u16 *)((s32)a0 + 0x34) = 2; + *(s32 *)((s32)a0 + 0x1C) = 0xA; + func_801802EC(0x1000); + func_8017D8A4(D_801BFCBC + 0x3C, &D_8018E27C, &D_8018E27C + 0x30, 0x1000, 1); + func_8017D8A4(D_801BFCBC + 0x48, &D_8018E288, &D_8018E288 + 0x30, 0x1000, 1); + func_8017D8A4(D_801BFCBC + 0x54, &D_8018E294, &D_8018E294 + 0x30, 0x1000, 1); + func_8017FDF8(0x1000); + break; + case 2: + if (*(s32 *)((s32)a0 + 0x1C) < 7) { + func_80016224(0xFF, 0); + } + if ((*(s32 *)((s32)a0 + 0x1C) = *(s32 *)((s32)a0 + 0x1C) - 1) != 0) { + break; + } + *(u16 *)((s32)a0 + 0x34) = 3; + *(s16 *)((s32)a0 + 0xFC) = 0; + *(u16 *)((s32)a0 + 0x102) = 0x1C7; + func_8002D4C8(0xBB6, 0); + break; + case 3: + *(s16 *)((s32)a0 + 0xFC) = *(s16 *)((s32)a0 + 0xFC) + 8; + func_80180CFC(s3, a0); + func_8017D8A4(D_801BFCBC + 0x84, &D_8018E2DC, &D_8018E2DC + 0x30, s3, 1); + func_8017D8A4(D_801BFCBC + 0x90, &D_8018E2E8, &D_8018E2E8 + 0x30, s3, 1); + func_8017D8A4(D_801BFCBC + 0x9C, &D_8018E2F4, &D_8018E2F4 + 0x30, s3, 1); + func_8017D8A4(D_801BFCBC + 0xA8, &D_8018E300, &D_8018E300 + 0x30, s3, 1); + func_80181148(func_8004787C(*(s16 *)((s32)a0 + 0xFC))); + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x36; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFF0, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x3F; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFF8, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x48; + ((void (*)(void *, s32))func_800599B8)(&D_8018E000, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x51; + ((void (*)(void *, s32))func_800599B8)(&D_8018E008, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x5A; + ((void (*)(void *, s32))func_800599B8)(&D_8018E010, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x63; + ((void (*)(void *, s32))func_800599B8)(&D_8018E018, D_8018E034[idx]); + ok = 1; + } else { + ok = 0; + } + if (ok != 0) { + *(u16 *)((s32)a0 + 0x102) = *(u16 *)((s32)a0 + 0x102) + 0x1C7; + } + if (*(s16 *)((s32)a0 + 0xFC) < 0x200) { + break; + } + s1 = 0; + do { + s0 = func_8012C658(0x3AC, 0, (s32)a0); + if (s0 != 0) { + *(u16 *)(s0 + 0xE) = *(u16 *)(s0 + 0xE) + 0x2D; + *(u16 *)(s0 + 0xA) = *(u16 *)(s0 + 0xA) - 0x47; + *(u16 *)(s0 + 0x6) = *(u16 *)(s0 + 0x6) - 5; + } + s1 += 1; + } while (s1 < 0x10); + func_8002D4C8(0xBBE, 0); + func_80180924(0x1000); + func_8017D8A4(D_801BFCBC + 0x84, &D_8018E2DC, &D_8018E2DC + 0x30, 0x1000, 1); + func_8017D8A4(D_801BFCBC + 0x90, &D_8018E2E8, &D_8018E2E8 + 0x30, 0x1000, 1); + func_8017D8A4(D_801BFCBC + 0x9C, &D_8018E2F4, &D_8018E2F4 + 0x30, 0x1000, 1); + func_8017D8A4(D_801BFCBC + 0xA8, &D_8018E300, &D_8018E300 + 0x30, 0x1000, 1); + *(u16 *)((s32)a0 + 0x34) = 4; + func_80181924(s3, a0); + ((void (*)(s32, void *))func_8001C214)(*(s32 *)((s32)a0 + 0x20), &D_801BF588); + func_8001D0E8(*(s32 *)((s32)a0 + 0x20), 0x280, 0x1E0); + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400; + func_8012A828((s32)a0, &D_801BFCC4); + func_8017D8A4(D_801BFCC4 + 0x84, &D_8018E27C + 0x60, &D_8018E27C + 0x90, s3, 1); + func_8017D8A4(D_801BFCC4 + 0x90, &D_8018E288 + 0x60, &D_8018E288 + 0x90, s3, 1); + func_8017D8A4(D_801BFCC4 + 0x9C, &D_8018E294 + 0x60, &D_8018E294 + 0x90, s3, 1); + break; + case 4: + *(s16 *)((s32)a0 + 0xFC) = *(s16 *)((s32)a0 + 0xFC) + 8; + func_80181924(s3, a0); + func_8017D8A4(D_801BFCC4 + 0x84, &D_8018E2DC, &D_8018E2DC + 0x30, s3, 1); + func_8017D8A4(D_801BFCC4 + 0x90, &D_8018E2E8, &D_8018E2E8 + 0x30, s3, 1); + func_8017D8A4(D_801BFCC4 + 0x9C, &D_8018E2F4, &D_8018E2F4 + 0x30, s3, 1); + func_80181148(func_8004787C(*(s16 *)((s32)a0 + 0xFC))); + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x36; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFF0, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x3F; + ((void (*)(void *, s32))func_800599B8)(&D_8018DFF8, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x48; + ((void (*)(void *, s32))func_800599B8)(&D_8018E000, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x51; + ((void (*)(void *, s32))func_800599B8)(&D_8018E008, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x5A; + ((void (*)(void *, s32))func_800599B8)(&D_8018E010, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 455); + if (t >= 10) { + t = 9; + } + idx = t + 0x63; + ((void (*)(void *, s32))func_800599B8)(&D_8018E018, D_8018E034[idx]); + ok = 1; + } else { + ok = 0; + } + if (ok != 0) { + *(u16 *)((s32)a0 + 0x102) = *(u16 *)((s32)a0 + 0x102) + 0x199; + } + if (*(s16 *)((s32)a0 + 0xFC) < 0x400) { + break; + } + *(u16 *)((s32)a0 + 0x34) = 5; + *(s32 *)((s32)a0 + 0x1C) = 0xA; + func_8018163C(0x1000); + func_8017D8A4(D_801BFCC4 + 0x84, &D_8018E2DC, &D_8018E2DC + 0x30, 0x1000, 1); + func_8017D8A4(D_801BFCC4 + 0x90, &D_8018E2E8, &D_8018E2E8 + 0x30, 0x1000, 1); + func_8017D8A4(D_801BFCC4 + 0x9C, &D_8018E2F4, &D_8018E2F4 + 0x30, 0x1000, 1); + func_80181148(0x1000); + break; + case 5: + if (*(s32 *)((s32)a0 + 0x1C) < 7) { + func_80016224(0xFF, 0); + } + if ((*(s32 *)((s32)a0 + 0x1C) = *(s32 *)((s32)a0 + 0x1C) - 1) != 0) { + break; + } + *(u16 *)((s32)a0 + 0x34) = 6; + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(s32, void *))func_8001C214)(*(s32 *)((s32)a0 + 0x20), &D_801BF5CC); + func_8001D0E8(*(s32 *)((s32)a0 + 0x20), 0x280, 0x1E0); + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400; + func_8012A828((s32)a0, &D_801BFCCC); + func_8012C658(0x3AC, 1, (s32)a0); + *(u16 *)((s32)a0 + 0x102) = 0x1C7; + func_8002D4C8(0xBB9, 0); + func_8002D4C8(0xC6F, 0); + break; + case 6: + *(s16 *)((s32)a0 + 0xFC) = *(s16 *)((s32)a0 + 0xFC) + 8; + { + s32 *mp; + s16 *md; + s16 *msa; + s16 *msb; + s32 mn; + s16 *pa; + s16 *pb; + + mp = D_801BF604; + msb = D_801C1EA0; + msa = D_801C1EA4; + if (mp[1] == 1) { + md = (s16 *)mp[3]; + } else { + md = (s16 *)((u8 *)mp + ((((u32)mp[3] >> 2) << 2) + 0xC)); + } + mn = mp[4]; + pb = msb; + pa = msa; + while (mn != 0) { + md[0] = pb[0] + (((pa[0] - pb[0]) * s3) >> 12); + md[1] = pb[1] + (((pa[1] - pb[1]) * s3) >> 12); + md[2] = pb[2] + (((pa[2] - pb[2]) * s3) >> 12); + md += 4; + pb += 4; + pa += 4; + mn--; + } + } + func_80181C74((s32)a0, s3); + if (*(s16 *)((s32)a0 + 0xFC) < 0x400) { + break; + } + *(u16 *)((s32)a0 + 0x34) = 7; + *(s32 *)((s32)a0 + 0x1C) = 0xA; + t = 0x1000; + { + s32 *mp; + s16 *md; + s16 *msa; + s16 *msb; + s32 mn; + s16 *pa; + s16 *pb; + + mp = D_801BF604; + msb = D_801C1EA0; + msa = D_801C1EA4; + if (mp[1] == 1) { + md = (s16 *)mp[3]; + } else { + md = (s16 *)((u8 *)mp + ((((u32)mp[3] >> 2) << 2) + 0xC)); + } + mn = mp[4]; + pb = msb; + pa = msa; + while (mn != 0) { + md[0] = pb[0] + (((pa[0] - pb[0]) * t) >> 12); + md[1] = pb[1] + (((pa[1] - pb[1]) * t) >> 12); + md[2] = pb[2] + (((pa[2] - pb[2]) * t) >> 12); + md += 4; + pb += 4; + pa += 4; + mn--; + } + } + func_80181C74((s32)a0, 0x1000); + break; + case 7: + if (*(s32 *)((s32)a0 + 0x1C) < 7) { + func_80016224(0xFF, 0); + } + if ((*(s32 *)((s32)a0 + 0x1C) = *(s32 *)((s32)a0 + 0x1C) - 1) != 0) { + break; + } + *(u16 *)((s32)a0 + 0x34) = 8; + *(s16 *)((s32)a0 + 0xFC) = 0; + func_8002D4C8(0xBBC, 0); + break; + case 8: + *(s16 *)((s32)a0 + 0xFC) = *(s16 *)((s32)a0 + 0xFC) + 8; + func_80181E64(func_8004787C(*(s16 *)((s32)a0 + 0xFC)), (s32)a0); + func_80182000((s32)a0, func_8004787C(*(s16 *)((s32)a0 + 0xFC))); + func_80182158(func_8004787C(*(s16 *)((s32)a0 + 0xFC))); + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 409); + if (t >= 10) { + t = 9; + } + idx = t + 0x7E; + ((void (*)(void *, s32))func_800599B8)(&D_8018E030, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 409); + if (t >= 10) { + t = 9; + } + idx = t + 0x6C; + ((void (*)(void *, s32))func_800599B8)(&D_8018E020, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 409); + if (t >= 10) { + t = 9; + } + idx = t + 0x75; + ((void (*)(void *, s32))func_800599B8)(&D_8018E028, D_8018E034[idx]); + ok = 1; + } else { + ok = 0; + } + if (ok != 0) { + *(u16 *)((s32)a0 + 0x102) = *(u16 *)((s32)a0 + 0x102) + 0x199; + } + if (*(s16 *)((s32)a0 + 0xFC) < 0x200) { + break; + } + ((void (*)(s32, void *))func_8001C214)(*(s32 *)((s32)a0 + 0x20), &D_801BF60C); + func_8001D0E8(*(s32 *)((s32)a0 + 0x20), 0x280, 0x1E0); + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400; + func_8012A828((s32)a0, &D_801BFCD4); + func_8012C658(0x3AC, 2, (s32)a0); + func_8012C658(0x3AC, 3, (s32)a0); + *(u16 *)((s32)a0 + 0x34) = 9; + func_80181E64(func_8004787C(*(s16 *)((s32)a0 + 0xFC)), (s32)a0); + func_8017D8A4(D_801BFCD4, &D_8018E3A8, &D_8018E3A8 + 0xB4, + func_8004787C(*(s16 *)((s32)a0 + 0xFC)), 1); + break; + case 9: + *(s16 *)((s32)a0 + 0xFC) = *(s16 *)((s32)a0 + 0xFC) + 8; + func_80181E64(func_8004787C(*(s16 *)((s32)a0 + 0xFC)), (s32)a0); + func_8017D8A4(D_801BFCD4, &D_8018E3A8, &D_8018E3A8 + 0xB4, + func_8004787C(*(s16 *)((s32)a0 + 0xFC)), 1); + func_80182158(func_8004787C(*(s16 *)((s32)a0 + 0xFC))); + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 409); + if (t >= 10) { + t = 9; + } + idx = t + 0x7E; + ((void (*)(void *, s32))func_800599B8)(&D_8018E030, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 409); + if (t >= 10) { + t = 9; + } + idx = t + 0x6C; + ((void (*)(void *, s32))func_800599B8)(&D_8018E020, D_8018E034[idx]); + } + r = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + c = (s16) * (u16 *)((s32)a0 + 0x102); + if (r >= c) { + s32 t, idx; + t = (s16)(c / 409); + if (t >= 10) { + t = 9; + } + idx = t + 0x75; + ((void (*)(void *, s32))func_800599B8)(&D_8018E028, D_8018E034[idx]); + ok = 1; + } else { + ok = 0; + } + if (ok != 0) { + *(u16 *)((s32)a0 + 0x102) = *(u16 *)((s32)a0 + 0x102) + 0x199; + } + if (*(s16 *)((s32)a0 + 0xFC) >= 0x400) { + *(u16 *)((s32)a0 + 0x34) = 0xA; + *(s32 *)((s32)a0 + 0x1C) = 0xA; + t = 0x1000; + { + s32 *mp; + s16 *md; + s16 *msa; + s16 *msb; + s32 mn; + s16 *pa; + s16 *pb; + + mp = D_801BF5CC; + msb = D_801C1E14; + msa = D_801C1E18; + if (mp[1] == 1) { + md = (s16 *)mp[3]; + } else { + md = (s16 *)((u8 *)mp + ((((u32)mp[3] >> 2) << 2) + 0xC)); + } + mn = mp[4]; + pb = msb; + pa = msa; + while (mn != 0) { + md[0] = pb[0] + (((pa[0] - pb[0]) * t) >> 12); + md[1] = pb[1] + (((pa[1] - pb[1]) * t) >> 12); + md[2] = pb[2] + (((pa[2] - pb[2]) * t) >> 12); + md += 4; + pb += 4; + pa += 4; + mn--; + } + } + func_8017D8A4(D_801BFCD4, &D_8018E3A8, &D_8018E3A8 + 0xB4, 0x1000, 1); + func_80182158(0x1000); + } + s0 = func_8012C658(0x3AC, 6, (s32)a0); + if (s0 != 0) { + *(u16 *)(s0 + 0x6) = *(u16 *)(s0 + 0x6) - 0x20; + *(u16 *)(s0 + 0xA) = *(u16 *)(s0 + 0xA) - 0x140; + *(u16 *)(s0 + 0xE) = *(u16 *)(s0 + 0xE) - 0x40; + *(s16 *)(s0 + 0x12) = (rand() & 7) - 4; + *(s16 *)(s0 + 0x16) = 0; + *(s16 *)(s0 + 0x1A) = -((rand() & 7) + 0xA); + } + s0 = func_8012C658(0x3AC, 6, (s32)a0); + if (s0 == 0) { + break; + } + *(u16 *)(s0 + 0x6) = *(u16 *)(s0 + 0x6) - 0x20; + *(u16 *)(s0 + 0xA) = *(u16 *)(s0 + 0xA) - 0x140; + *(u16 *)(s0 + 0xE) = *(u16 *)(s0 + 0xE) + 0x40; + *(s16 *)(s0 + 0x12) = (rand() & 7) - 4; + *(s16 *)(s0 + 0x16) = 0; + *(s16 *)(s0 + 0x1A) = (rand() & 7) + 0xA; + break; + case 10: + if (*(s32 *)((s32)a0 + 0x1C) < 7) { + func_80016224(0xFF, 0); + } + if ((*(s32 *)((s32)a0 + 0x1C) = *(s32 *)((s32)a0 + 0x1C) - 1) != 0) { + break; + } + *(u16 *)((s32)a0 + 0x34) = 0xB; + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(s32, void *))func_8001C214)(*(s32 *)((s32)a0 + 0x20), &D_801BF630); + func_8001D0E8(*(s32 *)((s32)a0 + 0x20), 0x280, 0x1E0); + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400; + func_8012A828((s32)a0, &D_801BFCDC); + func_8002D4C8(0xBBF, 0); + break; + case 11: + *(s16 *)((s32)a0 + 0xFC) = *(s16 *)((s32)a0 + 0xFC) + 0x10; + t = func_8004787C(*(s16 *)((s32)a0 + 0xFC)); + { + s32 *mp; + s16 *md; + s16 *msa; + s16 *msb; + s32 mn; + s16 *pa; + s16 *pb; + + mp = D_801BF650; + msb = D_801C1EA4; + msa = D_801C1EA8; + if (mp[1] == 1) { + md = (s16 *)mp[3]; + } else { + md = (s16 *)((u8 *)mp + ((((u32)mp[3] >> 2) << 2) + 0xC)); + } + mn = mp[4]; + pb = msb; + pa = msa; + while (mn != 0) { + md[0] = pb[0] + (((pa[0] - pb[0]) * t) >> 12); + md[1] = pb[1] + (((pa[1] - pb[1]) * t) >> 12); + md[2] = pb[2] + (((pa[2] - pb[2]) * t) >> 12); + md += 4; + pb += 4; + pa += 4; + mn--; + } + } + func_80182268((s32)a0, func_8004787C(*(s16 *)((s32)a0 + 0xFC))); + if (*(s16 *)((s32)a0 + 0xFC) >= 0x400) { + *(u16 *)((s32)a0 + 0x34) = 0xC; + *(s32 *)((s32)a0 + 0x1C) = 0x1E; + t = 0x1000; + { + s32 *mp; + s16 *md; + s16 *msa; + s16 *msb; + s32 mn; + s16 *pa; + s16 *pb; + + mp = D_801BF650; + msb = D_801C1EA4; + msa = D_801C1EA8; + if (mp[1] == 1) { + md = (s16 *)mp[3]; + } else { + md = (s16 *)((u8 *)mp + ((((u32)mp[3] >> 2) << 2) + 0xC)); + } + mn = mp[4]; + pb = msb; + pa = msa; + while (mn != 0) { + md[0] = pb[0] + (((pa[0] - pb[0]) * t) >> 12); + md[1] = pb[1] + (((pa[1] - pb[1]) * t) >> 12); + md[2] = pb[2] + (((pa[2] - pb[2]) * t) >> 12); + md += 4; + pb += 4; + pa += 4; + mn--; + } + } + func_80182268((s32)a0, 0x1000); + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x8; + func_8012EC04((s32)a0, 0x8, sp18); + for (s4 = 0, q = &D_801F61C0[0]; s4 < 8; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x8]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + break; + case 12: + if (*(s32 *)((s32)a0 + 0x1C) < 7) { + func_80016224(0xFF, 0); + } + *(s32 *)((s32)a0 + 0x1C) = *(s32 *)((s32)a0 + 0x1C) - 1; + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x8; + func_8012EC04((s32)a0, 0x8, sp18); + for (s4 = 0, q = &D_801F61C0[0]; s4 < 8; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x8]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + if (*(s32 *)((s32)a0 + 0x1C) != 0) { + break; + } + *(u16 *)((s32)a0 + 0x34) = 0xD; + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(s32, void *))func_8001C214)(*(s32 *)((s32)a0 + 0x20), &D_801BF658); + func_8001D0E8(*(s32 *)((s32)a0 + 0x20), 0x280, 0x1E0); + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400; + func_8012A828((s32)a0, &D_801BFCE4); + func_8002D4C8(0xBBD, 0); + break; + case 13: + *(s16 *)((s32)a0 + 0xFC) = *(s16 *)((s32)a0 + 0xFC) + 0x60; + func_801823F8(func_8004787C(*(s16 *)((s32)a0 + 0xFC))); + func_801826E0((s32)a0, func_8004787C(*(s16 *)((s32)a0 + 0xFC))); + if (*(s16 *)((s32)a0 + 0xFC) >= 0x400) { + *(u16 *)((s32)a0 + 0x34) = 0xE; + *(s32 *)((s32)a0 + 0x1C) = 0x1E; + func_801823F8(0x1000); + func_801826E0((s32)a0, 0x1000); + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s32 kk; + s5 = 0x1; + func_8012EC04((s32)a0, 0x1, sp18); + for (s4 = 0, kk = 1, q = &D_801F61C0[0]; s4 < 4; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x1]; + if (p[1] == kk) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x2; + func_8012EC04((s32)a0, 0x2, sp18); + for (s4 = 4, q = &D_801F61C0[4]; s4 < 8; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x2]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0xB; + func_8012EC04((s32)a0, 0xB, sp18); + for (s4 = 8, q = &D_801F61C0[8]; s4 < 12; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0xB]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + break; + case 14: + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s32 kk; + s5 = 0x1; + func_8012EC04((s32)a0, 0x1, sp18); + for (s4 = 0, kk = 1, q = &D_801F61C0[0]; s4 < 4; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x1]; + if (p[1] == kk) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x2; + func_8012EC04((s32)a0, 0x2, sp18); + for (s4 = 4, q = &D_801F61C0[4]; s4 < 8; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x2]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0xB; + func_8012EC04((s32)a0, 0xB, sp18); + for (s4 = 8, q = &D_801F61C0[8]; s4 < 12; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0xB]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + if (*(s32 *)((s32)a0 + 0x1C) < 7) { + func_80016224(0xFF, 0); + } + if ((*(s32 *)((s32)a0 + 0x1C) = *(s32 *)((s32)a0 + 0x1C) - 1) != 0) { + break; + } + *(u16 *)((s32)a0 + 0x34) = 0xF; + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(s32, void *))func_8001C214)(*(s32 *)((s32)a0 + 0x20), &D_801BF68C); + func_8001D0E8(*(s32 *)((s32)a0 + 0x20), 0x280, 0x1E0); + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400; + func_8012A828((s32)a0, &D_801BFCEC); + func_8002D4C8(0xBBD, 0); + break; + case 15: + *(s16 *)((s32)a0 + 0xFC) = *(s16 *)((s32)a0 + 0xFC) + 0x60; + func_801828A4(func_8004787C(*(s16 *)((s32)a0 + 0xFC))); + func_80182B8C((s32)a0, func_8004787C(*(s16 *)((s32)a0 + 0xFC))); + if (*(s16 *)((s32)a0 + 0xFC) >= 0x400) { + *(u16 *)((s32)a0 + 0x34) = 0x10; + *(s32 *)((s32)a0 + 0x1C) = 0x1E; + func_801828A4(0x1000); + func_80182B8C((s32)a0, 0x1000); + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x6; + func_8012EC04((s32)a0, 0x6, sp18); + for (s4 = 0, q = &D_801F61C0[0]; s4 < 4; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x6]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x7; + func_8012EC04((s32)a0, 0x7, sp18); + for (s4 = 4, q = &D_801F61C0[4]; s4 < 8; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x7]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x8; + func_8012EC04((s32)a0, 0x8, sp18); + for (s4 = 8, q = &D_801F61C0[8]; s4 < 12; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x8]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + break; + case 16: + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x6; + func_8012EC04((s32)a0, 0x6, sp18); + for (s4 = 0, q = &D_801F61C0[0]; s4 < 4; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x6]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x7; + func_8012EC04((s32)a0, 0x7, sp18); + for (s4 = 4, q = &D_801F61C0[4]; s4 < 8; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x7]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x8; + func_8012EC04((s32)a0, 0x8, sp18); + for (s4 = 8, q = &D_801F61C0[8]; s4 < 12; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x8]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + if (*(s32 *)((s32)a0 + 0x1C) < 7) { + func_80016224(0xFF, 0); + } + if ((*(s32 *)((s32)a0 + 0x1C) = *(s32 *)((s32)a0 + 0x1C) - 1) != 0) { + break; + } + *(u16 *)((s32)a0 + 0x34) = 0x11; + *(s16 *)((s32)a0 + 0xFC) = 0; + break; + case 17: + if (*(s16 *)((s32)a0 + 0xA) < -0x402) { + *(s16 *)((s32)a0 + 0xA) = *(s16 *)((s32)a0 + 0xA) + 1; + } + *(u16 *)((s32)a0 + 0xFC) = *(u16 *)((s32)a0 + 0xFC) + 0x10; + func_80182D4C((s32)a0, func_8004787C(*(s16 *)((s32)a0 + 0xFC))); + if (*(s16 *)((s32)a0 + 0xFC) >= 0x400) { + *(u16 *)((s32)a0 + 0x34) = 0x12; + *(s32 *)((s32)a0 + 0x1C) = 3; + func_80182D4C((s32)a0, 0x1000); + func_8002D4C8(0xBC0, 0); + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0xD; + func_8012EC04((s32)a0, 0xD, sp18); + for (s4 = 0, q = &D_801F61C0[0]; s4 < 6; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0xD]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0xE; + func_8012EC04((s32)a0, 0xE, sp18); + for (s4 = 6, q = &D_801F61C0[6]; s4 < 8; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0xE]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s32 kk; + s5 = 0x1; + func_8012EC04((s32)a0, 0x1, sp18); + for (s4 = 8, kk = 1, q = &D_801F61C0[8]; s4 < 10; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x1]; + if (p[1] == kk) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x2; + func_8012EC04((s32)a0, 0x2, sp18); + for (s4 = 10, q = &D_801F61C0[10]; s4 < 11; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x2]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x6; + func_8012EC04((s32)a0, 0x6, sp18); + for (s4 = 11, q = &D_801F61C0[11]; s4 < 13; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x6]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x7; + func_8012EC04((s32)a0, 0x7, sp18); + for (s4 = 13, q = &D_801F61C0[13]; s4 < 14; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x7]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x8; + func_8012EC04((s32)a0, 0x8, sp18); + for (s4 = 14, q = &D_801F61C0[14]; s4 < 16; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x8]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + break; + case 18: + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0xE; + func_8012EC04((s32)a0, 0xE, sp18); + for (s4 = 0, q = &D_801F61C0[0]; s4 < 3; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0xE]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s32 kk; + s5 = 0x1; + func_8012EC04((s32)a0, 0x1, sp18); + for (s4 = 3, kk = 1, q = &D_801F61C0[3]; s4 < 5; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x1]; + if (p[1] == kk) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x2; + func_8012EC04((s32)a0, 0x2, sp18); + for (s4 = 5, q = &D_801F61C0[5]; s4 < 8; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x2]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x6; + func_8012EC04((s32)a0, 0x6, sp18); + for (s4 = 8, q = &D_801F61C0[8]; s4 < 11; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x6]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x7; + func_8012EC04((s32)a0, 0x7, sp18); + for (s4 = 11, q = &D_801F61C0[11]; s4 < 13; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x7]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x8; + func_8012EC04((s32)a0, 0x8, sp18); + for (s4 = 13, q = &D_801F61C0[13]; s4 < 16; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x8]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + if (*(s32 *)((s32)a0 + 0x1C) < 7) { + func_80016224(0xFF, 0); + } + if ((*(s32 *)((s32)a0 + 0x1C) = *(s32 *)((s32)a0 + 0x1C) - 1) != 0) { + break; + } + *(u16 *)((s32)a0 + 0x34) = 0x13; + *(s16 *)((s32)a0 + 0xFC) = 0; + ((void (*)(s32, void *))func_8001C214)(*(s32 *)((s32)a0 + 0x20), &D_801BF6CC); + func_8001D0E8(*(s32 *)((s32)a0 + 0x20), 0x280, 0x1E0); + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400; + func_8012A828((s32)a0, &D_801CA678); + *(s32 *)((s32)a0 + 0x1C) = 0x79; + break; + case 19: + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0xC; + func_8012EC04((s32)a0, 0xC, sp18); + for (s4 = 0, q = &D_801F61C0[0]; s4 < 6; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0xC]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + if (*(s32 *)((s32)a0 + 0x94) < 0x2E) { + s0 = ((s32 (*)(s32, s32))func_80143C74)((s32)a0, 0); + if (s0 != 0) { + *(u16 *)(s0 + 0xE) = *(u16 *)(s0 + 0xE) - (rand() & 0x3F); + *(u16 *)(s0 + 0xA) = (*(s16 *)(s0 + 0xA) - 0x8B) - (rand() & 0x3F); + *(u16 *)(s0 + 0x6) = *(u16 *)(s0 + 0x6) - 0x9E; + *(s32 *)(s0 + 0x10) = ((rand() & 0xFF) - 0x80) << 10; + *(s32 *)(s0 + 0x18) = ((rand() & 0xFF) - 0x80) << 10; + *(s16 *)(s0 + 0x16) = -((rand() & 3) + 4); + ((void (*)(s32, s32, void *))func_80128EA8)(*(s32 *)(s0 + 0x20), s0 + 0xD0, &D_8018DF10); + func_8012C658(0x3AC, 6, s0); + func_8012C658(0x3AC, 6, s0); + } + } + if (*(s32 *)((s32)a0 + 0x94) == 0x45 || *(s32 *)((s32)a0 + 0x94) == 0x50) { + func_8002D4C8(0xBBA, 0); + } + if (*(s32 *)((s32)a0 + 0x94) == 0x49 || *(s32 *)((s32)a0 + 0x94) == 0x56) { + func_8002D4C8(0xBBB, 0); + } + if ((*(s32 *)((s32)a0 + 0x1C) = *(s32 *)((s32)a0 + 0x1C) - 1) != 0) { + break; + } + *(u16 *)((s32)a0 + 0x34) = 0x14; + func_8012A828((s32)a0, &D_801CAA38); + break; + case 20: + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0xC; + func_8012EC04((s32)a0, 0xC, sp18); + for (s4 = 0, q = &D_801F61C0[0]; s4 < 4; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0xC]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0x9; + func_8012EC04((s32)a0, 0x9, sp18); + for (s4 = 4, q = &D_801F61C0[4]; s4 < 6; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0x9]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0xA; + func_8012EC04((s32)a0, 0xA, sp18); + for (s4 = 6, q = &D_801F61C0[6]; s4 < 7; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0xA]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0xB; + func_8012EC04((s32)a0, 0xB, sp18); + for (s4 = 7, q = &D_801F61C0[7]; s4 < 10; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0xB]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0xD; + func_8012EC04((s32)a0, 0xD, sp18); + for (s4 = 10, q = &D_801F61C0[10]; s4 < 12; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0xD]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0xE; + func_8012EC04((s32)a0, 0xE, sp18); + for (s4 = 12, q = &D_801F61C0[12]; s4 < 13; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0xE]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + { + s32 *p, *q; + s32 s0, s1, s4, s5; + s5 = 0xF; + func_8012EC04((s32)a0, 0xF, sp18); + for (s4 = 13, q = &D_801F61C0[13]; s4 < 16; s4++, q++) { + if (*q % 80 == 0) { + p = ((s32 **)(*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x24)))[0xF]; + if (p[1] == 1) { + s1 = p[3]; + } else { + s1 = (s32)((u8 *)p + ((((u32)p[3] >> 2) << 2) + 0xC)); + } + s0 = p[4] - 1; + s1 = s1 + (rand() % (u32)s0) * 8; + ((void (*)(s32 *, s32, s16 *))func_8012F14C)(sp18, s1, sp38); + sp40[3] = 0x3C5; + sp40[7] = s5; + sp40[5] = 0; + sp40[4] = 0; + *(s32 *)&sp40[8] = s1; + sp40[6] = 0x7FFF; + sp40[0] = sp38[0]; + sp40[1] = sp38[1]; + sp40[2] = sp38[2]; + ((s32 (*)(s16 *, s32))func_8012C51C)(sp40, (s32)a0); + } + } + } + break; + } + + if (((s32 (*)(s32))func_80178970)((s32)a0) != 0) { + ((void (*)(s32))func_80178D18)((s32)a0); + *(s16 *)((s32)a0 + 0x2) = 3; + } +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_8018881C); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189098); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_801890FC); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189708); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_8018984C); + + + +void func_80189AC8(void *a0) { + + extern void (*D_8018EB2C[])(void); + D_8018EB2C[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +void func_80189B04(void *a0) { + + extern void (*D_8018EB44[])(void); + D_8018EB44[*(u16 *)((s32)a0 + 0x2)](); +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189B40); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189C00); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189C14); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189C28); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189C3C); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189C50); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189C64); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189C78); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189C8C); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189CA0); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189CB4); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189CC8); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189CDC); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189CF0); + +extern void func_8017D040(s8 a0); +void func_80189D18(void) { + func_8017D040(0); +} + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189D38); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189D58); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189D78); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189D98); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189DB8); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189EF4); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189F70); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_80189FDC); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_8018A124); + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_8018A150); + +void func_8018A284(void) { +} + + + +void func_8018A28C(void *a0) { + + extern void (*D_8018EB54[])(void); + D_8018EB54[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +extern s32 func_8012AD50(void *a0); + void func_8018A2C8(u8 *a0) { + *(s16 *)(a0 + 0xFC) = 0; + *(u16 *)(a0 + 0x72) |= 0x1000; + ((void (*)(void))func_8012AD50)(); + } + + +INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_8018A2F4); + +