From c359fc18044e1b5a7c5655d3ce1f206b7fcce38d Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Sun, 30 Aug 2026 22:00:27 -0600 Subject: [PATCH] =?UTF-8?q?feat(decomp):=20worker=20gate=20=E2=80=94=20+1?= =?UTF-8?q?=20fns=20x0=20propagated=20(fleet=2099.2%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/overlays.mk | 3 +- config/splat.ov_SC05_010.yaml | 3 + src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c | 2566 ---------- src/ov_SC05_010/ov_SC05_010_jr_8018473C.c | 5443 +++++++++++++++++++++ 4 files changed, 5447 insertions(+), 2568 deletions(-) create mode 100644 src/ov_SC05_010/ov_SC05_010_jr_8018473C.c diff --git a/config/overlays.mk b/config/overlays.mk index 5d2e4265a8..7d72e31d55 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -3874,7 +3874,7 @@ ov_SC05_010_ELF := $(ov_SC05_010_OUT).elf ov_SC05_010_MAPFILE := $(ov_SC05_010_OUT).map ov_SC05_010_LD_SCRIPT := $(ov_SC05_010_OUT).ld ov_SC05_010_SPLAT_YAML := config/splat.ov_SC05_010.yaml -ov_SC05_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_010.o,ov_SC05_010_jr_8012ACE0.o,tail2.data.o,ov_SC05_010_jr_80135888.o,tail3.data.o,ov_SC05_010_jr_80135A4C.o,tail4.data.o,ov_SC05_010_jr_80135D20.o,tail5.data.o,ov_SC05_010_jr_801380E0.o,ov_SC05_010_o0c.o,tail6.data.o,ov_SC05_010_jr_8013F350.o,tail7.data.o,ov_SC05_010_jr_8013FFD8.o,tail8.data.o,ov_SC05_010_jr_80140608.o,tail9.data.o,ov_SC05_010_jr_8015444C.o,ov_SC05_010_jr_80154C24.o,ov_SC05_010_jr_801588CC.o,ov_SC05_010_jr_80159C84.o,tail10.data.o,ov_SC05_010_jr_8015A3C8.o,tail11.data.o,ov_SC05_010_jr_8015AE2C.o,tail12.data.o,ov_SC05_010_jr_8015C32C.o,tail13.data.o,ov_SC05_010_jr_8016AB6C.o,tail14.data.o,ov_SC05_010_jr_80171B4C.o,ov_SC05_010_jr_801734BC.o,tail15.data.o,ov_SC05_010_jr_801789AC.o,ov_SC05_010_jr_80178D40.o,tail16.data.o,ov_SC05_010_jr_8017A4AC.o,tail17.data.o,ov_SC05_010_jr_8017AE2C.o,tail18.data.o,ov_SC05_010_jr_8017C8D0.o,tail19.data.o,ov_SC05_010_jr_80181CDC.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC05_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_010.o,ov_SC05_010_jr_8012ACE0.o,tail2.data.o,ov_SC05_010_jr_80135888.o,tail3.data.o,ov_SC05_010_jr_80135A4C.o,tail4.data.o,ov_SC05_010_jr_80135D20.o,tail5.data.o,ov_SC05_010_jr_801380E0.o,ov_SC05_010_o0c.o,tail6.data.o,ov_SC05_010_jr_8013F350.o,tail7.data.o,ov_SC05_010_jr_8013FFD8.o,tail8.data.o,ov_SC05_010_jr_80140608.o,tail9.data.o,ov_SC05_010_jr_8015444C.o,ov_SC05_010_jr_80154C24.o,ov_SC05_010_jr_801588CC.o,ov_SC05_010_jr_80159C84.o,tail10.data.o,ov_SC05_010_jr_8015A3C8.o,tail11.data.o,ov_SC05_010_jr_8015AE2C.o,tail12.data.o,ov_SC05_010_jr_8015C32C.o,tail13.data.o,ov_SC05_010_jr_8016AB6C.o,tail14.data.o,ov_SC05_010_jr_80171B4C.o,ov_SC05_010_jr_801734BC.o,tail15.data.o,ov_SC05_010_jr_801789AC.o,ov_SC05_010_jr_80178D40.o,tail16.data.o,ov_SC05_010_jr_8017A4AC.o,tail17.data.o,ov_SC05_010_jr_8017AE2C.o,tail18.data.o,ov_SC05_010_jr_8017C8D0.o,tail19.data.o,ov_SC05_010_jr_80181CDC.o,tail20.data.o,ov_SC05_010_jr_8018473C.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC05_010/ov_SC05_010.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14 build/src/ov_SC05_010/ov_SC05_010_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0 build/src/ov_SC05_010/ov_SC05_010_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18 @@ -3887,7 +3887,6 @@ build/src/ov_SC05_010/ov_SC05_010_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads ( build/src/ov_SC05_010/ov_SC05_010_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC05_010/ov_SC05_010_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178 -build/src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.o: JTBL_PADS := 0 # §8e pads (jtbl_carve.py) tables=+0x0 (S62 fleet sweep: pads_audit-derived, one 8-entry table 0x9d944..0x9d964) build/src/ov_SC05_010/ov_SC05_010_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118 ov_SC05_010_CHECK_SHA := config/check.ov_SC05_010.sha ov_SC05_010_SYMBOLS := config/symbols.ov_SC05_010.txt diff --git a/config/splat.ov_SC05_010.yaml b/config/splat.ov_SC05_010.yaml index 142d4b8378..d7e80a7c3b 100644 --- a/config/splat.ov_SC05_010.yaml +++ b/config/splat.ov_SC05_010.yaml @@ -122,6 +122,7 @@ segments: - [0x52cd4, c, ov_SC05_010_jr_8017AE2C] - [0x54778, c, ov_SC05_010_jr_8017C8D0] - [0x59b84, c, ov_SC05_010_jr_80181CDC] + - [0x5c5e4, c, ov_SC05_010_jr_8018473C] - [0x607fc, data, tail] - [0x9c6d8, .rodata, ov_SC05_010] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9c7b4, .rodata, ov_SC05_010_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) @@ -168,6 +169,8 @@ segments: - [0x9d964, data, tail19] - [0x9d9f4, .rodata, ov_SC05_010_jr_80181CDC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x9da0c, data, tail20] + - [0x9da34, .rodata, ov_SC05_010_jr_8018473C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) + - [0x9da48, data, tail21] - [0x9FED4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0x9FED7] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c b/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c index 2e16d3acdb..54d1231cf1 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.c @@ -3765,2569 +3765,3 @@ void func_801844AC(s32 param_1) { func_8002959C(); } } - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_8018473C); - - -extern void func_800183E0(s32 a0); - -void func_80184934(s32 param_1) { - - extern u8 D_801C4148[]; - /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every - LATER function in this TU, which blocks a byte-true decl of a different type. - Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ - extern u16 D_800B99DA; - extern u8 D_801941CC[]; - *(u8 *)(*(s32 *)(param_1 + 0xCC) + 0x27) = 0xA3; - func_800183E0((s32)&D_801C4148[D_801941CC[D_800B99DA & 0x1F] * 16]); -} - - - -extern void func_800183E0(s32 a0); - -void func_80184988(s32 param_1) { - - extern u8 D_801C4048[]; - /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every - LATER function in this TU, which blocks a byte-true decl of a different type. - Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ - extern u16 D_800B99DA; - extern u8 D_801941CC[]; - *(u8 *)(*(s32 *)(param_1 + 0xD0) + 0x27) = 0xA4; - func_800183E0((s32)&D_801C4048[D_801941CC[D_800B99DA & 0x1F] * 16]); -} - - - - -extern s32 func_8012C194(void); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); - -s32 func_801849DC(s32 a0, s32 a1, s16 a2, s16 a3, s32 a4) { - s32 obj; - - obj = func_8012C194(); - if (obj == 0) { - return 0; - } - func_8001CB6C((u8 *)obj, a1, a2, a3); - *(u16 *)(obj + 0x10) = 0xC00; - *(u8 *)(obj + 0x27) = a4; - *(u16 *)(obj + 0x1A) = 0x2D00; - *(u16 *)(obj + 0x18) = 0x2D00; - *(u16 *)(obj + 8) = *(u16 *)(a0 + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(a0 + 0xA); - *(u16 *)(obj + 0xC) = *(u16 *)(a0 + 0xE); - return obj; -} - - -/* func_80184AA4 — SC05_010 "dust-trail / spark line" actor tick. - * - * Frame 0 (state word at +2 == 0) seeds four RNG fields and bumps the state. - * Otherwise it ages the +8 timer by -0x4000 and despawns past -0x4000000; - * else it allocates an 0x80-byte prim block, walks a swept angle (s4) and a - * shrinking radius (s3) and emits up to 8 LINE_F2 segments through - * RotTransPers, chaining them into the OT of the current double buffer. - * - * MATCH notes (P31 t5z): - * - §195-C statement-order gap filling: `s4 += 0x80;` MUST precede `s3 -= 8;` - * or the `lh 0x102($s1)` loses its slot and a load-delay nop appears. - * - The OT base is indexed through the 20-byte OtBlk form - * (`D_800A651C[i].a`), NOT `((s32*)D_800A651C)[i * 5]`: only the struct - * form lets gcc fold the symbol into the load (`lw %lo(sym)($at)`); the - * s32[] form materialises `la` + `addu` (2 extra instructions). - * - The frame-0 `+2` bump is staged through `w` (the SAME local the 0x100 - * angle clamp uses further down). A fresh local there re-orders the block; - * reusing the else-arm's `t` fixes the block but costs the hoisted - * `lui $v1, 0xFC00` in the entry branch's delay slot. - */ -void func_80184AA4(s32 arg0) -{ - extern s32 rand(void); - extern void func_8012C218(void *a0); - extern void *func_80010A08(s32 a0); - extern void func_8004914C(void *a0); - extern void func_800491AC(void *a0); - extern s32 func_80047948(s32 a0); - extern s32 func_8004787C(s32 a0); - extern s32 func_80143C74(s32 a0, s32 a1); - extern void SetLineF2(void *p); - extern s32 RotTransPers(s32 v, s32 sxy, s32 *p, s32 *flag); - extern s32 AddPrim(s32 ot, void *p); - extern u8 D_800AF648; - extern s16 D_800B9A02; - extern struct { s32 a; s32 b[4]; } D_800A651C[]; - - s32 obj; - u8 *db; - u8 *prim; - s32 s3; - s32 s4; - s16 w; - s32 i; - s32 r; - s32 t; - s32 otz; - s32 ot; - s16 cur[3]; - s16 nxt[3]; - s32 pz; - s32 flag; - - obj = arg0; - - if (*(u16 *)(obj + 2) == 0) { - *(u16 *)(obj + 0xFC) = rand() & 0xFFF; - *(u16 *)(obj + 0x102) = (rand() & 0x1F) + 0x30; - *(u16 *)(obj + 0x104) = rand() & 0x3F; - w = *(u16 *)(obj + 2) + 1; - *(u16 *)(obj + 0xFE) = *(u16 *)(obj + 0x102) + 0x2C0; - *(u16 *)(obj + 2) = w; - return; - } - - t = *(s32 *)(obj + 8) - 0x4000; - *(s32 *)(obj + 8) = t; - if (t < -0x4000000) { - func_8012C218((void *)obj); - return; - } - - prim = (u8 *)func_80010A08(0x80); - if (prim == 0) { - return; - } - - db = &D_800AF648; - func_8004914C(db); - func_800491AC(db); - - s3 = *(s16 *)(obj + 0xFE); - s4 = *(s16 *)(obj + 0xFC); - w = *(u16 *)(obj + 0x100) + 0x10; - *(u16 *)(obj + 0x100) = w; - if (w >= 0x401) { - *(u16 *)(obj + 0x100) = 0x400; - *(u16 *)(obj + 0xA) = *(u16 *)(obj + 0xA) - 4; - *(u16 *)(obj + 0xFC) = (*(u16 *)(obj + 0xFC) + 0x200) & 0xFFF; - } else { - *(u16 *)(obj + 0xFE) = *(u16 *)(obj + 0x102) + ((func_80047948(w) * 704) >> 12); - *(u16 *)(obj + 0xFC) = - (*(u16 *)(obj + 0xFC) + (func_8004787C(*(s16 *)(obj + 0x100)) >> 4)) & 0xFFF; - } - - cur[0] = *(u16 *)(obj + 6) + ((s3 * func_80047948(s4)) >> 12); - cur[1] = *(u16 *)(obj + 0xA); - cur[2] = *(u16 *)(obj + 0xE) + ((s3 * func_8004787C(s4)) >> 12); - nxt[1] = cur[1]; - - if (*(s16 *)(obj + 0x104) != 0) { - *(s16 *)(obj + 0x104) = *(s16 *)(obj + 0x104) - 1; - } else { - *(u16 *)(obj + 0x104) = rand() & 0x3F; - r = func_80143C74(obj, 0); - if (r != 0) { - *(u16 *)(r + 6) = cur[0]; - *(u16 *)(r + 0xA) = cur[1]; - *(u16 *)(r + 0xE) = cur[2]; - *(s32 *)(r + 0x10) = -(func_8004787C(s4) << 8); - *(s16 *)(r + 0x16) = -2; - *(s32 *)(r + 0x18) = -(func_80047948(s4) << 8); - } - } - - for (i = 0; i < 8; i++) { - *(u32 *)(prim + 4) = 0xFFFFFF; - SetLineF2(prim); - s4 += 0x80; - s3 -= 8; - if (s3 < *(s16 *)(obj + 0x102)) { - s3 = *(s16 *)(obj + 0x102); - } - nxt[0] = *(u16 *)(obj + 6) + ((s3 * func_80047948(s4)) >> 12); - nxt[2] = *(u16 *)(obj + 0xE) + ((s3 * func_8004787C(s4)) >> 12); - otz = RotTransPers((s32)cur, (s32)(prim + 8), &pz, &flag); - if (otz > 0 && flag >= 0) { - if (RotTransPers((s32)nxt, (s32)(prim + 0xC), &pz, &flag) > 0 && flag >= 0) { - ot = D_800A651C[*(u16 *)&D_800B9A02].a + (otz << 2); - AddPrim(ot, prim); - prim += 0x10; - } - } - cur[0] = nxt[0]; - cur[2] = nxt[2]; - } -} - - -#include "common.h" - -extern u8 *func_8012913C(s32 a0); -extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); -extern s32 rand(void); - -/* Per-frame emitter: every 8th tick spawn one type-0x7E particle at a random - * polar offset around the owner, with two randomized 16.16 velocities and a - * randomized downward gravity term. - * - * Matching notes (S54 wave V, second pass): - * - The two `rand() % 4` magnitudes are written HAND-EXPANDED (copy / +3 / - * sra 2 / sll 2 / subu) instead of with the `%` operator. With `%`, - * expand_divmod's own t1 = copy_to_mode_reg(op0) dies BEFORE op0 (the - * `subu` is op0's last use), so cse's make_regs_eqv leaves op0 canonical - * and the compare reads $v0 -- freeing reorg to put the copy in the branch - * delay slot. Writing `m = (rand() % 4) << 16;` in C gives that same RTL - * but allocates the chain to $v0/$v1 and costs a duplicated `sra` in the - * delay slot (+1 insn per block, 119 vs 117). Spelling the chain out with - * a temp `n` whose last use is the SAME insn as `q`'s reproduces the - * canonicalization (`bgez $v0`, `addiu $s0,$v0,3`) and the filled slot. - * - `n` is pinned to $s0: it crosses no call, so global_alloc's find_reg - * hands it the lowest already-used free reg ($v1); the target reuses $s0 - * (which `m` owns and which `n` does not conflict with). Cookbook §17. - * - The `ent+0x2C = a0` store must come AFTER the `ent+0x14` store: it - * lengthens a0's live range just enough to drop its allocno_compare - * priority below `ent`'s, which is what puts a0 in $s2 and ent in $s1. - */ -void func_80184E4C(s32 a0) { - s32 p; - s32 ent; - s32 t; - s32 m; - s32 q; - register s32 n __asm__("$16"); - unsigned int sp10; - - p = *(s32 *)(a0 + 0x20); /* owner's actor */ - *(u16 *)(p + 0x14) = *(u16 *)(p + 0x14) + 0x200; - - *(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) + 1; /* tick counter */ - if ((*(s32 *)(a0 + 0x1C) & 7) != 0) { - return; - } - ent = (s32)func_8012913C(0x7E); /* alloc particle */ - if (ent == 0) { - return; - } - /* polar scatter: angle in [0,0x1000), radius in [0, actor_r*3/512) */ - func_8012B0B4(&sp10, rand() % 0x1000, - rand() % ((*(s16 *)(*(s32 *)(a0 + 0x20) + 0x18) * 3) >> 9)); - t = (s32)sp10; /* packed dx (lo16) / dz (hi16) */ - *(u16 *)(ent + 6) = *(u16 *)(a0 + 6) + t; /* X */ - *(u16 *)(ent + 0xA) = *(u16 *)(a0 + 0xA); /* Y */ - *(u16 *)(ent + 0xE) = *(u16 *)(a0 + 0xE) + (t >> 16); /* Z */ - - /* vel X = +/- (rand() % 4) << 16 */ - q = rand(); - n = q; - if (q < 0) n = q + 3; - n = n >> 2; - n = n << 2; - m = (q - n) << 16; - if ((rand() & 1) == 0) m = -m; - *(s32 *)(ent + 0x10) = m; - - /* vel Z = +/- (rand() % 4) << 16 */ - q = rand(); - n = q; - if (q < 0) n = q + 3; - n = n >> 2; - n = n << 2; - m = (q - n) << 16; - if ((rand() & 1) == 0) m = -m; - *(s32 *)(ent + 0x18) = m; - - /* vel Y = (-12 - rand() % 9) << 16 (0x38E38E39 magic /9) */ - *(s32 *)(ent + 0x14) = -0xC0000 - ((rand() % 9) << 16); - *(s32 *)(ent + 0x2C) = a0; /* owner backref */ -} - - - -extern void (*D_801942B4[])(void); - -void func_80185020(void *a0) { - D_801942B4[*(u16 *)((s32)a0 + 0x2)](); -} - - -#include "common.h" - -/* func_8018505C — ov_SC05_010 / ov_SC05_010_jr_80181CDC (139 ins) - * - * Fresh mass-lane crack (Phase-31 wave V). No banked twin; the head - * (three-s32 Square0 scratch VECTOR on the stack) was read off the - * ALREADY-BANKED func_80181CDC in THIS SAME TU (it uses `LVec1CDC d;` + - * `Square0(&d.vx, &d.vx);`), and the tail (in3/out2 + abs() compares around - * func_8012EFB8) off src/ov_SC04_002/..._jr_8017BEBC.c:func_80184724. - * Both used as READING sources only — every symbol below is spelled from - * asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC/func_8018505C.s. - * - * FRAME (0x38): - * 0x00..0x0F outgoing args - * 0x10 u16 in3[3] (6 bytes -> 8-byte stride, §193-I) - * 0x18 s16 out2[2] (4 bytes -> 8-byte stride) - * 0x20 {s32 vx,vy,vz,pad} d (16 bytes; GTE square scratch — same body - * as the TU's LVec1CDC, kept anonymous to avoid a typedef clash) - * 0x30 s0 / 0x34 ra - * - * OBJECT FIELDS (widths from the load/store widths in the .s): - * 0x06 s16 x 0x0A s16 y 0x0E s16 z - * 0x10 s32 0x14 s32 0x18 s32 - * 0x20 ptr -> sub-object with u16 at 0x10/0x12/0x14 - * 0x2C ptr -> another object (its s16 x/z at 0x06/0x0E) - * 0x30/0x32/0x34 u16 deltas 0x36 s16 state counter - */ - -struct vec; -extern void func_8012931C(struct vec *a0); -extern void func_801292C8(u8 *a0); -extern void func_8012EFB8(s32 a0); /* TU spelling (line 329) — cast at use */ -extern s32 rand(void); - -void func_8018505C(void *a0) { - u16 in3[3]; /* 0x10 */ - s16 out2[2]; /* 0x18 */ - struct { s32 vx, vy, vz, pad; } d; /* 0x20 — same body as the TU's LVec1CDC, - * left ANONYMOUS so banking cannot collide - * with engine_types.h's typedef (§183.1/law 8) */ - s32 v; - void *tgt = *(void **)((s32)a0 + 0x2C); - - d.vx = *(s16 *)((s32)a0 + 0x6) - *(s16 *)((s32)tgt + 0x6); - d.vy = 0; - d.vz = *(s16 *)((s32)a0 + 0xE) - *(s16 *)((s32)tgt + 0xE); - /* The target INLINES the GTE square (lwc2 IR1..IR3 / sqr 0 / swc2 MAC1..MAC3) - * off ONE base register instead of calling Square0 — same idiom already used - * in src/ov_SC03_099/ov_SC03_099_jr_8012ACE0.c:2737. */ - { - s32 *p = &d.vx; - __asm__ __volatile__( - "lwc2 $9, 0(%0)\n" - "lwc2 $10, 4(%0)\n" - "lwc2 $11, 8(%0)\n" - "nop\n" - "nop\n" - "sqr 0\n" - : : "r"(p) : "$9", "$10", "$11", "memory"); - __asm__ __volatile__( - "swc2 $25, 0(%0)\n" - "swc2 $26, 4(%0)\n" - "swc2 $27, 8(%0)\n" - : : "r"(p) : "memory"); - } - - if (*(s16 *)((s32)a0 + 0x36) == 0) { - /* the pointer is re-loaded per statement: each `sh` kills the CSE - * of `*(s32 *)(a0+0x20)` (§193-E), which is why the target has three - * `lw $a0,0x20($s0)`. */ - *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x10) += *(u16 *)((s32)a0 + 0x30); - *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) += *(u16 *)((s32)a0 + 0x32); - *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x14) += *(u16 *)((s32)a0 + 0x34); - - if (d.vx + d.vz > 0x9000) { - *(s32 *)((s32)a0 + 0x14) = 0x18000; - *(s32 *)((s32)a0 + 0x18) = 0; - *(s32 *)((s32)a0 + 0x10) = 0; - *(u16 *)((s32)a0 + 0x36) += 1; - } - } else { - *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x10) += 0x80; - *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x14) += 0x80; - - if (d.vx + d.vz < 0x4001) { - /* its OWN pseudo: sharing `v` with the abs() block below gives the - * merged pseudo a whole-function live range, and global_alloc then - * seats it in $a0 instead of $v0 (§186c). */ - s32 t = rand(); - *(s16 *)((s32)a0 + 0x36) = 0; - *(s32 *)((s32)a0 + 0x14) = -0x100000 - ((t % 9) << 16); - } - } - - func_8012931C((struct vec *)a0); - - in3[0] = *(u16 *)((s32)a0 + 0x6); - in3[1] = *(u16 *)((s32)a0 + 0xA); - in3[2] = *(u16 *)((s32)a0 + 0xE); - ((void (*)(u16 *, s16 *))func_8012EFB8)(in3, out2); - - /* CALL unless (|out2[0]| < 0xB5 && |out2[1]| < 0x8D && obj->y < 0x10). - * Written as a nested if with an early `return` so the call is emitted - * ONCE (a duplicated tail would need cross_jump to refund it, §193-C). */ - v = out2[0]; - if (v < 0) { - v = -v; - } - if (v < 0xB5) { - v = out2[1]; - if (v < 0) { - v = -v; - } - if (v < 0x8D) { - if (*(s16 *)((s32)a0 + 0xA) < 0x10) { - return; - } - } - } - func_801292C8((u8 *)a0); -} - - - -extern void (*D_801942CC[])(void); - -void func_80185288(void *a0) { - D_801942CC[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_801852C4(s32 arg0) -{ - extern void func_80187B80(s32 a0); - extern void func_8017E910(void); - void *s0; - - func_80187B80(4); - s0 = (void *)(arg0 + 0x76); - func_8017BF08(s0, s0, 5, 0xD2); - func_8017E910(); - func_8002D4C8(0x89E, 0); -} - - -extern void func_80187BAC(void); -extern void func_8017E9B4(void); -void func_8018531C(void) { - func_80187BAC(); - func_8017E9B4(); -} - - -s32 func_80185344(s32 a0) { - extern int func_8001AAA0(void); - if (*(s16 *)(a0 + 0x84) != 0) { - ((int (*)(int))func_8001AAA0)(0x84); - return 1; - } - return 0; -} - - -extern u16 D_80126B62; - void func_80185378(void) { - *(s16 *)((s32)&D_80126B62 + 0x0) += 0xC; - } - - -extern u16 D_80126B62; -void func_80185394(void) { - register s32 *p __asm__("$3"); /* pinned to $v1 */ - register s32 v __asm__("$2"); /* pinned to $v0 */ - p = &D_80126B62; - v = *(u16 *)p + -12; - *(u16 *)p = v; -} - - -void func_801853B0(s32 a0) -{ - extern void func_8012A828(s32 a0, void *a1); - extern s32 func_8012C588(s32 a0, s32 a1); - extern s32 D_801C7E4C[]; - extern void (*D_801A33AC)(void); - - s32 s1 = a0; - s32 v; - s32 i; - s32 r; - - v = *(s32 *)(s1 + 0x1C); - if (v == 0) { - *(u16 *)(s1 + 2) = 1; - func_8012A828(s1, &D_801A33AC); - *(s32 *)(s1 + 0x1C) = 0xB4; - } else { - v = v - 1; - *(s32 *)(s1 + 0x1C) = v; - if ((v & 7) == 0) { - func_8012C588(0x275, s1); - *(u16 *)(*(s32 *)(*(s32 *)D_801C7E4C + 0x20) + 0x1A) = 0xC00; - for (i = 0; i < 8; i++) { - r = func_8012C588(0x2ED, s1); - if (r != 0) { - *(s16 *)(r + 0x16) = -0x10; - *(u16 *)(r + 6) = *(u16 *)(r + 6) + 0x25B; - *(u16 *)(r + 0xA) = *(u16 *)(r + 0xA) - 0x70; - *(u16 *)(r + 0x12) = (rand() & 7) - 4; - *(u16 *)(r + 0x1A) = -4 - (rand() & 7); - func_8002D4C8(0x895, 0); - } - } - } - } -} - - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_801854B8); - -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_80185570); - -void func_80185684(void) { -} - -extern s32 func_8012C354(s32 a0, s32 a1); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); -extern s32 func_8012C588(s32 a0, s32 a1); -extern u8 D_80192514[]; -extern void *D_80192548[]; -extern u16 D_8019255C[]; -extern void (*D_80188CCC)(void); - -void func_8018568C(s32 a0) { - if (func_8012C354(a0, (s32)D_80192514) != 0) { - func_8001C214(*(s32 *)(a0 + 0x20), (s32)D_80192548[*(s16 *)(a0 + 0x70)]); - *(u16 *)(a0 + 6) = *(u16 *)(a0 + 6) + D_8019255C[*(s16 *)(a0 + 0x70)]; - *(u16 *)(a0 + 2) = 1; - func_8012A828(a0, &D_80188CCC); - *(u8 *)(a0 + 0xC0) = 1; - *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) | 0x10; - *(s32 *)(a0 + 0x6C) = func_8012C588(0x28A, a0); - } -} - - -void func_80185744(s32 a0) { - switch (*(s16 *)(a0 + 0x10A)) { - case 0: - break; - case 1: - *(s16 *)(a0 + 2) = 2; - *(s32 *)(a0 + 0x1C) = 0xF; - break; - case 2: - *(s16 *)(a0 + 2) = 3; - *(s16 *)(a0 + 0x34) = 0; - *(s32 *)(a0 + 0x1C) = 0; - *(s16 *)(a0 + 0xFC) = 3; - func_8002D4C8(0x903, 0); - break; - case 3: - *(s16 *)(a0 + 2) = 4; - *(s16 *)(a0 + 0x34) = 0; - *(s32 *)(a0 + 0x1C) = 0; - *(s16 *)(a0 + 0xFC) = 3; - break; - } - *(s16 *)(a0 + 0x10A) = 0; -} - - -void func_801857EC(s32 a0) { - s32 v0; - s32 v1; - v0 = *(s32 *)(a0 + 0x1C); - if (v0 != 0) { - v0--; - v1 = *(s32 *)(a0 + 0x20); - *(s32 *)(a0 + 0x1C) = v0; - *(u16 *)(v1 + 0x1A) ^= 0x100; - v1 = *(s32 *)(a0 + 0x20); - *(u16 *)(v1 + 0x1C) ^= 0x100; - v0 = *(s32 *)(a0 + 0x1C); - if ((v0 & 1) != 0) { - func_8002D4C8(0x902, 0); - } - } else { - v1 = 0x1000; - *(u16 *)(*(s32 *)(a0 + 0x20) + 0x1A) = 0x1000; - *(u16 *)(*(s32 *)(a0 + 0x20) + 0x1C) = 0x1000; - *(u16 *)(a0 + 0x2) = 1; - func_8012C658(0x274, *(s16 *)(a0 + 0x70), a0); - } -} - - -void func_80185894(s32 a0) { - extern s32 func_8012C354(s32 a0, s32 a1); - extern void func_8012A828(s32 a0, void *a1); - extern s32 func_8012C588(s32 a0, s32 a1); - extern u8 D_8019257C[]; - extern void (*D_80188CCC)(void); - - if (func_8012C354(a0, (s32)D_8019257C) != 0) { - *(u16 *)(a0 + 2) = 1; - *(u16 *)(a0 + 6) = *(u16 *)(a0 + 6) + 0x205; - *(u16 *)(a0 + 0xA) = *(u16 *)(a0 + 0xA) + 1; - func_8012A828(a0, &D_80188CCC); - *(u8 *)(a0 + 0xC0) = 1; - *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) | 0x10; - *(s32 *)(a0 + 0x6C) = func_8012C588(0x2D4, a0); - } -} - - -void func_80185920(void *a0) { - s16 x; - s32 a1; - s16 temp; - - x = *(s16 *)((s32)a0 + 0x10A); - if (x == 1) { - } else if (x < 2) { - } else if (x == 2) { - } else if (x == 3) { - *(s16 *)((s32)a0 + 0x2) = 4; - *(s16 *)((s32)a0 + 0x34) = 0; - *(s32 *)((s32)a0 + 0x1C) = 0; - *(s16 *)((s32)a0 + 0xFC) = 3; - } - - a1 = *(s32 *)((s32)a0 + 0x20); - *(s16 *)((s32)a0 + 0x10A) = 0; - temp = *(s16 *)(a1 + 0x1A); - if (temp < 0x1000) { - *(s16 *)(a1 + 0x1A) = temp + 0x40; - } -} - - -#include "common.h" - -/* Obj1CDC / Sub20_1CDC copied verbatim from src/shared/engine_types.h (law 2; - * match_one's cpp has no include path to that file, same pattern used by - * other drafts of this TU, e.g. .run/drafts-p30beh/func_80181CDC.c). obj-> - * unk20 points at a Sub20_1CDC whose only named member is unk14; offsets - * 0x1A/0x1C on it, and offsets 0x1C/0x34 on obj itself, fall inside coarse - * array members of Obj1CDC (unk10[8], unk24[16]) rather than being - * individually named, so they are reached with M2C_FIELD raw-offset access - * (law 2 fallback: type by access width) instead of a struct edit. - * - * RECONCILER (§183 TYPE-adopted-TU): the destination TU pulls these very types in - * via ../shared/engine_core.h -> engine_types.h, so an unguarded copy here is a hard - * `redefinition of struct Obj1CDC` (verified: cc1 rc=33 on the substituted TU). - * Guarded with the banked repo idiom (cookbook §41 step 1, e.g. - * src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.c:4520) so this file compiles BOTH - * standalone under match_one AND spliced into the real TU, where the header's - * definitions (identical layout; `Sub64_1CDC *unk64` instead of the placeholder - * `void *unk64`, a field this function never touches) are the ones that win. */ -#ifndef BFM_ENGINE_TYPES_H - - -#endif /* BFM_ENGINE_TYPES_H */ - -extern s32 func_8004787C(s32 a0); - -void func_80185990(Obj1CDC *obj) { - register s32 t __asm__("$3"); /* pinned to $v1 (matches target; law 186c) */ - u16 state = M2C_FIELD(obj, u16 *, 0x34); - - switch (state) { - case 0: - M2C_FIELD(obj, s32 *, 0x1C) += 0x80; - t = func_8004787C(M2C_FIELD(obj, s32 *, 0x1C)) >> 6; - t += 0x1000; - M2C_FIELD(obj->unk20, s16 *, 0x1A) = (s16) t; - M2C_FIELD(obj->unk20, s16 *, 0x1C) = (s16) t; - if (M2C_FIELD(obj, s32 *, 0x1C) >= 0x800) { - M2C_FIELD(obj, s32 *, 0x1C) &= 0x7FF; - if (--obj->unkFC == 0) { - M2C_FIELD(obj, u16 *, 0x34) += 1; - } - } - break; - - case 1: - M2C_FIELD(obj, s32 *, 0x1C) += 0x80; - t = func_8004787C(M2C_FIELD(obj, s32 *, 0x1C)) >> 3; - t += 0x1000; - M2C_FIELD(obj->unk20, s16 *, 0x1A) = (s16) t; - M2C_FIELD(obj->unk20, s16 *, 0x1C) = (s16) t; - if (M2C_FIELD(obj, s32 *, 0x1C) >= 0x800) { - M2C_FIELD(obj->unk20, s16 *, 0x1A) = 0x1000; - M2C_FIELD(obj->unk20, s16 *, 0x1C) = 0x1000; - obj->unk2 = 1; - } - break; - } -} - - -void func_80185AAC(s32 arg0) -{ - extern void func_801806A0(s32 a0, s32 a1); - u16 temp; - - temp = *(u16 *)(arg0 + 0x76); - *(u8 *)(arg0 + 0xC1) = 0; - *(u16 *)(arg0 + 0x5E) = 0; - *(u16 *)(arg0 + 0x76) = temp - 0xA; - - *(u16 *)(arg0 + 0x5C) &= 0xFFFE; - if (*(s16 *)(arg0 + 0x76) < -0x12B) { - *(s16 *)(arg0 + 0x76) = -0x12C; - } - - if ((u16)(*(u16 *)(arg0 + 0x76) + 0xA) < 0xA) { - *(s16 *)(arg0 + 0x76) = -0x12C; - } - - func_801806A0(arg0, 0); -} - - -void func_80185B20(s32 a0) { - extern s32 func_8012C354(s32 a0, s32 a1); - extern void func_8012A828(s32 a0, void *a1); - extern u8 D_801926E0; - extern void (*D_80188CCC)(void); - extern M2C_UNK D_80192714; - extern s32 D_801922B0[]; - u16 v0; - - if (func_8012C354(a0, (s32)&D_801926E0) != 0) { - *(u32 *)(*(s32 *)(a0 + 0x20) + 4) = *(u32 *)(*(s32 *)(a0 + 0x20) + 4) | 0x80000000; - *(u16 *)(a0 + 2) = 1; - func_8012A828(a0, &D_80188CCC); - *(u8 *)(a0 + 0x75) = 3; - *(u8 *)(a0 + 0xC0) = 1; - *(s32 *)(a0 + 0xBC) = (s32)&D_80192714; - *(s16 *)(a0 + 0xAE) = -1; - *(s32 *)(a0 + 0xB4) = 0; - *(s32 *)(a0 + 0xC4) = *(s32 *)(a0 + 0xC4) | 2; - v0 = *(u16 *)(*(s32 *)(a0 + 0x64) + 0x70); - *(u16 *)(a0 + 0x70) = v0; - *(s32 *)(a0 + 0x58) = (s32)D_801922B0 + ((s16)v0 << 4); - } -} - - -#include "common.h" - -extern s32 func_800CF8B4(); -extern s32 func_8014CB8C(void); - -void func_80185BD8(s32 arg0) -{ - extern void func_801806A0(s32 a0, s32 a1); - s16 sVar1; - - if ((*(u8 *)(arg0 + 0x74) != 0) && (func_800CF8B4() != 0) && (func_8014CB8C() != 0)) { - sVar1 = *(u16 *)(arg0 + 0x76) - 4; - *(s16 *)(arg0 + 0x76) = sVar1; - if (sVar1 < -0x12B) { - *(s16 *)(arg0 + 0x76) = -0x12C; - } - if ((u16)(*(u16 *)(arg0 + 0x76) + 4) < 4) { - *(s16 *)(arg0 + 0x76) = -0x12C; - } - func_801806A0(arg0, 0); - } -} - - -void func_80185C80(s32 a0) { - extern s32 func_8012C354(s32 a0, s32 a1); - extern void func_8012A828(s32 a0, void *a1); - extern u8 D_8019273C[]; - extern void (*D_80188CCC)(void); - - if (func_8012C354(a0, (s32)D_8019273C) != 0) { - *(u32 *)(*(s32 *)(a0 + 0x20) + 4) = *(u32 *)(*(s32 *)(a0 + 0x20) + 4) | 0x80000000; - *(s16 *)(a0 + 2) = 1; - func_8012A828(a0, &D_80188CCC); - *(u8 *)(a0 + 0x75) = 3; - *(u8 *)(a0 + 0xC0) = 1; - *(s16 *)(a0 + 0xAE) = -1; - } -} - - -void func_80185CF8(void) { -} - -void func_80185D00(s32 a0) { - extern s32 func_8012C354(s32 a0, s32 a1); - extern void func_8012A828(s32 a0, void *a1); - extern M2C_UNK D_80192778; - extern void (*D_80188CCC)(void); - extern u16 D_801927AC[]; - s32 s0 = a0; - if (func_8012C354(a0, (s32)&D_80192778)) { - *(u16 *)(s0 + 2) = 1; - ((void (*)(s32 *, void *))func_8012A828)((s32 *)s0, (s32)&D_80188CCC); - *(u8 *)(s0 + 0xC0) = 1; - *(u16 *)(s0 + 0xFE) = 0xF; - *(u16 *)((s32)*(void **)(s0 + 0x20) + 0x2C) |= 0x10; - *(u16 *)(s0 + 0xA) += D_801927AC[*(u16 *)(s0 + 0x70) & 0xF]; - } -} - - -#include "common.h" - -extern void func_8017ECE4(void); -extern void func_8012B1B4(s32 a0, s32 a1); -extern s32 func_8012C588(s32 a0, s32 a1); -extern s32 rand(void); - -void func_80185D98(s32 a0) { - s32 v1; - s32 s0; - s32 q; - s32 i; - s32 sp10[3]; - - v1 = *(s32 *)(a0 + 0x20); - *(s16 *)(v1 + 0x12) = *(u16 *)(v1 + 0x12) - 0x400; - func_8017ECE4(); - sp10[0] = 0; - sp10[1] = 0; - sp10[2] = 0x40000; - func_8012B1B4(a0, (s32)sp10); - *(s32 *)(a0 + 0x14) = 0xFFF80000; - for (i = 0; i < 3; i++) { - s0 = func_8012C588(0x2ED, a0); - if (s0 != 0) { - *(u16 *)(s0 + 0x06) = *(u16 *)(a0 + 0x7C); - *(u16 *)(s0 + 0x0A) = *(u16 *)(a0 + 0x7E); - *(u16 *)(s0 + 0x0E) = *(u16 *)(a0 + 0x80); - q = rand(); - *(s16 *)(s0 + 0x12) = (*(s16 *)(a0 + 0x12) * (q & 0x3FF)) >> 8; - q = rand(); - *(s16 *)(s0 + 0x1A) = (*(s16 *)(a0 + 0x1A) * (q & 0x3FF)) >> 8; - q = rand(); - *(u16 *)(s0 + 0x16) = -0xC - (q & 3); - } - } -} - - -extern void func_8012B200(u8 *a0); -extern void func_8012C218(void *a0); -extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); -extern s32 rand(void); - -void func_80185EA0(s32 a0) { - s32 r; - - if ((rand() & 7) == 0) { - r = func_8012C658(0x27B, 0, a0); - if (r != 0) { - func_8012B200((u8 *)r); - *(s16 *)(r + 0xE) = 0; - } - } - - ((void (*)(s32))func_8012C218)(a0); -} - - -extern void func_8017ECE4(void); - void func_80185F08(s32 arg0) { - if (*(u16 *)arg0 != 0) { - ((void (*)(void))func_8017ECE4)(); - } - } - - -extern void func_80131B14(); -extern void func_80143CD4(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_800CB0E8(s32 a0); -extern void func_8017ECE4(void); -extern void func_8012B23C(s32 a0); - -void func_80185F38(s32 param_1) -{ - func_80131B14(); - *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) - 0x400; - *(s32 *)(param_1 + 0x1C) = 0x78; - func_80143CD4(param_1); - func_8002D4C8(0x47B, 0); - func_8002D4C8(0x478, 0); - func_800CB0E8(param_1); - ((void (*)(s32))func_8017ECE4)((s32)param_1); - func_8012B23C(param_1); -} - - -#include "common.h" - -extern void func_8012CBF4(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8017ECE4(void); - -void func_80185FB4(s32 a0) { - func_8012CBF4(a0); - if (func_8012BEE8(a0) != 0) { - *(u8 *)(a0 + 0xC1) = 0; - *(u16 *)(a0 + 0x5E) = 0; - } - ((void (*)(s32))func_8017ECE4)(a0); -} - - -void func_80185FFC(s32 a0) { - extern s32 func_8012C354(s32 a0, s32 a1); - extern void func_8012A828(s32 a0, void *a1); - extern void func_8012B23C(s32 a0); - extern s32 rand(void); - extern u8 D_801927D0[]; - extern void (*D_80188CCC)(void); - extern u8 D_80192804[]; - - s32 s0 = a0; - - if (func_8012C354(s0, (s32)D_801927D0) != 0) { - *(u16 *)(s0 + 2) = 1; - func_8012A828(s0, &D_80188CCC); - *(u8 *)(s0 + 0xC0) = 1; - *(s32 *)(s0 + 0xB4) = -0x2041; - *(s16 *)(s0 + 0xAE) = 0x2000; - *(s32 *)(s0 + 0xC4) |= 1; - func_8012B23C(s0); - *(u16 *)(*(s32 *)(s0 + 0x20) + 0x2C) |= 0x10; - *(void **)(s0 + 0xBC) = D_80192804; - *(s32 *)(s0 + 4) = 0x25B0000; - *(s32 *)(s0 + 8) = 0xFF900000; - *(s32 *)(s0 + 0x10) = ((rand() % 0x240) + 0x60) << 11; - *(u16 *)(s0 + 0xFE) = (rand() & 0x1FF) + 0x100; - } -} - - -#include "common.h" - -void func_801860F4(s32 a0) { - if (*(s32 *)(a0 + 0x1C) == 0) { - *(u8 *)(a0 + 0xC1) = 0; - *(u16 *)(a0 + 0x5E) = 0; - *(u16 *)(a0 + 0x5C) = 0x8000; - } else { - *(s32 *)(a0 + 0x1C) -= 1; - } -} - - -void func_80186124(s32 a0) { - extern s32 func_8012C354(s32 a0, s32 a1); - extern void func_8012A828(s32 a0, void *a1); - extern void func_8001D0E8(s32 a0, s32 a1, s32 a2); - extern s32 func_8012C588(s32 a0, s32 a1); - extern M2C_UNK D_801928F0; - extern void (*D_80188CCC)(void); - extern u8 *D_801C7E54; - s32 s0 = a0; - - if (func_8012C354(a0, (s32)&D_801928F0) != 0) { - *(u16 *)(s0 + 2) = 1; - func_8012A828(s0, &D_80188CCC); - *(u8 *)(s0 + 0xC0) = 1; - *(s32 *)(s0 + 0xB4) = -1; - *(s16 *)(s0 + 0xAE) = -1; - *(u16 *)(*(s32 *)(s0 + 0x20) + 0x14) = 0x180; - *(u16 *)(s0 + 0xFC) = 0; - *(s16 *)(s0 + 0xFE) = 0x400; - *(u16 *)(s0 + 0x100) = 0; - func_8001D0E8(*(s32 *)(s0 + 0x20), 0x400, 0x400); - *(u8 *)(s0 + 0x75) = 3; - D_801C7E54 = (u8 *) func_8012C588(0x28D, s0); - } -} - - - - -void func_801861D0(s32 a0) { - extern s32 func_8012C354(s32 a0, s32 a1); - extern void func_8012A828(s32 a0, void *a1); - extern void func_8001D0E8(s32 a0, s32 a1, s32 a2); - extern u8 D_8019294C; - extern u8 D_801AB1A8[]; - s32 s0 = a0; - - if (func_8012C354(a0, (s32)&D_8019294C)) { - *(u16 *)(s0 + 2) = 1; - func_8012A828((s32)s0, D_801AB1A8); - *(u8 *)(s0 + 0x75) = 3; - *(u8 *)(s0 + 0xC0) = 1; - *(s32 *)(s0 + 0xB4) = -1; - *(s16 *)(s0 + 0xAE) = -1; - func_8001D0E8(*(s32 *)(s0 + 0x20), 0x400, 0x400); - } -} - - -extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); -extern u16 D_80126B96; -extern s16 D_80126B98; -extern s32 D_80127078; -extern u8 D_80192980[]; -extern u8 D_80192988; - -void func_8018624C(s32 arg0) { - s16 temp; - - if (*(s16 *)(*(s32 *)(arg0 + 0x64) + 0x10A) == 3) { - temp = *(s16 *)(arg0 + 0x10A); - if (temp == 1 && func_8012DEB8(arg0, D_80192980, &D_80192988) == temp) { - D_80126B96 = 0x400F; - D_80126B98 = 0; - D_80127078 = arg0; - } - } -} - - -void func_801862D8(s32 a0) { - extern s32 func_8012C354(s32 a0, s32 a1); - extern void func_8012A828(s32 a0, void *a1); - extern void func_8001D0E8(s32 a0, s32 a1, s32 a2); - extern s32 func_8012C588(s32 a0, s32 a1); - extern M2C_UNK D_801929A8; - extern void (*D_80188CCC)(void); - extern s32 D_801C7E5C; - s32 s0 = a0; - - if (func_8012C354(a0, (s32)&D_801929A8) != 0) { - *(u16 *)(s0 + 2) = 1; - func_8012A828(s0, &D_80188CCC); - *(u8 *)(s0 + 0x75) = 3; - *(u8 *)(s0 + 0xC0) = 1; - *(s32 *)(s0 + 0xB4) = -1; - *(s16 *)(s0 + 0xAE) = -1; - *(u16 *)(*(s32 *)(s0 + 0x20) + 0x14) = 0x180; - *(u16 *)(s0 + 0xFC) = 0; - *(s16 *)(s0 + 0xFE) = -0x400; - *(u16 *)(s0 + 0x100) = 0; - func_8001D0E8(*(s32 *)(s0 + 0x20), 0x400, 0x400); - D_801C7E5C = func_8012C588(0x28F, s0); - } -} - - -extern s32 D_801C7E50[1]; - -void func_80186384(s32 arg0) { - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x14) = *(u16 *)(*(s32 *)(D_801C7E50[0] + 0x20) + 0x14); - *(u16 *)(arg0 + 0xFC) = -0x8000 - *(s16 *)(D_801C7E50[0] + 0xFC); - *(u16 *)(arg0 + 0xFE) = -0x8000 - *(s16 *)(D_801C7E50[0] + 0xFE); -} - - -void func_801863E0(s32 a0) { - extern s32 func_8012C354(s32 a0, s32 a1); - extern void func_8012A828(s32 a0, void *a1); - extern void func_8001D0E8(s32 a0, s32 a1, s32 a2); - extern u8 D_801929F4; - extern u8 D_801AB180[]; - s32 s0 = a0; - - if (func_8012C354(a0, (s32)&D_801929F4)) { - *(u16 *)(s0 + 2) = 1; - func_8012A828((s32)s0, D_801AB180); - *(u8 *)(s0 + 0x75) = 3; - *(u8 *)(s0 + 0xC0) = 1; - *(s32 *)(s0 + 0xB4) = -1; - *(s16 *)(s0 + 0xAE) = -1; - func_8001D0E8(*(s32 *)(s0 + 0x20), 0x400, 0x400); - } -} - - -extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); -extern u16 D_80126B96; -extern s16 D_80126B98; -extern s32 D_80127078; -extern u8 D_80192980[]; -extern u8 D_80192988; -extern s32 D_801C7E50[1]; - -void func_8018645C(s32 arg0) { - s16 temp; - - if (*(s16 *)((*(s32 *)D_801C7E50) + 0x10A) == 3) { - temp = *(s16 *)(arg0 + 0x10A); - if (temp == 1 && func_8012DEB8(arg0, D_80192980, &D_80192988) == temp) { - D_80126B96 = 0x400F; - D_80126B98 = 0; - D_80127078 = arg0; - } - } -} - - -void func_801864E4(int a0) { - int t; - int r; - int sel; - int start; - - t = *(u16 *)(a0 + 0xFC) + 0x20; - *(u16 *)(a0 + 0xFC) = t; - *(int *)(a0 + 4) = *(int *)(a0 + 0x10) + (func_80047948((s16)t) << 13); - *(int *)(a0 + 8) = *(int *)(a0 + 0x14) - (func_8004787C(*(s16 *)(a0 + 0xFC)) << 13); - - if (*(s16 *)(a0 + 0xFC) >= 0x400) { - sel = (rand() & 1) ? -0x255555 : -0x1D5555; - __asm__("" : "=r"(sel) : "0"(sel)); - start = sel; - for (; start <= 0x3AAAA9; start += 0x1AAAAA) { - r = func_8012C658(0x29E, 1, a0); - if (r != 0) { - *(int *)(r + 0x10) = start; - } - } - func_8012C218(a0); - } -} - - -extern void func_8012CBCC(s32 a0); - extern void func_8012C218(void *a0); - void func_801865E8(void *a0) { - if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { - ((void (*)(s32))func_8012C218)((s32)a0); - } - } - - -extern s32 func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8012B200(u8 *a0); -extern void func_8001CA1C(void *a0, void *a1); -extern void func_8012A828(s32 a0, void *a1); -extern s32 rand(void); - -extern u8 D_80192AFC[]; -extern u8 D_80192B38[]; - -void func_80186624(s32 param_1) -{ - s32 v0; - s32 v1; - - if ((*(s32 *)(param_1 + 0x20) = func_8012C1B8()) == 0) { - func_8012CAE4((void *)param_1); - } else { - func_8012B200((u8 *)param_1); - func_8001CA1C((void *)(*(s32 *)(param_1 + 0x20)), D_80192AFC); - func_8012A828(param_1, D_80192B38); - *(s16 *)(param_1 + 2) = 1; - *(u32 *)(*(s32 *)(param_1 + 0x20) + 4) |= 0x50000000; - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x2C) |= 0x10; - v1 = *(s32 *)(param_1 + 0x20); - *(s16 *)(v1 + 0x1A) = 0x4000; - *(s16 *)(v1 + 0x18) = 0x4000; - v0 = rand(); - v1 = ((v0 & 0x7FF) - 0x400) * 0x156; - *(s32 *)(param_1 + 0x10) = v1; - v0 = rand(); - *(s32 *)(param_1 + 0x14) = ((v0 & 0x7FF) - 0x400) * 0x80; - *(s16 *)(param_1 + 6) = 0x270; - *(s16 *)(param_1 + 0xA) = -0xC0; - *(s16 *)(param_1 + 0xE) = -0x40; - } -} - - -extern s32 func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8012B23C(s32 a0); -extern void func_8001CA1C(void *a0, void *a1); -extern void func_8012A828(s32 a0, void *a1); - -extern u8 D_80192B70[]; -extern u8 D_80192C30[]; - -void func_8018672C(s32 param_1) -{ - s32 v0; - s32 v1; - - if ((*(s32 *)(param_1 + 0x20) = func_8012C1B8()) == 0) { - func_8012CAE4((void *)param_1); - } else { - func_8012B23C(param_1); - func_8001CA1C((void *)(*(s32 *)(param_1 + 0x20)), D_80192B70); - func_8012A828(param_1, D_80192C30); - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(param_1 + 2) = 1; - *(u32 *)(v0 + 4) |= 0x50000000; - v1 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v1 + 0x2C) |= 0x10; - *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x18) = 0x2000; - *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x1A) = 0x2000; - } -} - - -extern void func_8012CBCC(s32 a0); -extern void func_8012C218(void *a0); -extern void func_8017ECE4(void); -extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_80143C74(s32 a0, s32 a1); -extern s32 rand(void); - -void func_801867E4(s32 a0) { - s32 r; - s32 i; - s32 ang; - - func_8012CBCC(a0); - if (((s32 (*)(s32))func_8017ECE4)(a0) <= 0) { - return; - } - r = func_80143C74(a0, 0); - if (r != 0) { - *(s16 *)(*(s32 *)(r + 0x20) + 0x18) = 0x5000; - *(s16 *)(*(s32 *)(r + 0x20) + 0x1A) = 0x5000; - *(s16 *)(r + 0x16) = -8; - } - for (i = 0; i < 8; i++) { - r = func_8012C658(0x29E, 2, a0); - if (r != 0) { - ang = (rand() & 0x1FF) + (i << 9); - *(s32 *)(r + 0x10) = func_8004787C(ang) << 6; - *(s32 *)(r + 0x18) = func_80047948(ang) << 6; - *(s32 *)(r + 0x14) = 0xFFF80000 - ((rand() & 0x3FF) << 8); - } - } - func_8012C218(a0); -} - - -void func_801868EC(s32 a0) { - extern s32 D_801C7E30; - extern s32 D_801C7E60; - extern s32 D_801C7E78; - extern u8 D_801924A0[]; - extern u8 D_801A36FC[]; - extern void func_8017C010(s32 a0, s32 a1, s32 a2); - extern void func_8016AA50(s32 a0, s32 a1); - extern void func_8016B3F4(s32 a0); - extern void func_8012C218(void *a0); - extern void func_8012A828(s32 a0, void *a1); - extern void func_8002A520(void *a0); - extern void func_8002D4C8(s32 a0, s32 a1); - s32 s0 = a0; - s32 cnt; - - *(u16 *)(D_801C7E30 + 0x76) -= 0x80; - func_8017C010(*(s32 *)(s0 + 0x64) + 0x76, (s32)D_801924A0, 0xD2); - func_8016AA50(s0, 0x80); - func_8016B3F4(s0); - - if (*(s16 *)(D_801C7E30 + 0x76) <= 0) { - *(u16 *)(D_801C7E30 + 0x2) = 0xB; - func_8012C218((void *)D_801C7E60); - func_8012A828(D_801C7E30, D_801A36FC); - *(u16 *)(s0 + 0x2) = 4; - *(u16 *)(s0 + 0x34) = 0; - } else { - *(u16 *)(s0 + 0x76) = 0x3E8; - *(s32 *)(s0 + 0x1C) = 0x1E; - cnt = D_801C7E78; - *(u16 *)(s0 + 0x2) = 5; - D_801C7E78 = cnt + 1; - } - - if (*(u8 *)(s0 + 0xC8) != 0) { - func_8002A520((void *)s0); - } - *(u16 *)(s0 + 0x5C) = 0; - *(u8 *)(s0 + 0xC1) = 0; - func_8002D4C8(0x9CE, 0); -} - - -void func_80186A00(s32 a0) { - extern s32 func_8012C354(s32 a0, s32 a1); - extern void func_8012A828(s32 a0, void *a1); - extern void (*D_80192D18)(void); - extern void (*D_80188CCC)(void); - extern s32 D_801C7E74; - extern u8 D_80192D4C[]; - extern u8 D_80192D54[]; - - s32 v0; - s32 v1; - u16 t; - - if (func_8012C354(a0, (s32)&D_80192D18) != 0) { - *(s16 *)(a0 + 2) = 1; - func_8012A828(a0, &D_80188CCC); - v1 = *(s32 *)(a0 + 0x20); - *(s8 *)(a0 + 0xC0) = 1; - t = *(u16 *)(v1 + 0x2C); - D_801C7E74 = 0; - *(u16 *)(v1 + 0x2C) = t | 0x80; - v1 = *(s32 *)(a0 + 0x20); - *(s32 *)(v1 + 0x80) = (s32)D_80192D4C; - *(s16 *)(a0 + 0xAE) = -0x13; - *(s32 *)(a0 + 0xBC) = (s32)D_80192D54; - v0 = *(s32 *)(a0 + 0xC4); - *(s32 *)(a0 + 0xB4) = 0; - *(s32 *)(a0 + 0x1C) = 8; - *(s32 *)(a0 + 0xC4) = v0 | 3; - } -} - - -void func_80186AA8(s32 arg0) { - if (*(s32 *)(arg0 + 0x1C) != 0) { - *(s32 *)(arg0 + 0x1C) = *(s32 *)(arg0 + 0x1C) - 1; - *(u16 *)(arg0 + 6) = *(u16 *)(arg0 + 6) + 1; - *(u16 *)(arg0 + 0xA) = *(u16 *)(arg0 + 0xA) - 1; - } else { - *(u16 *)(arg0 + 2) = *(u16 *)(arg0 + 2) + 1; - *(s32 *)(arg0 + 0x1C) = 0x12C; - } -} - - -void func_80186AF4(s32 arg0) { - extern s32 func_8012C588(s32 a0, s32 a1); - s32 s0; - s32 i; - - if (*(s32 *)(arg0 + 0x1C) != 0) { - *(s32 *)(arg0 + 0x1C) = *(s32 *)(arg0 + 0x1C) - 1; - } else { - *(s16 *)(arg0 + 2) = *(u16 *)(arg0 + 2) + 1; - *(s32 *)(arg0 + 0x1C) = 2; - func_8002D4C8(0x89D, 0); - for (i = 0; i < 8; i++) { - s0 = func_8012C588(0x2ED, arg0); - if (s0 != 0) { - *(s16 *)(s0 + 0x16) = -0x10; - *(s16 *)(s0 + 0xA) = *(u16 *)(s0 + 0xA) + 0x20; - *(s16 *)(s0 + 0xE) = *(u16 *)(s0 + 0xE) - 0x18; - *(u16 *)(s0 + 0x12) = (rand() & 7) - 4; - *(u16 *)(s0 + 0x1A) = -4 - (rand() & 7); - } - } - } -} - - -extern s32 D_801C7E30; -extern s32 D_801C7E34[]; - -void func_80186BD8(void *a0) -{ - s32 v0; - s32 v1; - - v0 = *(s32 *)(a0 + 0x1C); - if (v0 != 0) { - *(s32 *)(a0 + 0x1C) = v0 - 1; - *(s16 *)(a0 + 0x6) = *(s16 *)(a0 + 0x6) - 6; - *(s16 *)(a0 + 0xA) = *(s16 *)(a0 + 0xA) + 8; - } else { - v1 = D_801C7E30; - D_801C7E34[0] = 0; - *(u16 *)(v1 + 0x34) = *(u16 *)(v1 + 0x34) + 1; - func_8012C218(a0); - } -} - - -extern void func_8002D4C8(s32 a0, s32 a1); -extern s32 func_8012C588(s32 a0, s32 a1); -extern s32 rand(void); - -void func_80186C44(s32 a0) -{ - s32 s1 = a0; - s32 v; - s32 i; - s32 s0; - - v = *(s32 *)(s1 + 0x1C) - 1; - *(s32 *)(s1 + 0x1C) = v; - if (v == 0) { - *(s32 *)(s1 + 0x1C) = 2; - *(u16 *)(s1 + 2) = 3; - func_8002D4C8(0x89D, 0); - for (i = 0; i < 8; i++) { - s0 = func_8012C588(0x2ED, s1); - if (s0 != 0) { - *(s16 *)(s0 + 0x16) = -0x10; - *(s16 *)(s0 + 0xA) = *(u16 *)(s0 + 0xA) + 0x20; - *(s16 *)(s0 + 0xE) = *(u16 *)(s0 + 0xE) - 0x18; - *(u16 *)(s0 + 0x12) = (rand() & 7) - 4; - *(u16 *)(s0 + 0x1A) = -4 - (rand() & 7); - } - } - } else { - *(u16 *)(s1 + 6) = *(u16 *)(s1 + 6) ^ 4; - } -} - - -void func_80186D38(void) { -} - - -/* ---- externs ------------------------------------------------------------ */ -extern void func_8001CD50(s32 a0, s32 a1); -extern void func_800233CC(void *a0, unsigned short a1); - - -/* align-1 4-byte block: lowers via emit_block_move (unaligned lwl/lwr + swl/swr) - * with ZERO memcpy-symbol reference, so the TU's `extern memcpy` cannot turn - * this into a CALL. (house idiom, cf. func_8017B238 / func_8017B614) */ - -void func_80186D40(s32 param_1) -{ - - extern u8 D_801C7E7C; - extern u8 D_801C7E80; - extern u8 D_801C5B80; - extern u8 D_801C5B84; - func_8001CD50(*(s32 *)(param_1 + 0x20), (s32)&D_801C7E7C); - - *(u16 *)(param_1 + 0xA) -= 0x100; - *(u32 *)(*(s32 *)(param_1 + 0x20) + 4) |= 0x50000000; - *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = 0x400; - *(s16 *)(param_1 + 0x2C) = 0x10; - - func_800233CC(&D_801C7E7C, 0x10); - - *(Blk4_8018CE04_80186D40 *)&D_801C7E7C = *(Blk4_8018CE04_80186D40 *)&D_801C5B80; - *(Blk4_8018CE04_80186D40 *)&D_801C7E80 = *(Blk4_8018CE04_80186D40 *)&D_801C5B84; - - *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x1E) = 0xC00; - *(u16 *)(param_1 + 2) += 1; -} - - -extern u8 D_801C7E80; - -void func_80186E1C(void *param_1) -{ - s16 v0; - s16 v1; - - v0 = *(s16 *)((s32)param_1 + 0x2C); - v1 = v0; - if (v0 < 0x700) { - *(s16 *)((s32)param_1 + 0x2C) = v1 + 0x30; - func_80184100((u8 *)&D_801C7E80, -4); - func_800233CC((void *)((s32)&D_801C7E80 - 4), *(u16 *)((s32)param_1 + 0x2C)); - } else { - func_801292C8((u8 *)param_1); - } -} - - - - -extern s32 func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C810(s32 a0, s32 a1); - -extern u8 D_801B5C84; -extern u8 D_801B6434; - -void func_80186E94(s32 param_1) -{ - s32 v0; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - return; - } - - ((void (*)(s32, s32))func_8001C810)(v0, (s32)&D_801B5C84); - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(param_1 + 0xCC) = v0; - if (v0 == 0) { - ((void (*)(s32))func_8012CAE4)(param_1); - v0 = *(s32 *)(param_1 + 0x20); - *(s16 *)v0 = 0; - return; - } - - ((void (*)(s32, s32))func_8001C810)(v0, (s32)&D_801B6434); - - *(u8 *)(param_1 + 0xC0) = 0; - *(u32 *)(*(s32 *)(param_1 + 0x20) + 4) |= 0x50000000; - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x2C) |= 0x10; - *(u32 *)(*(s32 *)(param_1 + 0xCC) + 4) |= 0x50000000; - *(u16 *)(*(s32 *)(param_1 + 0xCC) + 0x2C) |= 0x10; - - func_801841E4((s32 *)param_1); -} - - -#include "common.h" - -extern void func_80184214(void *a0); - -void func_80186F7C(s32 param_1) -{ - s32 a1; - u16 v0; - u16 v1; - - a1 = *(s32 *)(param_1 + 0xCC); - v1 = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x18); - if (v1 < 0x3000) { - s32 p20; - - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x18) = v1 + 0x100; - - p20 = *(s32 *)(param_1 + 0x20); - v1 = *(u16 *)(p20 + 0x18); - *(u16 *)(p20 + 0x1C) = v1; - *(u16 *)(p20 + 0x1A) = v1; - - v0 = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12); - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = v0 + 0x100; - - *(u16 *)(a1 + 0x12) = *(u16 *)(a1 + 0x12) - 0x100; - - *(u16 *)(a1 + 0x8) = *(u16 *)(param_1 + 0x6) + *(u16 *)(param_1 + 0x50); - *(u16 *)(a1 + 0xA) = *(u16 *)(param_1 + 0xA) + *(u16 *)(param_1 + 0x52); - *(u16 *)(a1 + 0xC) = *(u16 *)(param_1 + 0xE) + *(u16 *)(param_1 + 0x54); - - *(u16 *)(a1 + 0x18) = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x18); - *(u16 *)(a1 + 0x1A) = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1A); - *(u16 *)(a1 + 0x1C) = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1C); - } else { - func_80184214((void *)param_1); - } -} - - -extern s32 func_8012BEE8(s32 a0); -extern void func_80016450(s32 a0, s32 a1); -extern void func_8018423C(void); - -void func_80187074(s32 param_1) -{ - switch (*(u16 *)(param_1 + 0x34)) { - case 0: - { - u8 v0 = *(u8 *)(param_1 + 0xFC) + 0x10; - *(u8 *)(param_1 + 0xFC) = v0; - if (v0 >= 0xF1) { - *(u32 *)(*(s32 *)(param_1 + 0x20) + 4) |= 0x80000000; - *(u32 *)(*(s32 *)(param_1 + 0xCC) + 4) |= 0x80000000; - *(s32 *)(param_1 + 0x1C) = 8; - *(u16 *)(param_1 + 0x34) += 1; - } - break; - } - case 1: - if (func_8012BEE8(param_1) != 0) { - ((void (*)(s32))func_8018423C)(param_1); - } - break; - } - - func_80016450(*(u8 *)(param_1 + 0xFC), 0); -} - - -void func_80187144(u8 *a0) -{ - s32 v = a0[0xFC] - 3; - a0[0xFC] = (u8)v; - if ((u32)(v & 0xFF) >= 9) { - func_80016450(v & 0xFF, 0); - } else { - func_8012C218((void *)a0); - } -} - - -#include "common.h" - -extern void func_8012CBCC(s32 a0); -extern void func_8012C218(void *a0); - -void func_80187198(s32 a0) -{ - s32 s0; - s32 v0; - - s0 = a0; - v0 = ((s32 (*)(s32))func_8012CBCC)(a0); - if (v0 != 0) { - *(u16 *)(s0 + 0xFC) = -*(u16 *)(s0 + 0xFC); - *(u16 *)(s0 + 0xFE) = -*(u16 *)(s0 + 0xFE); - *(u16 *)(s0 + 0x100) = -*(u16 *)(s0 + 0x100); - if (v0 & 0x8000) { - *(s32 *)(s0 + 0x10) = -*(s32 *)(s0 + 0x10); - *(s32 *)(s0 + 0x18) = -*(s32 *)(s0 + 0x18); - } else { - *(s32 *)(s0 + 0x14) = -*(s32 *)(s0 + 0x14); - } - } - - *(u16 *)(*(s32 *)(s0 + 0x20) + 0x10) += *(u16 *)(s0 + 0xFC); - *(u16 *)(*(s32 *)(s0 + 0x20) + 0x12) += *(u16 *)(s0 + 0xFE); - *(u16 *)(*(s32 *)(s0 + 0x20) + 0x14) += *(u16 *)(s0 + 0x100); - - if (--*(s32 *)(s0 + 0x1C) < 0x10) { - *(u32 *)(*(s32 *)(s0 + 0x20) + 4) ^= 0x80000000; - if (*(s32 *)(s0 + 0x1C) == 0) { - func_8012C218((void *)s0); - } - } -} - - -extern s32 func_8012C354(s32, s32); -extern void func_8012A828(s32 a0, void *a1); -extern void func_8012B23C(s32 a0); -extern s32 rand(void); -extern void (*D_80192D18[])(void); -extern void (*D_80188CCC)(void); - -void func_801872BC(s32 param_1) { - if (((s32 (*)(s32, void *))func_8012C354)(param_1, &D_80192D18) != 0) { - *(u8 *)(param_1 + 0xC0) = 1; - *(u16 *)(param_1 + 0x5C) = 0; - func_8012A828(param_1, &D_80188CCC); - *(u16 *)(param_1 + 2) = 1; - func_8012B23C(param_1); - *(s16 *)(param_1 + 0xFC) = (rand() & 0xFF) - 0x80; - *(s16 *)(param_1 + 0xFE) = (rand() & 0xFF) - 0x80; - *(s16 *)(param_1 + 0x100) = (rand() & 0xFF) - 0x80; - *(s16 *)(param_1 + 0x12) = (rand() & 0xF) - 8; - *(s16 *)(param_1 + 0x1A) = (rand() & 0xF) - 8; - *(s16 *)(param_1 + 0x16) = -((rand() & 0xF) + 0x28); - *(s32 *)(param_1 + 0x1C) = 0x5A; - } -} - - -void func_8018738C(s32 a0) { - extern s32 func_8012C354(s32 a0, s32 a1); - extern void func_8012A828(s32 a0, void *a1); - extern void (*D_80188CCC)(void); - extern void (*D_80192E00)(void); - - if (func_8012C354(a0, (s32)&D_80192E00) != 0) { - *(s32 *)(*(s32 *)(a0 + 0x20) + 4) = *(s32 *)(*(s32 *)(a0 + 0x20) + 4) | 0x40000040; - *(u8 *)(a0 + 0xC0) = 1; - *(u16 *)(a0 + 0x5C) = 0; - func_8012A828(a0, &D_80188CCC); - *(u16 *)(a0 + 2) = 1; - *(s32 *)(a0 + 0x1C) = 6; - } -} - - - -extern void func_8012C218(void*); - s32 func_80187404(s32 arg0) { - *(s32 *)(arg0 + 0x1c) -= 1; - if (*(s32 *)(arg0 + 0x1c) == 0) { - ((void (*)(void))func_8012C218)(); - } - } - - -#include "common.h" - -extern s32 func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8012B23C(s32 a0); -extern void func_8001CA1C(void *a0, void *a1); -extern void func_8012A828(s32 a0, void *a1); - -extern u8 D_80192E3C[]; -extern u8 D_80192E48[]; - -void func_80187438(s32 param_1) -{ - s32 v0; - - if ((*(s32 *)(param_1 + 0x20) = func_8012C1B8()) == 0) { - func_8012CAE4((void *)param_1); - } else { - func_8012B23C(param_1); - func_8001CA1C((void *)(*(s32 *)(param_1 + 0x20)), D_80192E3C); - func_8012A828(param_1, D_80192E48); - v0 = *(s32 *)(param_1 + 0x20); - *(u16 *)(param_1 + 2) = 1; - *(s16 *)(param_1 + 0xE) = -0x30; - *(u32 *)(v0 + 4) |= 0x8000000; - *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x14) = 0xC00; - *(s32 *)(param_1 + 0x1C) = 0x14; - } -} - - -extern void func_8012C218(void*); -extern void func_8017ECE4(void); -extern s32 D_801C7E64; - -void func_801874DC(void *param_1) { - s32 v; - - v = *(s32 *)((u8 *)param_1 + 0x1C) - 1; - *(s32 *)((u8 *)param_1 + 0x1C) = v; - if (v == 0) { - ((void (*)(void))func_8012C218)(); - D_801C7E64 = 0; - } - *(u16 *)((u8 *)param_1 + 0xA) = 0; - ((void (*)(s32))func_8017ECE4)((s32)param_1); - *(u16 *)((u8 *)param_1 + 0xA) -= 0x20; -} - - -#include "common.h" - -extern s32 func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8012B23C(s32 a0); -extern void func_8001CA1C(void *a0, void *a1); -extern void func_8012A828(s32 a0, void *a1); -extern s32 rand(void); - -extern u8 D_80192E58[]; -extern u8 D_80192E64[]; - -void func_80187540(s32 param_1) -{ - s32 v0; - s32 temp; - s16 r; - - if ((*(s32 *)(param_1 + 0x20) = func_8012C1B8()) == 0) { - func_8012CAE4((void *)param_1); - } else { - func_8012B23C(param_1); - func_8001CA1C((void *)(*(s32 *)(param_1 + 0x20)), D_80192E58); - func_8012A828(param_1, D_80192E64); - temp = *(s32 *)(param_1 + 0x20); - *(u16 *)(param_1 + 2) = 1; - *(u32 *)(temp + 4) |= 0x50000000; - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x2C) |= 0x10; - r = (rand() & 0x3FF) + 0xA00; - v0 = *(s32 *)(param_1 + 0x20); - *(s16 *)(v0 + 0x1A) = r; - *(s16 *)(v0 + 0x18) = r; - *(s32 *)(param_1 + 0x1C) = 0x1E; - } -} - - -extern void func_8012CBF4(s32 a0); - -void func_80187600(s32 a0) { - s32 t; - - func_8012CBF4(a0); - t = *(s32 *)(a0 + 0x1C) - 1; - *(s32 *)(a0 + 0x1C) = t; - if (t == 0) { - func_8012C218((void *)a0); - } -} - - -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern s32 rand(void); -extern u8 D_80194290[]; - -void func_80187644(s32 arg0) -{ - s32 q; - - func_8001CB6C(*(u8 **)(arg0 + 0x20), D_80194290, 0x254, 0x1C0); - *(u8 *)(*(u32 *)(arg0 + 0x20) + 0x27) = 0x25; - *(u16 *)(*(u32 *)(arg0 + 0x20) + 0x10) = 0xC00; - q = rand(); - *(u16 *)(*(u32 *)(arg0 + 0x20) + 0x14) = q % 0x1000; - *(u32 *)(*(u32 *)(arg0 + 0x20) + 4) |= 0x50000000; - *(u16 *)(arg0 + 2) = *(u16 *)(arg0 + 2) + 1; - *(s32 *)(arg0 + 0x1C) = *(s16 *)(arg0 + 0x36); -} - - -extern s32 rand(void); - -void func_801876EC(s32 arg0) { - s16 val; - s32 work; - - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x14) += 0x100; - if (*(s32 *)(arg0 + 0x1C) != 0) { - *(s32 *)(arg0 + 0x1C) -= 1; - } else { - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x18) += 0x400; - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x1A) += 0x400; - work = *(s32 *)(arg0 + 0x20); - val = *(s16 *)(arg0 + 0x34); - if (val < *(s16 *)(work + 0x18)) { - *(u16 *)(work + 0x1A) = val; - *(u16 *)(work + 0x18) = val; - *(s32 *)(arg0 + 0x1C) = rand(); - *(u16 *)(arg0 + 2) += 1; - } - } -} - - -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern s32 rand(void); -extern u8 D_801942C0[]; - -void func_801877A8(s32 arg0) -{ - u8 *work; - s32 q; - s32 r; - - func_8001CB6C(*(u8 **)(arg0 + 0x20), D_801942C0, 0x234, 0x1C0); - *(u8 *)(*(u32 *)(arg0 + 0x20) + 0x27) = 0x26; - *(u16 *)(arg0 + 0x30) = rand() & 0x1FF; - *(u16 *)(arg0 + 0x32) = rand() & 0x1F; - *(u16 *)(arg0 + 0x34) = rand() & 0x7F; - q = rand(); - work = *(u8 **)(arg0 + 0x20); - r = q % 0x1000 + 0x800; - *(u16 *)(work + 0x1A) = r; - *(u16 *)(work + 0x18) = r; - *(u16 *)(arg0 + 2) = *(u16 *)(arg0 + 2) + 1; -} - - -extern void func_8013373C(s32 arg0); - void func_80187854(void) { - func_8013373C(0); - } - - - -extern void func_8013C08C(void *a0, void *a1); -extern s32 D_801C7FC0; -extern s32 D_801988EC; - -void func_80187874(void) { - func_8013C08C(&D_801C7FC0, &D_801988EC); -} - - -s32 func_801878A4(void) { - return 0x6C; - } - - - -extern void (*D_801C3CF0[])(void); - -void func_801878AC(void *a0) { - D_801C3CF0[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -extern void func_801465C0(void); -extern void func_80146C3C(void); - -extern void func_8001CBDC(s32 a0, s32 a1, s32 a2, s32 a3); - - - -void func_801878E8(void *a0) { - - extern s16 D_801C3B7C[][2]; - extern u8 D_801C3BA8[]; - extern EffectSlot4_801878E8 D_801C3BB4[]; - extern u8 D_801C3BE0[]; - extern EffectSlot4_801878E8 D_801C3C18; - extern EffectSlot4_801878E8 D_801C3C40; - extern EffectSlot4_801878E8 D_801C3C44; - extern EffectSlot4_801878E8 D_801C3C74; - extern EffectSlot4_801878E8 D_801C3C78; - extern EffectSlot4_801878E8 D_801C3CA8; - extern EffectSlot4_801878E8 D_801C3CAC; - extern EffectSlot4_801878E8 D_801C3CDC; - extern EffectSlot4_801878E8 D_801C3CE0; - register void *s0 __asm__("$16"); - register void *s1 __asm__("$17"); - - s0 = a0; - s1 = ((void *(*)(void))func_801465C0)(); - if (s1 != 0) { - s32 idx; - u8 uVar1; - - *(s32 *)((s32)s0 + 0x20) = (s32)s1; - idx = *(s32 *)((s32)s0 + 0x2C); - func_8001CBDC((s32)s1, (s32)D_801C3BE0, D_801C3B7C[idx][0], D_801C3B7C[idx][1]); - uVar1 = D_801C3BA8[*(s32 *)((s32)s0 + 0x2C)]; - *(s16 *)((s32)s1 + 0x2C) = 3; - *(u8 *)((s32)s1 + 0x27) = uVar1; - *(s16 *)((s32)s0 + 0x6) = 0; - *(s16 *)((s32)s0 + 0xA) = 0x50; - - /* The shift chain below needs a BASIC-BLOCK BOUNDARY before every copy - except the first: gcc-2.7.2 CSE is per-extended-BB, and inside one BB - it reuses the previous copy's DESTINATION address register as the next - copy's SOURCE address (costing the lui/addiu pair the target emits). - `if (c) X else X` supplies the boundary and is cross-jumped away by - jump2 AFTER regalloc, so it costs 0 instructions (128/128). - - The FIRST copy must stay in block 1 with the `lw 0x2C` / `li 0x50` - pair, or the index pseudo crosses a block and becomes a GLOBAL allocno - (regalloc map K8) -- local-alloc then hands $v0 to the 0x50 constant - and global-alloc is left with $v1 (the REGALLOC-PERM $v0<->$v1 swap). - Both must be LOCAL qtys in the same block for the target's assignment. - Its destination is therefore spelled as an INTERIOR ADDRESS of the - neighbouring symbol (idiom 7): `&D_801C3CDC + 4 == &D_801C3CE0`, a - CSE-distinct rtx, so the next copy still recomputes its source - address. Both spellings relocate to 0x80196E94. */ -#define COND (*(s32 *)((s32)s0 + 0x2C) > 0) - *(EffectSlot4_801878E8 *)((s32)&D_801C3CDC + 4) = D_801C3BB4[*(s32 *)((s32)s0 + 0x2C)]; - if (COND) { D_801C3CDC = D_801C3CE0; } else { D_801C3CDC = D_801C3CE0; } - if (COND) { D_801C3CAC = D_801C3CDC; } else { D_801C3CAC = D_801C3CDC; } - if (COND) { D_801C3CA8 = D_801C3CAC; } else { D_801C3CA8 = D_801C3CAC; } - if (COND) { D_801C3C78 = D_801C3CA8; } else { D_801C3C78 = D_801C3CA8; } - if (COND) { D_801C3C74 = D_801C3C78; } else { D_801C3C74 = D_801C3C78; } - if (COND) { D_801C3C44 = D_801C3C74; } else { D_801C3C44 = D_801C3C74; } -#undef COND - D_801C3C40 = D_801C3C44; - D_801C3C18 = D_801C3C40; - - *(s16 *)((s32)s0 + 0x2) = *(s16 *)((s32)s0 + 0x2) + 1; - } else { - ((void (*)(void *))func_80146C3C)(s0); - } -} - - -extern void func_80187B28(); - void func_80187AE8(void) { - func_80187B28(); - } - - -extern void func_80146C3C(void); - void func_80187B08(void) { - func_80146C3C(); - } - - - -extern void func_80017254(void *a0); -extern void func_800176F0(void *a0); - -void func_80187B28(void) { - - extern u8 D_801C3BF8[]; - extern u8 D_801C3C20[]; - u8 *p; - s32 i; - - func_80017254(D_801C3BF8); - i = 0; - p = D_801C3C20; - do { - func_800176F0(p); - i++; - p += 0x34; - } while (i < 4); -} - - - - -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); - void func_80187B80(void *arg0) { - ((void (*)(s32, s32, s32, s32))func_80146994)(0x28, 0, arg0, 0); - } - - - -extern s32 func_8014C050(s32 a0, s32 a1); - -void func_80187BAC(void) { - - extern s32 D_80126B58; - s32 t; - - t = func_8014C050((s32)&D_80126B58, 0x28); - if (t != 0) { - *(u16 *)(t + 2) += 1; - } -} - - - -extern void (*D_801C3CFC[])(void); - -void func_80187BF0(void *a0) { - D_801C3CFC[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8014E934(s32 a0); -extern void func_8014CC28(s32 a0); -extern s32 func_8014F3E8(s32 a0); -extern void func_80187C74(s32 a0); -extern void func_80146CA0(void *a0); -void func_80187C2C(s32 a0) { - func_8014E934(a0); - func_8014CC28(a0); - func_8014F3E8(a0); - func_80187C74(a0); - func_80146CA0((void *)a0); -} - - -extern u8 D_80062C04[]; - -void func_80187C74(s32 arg0) -{ - s32 s0 = arg0; - - func_80019064(D_80062C04); - func_801511E0(s0); - func_80149020((s32 *)s0); - func_801472C8((struct S *)s0); - *(u8 *)(s0 + 0xDE) = 0x10; - func_80146DE8((s32 *)s0, 0, 0, 0); - func_801477E8((s32 *)s0, 0x40000); - func_8014CBF8((void *)s0); - func_801474EC((s32 *)s0); - func_80146CA0((void *)s0); -} - - -extern void func_80149020(s32 *a0); -extern void func_80147A84(s32 arg0); -extern void func_801473EC(s32 *a0); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern void func_801470B4(s32 a0); -extern void func_80146CA0(void *a0); -void func_80187D00(s32 *a0) { - u8 v1; - func_80149020(a0); - func_80147A84((s32)a0); - func_801473EC(a0); - func_80148038((s32)a0, 0x4000); - func_80147460((s32)a0); - v1 = *((u8 *)a0 + 0xDE); - *((u8 *)a0 + 0xDE) = v1 + 0xFF; - if (v1 == 0) { - func_801470B4((s32)a0); - func_80146CA0(a0); - } -} - - -extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ -extern void func_80149020(s32 *a0); -extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); -extern void func_80146CA0(void *a0); - -void func_80187D70(s32 a0) -{ - extern s16 D_801C3D10; - extern s16 D_801C3D12; - extern s16 D_801C3D14; - s16 *sp0 = &D_801C3D10; - - *sp0 = func_8017EC7C(a0); - func_80149020((s32 *)a0); - *(s16 *)(a0 + 0x6) = func_80012C6C(*(s16 *)(a0 + 0x6), *sp0, 8); - *(s16 *)(a0 + 0xA) = func_80012C6C(*(s16 *)(a0 + 0xA), D_801C3D12, 8); - *(s16 *)(a0 + 0xE) = func_80012C6C(*(s16 *)(a0 + 0xE), D_801C3D14, 8); - if ((*(s16 *)(a0 + 0x6) == *sp0) && - (*(s16 *)(a0 + 0xA) == D_801C3D12) && - (*(s16 *)(a0 + 0xE) == D_801C3D14)) { - *(u8 *)(a0 + 0xDE) = 0; - *(u8 *)(a0 + 0xDF) = 0; - func_80146CA0((void *)a0); - } -} - - -void func_80187E48(s32 a0) { - s32 pad[4]; - func_80149020((s32 *)a0); - func_80146DE8((s32 *)a0, 0, 0, 0); - func_80187E9C(a0); - func_80159B3C((void *)a0); - func_80165718(a0); -} - - -extern void func_8014BC44(s32 a0, s32 a1); -extern void func_80151664(void); - -void func_80187E9C(s32 a0) -{ - func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); - *(u8 *)(a0 + 0xA8) = 0x20; - ((void (*)(s32))func_80151664)(a0); -} - - - -extern void (*D_801C3D18[])(void); - -void func_80187EDC(void *a0) { - D_801C3D18[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_80187F48(); -extern void func_80146CA0(void *a0); - -void func_80187F18(s32 arg) { - func_80187F48(arg); - ((void (*)(s32))func_80146CA0)(arg); -} - - -extern void func_80019064(void *a0); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_80147324(s32 a0); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80146CA0(void *a0); -extern s32 D_80062C14; -extern M2C_UNK D_800D5904; - -s32 func_80187F48(s32 arg0) -{ - func_80019064(&D_80062C14); - func_80154274((s32 *)arg0, (s32)&D_800D5904); - func_80154A74(arg0, 0x20); - *(u32 *)(arg0 + 0x234) = 0; - ((void (*)(s32, s32))func_801477E8)((s32 *)arg0, 0xFFC00000); - func_80149020((s32 *)arg0); - func_80147324(0x451); - func_80146E90((s32 *)arg0, 0x12C); - func_80146CA0((void *)arg0); -} - - -extern void func_80149020(s32 *a0); -extern void func_80148038(s32 a0, s32 a1); -extern void func_80147460(s32 a0); -extern s32 func_801535F4(void *a0); -extern s32 func_80146E98(s32 a0); -extern int func_801511E0(int arg); -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_8013C9C4(void *a0); -extern void func_80146CA0(void *a0); -extern s32 D_801C3D28; - -void func_80187FCC(s32 arg0) -{ - s32 s0 = arg0; - s32 v0; - s32 v1; - s32 pad[8]; - - func_80149020((s32 *)arg0); - - v1 = *(s32 *)(s0 + 0x20); - *(u16 *)(v1 + 0x12) = (*(u16 *)(v1 + 0x12) + 0x5B) & 0xFFF; - - v1 = *(s32 *)(s0 + 0x20); - *(u16 *)(v1 + 0x10) = (*(u16 *)(v1 + 0x10) - 0x16) & 0xFFF; - - v1 = *(s32 *)(s0 + 0x20); - if (*(s16 *)(v1 + 0x10) < 0xC00) { - v0 = -0x400; - *(u16 *)(v1 + 0x10) = v0; - } - - func_80148038((s32)s0, 0x10000); - func_80147460((s32)s0); - - if (*(s32 *)(s0 + 0x234) == 0) { - if (*(s32 *)(s0 + 0x34) >= 0) { - if ((*(u16 *)(s0 + 0xB8) & 0x8000) != 0) { - *(u16 *)(s0 + 0xB8) = *(u16 *)(s0 + 0xBA); - } - } - } - - v0 = func_801535F4((void *)s0); - if (v0 == 0) { - goto L801880AC; - } - if (v0 < 0) { - goto L801880AC; - } - if (v0 < 3) { - goto L801880BC; - } -L801880AC: - v0 = func_80146E98((s32)s0); - if (v0 == 0) { - return; - } -L801880BC: - func_801511E0((s32)s0); - func_80146E90((s32 *)s0, 0x1E); - func_8013C9C4((void *)&D_801C3D28); - func_80146CA0((void *)s0); - (void)pad; -} - - -extern s32 func_80146E98(s32 a0); -extern s32 func_80188168(); -extern void func_80159B3C(void *a0); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_80165718(s32 a0); - -void func_801880FC(s32 arg0) { - if (func_80146E98(arg0) != 0) { - func_80188168(arg0); - func_80159B3C((void *)arg0); - func_80146A6C(2, arg0, 0, 0, 0, 1, 0); - func_80165718(arg0); - } -} - - -extern void func_8014BC44(s32 a0, s32 a1); -extern void func_80151664(void); - -s32 func_80188168(s32 a0) -{ - s32 s0 = a0; - - func_8014BC44(s0, *(s16 *)(s0 + 0xF2)); - *(u16 *)(*(s32 *)(s0 + 0x20) + 0x10) = 0; - *(u8 *)(s0 + 0xA8) = 0x20; - ((void (*)(s32))func_80151664)(s0); -} - - - -extern void (*D_801C3D3C[])(void); - -void func_801881B0(void *a0) { - D_801C3D3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8014E934(s32 a0); -extern void func_8014CC28(s32 a0); -extern s32 func_8014F3E8(s32 a0); -extern void func_80188234(s32 a0); -extern void func_80146CA0(void *a0); -void func_801881EC(s32 a0) { - func_8014E934(a0); - func_8014CC28(a0); - func_8014F3E8(a0); - func_80188234(a0); - func_80146CA0((void *)a0); -} - - -extern void func_80146E90(s32 *a0, s32 a1); -extern void func_80019064(void *a0); -extern int func_801511E0(int arg); -extern s32 func_80012A60(s32 a0, s32 a1); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_80149020(s32 *a0); -extern void func_8001382C(s32 a0, void *a1, void *a2); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80147324(s32 a0); -extern void func_80146CA0(void *a0); -extern u8 D_80062C04[]; -extern M2C_UNK D_800D5880; -extern s32 D_800D58AC; -extern u8 D_801C3D48[]; -extern s32 D_801C3D54; - -void func_80188234(s32 arg0) -{ - s32 pad[4]; - s32 buf[4]; - register s32 s0a __asm__("$16"); /* $s0 = buf */ - - ((void (*)(s32, s32))func_80146E90)(arg0, 0x12); - func_80019064(&D_80062C04); - func_801511E0(arg0); - if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), - (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); - } else { - ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); - } - func_80154A74(arg0, 0x16); - ((void (*)(s32))func_80149020)(arg0); - s0a = (s32)buf; - ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, - (s32)&D_801C3D48, s0a); - ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); - ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(&D_801C3D54)); - func_80147324(0x451); - ((void (*)(s32))func_80146CA0)(arg0); - (void)pad; -} - - -extern void func_80188468(s32 a0); - -void func_80188334(s32 arg0) -{ - int iVar1; - func_80149020(arg0); - if (*(int *)(arg0 + 0x1c) == 0) { - if (*(unsigned short *)(arg0 + 0xb8) == 0x8000) { - func_80188468(arg0); - func_80159B3C(arg0); - goto LAB_8018844c; - } - } else { - *(int *)(arg0 + 0x1c) = *(int *)(arg0 + 0x1c) + -1; - } - func_80147A84(arg0); - func_801473EC(arg0); - func_80148038(arg0, 0x8000); - func_80146A6C(3, arg0, *(s16 *)(arg0 + 6), - ((s32)(*(u16 *)(arg0 + 0xA) - 0x10) << 16) >> 16, - *(s16 *)(arg0 + 0xE), 0x080FFFF8, 0xE000B000); - func_80147460(arg0); - iVar1 = func_801535F4(arg0); - if (iVar1 == 1) goto LAB_80188418; - if (iVar1 < 2) return; - if (iVar1 == 2) goto LAB_80188430; - return; -LAB_80188418: - func_80188468(arg0); - func_80159B3C(arg0); - goto LAB_80188444; -LAB_80188430: - func_80188468(arg0); - func_8015BF48(arg0); -LAB_80188444: - func_8014C010(arg0, 1); -LAB_8018844c: - func_80165718(arg0); - return; -} - - -extern void func_8014BC44(s32 a0, s32 a1); -extern void func_80151664(void); - -void func_80188468(s32 a0) -{ - func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); - *(u8 *)(a0 + 0xA8) = 0x20; - ((void (*)(s32))func_80151664)(a0); -} - - - -extern void (*D_801C3DD8[])(void); - -void func_801884A8(void *a0) { - D_801C3DD8[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8014E934(s32 a0); -extern void func_8014CC28(s32 a0); -extern s32 func_8014F3E8(s32 a0); -extern void func_8018852C(s32 a0); -extern void func_80146CA0(void *a0); -void func_801884E4(s32 a0) { - func_8014E934(a0); - func_8014CC28(a0); - func_8014F3E8(a0); - func_8018852C(a0); - func_80146CA0((void *)a0); -} - - -extern u8 D_80062BF4[]; -extern s32 D_800D5880; -extern s32 D_800D58AC; -extern void func_80019064(void *a0); -extern void func_80149020(s32 *a0); -extern void func_80147324(s32 a0); -extern int func_801511E0(int a0); -extern s32 func_80012A60(s32 a0, s32 a1); -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_80146CA0(void *a0); - -void func_8018852C(s32 a0) -{ - s32 s1; - s32 s0; - - s1 = a0; - func_80019064(D_80062BF4); - func_80149020((s32 *)s1); - func_80147324(0x451); - func_801511E0(s1); - if ((s16)func_80012A60(*(s16 *)(*(s32 *)(s1 + 0x20) + 0x12), *(s16 *)(s1 + 0xF4)) >= 0x401) { - func_80154274((s32 *)s1, (s32)&D_800D5880); - } else { - func_80154274((s32 *)s1, (s32)&D_800D58AC); - } - s0 = 1; - func_80154A74(s1, 0x16); - func_80149020((s32 *)s1); - func_80146994(0x42, s1, 0, 0); - func_80146A6C(0x42, (void *)s1, 0x20, 0, 0, s0, 0); - func_80146A6C(0x42, (void *)s1, 0, 0, 0x20, s0, 0); - func_80146A6C(0x42, (void *)s1, -0x20, 0, 0, s0, 0); - func_80146A6C(0x42, (void *)s1, 0, 0, -0x20, s0, 0); - func_80146CA0((void *)s1); -} - - -#include "common.h" - -extern void func_801886F4(); -extern void func_80149020(s32 *a0); -extern void func_80159B3C(void *a0); -extern M2C_UNK D_800D5880; -extern void func_801542DC(s32 *a0, s32 a1); -extern u8 D_800D46E4[]; -extern void func_80165718(s32 a0); - -void func_80188680(s32 *arg0) -{ - func_80149020(arg0); - if (*(u16 *)((s32)arg0 + 0xB8) == 0x8000) { - func_801886F4(arg0); - func_80159B3C(arg0); - if (*(s32 *)((s32)arg0 + 0xB4) == (s32)&D_800D5880) { - ((void (*)(s32 *, s32, s32))func_801542DC)(arg0, (s32)D_800D46E4, 0xE); - } - func_80165718(arg0); - } -} - - -extern void func_8014BC44(s32 a0, s32 a1); -extern void func_80151664(void); - -void func_801886F4(s32 a0) -{ - func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); - *(u8 *)(a0 + 0xA8) = 0x20; - ((void (*)(s32))func_80151664)(a0); -} - - - -extern void (*D_801C3E40[])(void); - -void func_80188734(void *a0) { - D_801C3E40[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_801465C0(void); -extern void func_80146C3C(void); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); -extern void func_8018890C(s32 a0); -extern u8 D_801C3DE4[]; -extern u8 D_801C3DF0[]; - -void func_80188770(s32 param_1) -{ - s32 ret; - u8 *w; - - ret = ((s32 (*)(void))func_801465C0)(); - if (ret == 0) { - ((void (*)(s32))func_80146C3C)(param_1); - } - *(s32 *)(param_1 + 0x20) = ret; - func_8001CC3C(ret, (s32)&D_801C3DE4, 0x270, 0x100); - *(u8 *)(ret + 0x27) = 0x9B; - *(u32 *)(ret + 4) = *(u32 *)(ret + 4) | 0x50000000; - if (*(s32 *)(param_1 + 0x2C) == 0) { - *(u16 *)(ret + 0x1A) = 0x3000; - *(u16 *)(ret + 0x18) = 0x3000; - } - w = (u8 *)ret; - w[0x25] = 0xC0; - w[0x26] = 0x40; - w[0x24] = 0x40; - func_80128EA8((s32)w, param_1 + 0x24, (s32)&D_801C3DF0); - *(s32 *)(param_1 + 0x14) = 0xfffc0000; - func_8018890C(param_1); - *(volatile s16 *)(param_1 + 2) = *(volatile s16 *)(param_1 + 2) + 1; -} - - -extern s32 func_80128ED8(s32 param_1, s32 *param_2); -extern void func_80146C3C(void); - -void func_80188848(void *a0) { - s32 s1; - u8 v26, v25; - - s1 = *(s32 *)((s32)a0 + 0x20); - if (func_80128ED8(s1, (s32 *)((s32)a0 + 0x24)) != 0) { - ((void (*)(s32))func_80146C3C)((s32)a0); - } else { - *(s32 *)((s32)a0 + 0x14) += -0x8000; - *(s32 *)((s32)a0 + 0x8) += *(s32 *)((s32)a0 + 0x14); - *(u16 *)((s32)s1 + 0x18) += 0x500; - if (*(s32 *)((s32)a0 + 0x2C) == 0) { - *(u16 *)((s32)s1 + 0x1A) += 0x300; - } else { - *(u16 *)((s32)s1 + 0x1A) += 0x600; - } - v26 = *(u8 *)((s32)s1 + 0x26); - v25 = *(u8 *)((s32)s1 + 0x25); - v26 -= 4; - v25 -= 8; - *(u8 *)((s32)s1 + 0x26) = v26; - *(u8 *)((s32)s1 + 0x24) = v26; - *(u8 *)((s32)s1 + 0x25) = v25; - } -} - - -void func_8018890C(s32 a0) { - func_80149374(*(s32 *)((char *)a0 + 0x34), (s32)((char *)a0 + 0x4)); - if (*(s32 *)((char *)a0 + 0x2C) != 0) { - return; - } - func_800D1FC8(a0, 5); -} - - - - - - diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8018473C.c b/src/ov_SC05_010/ov_SC05_010_jr_8018473C.c new file mode 100644 index 0000000000..1472438b1d --- /dev/null +++ b/src/ov_SC05_010/ov_SC05_010_jr_8018473C.c @@ -0,0 +1,5443 @@ +#include "common.h" +#include "../shared/engine_core.h" + + +/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== + * The file-scope decl environment from earlier code regions of this object — + * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier + * definition's implied prototype (types first, then decls in original order). + * Decls emit no code => byte-neutral. See cookbook §8c. */ +typedef struct { + SVECTOR_8016E7C8 v[4]; /* 0x00 */ + s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ + u8 f6; /* 0x38 */ + u8 pad[7]; /* -> 0x40 */ +} Prim_8016E7C8; +typedef void (*Handler)(struct Entry_8016E95C *); +typedef struct { s16 vx, vy, vz, pad; } SV83; +extern void func_801458E0(void); +extern s32 D_800AE6AC; +extern s32 D_800AE6B0; +extern s16 D_800B9A0A; +extern u8 D_80078E50; +extern void func_800D185C(u8 *a0); +extern void func_801458E8(void); +extern s32 func_80029504(void); +extern void func_80145B24(void); +extern u8 D_8018AED8; +extern u8 D_8018AE48; +extern u8 D_8018AE24; +extern u8 D_8018AE00; +extern u8 D_8018AEB4; +extern u8 D_8018AE90; +extern u8 D_8018AE6C; +extern u8 D_8018ADDC; +extern void func_80145934(void); +extern u8 D_8018AF68; +extern u8 D_8018AF44; +extern u8 D_8018AF20; +extern u8 D_8018AEFC; +extern void func_80145A2C(void); +extern s32 func_800291DC(s32); +extern void func_800291C8(s32, s32); +extern void func_80162120(void); +extern void func_80029124(s32, s32); +extern s32 func_80165A50(s32); +extern void func_80029514(s32); +extern u8 D_800AF630[]; +extern u8 D_80078EC0; +extern s32 func_80028FBC(void); +extern s32 func_80029000(void); +extern s32 func_80028D9C(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80145BF8(void); +extern s32 func_800291B4(s32 arg); +extern void func_800291A0(s32, s32); +extern void func_80145C54(void); +extern s32 func_80145CEC(); +extern s32 func_80029178(s32 arg); +extern void func_80146014(s32 a0); +extern unsigned char D_8018A360[]; +extern unsigned char D_8018A390[]; +extern unsigned char D_8018A3E0[]; +extern unsigned char D_8018A410[]; +extern unsigned char D_8018A440[]; +extern void func_80145EE8(s32 param_1); +extern void MoveImage(void *a0, s32 a1, s32 a2); +extern void func_80146074(void); +extern s32 func_80146128(void); +extern void func_80146360(void); +extern void func_801463A0(); +extern void func_8014607C(void); +extern s32 *D_80126B78; +extern u8 D_80078EC1; +extern s32 D_80078EC8; +extern s32 D_80126B9C; +extern s32 D_8011F730; +extern u16 D_801152B8; +extern u16 D_8012693A; +extern u8 D_80126BE0[]; +extern u8 D_801150F0[]; +extern void *memcpy(void *dst, const void *src, u32 n); +extern void func_80146FC4(s32 a0); +extern void func_80150A70(s32 a0); +extern void func_80147098(s32 *a0); +extern void func_8014A638(s32 arg0); +extern s32 func_80155458(s32 a0); +extern s32 func_80029104(void); +extern void func_80029344(void); +extern void func_8014ADE0(s32 a0); +extern void func_8014B350(s32 a0); +extern void func_8014B7A4(s16 *param_1); +extern s32 func_80161D58(s32 a0); +extern void func_80161A90(s32 a0); +extern void func_8014B504(u16 *a0); +extern void func_80149BEC(s32 a0); +extern void func_8014B5D0(s32 *a0); +extern void func_8014C99C(u8 *a0); +extern void func_8014B190(s32 s0); +extern void func_80148648(s32 a0, s32 a1); +extern s32 func_80149228(s32 a0); +extern void func_8014A59C(s32 a0); +extern void func_8016F14C(void *a0); +extern void func_80154418(void *a0); +extern void func_80154BE4(s32 a0); +extern void func_80165694(s32 arg0); +extern void func_801654A8(s32 a0); +extern void func_8014A680(s32 a0); +extern void func_8014A6A8(s32 a0); +extern void func_8014A71C(s32 a0); +extern void func_80172588(s32 *a0); +extern void func_801473DC(s32 *a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void (*D_8018A490[])(void *); +extern u8 D_80126BA4; +extern s32 D_80127098; +extern s32 D_80127094; +extern s32 D_80127090; +extern void func_80146534(void); +extern void func_8001D074(s32 a0, s32 a1); +extern void func_80146554(void); +extern void func_80146578(void); +extern void func_8001CFDC(s32, s32); +extern void func_8014659C(void); +extern void func_8001D074(s32, s32); +extern void func_801465C0(void); +extern void func_801465E4(void); +extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); +extern s32 D_8011F9D0; +extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); +extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 D_8011F750; +extern s32 D_8011F754; +extern u8 * func_801468C8(s32 arg0, u8 arg1); +extern s32 D_8011D030; +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); +extern s32 func_80146B9C(void *a0); +extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); +extern u16 D_8011DA28; +extern s32 func_80146B9C(void * arg0); +extern void func_80146C98(s32 *a0, s16 a1); +extern void func_80146CA0(void *a0); +extern void func_80146CB4(void *a0); +extern void func_80146CC8(s32 a0); +extern void func_80146D30(s32 a0); +extern void func_80146D80(s32 *a0); +extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80146D90(s32 a0); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); +extern void func_80146E90(s32 *a0, s32 a1); +extern s32 func_80146E98(s32 a0); +extern void func_80015954(s32 a0, s32 a1); +extern void func_80149374(s32 a0, s32 a1); +extern void func_80146F58(s32 a0, s32 a1); +extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); +extern s16 func_8012A68C(void); +extern s16 func_8012A758(void); +extern void func_8004978C(s16 *a0, void *a1); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); +extern u8 D_80126DB0[]; +extern u16 D_80126DB6; +extern void func_8014704C(s32 *a0); +extern s32 func_80147054(void *a0); +extern void func_80147060(u8 * a0); +extern void func_8014706C(void *arg0); +extern void func_80147078(s32 *a0, s16 a1); +extern void func_80147084(s32 *a0); +extern void func_8014708C(void *arg0); +extern s32 func_801470A0(void *a0); +extern void func_801470AC(s32 *a0); +extern void func_801470B4(s32 arg0); +extern void func_801470C0(s32 a0); +extern void func_80147118(s32 a0); +extern s16 D_80126BB8; +extern s16 D_80126BBA; +extern s16 D_80126BBC; +extern void func_80147264(s32 a0); +extern void func_80147290(void); +extern void func_801472B4(void *a0); +extern s32 func_801472C8(struct S *a0); +extern void *D_8012707C; +extern void func_801472DC(void); +extern void func_801472F0(void *a0); +extern void func_80147364(u16, s32); +extern void func_80147300(u16 arg0); +extern void func_80147324(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80147460(s32 a0); +extern void func_80147514(); +extern void func_80147628(s32 a0); +extern void func_80147478(s32 a0); +extern void func_801474D8(s32 *a0); +extern void func_801474EC(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_800129CC(s32 a0, s32 a1); +extern void func_80147514(s32 arg0); +extern void func_80013F3C(s32 a0); +extern void func_80012558(s32 a0, s32 a1); +extern void func_800126C4(s32 a0, s32 a1); +extern void func_800123F0(s32 a0, s32 a1); +extern void func_80147718(s32 a0); +extern void func_80147788(void *a0, s32 a1); +extern void func_801477A8(void *a0, s32 a1); +extern void func_801477C8(void *a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147814(s32 a0, s32 a1); +extern void func_80147928(int a0, int a1); +extern void func_8014799C(int a0, int a1); +extern void func_80147A10(int a0, int a1); +extern void func_80147860(int a0, int a1, int a2, int a3); +extern void func_80147948(s32 a0, s32 a1, s32 a2); +extern void func_801479BC(s32 a0, s32 a1, s32 a2); +extern void func_80147A30(s32 a0, s32 a1, s32 a2); +extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147948(int a0, int a1, int a2); +extern void func_801479BC(int a0, int a1, int a2); +extern void func_80147A30(int a0, int a1, int a2); +extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147A84(s32 arg0); +extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147AAC(s32 arg0); +extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80147B5C(s32 a0, void *a1); +extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern void func_80147B18(s32 a0); +extern void func_80147B5C(s32 arg0, void *arg1); +extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147DC0(s32 a0, s32 a1); +extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); +extern void func_800484EC(s32 a0, s32 a1, s32 a2); +extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_80147F50(s32 arg0); +extern void func_80148038(s32 a0, s32 a1); +extern s32 ratan2(s32 a0, s32 a1); +extern s32 csqrt(s32 a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80148094(int param_1, short *param_2, int *param_3); +extern void func_801485B8(s32 a0, s32 a1, s32 a2); +extern void func_801484B0(s32 a0, s32 a1); +extern s32 func_80154358(void *a0); +extern void func_801484E8(s32 a0, s32 a1); +extern void func_80148534(s32 a0, s32 a1); +extern void func_8014856C(s32 a0, s32 a1); +extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); +extern void func_80148634(void *a0); +extern u8 D_800B9A64; +extern s32 func_80014DC0(); +extern s32 func_80014D68(); +extern s32 func_80014D94(); +extern s32 func_80014CF8(); +extern void func_800120DC(); +extern s32 func_800CF8B4(); +extern u16 func_801487F4(s32 *a0); +extern u16 func_80148800(s32 *a0); +extern u8 func_8014880C(s32 *a0); +extern u16 func_80148818(s32 *a0); +extern s32 func_80047D3C(s32 a0); +extern s32 func_80148824(void *arg0); +extern s32 func_801488A8(u8 *a0); +extern s32 func_8014891C(s32 a0); +extern s32 func_80148980(u8 *a0); +extern s32 func_801489E8(s32 a0); +extern s32 func_80148A48(s32 a0); +extern int func_80148AFC(void *a0); +extern void func_80148AAC(u8 *a0); +extern s32 func_80148C18(void); +extern s32 func_80148C20(s32 a0, s16 a1); +extern s32 func_80148C34(s32 a0, s32 a1); +extern s32 func_80148C4C(s32 a0, s32 a1); +extern s32 func_80148C64(s32 a0, s32 a1); +extern s32 func_80148C7C(void); +extern s32 func_80148C84(s32 a0, s32 a1); +extern s32 func_80148C9C(s32 a0, s32 a1); +extern s32 func_80148CB4(s32 a0, s32 a1); +extern s32 func_80148CCC(s32 a0, s32 a1); +extern s32 func_80148CE4(void); +extern s32 func_80148CEC(void); +extern s32 func_80148CF4(s32 a0, s32 a1); +extern s32 func_80148D0C(s32 a0, s32 a1); +extern s32 func_80148D24(void *a0, int a1); +extern s32 func_80148D3C(void); +extern s32 func_80148F60(void); +extern s32 func_80148F68(s32 a0); +extern s32 func_80148F74(s32 a0); +extern s32 func_80148F80(s32 a0); +extern s32 func_80148F8C(s32 a0); +extern s32 func_80148F98(void); +extern s32 func_80148FA0(s32 a0); +extern s32 func_80148FAC(s32 a0); +extern s32 func_80148FB8(s32 a0); +extern s32 func_80148FC4(s32 a0); +extern s32 func_80148FD0(void); +extern s32 func_80148FD8(void); +extern s32 func_80148FE0(s32 a0); +extern s32 func_80148FEC(s32 a0); +extern s32 func_80148FF8(s32 a0); +extern s32 func_80149004(void); +extern void func_8014900C(s32 *a0); +extern void func_80149020(s32 *a0); +extern void func_80149034(s32 *a0); +extern void func_80149048(s32 *a0); +extern void func_8014905C(u8 *a0); +extern void func_801490E0(s32 *a0, s16 a1); +extern void func_801490E8(s32 *a0, s16 a1); +extern void func_801490F0(s32 *a0, s16 a1); +extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); +extern void func_801490F8(s32 a0, s32 a1); +extern s32 func_801491C4(s32 a0); +extern s32 func_80149184(s32 a0); +extern s32 D_801151D4; +extern void func_80149204(s32 *a0); +extern void func_80149210(s32 a0, s32 a1); +extern s32 func_80149284(s32 *a0, s32 a1); +extern void func_80149350(s32 arg0); +extern void func_80149290(s32 a0); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); +extern void func_80149374(s32 arg0, s32 arg1); +extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); +extern void func_8012F038(int param_1, short *param_2, short *param_3); +extern void func_8014942C(s32 arg0); +extern void func_8012EF70(s32 a0, s32 a1); +extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012EFB8(s32 a0); +extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); +extern void func_8014964C(s32 param_1, s32 param_2); +extern s32 func_801496D4(void *a0); +extern void func_8015AD08(); +extern void func_80149704(void); +extern void func_8015ACC4(); +extern void func_80149724(void); +extern u8 D_80078EBF; +extern s32 func_80149744(struct S_80149744 *a0); +extern void func_8015F7A0(); +extern void func_80149788(void); +extern void func_801653B8(); +extern void func_80149864(void); +extern s16 currentLocationId; +extern s32 func_8016F1AC(void); +extern s32 func_80149884(void); +extern void func_80160B00(); +extern void func_801498C0(void); +extern s32 func_80149AA8(s32 *a0); +extern s32 func_80149B54(s32 *a0); +extern void func_80146750(void *a0); +extern s32 func_801498E0(s32 *a0); +extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); +extern void func_80147364(u16 a0, s32 a1); +extern s32 func_800CCF28(s32 a0); +extern u8 D_80126B5C; +extern s32 func_80149954(s32 s0); +extern s32 func_80149A64(s32 *a0); +extern void func_8015DAC4(s32 *a0); +extern void func_8015554C(s32 *a0); +extern void func_80149AD4(s32 *a0); +extern void func_80149B14(s32 *a0); +extern u8 func_8014BEF8(void); +extern s32 func_80149B54(s32 * arg0); +extern void func_8015DE24(s32 *a0); +extern void func_80157510(s32 *a0); +extern void func_80149BAC(s32 *a0); +extern s32 func_80029178(s32 a0); +extern s32 func_80149C08(s32 arg0); +extern void func_801577C8(); +extern void func_80149C94(void); +extern void func_80157D20(void); +extern void func_80149CB4(void); +extern s32 func_80149CD4(s32 a0); +extern u8 func_8014B5B8(s32 *a0); +extern s32 func_80149D10(s32 a0); +extern s32 func_80149E94(s32 a0); +extern s32 func_80149DD8(s32 a0); +extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; +extern s32 func_80149F2C(s32 a0, s32 a1); +extern s32 func_80149E94(s32 arg0); +extern void func_80149FA8(void); +extern s32 D_8018A558[]; +extern u8 D_80078E78[]; +extern s32 func_80149FB0(s32 a0); +extern s32 func_80135260(s32 arg0, s32 arg1, s16 *arg2, s16 *arg3); +extern void func_8014A1B0(s32 a0, s32 a1); +extern s32 func_8014A048(s32 param_1); +extern u16 func_80156370(u16 a0); +extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); +extern void func_8015D4B4(); +extern void func_8014A218(void); +extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); +extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); +extern s32 func_8014A238(s32 arg0); +extern s32 func_8014A2E4(s32 a0); +extern void func_8014A380(s32 a0, s32 a1); +extern s16 D_801152B0; +extern s16 D_801152B4; +extern s32 func_8014A3E0(struct S_8014A3E0 *a0); +extern s32 func_8014A454(s32 a0); +extern s32 func_8014A4B4(void *a0); +extern void func_8015EDD4(); +extern void func_8014A4FC(void); +extern s32 func_8014A674(s32 *a0); +extern s32 func_8014A69C(s32 *a0); +extern s32 func_8014A6C4(s32 a0); +extern void func_8015E184(); +extern void func_8014A830(void); +extern s32 func_80029AF4(void); +extern s32 func_8014A850(s32 param_1); +extern void func_8014AA04(s32 a0); +extern void func_801599A4(void *a0); +extern void func_80159B3C(void *a0); +extern s32 func_80165A20(s32 a0); +extern void func_8014AB7C(); +extern void func_8014AC10(); +extern void func_8014AA28(void); +extern void func_8014AB5C(void); +extern void func_80162CCC(void); +extern void func_8014AB7C(s32 arg0); +extern void func_8014ABF0(void); +extern void func_80016714(void *a0, s32 a1); +extern void func_8014AC10(s32 arg0); +extern void func_8014ACC0(s32 a0, s32 a1); +extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); +extern void func_8014ACE8(void *a0, s32 a1, s32 a2); +extern void func_80146AFC(void *a0); +extern void func_8014ADA8(s32 a0, s32 a1); +extern void func_8014AD7C(s32 a0); +extern s32 D_80078E8C; +extern void func_8014B034(s32 arg0); +extern void func_8014B00C(s32 arg0); +extern void func_8014B084(void); +extern s16 D_80078E90; +extern void func_8014B034(s32 a0); +extern u16 D_80078EAC; +extern u8 D_80078EBA; +extern void func_800D10EC(void); +extern void func_8002AC98(void); +extern s32 func_8014B154(s32 *a0); +extern void func_8014B12C(void); +extern void func_8014B2F8(void); +extern void func_8014B4C4(void); +extern void func_8014B160(s32 a0); +extern s32 func_8016F1C4(void); +extern s16 D_80078E96; +extern s16 D_80078EB8; +extern u16 D_80078EA6; +extern void func_8014B2A8(void); +extern void func_8014B310(void); +extern void func_8014B2D0(void); +extern s32 D_80078E94; +extern s32 D_80078ECC; +extern void func_8014B33C(void); +extern u8 D_80062BF4[]; +extern void func_8014BC80(s32 a0, s32 a1); +extern void func_80019064(void *a0); +extern s32 D_80078E98; +extern void func_80166244(); +extern void func_8014B4D4(void *a0); +extern s16 D_80078E9A; +extern u8 D_80126D1C; +extern s32 D_80126D74; +extern void func_8014B598(s32 a0, s32 a1); +extern void func_8014B5B0(s32 *a0); +extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); +extern void func_8014B5D8(s32 s1); +extern s32 D_80078E9C; +extern s32 D_80078ED0; +extern void func_8014B6F0(s32 a0, s32 a1); +extern void func_8014B768(s32 a0, s32 a1); +extern void func_8014B944(s32 a0, s32 a1, s32 a2); +extern s32 D_80078EA4; +extern u16 D_80078EB2; +extern s16 D_80078EB4; +extern void func_8014BB0C(void); +extern void func_8014BB24(s32 a0, s32 a1, s32 a2); +extern void func_8014BC0C(s32 a0, s32 a1); +extern void func_8014BC44(s32 a0, s32 a1); +extern u8 D_800B9A17; +extern void func_8014BCC0(s32 a0, s32 a1); +extern u16 D_80078EB6; +extern s32 func_8014BCEC(s32 a0, s32 a1); +extern void func_8014BD24(s32 a0, s32 a1); +extern void func_8014BD60(s32 param_1, s32 param_2); +extern void func_8014BD98(s32 a0, u16 a1); +extern void func_8014BDC8(void); +extern void func_8014BDE0(void); +extern s32 func_8017267C(s32 *a0); +extern s32 func_80013294(void *a0, void *a1); +extern void func_80029ED4(s32 a0); +extern void func_8014BDE8(s32 a0); +extern void func_8014BE78(void); +extern void func_8014BE9C(void); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8014BEC0(void); +extern void func_8014BF18(s32 a0); +extern void func_8014BF48(void); +extern u8 func_8014BF6C(void); +extern void func_8014BF8C(u8 arg0); +extern void func_8014BFB0(void); +extern u8 func_8014BFD4(void); +extern void func_8014BFF4(s32 a0, s32 a1); +extern void func_8014C010(s32 a0, s32 a1); +extern s32 func_8014C050(s32 a0, s32 a1); +extern s32 func_8014C088(s32 a0, s32 a1); +extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); +extern s32 func_8014C118(void * a0, s32 a1, s32 a2); +extern s32 func_8014C168(s32 * param_1, s32 param_2); +extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); +extern u8 D_8018A5E0[]; +extern void func_8014C1A0(s32 arg0, s32 arg1); +extern s32 func_80013328(s32 a0, s32 a1); +extern s32 func_8014C59C(void *a0, void *a1); +extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); +extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); +extern s32 ratan2(s32 dx, s32 dy); +extern u8 D_8018A5E8; +extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); +extern s16 func_8014C5D0(s32 a0, s32 a1); +extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); +extern u8 D_80126D17; +extern void func_8014C6AC(void); +extern void func_8014C6C0(void); +extern u8 D_80126D1E; +extern void func_8014C6D0(void); +extern void func_8014C6E0(void); +extern s32 func_8014C860(s32 a0, s32 a1); +extern void func_8014C8C8(s32 a0, s32 *a1); +extern void func_8014C88C(s32 a0); +extern void func_8014C8C8(s32 dst, s32 * src); +extern void func_8014C8F0(s32 arg0); +extern u8 D_801151F0[]; +extern s32 func_8014C918(s32 a0, s32 a1); +extern s32 D_80126B50; +extern void func_8014C968(void); +extern void func_8014C978(void); +extern s32 func_8014C98C(void); +extern void func_80139914(s32 a0); +extern s32 func_8014CA00(s32 a0); +extern u16 func_8014CA70(s32 a0, s32 a1); +extern s32 func_8014CA14(s32 a0, s32 a1); +extern u16 func_8014CAE4(s32 *a0, s32 a1); +extern s32 func_8014CA88(s32 *a0, s32 a1); +extern s32 func_8014CAFC(void); +extern s32 func_8014CB0C(void); +extern s32 func_8014CB1C(void); +extern u8 D_80126D1F; +extern s32 func_8014CB2C(void); +extern s32 func_8014CB58(void); +extern u8 D_80126D1D; +extern void func_8014CB68(void); +extern s32 func_8014CB7C(void); +extern s32 func_8014CB8C(void); +extern short D_80126C9E; +extern void func_8014CB9C(struct Packed8 *a0); +extern s32 D_80126CDC; +extern void func_8014CBD8(void); +extern s16 D_80126CC4; +extern void func_8014CBE8(void); +extern void func_8014CBF8(void *a0); +extern void func_8014D3E0(s32 a0); +extern void func_8014D04C(void); +extern void func_8014CCB4(void); +extern void func_8014CC28(s32 a0); +extern void func_8014CD0C(u8 *a0); +extern s32 func_8014CF04(s32 a0, s32 a1, void *a2); +extern void func_8014CD80(s32 a0, void *a1, void *a2); +extern void func_8014D0A4(s32 a0); +extern s32 func_8014D2A0(s32 a0, void *a1, void *a2); +extern s32 func_8014D12C(s32 a0, void *a1, void *a2); +extern void func_8014D438(s32 a0); +extern void func_8014D3E0(s32 _arg0); +extern void func_8014D610(s32 a0, void *a1, void *a2); +extern s32 func_8014D4C0(s32 a0, void *a1, void *a2); +extern void func_8014D790(s32 a0); +extern void func_8014D738(void); +extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); +extern s32 func_8014D820(s32 a0, u16 *a1, u16 *a2); +extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); +extern void func_8014DF94(s32 arg0); +extern void func_8014DF3C(void); +extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ +extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); +extern s32 func_80133784(s32 a0, void *a1, s32 a2); +extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ +extern s16 D_801152AC; +extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); +extern void func_8014E48C(s32 a0); +extern void func_8014E434(void); +extern void func_8014E5B4(s32 a0, void *a1, void *a2); +extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); +extern void func_8014E6F8(struct SubE6F8 *a0); +extern void func_8014E6A0(void); +extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); +extern void func_8014E934(s32 _arg0); +extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); +extern s32 func_8014E98C(void *a0); +extern s32 D_801150D8; +extern s16 D_801152AA; +extern u8 D_80126720[]; +extern s16 D_80126724; +extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); +extern s32 func_8014ED80(struct SubED80 *a0); +extern int D_801C5D38; +extern void func_8014ED28(s32 _arg0); +extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F24C(struct SubF24C *a0); +extern void func_8014F1F4(void); +extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); +extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); +extern s32 func_8014F4C0(); +extern s32 func_8014F468(void); +extern int func_8014F74C(); +extern int func_8014F6F4(void); +extern u8 D_800D3918[]; +extern u8 D_801152A8[]; +extern s32 D_801152BC; +extern int func_8014F74C(s32 arg0); +extern s32 func_8014FA70(s32 a0); +extern s32 D_801C5D3C; +extern void func_8014FA04(s32 a0); +extern s32 func_8014FBC0(); +extern s32 func_8014FC18(u8 *self); +extern int func_8014FD54(int param_1); +extern void func_8014FCFC(void); +extern void func_80150170(void *a0); +extern s32 func_8014FE60(void *a0); +extern void func_8014FDF4(struct S8014FDF4 *a0); +extern s32 func_8014FE60(void *e); +extern s32 func_80134510(s32 arg); +extern s32 func_80150150(s32 a, s32 b); +extern s32 func_80150460(s32 a, s32 b); +extern void func_801504D8(u16 *a0); +extern s32 func_80150480(s32 _arg0); +extern s32 func_80150528(void *a0, void *a1, void *a2); +extern s32 func_80150528(void *arg0, void *arg1, void *arg2); +extern s32 func_801506A4(s32 a0, s32 a1); +extern s32 func_801505FC(s32 a0); +extern s32 func_801506A4(s32 arg0, s32 arg1); +extern void func_80150820(s32 a0, s32 a1); +extern void func_8015086C(int param_1); +extern s32 func_801508B4(s32 a0); +extern s32 func_8015094C(s32 a0); +extern short func_801508F8(s32 a0); +extern s32 D_8018A618; +extern s32 D_80126990; +extern s32 D_80126994; +extern u8 D_80126948[]; +extern s32 func_80021174(s32 a0, s32 a1); +extern s32 func_8015094C(s32 param_1); +extern void func_80150B9C(void); +extern s32 func_80151184(s32 a0, s32 a1, s32 a2); +extern s32 func_80150BA4(s32 a0); +extern s32 func_801619D0(void *a0); +extern void func_80150BC8(s32 *a0); +extern s32 func_80150480(s32 a0); +extern u16 D_800AE6DC; +extern void func_80150C48(s32 a0); +extern int func_80151184(int arg, int a1, int a2); +extern int func_80150CA0(int arg); +extern void func_80150EC4(s32 a, s32 b); +extern void func_80150CC4(s32 a); +extern void func_80150CE4(s32 a); +extern void func_80150D04(s32 a); +extern void func_80150D24(s32 a); +extern void func_80150D44(s32 a); +extern void func_80150D64(s32 a); +extern void func_80150D84(s32 a); +extern void func_80150DA4(s32 a); +extern void func_80150DC4(s32 a); +extern void func_80150DE4(s32 a); +extern void func_80150E04(s32 a); +extern void func_80150E24(s32 a); +extern void func_80150E44(s32 a); +extern void func_80150EC4(s32 a0, s32 a1); +extern void func_80150E64(s32 a0); +extern void func_80150E84(s32 a0); +extern void func_80150EA4(s32 a0); +extern u8 D_800AE6C0; +extern s16 D_800AE6C8; +extern s16 D_800AE6CA; +extern s16 D_800AE6CC; +extern s32 D_800AE6C4; +extern s16 D_800AE6CE; +extern u8 D_800AE6BE; +extern u8 D_801201F8[]; +extern void func_80150F78(void); +extern void func_80150F80(s32 a0); +extern int func_80150FB4(int arg); +extern void func_80150FD8(s32 a0); +extern int func_80151014(int arg); +extern void func_80151038(s32 a0); +extern int func_80151070(int arg); +extern int func_80151094(int arg); +extern void func_801510B8(void); +extern void func_801510C0(void); +extern int func_801510C8(int arg); +extern int func_801510EC(int arg); +extern s32 func_8012DB84(void); +extern s32 func_80151110(void); +extern void func_80151130(void); +extern int func_80151138(int arg); +extern void func_8015115C(s32 *a0, s16 a1); +extern s32 func_80151164(s32 a0, s32 a1); +extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); +extern void func_801511A8(u8 *a0); +extern void func_801511C4(u8 *a0); +extern int func_80151204(int arg, int a1); +extern int func_801511E0(int arg); +extern int func_80151204(int a0, int a1); +extern void func_80151238(void *a0); +extern void func_8015126C(u16 *p); +extern void func_80151780(s32 a0); +extern void func_801516F0(s32 *a0); +extern void func_8015173C(s32 *a0); +extern s16 D_8011DB1A; +extern s32 D_80127518; +extern s32 D_801151FC; +extern s32 func_801725CC(u8 *a0); +extern s32 func_80029D3C(void); +extern void func_80151878(void); +extern void func_80153B58(s32 *a0); +extern s32 func_80151880(s32 a0); +extern s32 func_801518D8(s32 a0); +extern s32 func_80151944(void); +extern s32 func_80151924(void); +extern void func_8014E934(s32 a0); +extern s32 func_8014F3E8(s32 a0); +extern void func_801519C8(s32 a0); +extern void func_80151980(s32 a0); +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801519C8(s32 arg0); +extern void func_80151C54(s32 a0); +extern void func_801542DC(s32 *a0, s32 a1); +extern void func_8015BDD0(s32 *a0); +extern void func_80165718(s32 a0); +extern u8 D_800D46E4[]; +extern void func_80151AE4(s32 arg0); +extern void (*D_8018A6C0[])(void); +extern void func_80151D24(void *a0); +extern void func_80151DB0(s32 a0); +extern void func_80151D60(void *a0); +extern s32 func_80172630(u8 *a0); +extern s32 D_80062C14; +extern void func_80151DB0(s32 param_1); +extern void func_80151E78(s32 *a0); +extern void func_80151ECC(struct S80151ECC *a0); +extern void func_80151FB4(s32 a0); +extern void func_80151F38(s32 *a0); +extern void func_801553C0(s32 a0); +extern void func_80153C18(); +extern void (*D_8018A6E4[])(void); +extern void func_80152058(void *a0); +extern void func_801520DC(s32 a0); +extern void func_80152094(s32 a0); +extern void func_80147324(s32 a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_8018A6D4; +extern void func_801520DC(s32 arg0); +extern void func_801470B4(s32 a0); +extern void func_8015369C(s32 a0); +extern void func_80152194(s32 *a0); +extern s32 func_801536DC(s32 a0); +extern void func_8015220C(s32 a0); +extern s32 func_80153800(s32 a0); +extern void func_801522CC(s32 a0); +extern void func_80152254(s32 *a0); +extern void (*D_8018A6F8[])(void); +extern void func_80152370(void *a0); +extern void func_801523F4(s32 a0); +extern void func_801523AC(s32 a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern u8 D_8018A704[]; +extern void func_801523F4(s32 arg0); +extern void func_801525F4(int); +extern s32 func_801535F4(void *arg0); +extern void func_8015BF48(s32 *a0); +extern void func_80152500(int param_1); +extern void func_801525F4(s32 a0); +extern void (*D_8018A714[])(void); +extern void func_80152698(void *a0); +extern void func_80152714(s32 a0); +extern void func_801526D4(s32 a0); +extern void func_80152790(s32 a0); +extern void (*D_8018A72C[])(void); +extern void func_8015282C(void *a0); +extern void func_801528B0(s32 a0); +extern void func_80152868(s32 a0); +extern M2C_UNK D_8018A71C; +extern void func_801528B0(s32 arg0); +extern void func_8015294C(s32 a0); +extern void func_80152A08(s32 a0); +extern void func_80152AC8(s32 a0); +extern void func_80152A50(s32 *a0); +extern void (*D_8018A740[])(void); +extern void func_80152B6C(void *a0); +extern void func_80152BF0(s32 a0); +extern void func_80152BA8(s32 a0); +extern void func_80152C80(s32 *a0); +extern void func_80152C40(s32 *a0); +extern void (*D_8018A75C[])(void); +extern void func_80152D24(void *a0); +extern void func_80152DA8(s32 a0); +extern void func_80152D60(s32 a0); +extern M2C_UNK D_8018A74C; +extern void func_80152DA8(s32 arg0); +extern void func_80152E4C(s32 a0); +extern void func_80152EFC(s32 a0); +extern void func_80152FBC(s32 a0); +extern void func_80152F44(s32 *a0); +extern void (*D_8018A770[])(void); +extern void func_80153060(void *a0); +extern void func_801530E4(s32 a0); +extern void func_8015309C(s32 a0); +extern void func_80155440(s32 *a0); +extern void func_801530E4(s32 arg0); +extern void func_80153150(struct S80153150 *a0); +extern void func_801531BC(s32 a0); +extern void func_8015327C(s32 a0); +extern void func_80153204(s32 *a0); +extern void (*D_8018A784[])(void); +extern void func_80153320(void *a0); +extern void func_801533A4(s32 a0); +extern void func_8015335C(s32 a0); +extern void func_80153410(s32 *a0); +extern void func_80153490(s32 a0); +extern void func_80153550(s32 a0); +extern void func_801534D8(s32 *a0); +extern void (*D_8011DB28)(s32 a0); +extern s32 func_801536DC(s32 param_1); +extern void func_800139C8(s32 a0, void *a1, void *a2); +extern s32 func_80153978(s32 a0, u16 *src); +extern s32 func_80133784(s32 a0, void *src, s32 dst); +extern s32 func_801539F8(s32 a0, void *a1); +extern s32 func_801539F8(s32 a0, void * a1); +extern s32 func_8016DA04(s32 a0); +extern s32 func_80153BD8(s32 a0); +extern s32 func_80153BF0(s32 a0); +extern void func_80153C18(void); +extern u16 D_8011F748; +extern void func_80153C30(void); +extern void func_80153C74(s16 a0, s16 a1); +extern s16 D_8011DB18; +extern void func_80153C44(int a0, int a1, s16 a2); +extern s16 D_8011DB0C; +extern s32 D_80115210; +extern void func_80153C8C(void); +extern void func_80153C9C(void); +extern s32 func_80153CBC(void); +extern s32 D_8018A798; +extern void (*D_8018A7C0[])(void *a0); +extern void func_80153CCC(S80153CCC *a0); +extern void func_80153D7C(s32 a0); +extern void func_80153D34(s32 a0); +extern u8 D_8018A7A0; +extern void func_80153D7C(s32 param_1); +extern void func_8015410C(void); +extern void func_80153E00(s32 param_1); +extern void func_80151664(void); +extern void func_80154134(u8 *a0); +extern void func_80154190(u8 *a0, s32 a1); +extern void func_80154150(s32 a0, s32 a1); +extern void func_80154218(u8 *a0, s32 a1, s32 a2); +extern void func_801541D8(u8 *a0, s32 a1, s32 a2); +extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); +extern void func_801542A4(); +extern void func_801542A4(s32 *a0, s32 a1); +extern void func_8015430C(); +extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); +extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); +extern s32 func_80154358(void * arg0); +extern void func_80154AB4(s32 a0, s32 a1); +extern void func_80154B20(s32 a0, s32 a1, s32 a2); +extern void func_80154AE0(s32 a0, s32 a1, s32 a2); +extern void func_80154B7C(u8 *a0, s32 a1); +extern void func_80154B4C(u8 *a0, s32 a1); +extern void func_80154BC8(void *a0, s32 a1, s32 a2); +extern void func_80154B98(void *a0, s32 a1, s32 a2); +extern u8 D_800D8D10[]; +extern s16 D_80078E9E; +extern void func_801550FC(s32 a0); +extern void func_80154ED8(s32 a0, s32 a1); +extern void func_80154F9C(s32 a0); +extern void func_800183E0(s32 a0); +extern void func_801550FC(s32 arg0); +extern void func_8001D150(s32, s32); +extern void func_8001D130(int, int); +extern void func_80155150(int param_1); +extern s32 D_800DE2A4[]; +extern void func_801552F4(s32 a0); +extern void func_80155344(s32 a0); +extern s32 func_80155394(s32 *a0); +extern void func_801553A8(s32 *a0); +extern s32 func_80029178(s32); +extern int (*D_8018A80C[])(void); +extern s32 func_80155458(s32 param_1); +extern s32 func_801659DC(u8 *a0); +extern s32 func_801554B8(void *arg0); +extern void func_801555F4(void *a0); +extern void func_80155518(s32 *a0); +extern void func_80155580(void *a0); +extern void (*D_8018A810[])(void); +extern s32 func_80161104(void); +extern void func_801555F4(void *); +extern void func_801555BC(void *a0); +extern int func_80155A44(int param_1); +extern int func_80161208(); +extern u8 D_800D4DA8[]; +extern void func_80155B20(s32 *a0); +extern s32 D_800D4DB4; +extern void func_80155B9C(s32 a0); +extern u8 D_800D4DD4[]; +extern void func_80155C0C(s32 *a0); +extern void func_8014ED28(s32 a0); +extern int func_80155FF8(int arg, int a1); +extern s32 D_800D4DF4; +extern void func_80155C64(s32 a0); +extern void func_8015E880(s32 *a0); +extern void func_80155D70(s32 param_1); +extern void func_80155E30(void *a0); +extern s32 func_80161208(); +extern void func_80155EA4(void *arg0); +extern void func_80155F58(void); +extern s32 func_80155F80(); +extern s32 func_80155F60(void); +extern s32 func_80155F80(s32 a0); +extern int func_80155FB0(int arg, int a1); +extern int func_80155FD4(int arg, int a1); +extern int func_80156044(int arg, int a1); +extern s32 func_80029B4C(s32 a0, s32 a1); +extern s32 func_80029BC8(s32 a0, s32 a1); +extern s32 func_80029C44(s32 a0, s32 a1); +extern s32 func_8015640C(s32 a0, s32 a1); +extern s32 rand(void); +extern u32 func_8015616C(s32 param_1, u16 param_2); +extern u16 func_80156370(u16 param_1); +extern s32 func_801564B0(s32 a0); +extern s32 func_8002A1B4(void); +extern s32 func_8002A400(void); +extern s32 func_8002A670(void); +extern s32 func_8002A8E0(void); +extern s32 D_801151E0[]; +extern s32 func_801565C0(void); +extern void func_80156A14(s32 *a0); +extern void func_80156648(s32 *a0); +extern u8 D_8011DAD8[]; +extern s32 func_8014C568(s16 *a0, s16 *a1); +extern void func_801567BC(s32 a0); +extern u8 D_80126730[]; +extern void func_80156848(s32 param_1, s32 param_2); +extern unsigned char D_8011520C[]; +extern unsigned short D_8018AC74[]; +extern void func_80156A1C(s32 param_1, s32 param_2); +extern s32 D_801150E0[]; +extern void func_80156A88(s32 a0, s32 a1); +extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); +extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); +extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); +extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern s32 func_80135004(s32 a0, void *a1, s32 a2); +extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801575E4(void *a0); +extern void func_801574DC(s32 *a0); +extern void func_80157544(void *a0); +extern void (*D_8018AC84[])(void); +extern void func_8014CC28(s32 a0); /* defined */ +extern s32 func_8014F3E8(s32 a0); /* declared */ +extern void func_8015BDD0(s32 *a0); /* defined */ +extern void func_801575E4(void *a0); /* defined */ +extern void func_80157580(s32 arg0); +extern u8 D_800D4F14[]; +extern void func_801576A8(void *arg0); +extern s32 func_8015773C(u8 *a0); +extern s32 func_8015771C(u8 *a0); +extern s32 func_8015773C(u8 * arg0); +extern int D_801C5D70; +extern void func_801578C0(s32 a0); +extern void func_80157788(int param_1); +extern void func_801577C8(s32 arg0); +extern void (*D_8018ACAC[])(void); +extern void func_80157808(void *param_1); +extern void func_80157880(s32 a0); +extern s32 func_801725A4(u8 *a0); +extern u8 D_800D5128; +extern u8 D_8018AC8C; +extern void func_801578C0(s32 param_1); +extern void func_80147A84(int); +extern void func_80148038(int, int); +extern void func_80147460(int); +extern void func_80146D90(int); +extern void func_80161450(void *a0); +extern void func_80157A8C(int); +extern void func_80154A74(int, int); +extern unsigned char D_800D5178; +extern unsigned char D_8018AC9C; +extern void func_8015795C(int param_1); +extern void func_80161D20(s32 a0, s32 a1); +extern void func_80157A8C(s32 a0); +extern void func_8016706C(s32 a0); +extern u8 D_800D51AC[]; +extern void func_80157AC8(s32 param_1); +extern void func_80157B74(int param_1); +extern void func_8016158C(void *a0); +extern void func_8015BE04(s32 *a0); +extern void func_80157BC8(s32 a0); +extern void func_80157CCC(s32 a0); +extern void func_80157DC4(void *a0); +extern void func_80157FC4(void *a0); +extern void func_80157D74(u16 *a0); +extern void (*D_8018ACEC[])(void); +extern void func_80157E38(void *); +extern void func_80157E00(void *a0); +extern void func_80157E38(void * a0); +extern s32 func_80157F64(s32 *a0); +extern s32 func_80156600(void *a0); +extern void func_80157EA4(void *a0); +extern void (*D_8018ACF4[])(void); +extern void func_80158038(void *); +extern void func_80158000(void *a0); +extern s32 D_800D51E0; +extern s32 D_8018ACC0; +extern void func_80158038(void * param); +extern u8 D_800D524C[]; +extern void func_80161418(void *a0); +extern void func_801580B4(s32 a0); +extern void func_801581AC(s32 a0); +extern void (*D_8018AD00[])(void); +extern void func_8015824C(void *a0); +extern void func_801582C0(void *); +extern void func_80158288(void *a0); +extern u8 D_800D52A8[]; +extern void func_801585A4(s32 *a0); +extern void func_801582C0(void *a0); +extern s32 func_801585AC(s32 *a0); +extern u8 D_800D52E8[]; +extern void func_80158344(s32 *a0); +extern s32 func_801615C4(void *a0, s32 a1); +extern u8 D_8018ACD0; +extern u8 D_800D533C; +extern void func_80158434(s32 param_1); +extern void func_80158548(s32 param_1); +extern void func_801585EC(u8 *a0); +extern void func_80158794(void); +extern s32 D_801C5D78; +extern s32 D_801C5D84; +extern s32 D_801C5D88; +extern void func_80158880(s32 *param); +extern void func_8015879C(s32 param_1); +extern void func_80158814(void *arg0); +extern void (*D_8018AD3C[])(s32 *); +extern void func_80158AE4(void *a0); +extern void func_80158AB4(void *a0); +extern void func_8016F264(void); +extern void func_80165840(void); +extern void func_801658DC(void); +extern void func_80165A78(s32); +extern void func_80158AE4(void * a0); +extern M2C_UNK D_800D58D8; +extern void func_80158BB0(void *arg0); +extern s32 func_80159404(s32 a0, s32 a1); +extern void func_80158C40(s32 *a0); +extern void func_80158CD8(s32 *a0); +extern s32 func_80159434(s32 a0, s32 a1); +extern void func_80158D60(s32 a0); +extern M2C_UNK D_800D5904; +extern void func_80158E24(s32 *a0); +extern s32 D_8018AD10[]; +extern int rand(void); +extern s32 func_8013767C(s32 a0); +extern void func_80158F00(int param_1); +extern u8 D_80110C3C[]; +extern s32 func_801399F0(s32); +extern void func_80139914(s32); +extern s32 func_80159464(void); +extern void func_801594E8(s32, s32); +extern void func_80158FA4(s32 param_1); +extern s32 func_801399F0(s32 a0); +extern u8 D_80110C94[]; +extern u8 D_80110CD4[]; +extern void func_80159070(void *a0); +extern s32 func_80029A94(s32); +extern void func_80175454(void); +extern void func_800298BC(void *); +extern void func_8002992C(s32); +extern void func_800CF804(void); +extern void func_800CF818(void); +extern u8 D_80110D0C[]; +extern void func_80159120(s32 a0); +extern void func_801592CC(s32 *a0); +extern u8 D_800AE6BD; +extern s32 D_801C5D80; +extern void func_8015934C(void *arg0); +extern void func_801593E4(A801593E4 *a0); +extern void (*D_8018AF8C[])(void); +extern void func_80159698(void *a0); +extern s32 func_801596D4(void *a0); +extern void func_80174B6C(void); +extern void func_80129248(s16 a0); +extern void func_8013C938(void); +extern void func_8013CB20(void); +extern void func_8013C98C(void); +extern void func_8002850C(s32, s32, s32); +extern void func_80028620(s32, void *); +extern s16 D_800B9AAC[]; +extern s16 D_800B9B00; +extern u16 D_801270C0; +extern u32 D_800AFAE8[]; +extern char D_8018ADAC[]; +extern s32 func_801596F0(s32 param_1); +extern s32 func_80159874(void); +extern void func_800167B8(s32 a0); +extern s32 func_8015987C(s32 a0); +extern int func_800167F0(int arg); +extern int func_801598BC(void); +extern void func_80159968(void *a0); +extern void func_801598E0(u8 *a0); +extern void (*D_8018B030[])(void); +extern void func_80159A20(void *a0); +extern void func_801599E0(void *a0); +extern void func_80159A18(void); +extern void func_80159BE4(s32); +extern void func_80159B08(s32 *a0); +extern void func_80159B70(void *a0); +extern void func_80159B3C(void * a0); +extern void (*D_8018B184[])(void); +extern void func_80159BAC(s32 a0); +extern s32 func_80172590(u8 *a0); +extern unsigned char D_8018AFA0; +extern void func_80159BE4(s32 arg0); +extern void func_8015A1C8(s32 a0); +extern void func_8015A2D8(s32); +extern void func_8015A1FC(s32 *a0); +extern void func_8015A264(void *a0); +extern void func_8015A230(s32 *a0); +extern void (*D_8018B18C[])(void); +extern void func_8015A2A0(s32 a0); +extern int D_8018AFB0; +extern s32 func_80172608(u8 *a0); +extern void func_8015A2D8(s32 param_1); +extern u8 D_800D48DC; +extern s32 func_8015AB7C(s32 a0); +extern s32 D_8011F9C4; +extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); +extern s32 func_80161CD0(s32 a0, s32 a1); +extern M2C_UNK D_8018AFD0; +extern void func_8015AC48(s32 arg0); +extern void func_8015AC90(s32 a0); +extern void func_8015ADB0(s32 a0); +extern void func_8015ACC4(s32 *arg0); +extern void func_8015AD3C(void *a0); +extern void func_8015AD08(void *arg0); +extern void (*D_8018B194[])(void); +extern void func_8015ADB0(s32); +extern void func_8015AD78(s32 a0); +extern void func_8015ADB0(s32 arg0); +extern s32 D_800D4A9C; +extern int func_8015B6F4(int param_1); +extern u8 D_800D4F8C[]; +extern s32 func_8015B7B4(s32 a0); +extern u8 D_800D4BE0[]; +extern s32 func_8014A51C(void); +extern s32 func_8015B858(u8 *a0); +extern s32 D_800D4B48; +extern void func_8015B8F8(s32 *a0); +extern void func_8015BD8C(s32 *a0); +extern s32 func_8015BE94(); +extern void func_8015BE38(struct Obj *a0); +extern s32 func_8015BE74(void); +extern void func_80161124(void *a0); +extern s32 func_8015BE94(s32 *a0); +extern s32 func_8015AE2C(); +extern s32 func_8015BEC4(void); +extern s32 func_8015B950(s32 arg0); +extern s32 func_8015BEE4(void); +extern void func_8015BF04(s32 *a0); +extern void func_8015C0C4(s32 a0); +extern void func_8015BFF4(void *a0); +extern void func_8015BF7C(s32 *a0); +extern void func_8015C030(s32 *a0, s32 a1); +extern void func_8015BFB0(s32 *a0, s32 a1); +extern void (*D_8018B1BC[])(void); +extern void func_8015C0C4(s32); +extern void func_8015C08C(s32 a0); +extern s32 func_8015C128(s32 param_1); +extern void func_8015C6A4(void); +extern void func_8015C788(s32 a0); +extern void func_8015C6AC(s32 *a0); +extern void func_8015C714(void *a0); +extern void func_8015C6E0(s32 *a0); +extern void (*D_8018B1C8[])(void); +extern void func_8015C788(s32); +extern void func_8015C750(s32 a0); +extern void func_8015CB94(s32 a0); +extern void func_8015CBCC(void); +extern void func_8015CBD4(void); +extern void func_8015CBDC(void); +extern void func_8015CBE4(void); +extern void func_8015CBEC(void); +extern void func_8015CBF4(void); +extern void func_8015CBFC(void); +extern void func_8015CC04(void); +extern void func_8015CC0C(s32 *param_1); +extern void func_8015CC74(s32 *a0); +extern void func_8015CC40(s32 *a0); +extern s32 func_8015CCD0(); +extern s32 func_8015CCB0(void); +extern s32 func_801725E0(u8 *a0); +extern s32 func_8015CCD0(s32 param_1); +extern s32 func_8015CD20(s32 arg0); +extern void func_8015CF24(s32 a0); +extern void func_8015D01C(); +extern void func_8015CF58(s32 *param_1); +extern void func_8015CFC0(s32 *a0); +extern void func_8015CF8C(s32 *a0); +extern void func_8015CFFC(void); +extern void func_8015D01C(int param_1); +extern void (*D_8018B03C[])(void *); +extern s32 func_801725F4(u8 *a0); +extern void func_8015D104(void *arg0); +extern s32 D_8018B26C; +extern void func_8015D380(s32 a0); +extern unsigned char D_8018A350[]; +extern void func_8015D414(int param_1); +extern void func_8015D57C(s32); +extern void func_8015D480(s32 *a0); +extern s32 func_8015D4E8(s16 *a0); +extern void func_8015D4B4(s16 *a0); +extern void func_8015D524(s32 arg0); +extern void func_8015D544(s32 a0); +extern void func_801746DC(void); +extern void func_8015D57C(s32 arg0); +extern s32 func_80161B18(void *a0); +extern s32 func_80161B84(void *a0); +extern void func_80154150(int, int); +extern void func_80149374(int, int); +extern unsigned char D_8018B280[]; +extern void func_8015D5E8(int param_1); +extern int func_8015E0D4(int); +extern void func_8015DA5C(s32 a0); +extern void func_8015DB6C(s32 a0); +extern void func_8015DA90(s32 *a0); +extern void func_8015DAF8(s32 *a0); +extern void func_8015DB6C(s32); +extern void func_8015DB34(s32 a0); +extern void func_8015DCB8(s32 a0); +extern void func_8014BD60(s32 a0, s32 a1); +extern int func_8015DD74(int); +extern void func_8015DBD4(void *arg0); +extern int func_8015DC84(int a0); +extern s8 D_8018B2BC[]; +extern void func_8015DCB8(s32 param_1); +extern int func_8015DD74(int arg0); +extern void func_8015DECC(s32 a0); +extern void func_8015DDF0(s32 *a0); +extern void func_8015DE58(s32 *a0); +extern void func_8015DECC(s32); +extern void func_8015DE94(s32 a0); +extern void func_8015E018(s32 a0); +extern void func_8015DF34(void *arg0); +extern int func_8015DFE4(int a0); +extern void func_8015E018(s32 param_1); +extern int func_8015E0D4(int a0); +extern void func_8015E22C(s32 a0); +extern void func_8015E150(s32 *a0); +extern s32 func_8015E1B8(s32 a0); +extern void func_8015E184(s32 *arg0); +extern void func_8015E22C(s32); +extern void func_8015E1F4(s32 a0); +extern u8 D_800D4FF4[]; +extern u8 D_800D5098[]; +extern u8 D_800D5060[]; +extern s32 func_8014A850(s32 a0); +extern void func_8015E40C(s32 a0); +extern void func_8015E588(void); +extern void func_8015E4B0(s32 a0); +extern void func_8015E288(s32 a0); +extern u16 D_8018B304; +extern u16 D_8018B306; +extern u16 D_8018B308; +extern s32 D_8018B30C; +extern void func_80013E94(void *a0, void *a1); +extern void func_8015E4B0(s32 param_1); +extern void func_8013C9C4(void *a0); +extern s32 D_8018B314; +extern void func_8015E5B0(u8 *self); +extern void func_8015E714(s32 *a0); +extern void func_8015E95C(s32); +extern void func_8015E84C(s32 *a0); +extern void func_8015E8E8(s32 *a0); +extern void func_8015E9B8(s32 *a0); +extern void func_8015E8B4(s32 *a0); +extern void func_8015E924(s32 a0); +extern void func_8015E95C(s32 a0); +extern s16 D_801152A0; +extern void func_80160818(s32 *a0); +extern void func_8015ED6C(s32 *a0); +extern void func_8015EE7C(s32); +extern void func_8015EDA0(s32 *a0); +extern s32 func_8015EE08(s32 a0); +extern void func_8015EDD4(s32 *arg0); +extern void func_8015EE44(s32 a0); +extern int D_800D4C48; +extern int D_8018B020; +extern void func_8015EE7C(s32 param_1); +extern void func_8015EEE0(void *arg0); +extern void func_8015EF9C(void); +extern void func_8015F080(s32); +extern void func_8015EFA4(s32 *a0); +extern void func_8015F00C(s32 *a0); +extern void func_8015EFD8(s32 *a0); +extern void func_8015F048(s32 a0); +extern void func_8015F080(s32 a0); +extern s32 D_80062BE8; +extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); +extern s32 func_80161208(void); +extern void func_8015F118(void *a0); +extern void func_8015F260(s32 *a0); +extern void func_8015F380(); +extern void func_8015F2BC(s32 *a0); +extern void func_8015F324(s32 *a0); +extern void func_8015F2F0(s32 *a0); +extern void func_8015F360(void); +extern s32 func_801725B8(u8 *a0); +extern void func_8015F380(void* arg0); +extern void func_8015F738(s32 *a0); +extern void func_8015F848(s32 *a0); +extern void func_8015F76C(s32 *a0); +extern s32 func_8015F7D4(s32 a0); +extern void func_8015F7A0(s32 *arg0); +extern void func_8015F810(s32 *a0); +extern void func_80147078(s32 *, s16); +extern void func_80159B70(void *); +extern void func_8015F89C(void *arg0); +extern void func_8015F948(s32 *param_1); +extern void func_8015F9A4(void *arg0); +extern void func_8015FA24(s32 arg0); +extern void func_8015FBE0(s32 *a0); +extern void func_8015FA44(s32 *a0); +extern void func_8015FAAC(s32 *a0); +extern void func_8015FA78(s32 *a0); +extern s32 func_801612B8(void *a0, s32 a1); +extern void func_8016007C(s32 a0); +extern void func_8015FAE8(void *arg0); +extern void func_8015FCC8(void *param_1); +extern unsigned int D_8018B398[]; +extern void func_8015FD74(int param_1); +extern s32 func_80028DE0(void); +extern u8 func_80165700(s32 a0, s32 a1); +extern void func_8015FDCC(s32 a0); +extern u8 D_80078EC2; +extern u8 func_801656E8(s32 a0, s32 a1); +extern void func_80165670(s32 a0, s32 a1); +extern void func_8016004C(s32 a0); +extern void func_8015FF20(void *param_1); +extern void func_801601AC(s32 *a0); +extern void func_801600D0(s32 *a0); +extern void func_80160138(s32 *a0); +extern void func_80160104(s32 *a0); +extern void func_80160174(s32 *a0); +extern void func_801601E4(s32 *a0); +extern void func_80160244(s32 *a0); +extern void func_8016032C(void); +extern void func_80160410(s32 *a0); +extern void func_80160334(s32 *a0); +extern void func_8016039C(s32 *a0); +extern void func_80160368(s32 *a0); +extern void func_801603D8(s32 *a0); +extern u8 D_80062BD0; +extern void func_80160410(s32 * a0); +extern void func_801607B8(s32 *a0); +extern void func_801608C0(s32 *a0); +extern void func_801607E4(s32 *a0); +extern void func_8016084C(s32 *a0); +extern void func_80160888(s32 *a0); +extern void func_80160A28(s32 a0); +extern void func_80160A74(s32 *a0); +extern void func_80160BB4(s32 *a0); +extern void func_80160ACC(s32 *a0); +extern s32 func_80160B34(s32 a0); +extern void func_80160B00(s32 *arg0); +extern void func_80160B70(s32 a0); +extern void func_80160C28(void *arg0); +extern void func_80160CB4(s32 *a0); +extern void func_80160D10(void *arg0); +extern void func_80160DEC(u8 *a0); +extern void func_80160F00(); +extern void func_80160E3C(s32 *a0); +extern void func_80160EA4(); +extern void func_80160E70(s32 *a0); +extern void (*D_8018B448[])(void); +extern void func_80160EA4(void *a0); +extern void func_80160EE0(void); +extern void func_80160F00(void* arg0); +extern void func_800D0F4C(s32 a0); +extern u8 D_80110EC0; +extern void func_80160F70(s32 a0); +extern void func_80160FE0(s32 *a0); +extern void func_80161034(void *a0); +extern void func_80161094(s32 a0); +extern void func_801610FC(void); +extern void func_801483E8(void); +extern s32 func_80161A60(s32 a0); +extern void func_8016130C(void *a0, s32 a1); +extern void func_80161240(void *a0); +extern void func_80161374(void *a0, s32 a1); +extern void func_80161278(void *a0); +extern s32 func_801612B8(void * a0, s32 a1); +extern void func_8016163C(void *a0, s32 a1); +extern void func_80161774(void *a0, s32 a1); +extern s32 func_8016197C(s32 a0, s32 a1); +extern s32 func_80161488(void *a0); +extern void func_80161888(void *a0, s32 a1); +extern void func_801614E4(void *a0); +extern void func_8016191C(void *a0, s32 a1); +extern void func_8016151C(void *a0); +extern void func_80161554(void *a0); +extern s32 func_801615C4(void * arg0, s32 arg1); +extern s32 func_801619A4(s32 *a0); +extern s32 func_80161A00(s32 a0); +extern s32 func_80161A30(s32 a0); +extern int func_801497A8(void); +extern int func_80161BE0(void *param_1); +extern u16 D_8018B478[]; +extern void func_80161C98(int param_1, u32 param_2); +extern void func_80161E08(s32); +extern s32 func_80162438(s32); +extern s32 D_800AE6A8; +extern void func_800D1734(void *); +extern s32 D_8018B4DC; +extern void func_80161D88(void); +extern void func_80161E08(s32 param_1); +extern int func_800291DC(int); +extern int func_800D0E30(void *a0); +extern int func_801620C4(void); +extern s32 func_800D0D7C(s32, s32); +extern int D_801C5D90[]; +extern void func_8016216C(void); +extern u8 D_80078EB0; +extern u8 D_80078EB1; +extern s32 func_801621CC(s32 arg0); +extern void func_801622C4(void); +extern void (*D_8018B500[])(void); +extern void func_80162330(void *a0); +extern void func_8014706C(void *a0); +extern s32 func_8016236C(u8 *a0); +extern void func_800D0C48(s32 a0); +extern s32 func_801623B8(s32 *a0); +extern s32 func_800167F0(s32 a0); +extern s32 func_80162414(void); +extern s32 func_80162438(s32 _unused0); +extern int func_801626B8(void); +extern void func_80162714(void); +extern int D_801C5DE8[]; +extern void func_80162760(void); +extern void func_801627C0(void); +extern void (*D_8018B548[])(void); +extern void func_80162834(void *a0); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern void func_80162968(s32 a0); +extern s32 func_80162ACC(u8 *a0); +extern u8 D_800B5CB8; +extern s32 D_8018B538; +extern s32 D_800B5CBC; +extern u8 D_800B5CDF; +extern s32 D_800B5CEC; +extern void func_80162870(s32 param_1); +extern void func_801628F4(s32 *a0); +extern void func_80162968(s32 param_1); +extern void func_80162AC0(s32 *a0, s8 a1); +extern s32 func_80162AE0(u8 *a0); +extern void func_80162AF4(void); +extern void func_80162CC4(void); +extern s32 D_80126D40; +extern void func_80162B1C(void); +extern void func_80162D28(s32 *a0); +extern void func_80162D88(s32 *a0); +extern void func_80162DE8(s32 *a0); +extern void func_80162E48(s32 *a0); +extern void func_80162EA8(s32 *a0); +extern void func_80162F60(s32 arg0, s32 arg1); +extern void func_80162F80(s32 arg0, s32 arg1); +extern void func_80162FA0(s32 arg0, s32 arg1); +extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80162FC0(s32 *a0); +extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); +extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80163234(s32 a0); +extern s32 D_80115100; +extern s32 func_801632E0(void); +extern s32 D_80115200; +extern s32 func_801632F0(void); +extern u16 D_80126B18[]; +extern void func_80163328(void); +extern s32 func_801633A8(void); +extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, u16 * a5); +extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); +extern char D_801C5444[8]; +extern void *memcpy(void *dst, const void *src, unsigned int n); +extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); +extern void func_80157158(); +extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); +extern void func_801636D0(s32 a0, s32 a1); +extern s32 func_8016380C(struct S8016380C *a0, s32 a1); +extern void *memcpy(void *dst, void *src, s32 n); +extern s32 func_801638A0(u8 *a0, s32 a1); +extern s32 func_80163950(s32 a0); +extern void (*D_8018B550[])(void); +extern void func_80163A58(void *a0); +extern void func_80163A94(s32 param_1); +extern void func_80163C2C(s32 param_1); +extern void func_80163EC8(s32 param_1); +extern void func_80164270(s32 *a0); +extern void func_80164418(void); +extern void func_80163764(s32 a0); +extern void func_801642AC(s32 a0); +extern void func_8016432C(s32 a0); +extern void func_80164410(void); +extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164530(s32 arg0); +extern void (*D_8018B5A4[])(void); +extern void func_80164744(s32 param_1); +extern void func_8001C810(s32 a0, s32 a1); +extern void func_80164A74(s32 *a0); +extern void func_80164930(s32 a); +extern u16 D_800DF2E0; +extern s32 D_8018B56C; +extern s16 D_8018B5A0; +extern s16 D_8018B59E; +extern s16 D_8018B59C; +extern void func_801647A4(int param_1); +extern void func_80164ACC(); +extern void func_80164864(void *a0); +extern void func_80164930(s32 param_1); +extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80164ACC(s32 a0); +extern void (*D_8018B5B0[])(void); +extern void func_80164BA0(void *a0); +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *, unsigned short); +extern void func_80164DD0(s32 a0); +extern void func_80164DB0(void); +extern u8 D_801C5E48; +extern u8 D_801C5E49; +extern u8 D_801C5E4A; +extern u8 D_801C5E4B; +extern u8 D_801C5E4C; +extern u8 D_801C5E4D; +extern u8 D_801C5E4E; +extern u8 D_801C5E4F; +extern void func_80164BDC(s32 param_1); +extern void func_80164E40(void); +extern void func_80164CD4(u8 *a0); +extern void func_80164D4C(void *arg0); +extern void (*D_8018B5C0[])(void); +extern void func_80164EA4(void *a0); +extern void func_80165124(void *a0); +extern void func_80164EE0(int param_1); +extern s32 func_80165140(s32 a0); +extern void func_801651B8(void *a0); +extern void func_80164F44(void *arg0); +extern void func_80165024(void *a0); +extern void func_80165064(s32 *a0); +extern void func_801650C4(s32 *a0); +extern s32 func_80165140(s32 param_1); +extern s32 func_80165240(s32 a0, s32 a1, s32 a2); +extern s32 D_801C5E88; +extern void func_801651B8(void * param_1); +extern u8 D_80126CF8; +extern void func_8016533C(void); +extern void func_801653F4(s32 a0); +extern void func_80165580(s32 a0); +extern void func_80165374(s32 a0); +extern void func_80165580(s32 _arg0); +extern void func_801653B8(s32 *a0); +extern s32 func_80165624(s32 a0); +extern u8 D_80078EC5; +extern void (*D_8018B604[])(void); +extern u8 func_80165658(s32 a0, s32 a1); +extern void func_800CAE0C(s32 a0); +extern void func_801654A8(s32 arg0); +extern void func_80165B28(void *a0); +extern void func_801655E4(s32 a0); +extern u8 D_8018B680[]; +extern s32 D_8018B6A0[]; +extern u8 D_8018B71C[]; +extern u8 func_801656D0(s32 a0, s32 a1); +extern u8 D_8018B73C[]; +extern u8 D_8018B75C[]; +extern void func_800CAF6C(void); +extern void func_80165770(void); +extern void func_801657D8(void); +extern u8 D_80078EC3; +extern void func_801657A0(void); +extern s32 D_80078EA0; +extern s32 D_80078EA8; +extern u8 D_80078EBB; +extern s32 D_80078ED4; +extern s32 D_80078ED8; +extern s32 D_80078EDC; +extern u8 D_80078EE0; +extern void func_80165874(void); +extern s8 D_80078EC4; +extern void func_801658EC(void); +extern s32 func_80165900(void); +extern s32 func_80165910(void); +extern s32 D_8012672C; +extern s32 D_8012811C; +extern s32 D_80126B08; +extern void func_80165938(void); +extern void func_80165958(void); +extern s32 func_80165978(void); +extern void func_80165988(void); +extern s32 func_801659A8(void); +extern void func_801659B8(void); +extern s32 func_801659CC(void); +extern void func_80165A18(void); +extern s32 func_80165A50(s32 _arg0); +extern void func_80165AC8(void); +extern void func_80165A78(s32 arg0); +extern void (*D_8018B7F8[])(void); +extern void func_80165B08(void); +extern void func_80165B10(void); +extern void func_80165B18(void); +extern void func_80165B20(void); +extern void (*D_8018B874[])(void); +extern void func_80165BB4(u8 *a0); +extern void func_80165B6C(u8 *a0); +extern void func_80165C58(s32 arg0); +extern void func_80165BFC(void *a0); +extern void func_80165C78(void); +extern M2C_UNK D_801C5454; +extern void func_80165E2C(u16 *arg0); +extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); +extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); +extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); +extern void func_80165E90(void); +extern void func_80020F34(s32 a0, s32 a1); +extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); +extern void (*D_8018B880[])(void); +extern void func_80166018(void *a0); +extern void func_80166054(s32 arg0); +extern void func_801661CC(s32 param_1); +extern void func_80166244(void* arg0); +extern void func_8016629C(void *a0); +extern void func_801662F4(void *a0); +extern void func_8016634C(void *a0); +extern void func_801663A4(void *a0); +extern void (*D_8018B888[])(void); +extern void func_801663FC(void *a0); +extern u8 D_800D387C[]; +extern u8 D_800D3888[]; +extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); +extern void func_800D1FC8(s32 a0, s32 a1); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_801665B4(); +extern void func_80146C3C(); +extern void func_80166438(u8 *a0); +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_800D22E4(s32 a0); +extern void func_801665B4(s32 *a0); +extern void (*D_8018B950[])(void); +extern void func_80166618(void *a0); +extern void (*D_8018B960[])(void); +extern void func_80166654(void *a0); +extern s32 func_80166690(s32 param_1, s32 param_2); +extern s32 func_80166994(); +extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern s32 func_80167540(s32 arg0); +extern void (*D_8018B970[])(void); +extern void func_801678B4(void *a0); +extern void RotMatrixYXZ(void *a0, void *a1); +extern void func_80048EAC(void *a0, void *a1); +extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80146C3C(void); +extern void func_801678F0(s32 a0); +extern void (*D_8018B97C[])(void); +extern void func_80167A9C(void *a0); +extern void func_80167AD8(void); +extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); +extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); +extern u8 D_8018B8DC[]; +extern u8 D_8018B8F0[]; +extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); +extern void func_800D20C0(void *a0, void *a1, s32 a2); +extern void func_80017E68(void *a0, void *a1); +extern void func_800D23D0(void *a0); +extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); +extern s32 D_801269A4; +extern s32 D_801269A8; +extern s32 D_801269AC; +extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); +extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_8016829C(s32 a0); +extern s32 func_80166690(s32 a0, s32 a1); +extern void func_80168328(s32 arg0); +extern void func_801683D8(s32 a0); +extern void func_801684B4(s32 a0); +extern void func_80168540(s32 a0); +extern void func_801685EC(s32 a0); +extern void func_80168640(s32 a0); +extern s32 RotMatrixX(s32 a0, void *a1); +extern void func_80168664(void *arg0); +extern void (*D_8018B994[])(void); +extern void func_80168744(void *a0); +extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_801687CC(s32 a0); +extern void func_80168780(s32 a0); +extern void func_80168828(void); +extern void func_801687CC(s32 param_1); +extern void func_80168828(); +extern void (*D_8018B99C[])(void); +extern void func_801689D8(void *a0); +extern void func_80168A14(s32 *a0); +extern void func_80168A88(void); +extern void (*D_8018B9A4[])(void); +extern void func_80168AA8(void *a0); +extern void func_80168AE4(s32 a0); +extern void func_800D2318(void); +extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); +extern void (*D_8018B9AC[])(void); +extern void func_80168D58(void *a0); +extern void func_80168D94(int a0); +extern void func_80168F40(); +extern void func_80168EC4(s32 a0); +extern void func_80168F40(void *arg0); +extern void (*D_8018B9B4[])(void); +extern void func_8016901C(void *a0); +extern void func_80169058(s32 a0); +extern s32 func_80169228(void); +extern void func_801691B8(void *a0); +extern void (*D_8018B9BC[])(void); +extern void func_801693CC(void *a0); +extern void func_80169584(s32 param_1); +extern void func_80169408(s32 a0); +extern void func_8016951C(int param_1); +extern s32 func_80017758(void *a0, void *a1); +extern s32 func_80017DC4(void *a0, void *a1); +extern void func_801696D8(s32 a0, s32 a1); +extern void (*D_8018B9C4[])(void); +extern void func_80169830(void *a0); +extern void func_8016986C(s32 a0); +extern s32 func_80169A4C(s32 a0, s32 a1); +extern void func_801699D0(void *arg0); +extern void (*D_8018BA78[])(void); +extern void func_80169B80(void *a0); +extern void func_80169E44(s32 a0); +extern void (*D_8018BA80[])(void); +extern void func_80169F00(void *a0); +extern char D_8018BA30[]; +extern char D_8018B9F0[]; +extern void func_80169F3C(int param_1); +extern void func_80169FE0(s32 a0); +extern void (*D_8018BAB8[])(void); +extern void func_8016A020(void *a0); +extern void func_8016A05C(void *a0); +extern void func_8016A290(s32 a, void *b, void *c); +extern void func_8016A08C(s32 param_1); +extern void func_8016A1CC(int param_1); +extern void func_8016A290(s32 param_1, void *param_2, void *param_3); +extern void (*D_8018BAC4[])(void); +extern void func_8016A700(void *a0); +extern s32 func_8016A73C(s32 arg0); +extern s32 func_8016A8FC(s32 a0); +extern void func_8016A890(s32 arg0); +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u16 D_80126B66; +extern void func_8016AA50(s32 param_1, s32 param_2); +extern void (*D_8018BB0C[])(void); +extern void func_8016AB30(void *a0); +extern void func_8016B234(void); +extern void func_8016AFB0(s32 a0); +extern void func_8016B114(void *arg0); +extern s32 func_8016B448(s32, s32); +extern s32 func_8016BA48(s32 a0); +extern void func_8016B3F4(s32 a0); +extern s32 func_8016B428(s32 a0); +extern void func_8016B984(void *a0); +extern s32 func_8016B448(s32 arg0, s32 arg1); +extern void (*D_8018BB88[])(void); +extern void func_8016B4BC(void *a0); +extern int func_8016B9F8(int); +extern int func_8016B834(int, int); +extern void func_8016B91C(int); +extern int D_801C61A8; +extern void func_8016B4F8(int param_1); +extern s32 func_8016B9F8(s32 param_1); +extern void func_8016B6BC(s32, s32, s32, s32); +extern void func_8016B91C(s32); +extern s16 D_8018BB7C[]; +extern void func_8016B5C0(s32 param_1); +extern void func_8001CD9C(int, void *); +extern int *D_8018BBC0[]; +extern unsigned short D_8018BBC8[]; +extern unsigned short D_8018BBD0[]; +extern unsigned char D_801C61B0[]; +extern int func_8016B834(int param_1, int param_2); +extern void func_8016B964(SrcB964 *a0, DstB964 *a1); +extern void func_8016B91C(s32 arg0); +extern s32 D_801C61A8; +extern s32 func_8016BA68(s32, s32); +extern void func_8016BADC(void *a0, s32 a1, s32 a2); +extern void (*D_8018BBD8[])(void); +extern void func_8016BBA4(void *a0); +extern s32 func_8016BBE0(s32 param_1); +extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); +extern M2C_UNK D_801C62E4; +extern M2C_UNK D_801C62E8; +extern void func_8016BCC0(void *arg0); +extern s32 func_8016BD78(s32 param_1); +extern s32 func_8016BEA0(s32 param_1); +extern void func_8016BF34(void *a0); +extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); +extern s32 D_801C6270; +extern void (*D_8018BC08[])(void); +extern void func_8016C14C(void *a0); +extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_801C62EC[]; +extern u8 D_801C62F4[]; +extern u8 D_801C62A4[]; +extern void func_8016C2C4(s32 param); +extern s32 func_8016C49C(s32 param_1_arg); +extern s32 VectorNormalSS(void *a0, void *a1); +extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern short func_8016CF04(s32 a0, s32 a1); +extern void func_8016C83C(s32 a0); +extern void (*D_8018BC10[])(void); +extern void func_8016CB84(void *a0); +extern short func_8016CF04(s32 param_1, s32 param_2); +extern void (*D_8018BC2C[])(void); +extern void func_8016D19C(void *a0); +extern void (*D_8018BC34[])(void); +extern void func_8016D428(void *a0); +extern void func_8016D464(u8 *a0); +extern void func_8016D4DC(s32 a0); +extern void func_8016D5EC(s32 *a0); +extern short func_8016CBC0(void); +extern void func_8016D64C(int param_1); +extern void func_8016D778(s32 a0); +extern void func_800D20C0(); +extern void func_8016D848(s32 *a0); +extern void func_8016D984(s32 *a0); +extern void func_8016DBD8(u8 *a0); +extern void (*D_8018BC9C[])(int); +extern void func_8016DA30(int param_1); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_8018BC40; +extern u8 D_8018BC4C; +extern void func_8016DA7C(s32 param_1); +extern void func_8016DB34(s32 param_1); +extern void (*D_8018BCD0[])(void); +extern void func_8016DEA4(void *a0); +extern void func_8016DEE0(s32 a0); +extern void (*D_8018BCD8[])(void); +extern void func_8016DF20(void *a0); +extern void func_8016E3CC(s32 a0); +extern void func_8016E1CC(s32 a0); +extern void func_8016E26C(s32 *a0); +extern void func_8016E2E8(void *a0); +extern void func_8016E460(void *a0, void *a1); +extern void func_8016E358(void *a0); +extern void func_8016E460(void *arg0, void *arg1); +extern void (*D_8018BD2C[])(void); +extern void func_8016E5B8(void *a0); +extern void func_8016E5F4(s32 arg0); +extern void func_8016E778(); +extern void func_8016E688(void *a0); +extern void func_8016E6E4(s32 a0); +extern void func_8016E728(u8 *a0); +extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); +extern void func_8016E778(int param_1); +extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); +extern s32 D_80115218; +extern void func_8016E8F0(void); +extern void func_8016E918(short param_1, short param_2); +extern s32 func_8016E95C(); +extern u16 D_8018BD60[]; +extern s32 func_8016EC0C(s32 a0, s32 a1); +extern void func_8016EAC0(Wave *param_1); +extern u8 D_8018BD50[]; +extern void func_8016EB3C(s32 p); +extern void func_8016EBA8(u8 *param_1); +extern void func_8016ED6C(void); +extern s32 D_80126D70; +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); +extern void func_8016EE94(); +extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_8016EF78(s32 a0); +extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); +extern void func_801726D0(void *a0); +extern s32 D_80126D50; +extern s32 D_80126D54; +extern u8 D_80126D6C; +extern u8 D_80126D6D; +extern u8 D_80126D6E; +extern s32 D_80126D5C; +extern s32 D_80126D60; +extern s16 D_80126D64; +extern s16 D_80126D66; +extern s16 D_80126D68; +extern s16 D_80126D6A; +extern u8 D_80126D1A; +extern s32 D_80127058; +extern s32 D_8012705C; +extern s32 D_80127060; +extern s32 D_80127064; +extern s32 D_80127068; +extern s32 D_8012706C; +extern s32 D_80127070; +extern s32 D_80127074; +extern s16 D_80126D20; +extern void func_8016EE94(s32 a0, s32 a1); +extern s32 func_8016EFC8(s32); +extern s32 func_8016EFA8(s32 a0); +extern void func_8016F094(s32 *a0); +extern s32 func_8016F0AC(); +extern s32 D_8018BD7C; +extern void func_8016F250(void); +extern void func_8016F288(void); +extern void func_8016F2A8(void); +extern void func_8016F2C8(void); +extern void func_8016F2EC(void); +extern void func_8016F30C(void); +extern void func_8016F330(void); +extern void func_8016F350(void); +extern void func_8016F374(void); +extern void func_8016F388(void); +extern void func_8016F398(void); +extern s32 func_8016F44C(s32 a0); +extern void func_8016F470(s32 a0); +extern s32 func_8016F410(s32 a0); +extern void func_80175414(s32 _arg0); +extern s32 func_8016F4C4(s32); +extern s32 func_8016F494(s32 a0); +extern void func_8016F0E4(void); +extern s32 func_8016F4C4(s32 param_1); +extern void func_8016F4F4(void); +extern void func_801719A4(int a0, int a1); +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); +extern void *D_8011F738; +extern void func_8016F4FC(void *a0); +extern void func_8014708C(void *a0); +extern void func_8016F540(void *a0); +extern void func_8016F578(s32 *a0); +extern void func_8016F5B0(void *a0); +extern void func_80147060(u8 *a0); +extern void func_8016F5E0(u8 *a0); +extern void func_8016F610(void *a0); +extern void func_8016F648(void *a0); +extern void func_8016F680(void *a0); +extern void func_8016F6B0(void *a0); +extern void (*D_8018BDF4[])(void); +extern void func_8016F6E0(void *a0); +extern s32 func_80171990(u8 *a0); +extern void func_8016F764(void *a0); +extern void func_8016F71C(u8 *a0); +extern void (*D_8018BDFC[])(void); +extern void func_8016F798(void *a0); +extern void func_8016F804(void *a0); +extern void func_8016F7D4(u8 *a0); +extern void func_80171928(void *); +extern void (*D_8018BE04[])(void); +extern void func_8016F834(void *a0); +extern void func_8016F8AC(u8 *a0); +extern void func_8016F870(u8 *a0); +extern void func_80172358(u8 *a0, u8 *a1); +extern void (*D_8018BE0C[])(void); +extern void func_8016F8E4(void *a0); +extern void func_8016F95C(void *a0); +extern void func_8016F920(u8 *a0); +extern s32 func_80171CC4(void *a0, void *a1); +extern s32 func_80171D1C(void *a0, void *a1, s32 a2); +extern u16 D_8011F73E; +extern void (*D_8018BE14[])(void); +extern void func_8016F9C4(void *a0); +extern void func_80171B44(s32 *a0); +extern void func_8016FA44(s32 a0); +extern void func_8016FA00(s32 a0); +extern s32 func_80171C64(s32 a0, s32 a1); +extern void (*D_8018BE1C[])(void); +extern void func_8016FA84(void *a0); +extern void func_8016FB10(void *a0); +extern void func_8016FAC0(u8 *a0); +extern void func_8016FB50(void *a0); +extern void (*D_8018BE28[])(void); +extern void func_8016FB7C(void *a0); +extern void func_8016FC24(); +extern void func_8016FBB8(s32 a0); +extern s32 func_80171B4C(s32 a0, s32 a1); +extern void func_8016FC24(s32 a0); +extern void func_8016FC64(void *a0); +extern void (*D_8018BE34[])(void); +extern void func_8016FC90(void *a0); +extern void func_8016FD08(u8 *a0); +extern void func_8016FCCC(u8 *a0); +extern s32 func_80172658(s32 *a0); +extern void func_8016FD08(u8 *s0); +extern void func_8016FD7C(s32 *a0); +extern void (*D_8018BE40[])(void); +extern void func_8016FDB4(void *a0); +extern void func_8016FE2C(u8 *a0); +extern void func_8016FDF0(u8 *a0); +extern void func_8016FE2C(u8 * a0); +extern s32 func_8016FE78(s32 *a0); +extern s32 func_80172664(s32 *a0); +extern void func_8016FED0(s32 *a0); +extern void (*D_8018BE50[])(void); +extern void func_8016FF30(void *a0); +extern void func_8016FFA8(u8 *a0); +extern void func_8016FF6C(u8 *a0); +extern void (*D_8018BE60[])(void); +extern void func_8016FFDC(void *a0); +extern void func_80170068(u8 *a0); +extern void func_80170018(u8 *a0); +extern void func_801700B8(u8 *a0); +extern void func_80170100(u8 *a0); +extern void (*D_8018BE68[])(void); +extern void func_80170150(void *a0); +extern void func_801701C8(u8 *a0); +extern void func_8017018C(u8 *a0); +extern void func_801701C8(u8 * a0); +extern void (*D_8018BE70[])(void); +extern void func_80170240(void *a0); +extern void func_801702B8(s32 a0); +extern void func_8017027C(u8 *a0); +extern s16 func_80171AB0(s32 a0, void *a1); +extern void (*D_8018BE78[])(void); +extern void func_801702FC(void *a0); +extern void func_80170374(u8 *a0); +extern void func_80170338(u8 *a0); +extern s32 func_8014C168(s32 *a0, s32 a1); +extern void func_80170374(u8 * a0); +extern void (*D_8018BE80[])(void); +extern void func_801703E0(void *a0); +extern void func_8017044C(u8 *a0); +extern void func_8017041C(u8 *a0); +extern void func_8017044C(u8 * a0); +extern void (*D_8018BE88[])(void); +extern void func_801704B0(void *a0); +extern void func_8017051C(void *a0); +extern void func_801704EC(u8 *a0); +extern void (*D_8018BE90[])(void); +extern void func_80170548(void *a0); +extern void func_801705C0(u8 *a0); +extern void func_80170584(u8 *a0); +extern void func_801705C0(u8 * a0); +extern void (*D_8018BE98[])(void); +extern void func_801705F8(void *a0); +extern void func_80170670(void *a0); +extern void func_80170634(u8 *a0); +extern void func_8012A568(void (*a0)(void)); +extern void (*D_8018BEA0[])(void); +extern void func_801706AC(void *a0); +extern void func_80170718(void *a0); +extern void func_801706E8(u8 *a0); +extern void func_80129FF4(void); +extern void (*D_8018BEA8[])(void); +extern void func_80170748(void *a0); +extern void func_801707D4(void *a0); +extern void func_80170784(u8 *a0); +extern s32 func_80174ED4(void); +extern void (*D_8018BEB0[])(void); +extern void func_80170810(void *a0); +extern void func_801708B0(void *a0); +extern u8 D_800D5DA8; +extern void func_8017084C(s32 a0); +extern u8 D_800D5A34[]; +extern void func_80170AD8(void *a0); +extern void func_80171904(s32 a0); +extern void func_80170B48(int a0); +extern void func_80170928(void); +extern u8 D_800D59EC[]; +extern void func_80170970(void); +extern u8 D_800D599C[]; +extern void func_801709B8(void); +extern u8 D_800D5934[]; +extern void func_80170A00(void); +extern void func_80170A48(void); +extern u8 D_800D5DC0[]; +extern void func_80170A90(void); +extern void (*D_8018BEB8[])(void); +extern void func_80170B14(int a0); +extern void func_80170B90(u8 *a0); +extern void (*D_8018BEC0[])(void); +extern void func_80170BD8(void *a0); +extern void func_80170C44(u8 *a0); +extern void func_80170C14(u8 *a0); +extern void (*D_8018BEC8[])(void); +extern void func_80170C74(void *a0); +extern s32 func_8017197C(u8 *a0); +extern void func_80170CF0(void *a0); +extern void func_80170CB0(u8 *a0); +extern void (*D_8018BED0[])(void); +extern void func_80170D68(void *a0); +extern void func_80170DE0(u8 *a0); +extern void func_80170DA4(u8 *a0); +extern s32 D_8011F73C; +extern s32 D_8011F740; +extern void func_801718AC(void *a0); +extern void func_80170DE0(u8 * _arg0); +extern void (*D_8018BED8[])(void); +extern void func_80170E34(void *a0); +extern void func_80170EAC(u8 *a0); +extern void func_80170E70(u8 *a0); +extern int func_800D0F8C(int a0); +extern void func_80170EAC(u8 * _arg0); +extern void (*D_8018BEE0[])(void); +extern void func_80170EFC(void *a0); +extern void func_80170F74(void *a0); +extern void func_80170F38(u8 *a0); +extern void (*D_8018BEE8[])(void); +extern void func_80170FB0(void *a0); +extern void func_80171028(void *a0); +extern void func_80170FEC(u8 *a0); +extern void (*D_8018BEF0[])(void); +extern void func_80171064(void *a0); +extern void func_801710DC(u8 *a0); +extern void func_801710A0(u8 *a0); +extern u16 D_8011F73A; +extern void func_801710DC(u8 * arg0); +extern void (*D_8018BEF8[])(void); +extern void func_80171120(void *a0); +extern void func_8017118C(u8 *a0); +extern void func_8017115C(u8 *a0); +extern void func_80142454(s32 a0); +extern void func_8017118C(u8 * a0); +extern void (*D_8018BF00[])(void); +extern void func_801711C0(void *a0); +extern void func_80171238(void); +extern void func_801711FC(u8 *param_1); +extern void (*D_8018BF08[])(void); +extern void func_80171260(void *a0); +extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80171384(void *a0); +extern void (*D_8018BF10[])(void); +extern void func_801714E4(void *a0); +extern void func_8017162C(void *a0); +extern void func_80171520(s32 a0); +extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); +extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); +extern u8 D_800A5E94; +extern u8 D_800A5E95; +extern u8 D_800A5E96; +extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); +extern int func_800D0FE0(int a0); +extern void func_801717A0(void *a0); +extern void func_8013E588(void *a0); +extern void func_801717F4(void *a0); +extern void func_80171824(void *a0); +extern void func_80171854(void *a0); +extern void func_80171884(void); +extern void func_80171A1C(u8 *a0); +extern void func_80171928(void * a0); +extern void func_8017196C(s32 *a0, s8 a1); +extern void func_80171A04(s32 *a0); +extern void func_80171A10(s32 *a0); +extern void func_80171A34(s32 *a0, s8 a1); +extern s32 func_80171A44(u8 *a0); +extern s32 func_80171A58(u8 *a0); +extern s32 func_80171A6C(u8 *a0); +extern void func_80171A80(s32 *a0, s32 a1); +extern s32 func_80171A88(s32 a0); +extern s16 func_80171AB0(s32 param_1, void * _arg1); +extern void func_80171B10(void *a0); +extern void func_80171EC8(s32 a0); +extern s32 func_80171C64(s32 param_1, s32 param_2); +extern s32 func_80171D78(s32 a0, s32 a1); +extern int func_8017250C(short *a0, short *a1); +extern s32 func_80171CC4(void * a0, void * a1); +extern s32 func_80171FFC(short *a0, short *a1, s32 a2); +extern s32 func_80171D1C(void * a0, void * a1, s32 a2); +extern s32 func_8017248C(s32 a0, s32 a1); +extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_80047948(s32 a0); +extern s32 func_8004787C(s32 a0); +extern void func_80172170(s32 a0, s32 a1); +extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); +extern void func_801722CC(s32 *a0); +extern void func_80172304(s32 *a0); +extern void func_80172310(u8 *a0); +extern void func_801723C4(s32 param_1, s32 param_2); +extern void func_80161C24(s32, s32); +extern void func_80172414(s32 a0); +extern s32 func_801724EC(s32 a0); +extern s32 func_8017248C(s32 arg0, s32 arg1); +extern s32 func_80013450(s32); +extern s32 func_80172560(u8 *a0, u8 *a1); +extern s32 func_8017261C(u8 *a0); +extern s32 func_80172644(u8 *a0); +extern s32 func_80172670(s32 *a0); +extern s32 func_80172688(s32 *a0); +extern s32 func_80172694(s32 *a0); +extern s32 func_801726A0(s32 *a0); +extern s32 func_801726AC(s32 *a0); +extern s32 func_801726B8(s32 *a0); +extern s32 func_801726C4(s32 *a0); +extern s32 func_80172760(s32 a0); +extern s32 func_80174650(s32); +extern void (*D_80127088)(void); +extern s32 D_801270BC; +extern void func_801726D0(void * _arg0); +extern void func_80172710(void); +extern void func_80174684(void *); +extern void func_80172738(void); +extern s16 D_80126B30; +extern s32 func_801727D0(void *a0); +extern void func_80172780(void *a0); +extern void func_80172844(u8 *a0); +extern void func_8017280C(u8 *a0); +extern void func_8017288C(void); +extern s32 func_801728E4(void *a0); +extern void func_80172894(void *a0); +extern void func_80172958(u8 *a0); +extern void func_80172920(u8 *a0); +extern s16 D_80126B36; +extern void func_80172958(u8 * a0); +extern void func_801729A8(void); +extern s32 func_801729F0(void *a0); +extern s16 D_80126B34; +extern s16 D_80126B32; +extern void func_801729B0(s32 a0); +extern void func_80172A8C(void *a0); +extern void func_80172A2C(int param_1); +extern void func_80172ACC(u8 *a0); +extern void func_80172B0C(void); +extern s32 func_80172B44(void *a0); +extern void func_80172B14(s16 a0); +extern s32 D_801150F8; +extern void func_80172BC8(void *a0); +extern void func_80172B80(u8 *a0); +extern void func_80172C48(void); +extern void (*D_8018BF54[])(void); +extern void func_80172CA0(void *a0); +extern void func_80172D14(u8 *a0); +extern void func_80172CDC(u8 *a0); +extern void func_80172D14(u8 * a0); +extern void func_80172D60(void); +extern s32 D_80127508; +extern s32 func_80172DAC(void *a0); +extern void func_80172D68(s32 a0); +extern void func_80172E20(u8 *a0); +extern void func_80172DE8(u8 *a0); +extern void func_80172E20(u8 * a0); +extern void func_80172E8C(void); +extern void func_8017303C(void *); +extern void func_80172E94(void); +extern void func_80172ED4(void); +extern void func_80172EFC(void); +extern void func_80172F24(void); +extern u8 D_800D47F4[]; +extern void func_80172F4C(void); +extern void func_80172F9C(void); +extern u8 D_800D5C6C[]; +extern void func_80172FEC(void); +extern s32 func_80173078(void *a0); +extern void func_8017303C(void * a0); +extern void func_801730FC(struct S801730FC *a0); +extern void func_801730B4(s32 a0); +extern void func_8017316C(void); +extern s32 func_8017319C(void *a0); +extern void func_80173174(void); +extern u8 D_800D5AA0[]; +extern void func_80173220(void *a0); +extern void func_801731D8(s32 *a0); +extern M2C_UNK D_8018BF18; +extern void func_80173220(void * arg0); +extern void func_80173294(void); +extern void func_801732C4(); +extern void func_8017329C(void); +extern void func_801732C4(s32 *a0); +extern void func_8017331C(); +extern void func_801732F4(void); +extern void func_8017331C(s32 *a0); +extern void func_80173374(); +extern void func_8017334C(void); +extern void func_80173374(s32 *a0); +extern void func_801733A4(void); +extern void func_801733CC(s32 a0); +extern void func_801734BC(s32 a0, s32 a1); +extern s16 D_80126B3E; +extern void func_80173460(s32 a0, s32 a1); +extern void func_801734BC(s32 arg0, s32 _unused1); +extern void (*D_8018BF84[])(void); +extern void func_80173544(void *a0); +extern void func_801735B8(u8 *a0); +extern void func_80173580(u8 *a0); +extern s16 D_80126B40; +extern void func_801735EC(void *a0); +extern void func_80173648(u8 *a0); +extern void func_801736A8(void); +extern s32 func_8014C118(void *a0, s32 a1, s32 a2); +extern s32 func_801736FC(void *a0); +extern void func_801736B0(s32 a0, s32 a1); +extern void func_80173770(u8 *a0); +extern void func_80173738(u8 *a0); +extern void func_801723C4(s32 a0, s32 a1); +extern void func_801737B0(void); +extern s32 func_801737E8(void *a0); +extern void func_801737B8(s16 a0); +extern void func_8017385C(u8 *a0); +extern void func_80173824(u8 *a0); +extern void func_801738D4(void); +extern s32 func_8017390C(void *a0); +extern void func_801738DC(s16 a0); +extern void func_80173980(u8 *a0); +extern void func_80173948(u8 *a0); +extern void func_801739D8(u8 *a0); +extern void func_80173A20(void); +extern s32 D_8012750C; +extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); +extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); +extern void (*D_8018BFC0[])(void); +extern void func_80173B4C(void *a0); +extern void func_80173BC0(u8 *a0); +extern void func_80173B88(u8 *a0); +extern void func_80173C64(u8 *a0); +extern void func_80173E1C(s32 a0); +extern s16 D_80126938; +extern s16 D_80126B3A; +extern void func_800D128C(s32, s32); +extern void func_80174158(s32 a0); +extern void func_8002A088(s32); +extern void func_8002A2D4(s32); +extern void func_8002A544(s32); +extern void func_8002A7B4(s32); +extern s32 func_80174188(s32 a0); +extern void func_801741A8(s32 a0); +extern s32 func_800D0EC4(void); +extern void func_800D0F0C(s32, s32); +extern void func_80145EE8(s32); +extern void func_80173EF8(void *param_1); +extern s32 func_8014BCEC(s32, s32); +extern void func_801741A8(s32 _arg0); +extern s16 D_80126B3C; +extern s16 D_8011F9C8; +extern void func_801741EC(u8 *a0); +extern void func_80174274(void); +extern s32 func_801742A4(void *a0); +extern void func_8017427C(void); +extern void func_80174318(u8 *a0); +extern void func_801742E0(u8 *a0); +extern void func_80174354(void); +extern s32 func_80174384(void *a0); +extern void func_8017435C(void); +extern void func_801743F0(u8 *a0); +extern void func_801743C0(u8 *a0); +extern void func_801743F0(u8 * a0); +extern void func_80174430(void); +extern s32 func_80174474(void *a0); +extern void func_80174438(s32 a0); +extern void func_801744E0(u8 *a0); +extern void func_801744B0(u8 *a0); +extern void func_80174524(void); +extern void func_80174554(); +extern void func_8017452C(void); +extern void func_80174554(s32 arg0); +extern void func_801745AC(); +extern void func_80174584(void); +extern void func_801745AC(s32 *a0); +extern void func_80174604(void); +extern void func_801745DC(void); +extern void func_80174630(void); +extern s32 func_80174650(s32 _arg0); +extern void func_80174674(void); +extern void func_801746A4(void); +extern s32 func_800CF8CC(void); +extern void func_80174714(void); +extern s32 func_80174754(void); +extern s16 func_80174764(void); +extern s16 func_80174774(void); +extern s32 func_801747CC(void *a0); +extern void func_80174784(void); +extern s32 func_801747AC(s32 a0); +extern s32 func_80174808(u8 *a0); +extern void func_8017481C(void); +extern s32 func_80174888(void *a0); +extern void func_80174824(void); +extern void func_8017484C(s32 a0); +extern void func_801748C4(s32 a0); +extern void func_801748E4(void); +extern void func_8012A018(s32 a, s32 b); +extern s32 func_8017496C(void *a0); +extern s32 D_80126954; +extern s32 D_80126950; +extern s32 D_8012695C; +extern s16 D_80126968; +extern s16 D_8012696A; +extern s16 D_8012696C; +extern s16 D_80126976; +extern s16 D_80126978; +extern s16 D_8012697A; +extern void func_801748EC(void); +extern s32 func_801749C8(); +extern s32 func_801749A8(s32 a0); +extern void func_80174BBC(void *a0); +extern void func_8012A0E0(void); +extern void func_80174BF4(void *a0); +extern void (*D_8018C018[])(); +extern void func_80174BF4(void * arg0); +extern s32 func_80174CB0(s32, s32); +extern s32 func_80174C60(s32 a0); +extern void func_80174C80(s32 a0); +extern s32 D_8012697C; +extern u16 D_80126980; +extern s32 func_80174F28(void *a0); +extern void func_80174E9C(s32 a0); +extern void func_80174EF0(s32 a0, s16 a1); +extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); +extern void func_80174F64(u8 *a0); +extern void func_80174FBC(u8 *a0); +extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); +extern void func_80175184(s32 *a0); +extern void func_80175114(s32 *a0); +extern void func_80175184(); +extern void func_80175150(s32 *a0); +extern void (*D_8018C028[])(void*); +extern s32 func_80175268(s32); +extern void func_80175184(s32* arg0); +extern s32 func_80175218(void *a0); +extern void func_801751D8(void *a0); +extern void (*D_8018C030[])(s32); +extern s32 func_80175218(void * param_1); +extern void func_801752BC(s32 *a0); +extern u8 D_8011F7A8; +extern u8 D_8011F7A9; +extern u8 D_8011F7AD; +extern u8 D_8011F7AE; +extern void func_80175494(void); +extern void (*D_8018C198[])(); +extern s32 func_801758FC(void); +extern s32 func_80175820(void); +extern s32 func_801759D8(void); +extern void func_8017553C(s32 *param); +extern void func_801757A0(s32 a0); +extern short D_800B9A02; +extern void func_80175590(void *arg0); +extern s16 D_800B9A02; +extern void func_801757A0(s32); +extern void func_80175624(void *a0); +extern void func_801757E0(int); +extern void func_80175668(void); +extern void (*D_8018C1A4[])(); +extern void func_80175690(s32 *param); +extern void func_80175DA8(s32 a0); +extern void func_80175AB8(s32 a0); +extern void func_80176144(s32 a0); +extern void func_801756E4(s32 arg0); +extern void func_80175798(void); +extern void func_80176734(s32 a0); +extern void func_80176218(s32 a0); +extern void func_80176D00(s32 a0); +extern void func_801757E0(s32 a0); +extern s32 func_80178004(s32 a0, s32 a1, s32 a2); +extern u8 D_8011F7B1; +extern u16 D_8011F7B4; +extern u16 D_8011F7B6; +extern s16 D_8011F81E; +extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern u32 func_801783D0(s32 a0, s32 a1); +extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern u16 D_8011F82C; +extern u16 D_8011F82A; +extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); +extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80176FF4(s32 a0); +extern u16 D_8011F830; +extern u16 D_8011F82E; +extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); +extern void func_80177340(s32 a0); +extern u8 D_8011F837; +extern u8 D_8011F7F0; +extern u8 D_8011F7AB; +extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); +extern void func_801776EC(u8 *a0); +extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); +extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); +extern void func_80177F84(s32 param_1, s32 param_2); +extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); +extern M2C_UNK D_801C569C; +extern void func_80178438(u16 *arg0); +extern void func_801787D4(void); +extern void func_8012A908(void); +extern void func_8017869C(s32 a0); +extern void func_80130D0C(s32 a0); +extern void func_8013E370(void); +extern s32 D_8011DB08; +extern void func_8017849C(void); +extern void func_8013E4B4(void); +extern s16 D_801270C4; +extern s32 D_801274D8; +extern s16 D_801270C2; +extern u8 D_801270C6; +extern u8 D_801270C7; +extern s32 D_801274DC; +extern s32 D_801274E0; +extern void func_80178608(void); +extern void func_80178744(s32 a0, s32 a1); +extern void func_80178840(); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern void func_8012E8E0(s32 a0, s32 a1); +extern void func_8012B2CC(s32 a0); +extern s32 func_801788B8(s32 arg0, s32 arg1); +extern s32 func_801789AC(s32 arg0); +extern s16 D_801C7FB8; +extern int func_80178970(void); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern s32 func_80178B70(s32 param_1, s32 param_2); +extern void func_80178BB8(s32 a0, s32 a1); +extern s32 func_80178BF8(); +extern s32 D_801C6A28; +extern short D_801C802C; +extern void func_80178CBC(s32 arg0, s32 arg1); +extern void func_80178D18(void); +extern s32 func_80178D40(s32 arg0, s32 arg1); +extern void func_80179B28(s32 a0); +extern void func_80179B74(u16 *p); +extern void func_80179D30(u16 *a0); +extern void func_80179D78(u16 *a0); +extern void func_80179DCC(short a0); +extern void func_80179DF8(void); +extern void func_80179E1C(short a0); +extern void func_80179E48(s16 a0); +extern void func_80179E74(s16 a0); +extern void func_80179EA0(u16 *a0); +extern void func_80179EE8(short a0); +extern void func_80179F14(s16 a0, s16 a1); +extern void func_80179F44(void); +extern void func_80179F6C(short a0); +extern void func_80179F98(u16 *a0); +extern void func_80179FEC(u16 *a0); +extern void func_8017A040(u16 *a0); +extern s32 D_801C6E54; +extern void func_8017A094(s32 arg0); +extern void func_8017A0C4(s32 arg0); +extern void func_8017A0F4(void); +extern void func_8017A11C(void); +extern s32 D_801C6E7C; +extern void func_8017A144(s32 a0); +extern void func_8017A180(void); +extern void func_8017A1A8(void); +extern void func_8017A1D0(void); +extern void func_8017A1F8(void); +extern void func_8017A220(void); +extern void func_8017A248(void); +extern void func_8017A270(void); +extern void func_8017A298(void); +extern void func_8017A2C0(void); +extern void func_8017A2E8(void); +extern void func_8017A310(void); +extern void func_8017A338(void); +extern void func_8017A360(void); +extern void func_8017A388(void); +extern s16 D_801C6E38; +extern s32 func_8017A3B0(void); +extern short D_801C6E74; +extern short D_801C6E70; +extern int func_800D0CA0(int); +extern int func_8001AAA0(void); +extern int func_800D0CE0(void); +extern int func_8017A3D8(void); +extern void func_80172310(u8*); +extern void func_80172780(void*); +extern void func_80172894(void*); +extern void func_801729B0(s32); +extern void func_80172B14(s16); +extern void func_80172C50(u16 *); +extern void func_80172D68(s32); +extern void func_801733FC(s16, u16 *); +extern void func_80173460(s32, s32); +extern void func_801734BC(s32, s32); +extern void func_801736B0(s32, s32); +extern void func_801737B8(s16); +extern void func_801738DC(s16); +extern void func_80173A28(s32, s32, s32, s32, s32, s32); +extern void func_80174438(s32); +extern void func_8017A4AC(void); +extern s32 func_8017AD0C(s32 arg0); +extern s32 func_8017AD0C(s32); +extern s32 func_8017ADE8(s32 a0); +extern s32 func_8017AE08(void); +extern void func_8017B0E4(int param_1, int param_2); +extern s16 D_801C6E3C; +extern u16 D_801C6EBC; +extern u16 D_801C6EBE; +extern u16 D_801C6EC0; +extern void func_8017B1D8(void); +extern s32 func_8017B238(s32 param_1, s32 param_2); +extern s32 func_8017B368(s32 param); +extern s32 func_8017B614(s32 param_1, s32 param_2); +extern s32 D_80114F30; +extern s32 D_80114F34; +extern s32 D_80114F38; +extern s32 D_80114F24; +extern s32 D_80114F28; +extern s32 D_80114F2C; +extern u8 D_8012694C; +extern s16 D_801C6EB4; +extern s16 D_801C6EB6; +extern s16 D_801C6EB8; +extern s16 D_801C6EAC; +extern s16 D_801C6EAE; +extern s16 D_801C6EB0; +extern void func_8017B7A8(void); +extern s16 D_801C6ECC; +extern s16 D_801C6ECE; +extern s16 D_801C6ED0; +extern s16 D_801C6ED4; +extern s16 D_801C6ED6; +extern s16 D_801C6ED8; +extern void func_8017B824(void); +extern void func_8017B880(void); +extern s32 func_8017B8E8(s32 src); +extern short D_801C6EC4; +extern short D_801C6EC6; +extern short D_801C6EC8; +extern void func_8017B940(void); +extern void func_8012F214(s32 a0, s32 a1, s32 a2); +extern void func_80049CAC(s32 a0, s32 a1); +extern void func_8004914C(void *a0); +extern void func_800491AC(void *a0); +extern void RotTransSV(void *a0, void *a1, void *a2); +extern SV4 D_801C6E5C; +extern SV4 D_801C6E64; +extern void func_8017BA3C(s32 param_1, s32 param_2); +extern s32 func_8017BB34(s32 param_1, s32 param_2); +extern void (*D_801C6E84[10])(int); +extern void func_8017BC38(int param_1); +extern void func_8017B0E4(int, int); +extern void func_8017BCA0(int param_1); +extern void func_8012A4BC(void); +extern void func_8017BCF4(int param_1); +extern void (*D_801C6E80)(void); +extern void func_8017BD50(int param_1); +extern void (*D_8018C380[])(void); +extern void func_8017BE60(void *a0); +extern void func_8017BE9C(void); +extern void func_8017BEA4(void); +extern void func_8017BEAC(void); +extern void func_8017BEB4(void); +extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3); +extern void (*D_8018C3E0[])(void); +extern void func_8017C114(void *a0); +extern void func_8017C8D0(s32 arg0); +extern void (*D_8018C498[])(void); +extern void func_8017D7B0(void *a0); +extern void func_8017D908(void); +extern void func_8017D910(void); +extern s32 D_8018C490; +extern s32 func_8017D938(void); +extern s32 func_8017D954(void); +extern void func_8017DE28(s32 p); +extern void (*D_8018C530[])(void); +extern void func_8017DFF0(void *a0); +extern void (*D_80192258[])(void); +extern void func_8017E620(void *a0); +extern s32 func_8017E6A0(void); +extern void (*D_80192260[])(void); +extern void func_8017E6C4(void *a0); +extern s32 func_800167F0(s32 arg); +extern void func_800CFBCC(s32 arg); +extern s32 func_8017E7BC(void); +extern s32 D_8019226C; +extern void func_8017E7F4(void); +extern void func_8017E81C(void); +extern void func_8017E844(s32 a0); +extern void func_8012A100(s8 a0); +extern void func_8017E9B4(void); +extern void (*D_8019227C[])(void); +extern void func_8017E9D4(void *a0); +extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); +extern void func_8017EAE4(s32 param_1, s16 *param_2); +extern void (*D_80192568[])(void); +extern void func_801805D0(void *a0); +extern void (*D_801927B8[])(void); +extern void func_80180DEC(void *a0); +extern void Square0(s32 *a0, s32 *a1); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern u8 D_8019292C[]; +extern u8 *D_801C7E54; +extern void func_80181CDC(Obj1CDC *obj); +extern void (*D_80192934[])(void); +extern void func_8012B370(int a0); +extern void func_801828E0(s32 param_1); +extern void (*D_80192990[])(void); +extern u8 D_80192924[]; +extern void func_801829F0(s32 param_1); +extern void (*D_801929DC[])(void); +extern void func_80182AC0(void *a0); +extern void (*D_80192A28[])(void); +extern void func_80182BD0(Obj1CDC *obj); +extern void func_8012A828(s32 a0, void *a1); +extern void func_80182CA0(s32 p); +extern void func_8012CBCC(s32 a0); +extern void func_8012C218(void *a0); +extern void func_8017ECE4(void); +extern s32 func_80143C74(s32 a0, s32 a1); +extern void func_80182E78(s32 a0); +extern void func_80182FD4(void *a0); +extern void (*D_80192B68[])(void); +extern void func_80183238(void *a0); +extern void func_80183274(s32 a0); +extern void func_8018340C(void *a0); +extern u8 D_80192D4C[]; +extern u8 D_80192D4E[]; +extern u8 D_80192D50[]; +extern void (*D_80192DC4[])(void *); +extern void func_80183C84(void *a0); +extern void func_80183D5C(s32 arg0); +extern void func_80184084(s32 a0); +extern void func_80184100(u8 *a0, s8 a1); +extern void (*D_80192DE0[])(void); +extern void func_801841A8(void *a0); +extern void func_8012AD44(s32 *a0, s16 a1); +extern void func_801841E4(s32 *a0); +extern void func_80184214(void *a0); +extern void func_8018423C(void); +extern void (*D_80192DE8[])(void); +extern void func_8018425C(void *a0); +extern void (*D_80192DF8[])(void); +extern void func_80184298(void *a0); +extern void (*D_80192E34[])(void); +extern void func_801842D4(void *a0); +extern void (*D_80192E50[])(void); +extern void func_80184310(void *a0); +extern void (*D_80192E6C[])(void); +extern void func_8018434C(void *a0); +extern void (*D_8019426C[])(void); +extern void func_80184388(void *a0); +extern void func_801843C4(s32 param_1); +extern s32 func_8012BD14(s32 a0); +extern void func_80184934(s32 param_1); +extern void func_80184988(s32 param_1); +extern void func_8002959C(void); +extern u8 D_80194234[]; +extern u8 D_80194244[]; +extern void func_801844AC(s32 param_1); +/* ==== end §8b carried decl layer ==== */ + + +#include "common.h" + +/* func_8018473C — ov_SC05_010 / ov_SC05_010_jr_80181CDC (126 ins) + * + * A 5-way jump-table state machine on the entity's u16 state at 0x34. + * Every symbol below is spelled from + * asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC/func_8018473C.s. + * + * DECLARATION SPELLINGS (law 2 — copied from THIS TU, not invented): + * func_8012EFB8 -> `void (s32)` at line 329, cast at use (house style, line 4088/4156) + * func_80178D18 -> `void (void)` at line 2536, cast at use (house style, line 3683/3710) + * D_80126B58 -> `extern s32` + `&` at line 5767/5770 + * + * FRAME (0x28): + * 0x00..0x0F outgoing args · 0x10 u16 in3[3] · 0x18 s16 out2[2] (§193-I 8-byte + * stride) · 0x20 s0 · 0x24 ra. + * + * WHY THE GOTOS (the whole residual — cookbook §162 / jump.c:1969-1998). + * The |out2[1]| test is NOT an if/else abs. Written as + * if (v >= 0) { if (v < 0xA1) break; } else { v = -v; if (v < 0xA1) break; } + * both arms expand to `slti; beqz L; j TAIL; L:` — jump.c's branch-around-jump + * INVERSION rewrites each to `bnez TAIL` and leaves the then-arm ending in a + * simplejump `j ENDIF`. `find_cross_jump(insn, JUMP_LABEL, 1, …)` then merges + * the 2-insn `[slti; bnez TAIL]` suffix (minimum=1 because the else-arm FALLS + * THROUGH into ENDIF), collapsing both arms into one symmetric abs — 5 insns + * short, and unreachable from C by any spelling of the comparison. + * The target's two arms carry OPPOSITE polarities (`beqz -> docall` vs + * `bnez -> tail`), so they share no common suffix and cannot be merged. Only a + * MIXED-polarity goto chain emits that: `if (v >= 0xA1) goto docall;` inverts to + * `beqz docall`, while `if (v < 0xA1) break;` inverts to `bnez tail`. + */ + +extern s32 func_8012BEE8(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_8012EFB8(s32 a0); /* TU spelling (line 329) — cast at use */ +extern void func_800D1724(s32 a0); +extern s32 func_801789AC(s32 arg0); +extern void func_80178D18(void); /* TU spelling (line 2536) — cast at use */ +extern s32 D_80126B58; /* TU spelling (line 5767) */ +extern s32 D_801941E8[]; +extern u8 D_8019222C; + +void func_8018473C(void *a0) { + u16 in3[3]; /* 0x10 */ + s16 out2[2]; /* 0x18 */ + u8 *wk = (u8 *)&D_80126B58; + s32 v; + s32 t; + + switch (*(u16 *)((s32)a0 + 0x34)) { + case 0: + if (func_8012BEE8((s32)a0) != 0) { + *(u16 *)((s32)a0 + 0x34) += 1; + func_8002D4C8(0xC61, 0); + } + break; + case 1: + *(s32 *)((s32)a0 + 0x1C) += 1; + if (*(s32 *)((s32)a0 + 0x1C) >= 0xB) { + *(s32 *)((s32)a0 + 0x1C) = 0x20; + *(u16 *)((s32)a0 + 0x34) += 1; + break; + } + t = func_80132EF4((s32)a0, 0x7D); + if (t != 0) { + *(u16 *)(t + 0xA) -= *(s32 *)((s32)a0 + 0x1C) << 6; + *(u16 *)(t + 0x34) = D_801941E8[*(s32 *)((s32)a0 + 0x1C)]; + *(s16 *)(t + 0x36) = 0xA - *(s32 *)((s32)a0 + 0x1C); + } + break; + case 2: + if (func_8012BEE8((s32)a0) != 0) { + *(u16 *)((s32)a0 + 0x34) += 1; + } + break; + case 3: + *(s32 *)(wk + 8) += -0x300000; + in3[0] = *(u16 *)(wk + 6); + in3[1] = *(u16 *)(wk + 0xA); + in3[2] = *(u16 *)(wk + 0xE); + ((void (*)(u16 *, s16 *))func_8012EFB8)(in3, out2); + v = out2[0]; + if (v < 0) { + v = -v; + } + if (v >= 0xC9) { + goto docall; + } + v = out2[1]; + if (v < 0) { + goto neg; + } + if (v >= 0xA1) { + goto docall; + } + break; + neg: + v = -v; + if (v < 0xA1) { + break; + } + docall: + func_800D1724((s32)&D_8019222C); + *(u16 *)((s32)a0 + 0x34) += 1; + break; + case 4: + *(s32 *)(wk + 8) += -0x300000; + break; + } + v = func_801789AC((s32)a0); + if (v == 1) { + ((void (*)(s32))func_80178D18)((s32)a0); + } +} + + + +extern void func_800183E0(s32 a0); + +void func_80184934(s32 param_1) { + + extern u8 D_801C4148[]; + /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every + LATER function in this TU, which blocks a byte-true decl of a different type. + Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ + extern u16 D_800B99DA; + extern u8 D_801941CC[]; + *(u8 *)(*(s32 *)(param_1 + 0xCC) + 0x27) = 0xA3; + func_800183E0((s32)&D_801C4148[D_801941CC[D_800B99DA & 0x1F] * 16]); +} + + + +extern void func_800183E0(s32 a0); + +void func_80184988(s32 param_1) { + + extern u8 D_801C4048[]; + /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every + LATER function in this TU, which blocks a byte-true decl of a different type. + Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ + extern u16 D_800B99DA; + extern u8 D_801941CC[]; + *(u8 *)(*(s32 *)(param_1 + 0xD0) + 0x27) = 0xA4; + func_800183E0((s32)&D_801C4048[D_801941CC[D_800B99DA & 0x1F] * 16]); +} + + + + +extern s32 func_8012C194(void); +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); + +s32 func_801849DC(s32 a0, s32 a1, s16 a2, s16 a3, s32 a4) { + s32 obj; + + obj = func_8012C194(); + if (obj == 0) { + return 0; + } + func_8001CB6C((u8 *)obj, a1, a2, a3); + *(u16 *)(obj + 0x10) = 0xC00; + *(u8 *)(obj + 0x27) = a4; + *(u16 *)(obj + 0x1A) = 0x2D00; + *(u16 *)(obj + 0x18) = 0x2D00; + *(u16 *)(obj + 8) = *(u16 *)(a0 + 6); + *(u16 *)(obj + 0xA) = *(u16 *)(a0 + 0xA); + *(u16 *)(obj + 0xC) = *(u16 *)(a0 + 0xE); + return obj; +} + + +/* func_80184AA4 — SC05_010 "dust-trail / spark line" actor tick. + * + * Frame 0 (state word at +2 == 0) seeds four RNG fields and bumps the state. + * Otherwise it ages the +8 timer by -0x4000 and despawns past -0x4000000; + * else it allocates an 0x80-byte prim block, walks a swept angle (s4) and a + * shrinking radius (s3) and emits up to 8 LINE_F2 segments through + * RotTransPers, chaining them into the OT of the current double buffer. + * + * MATCH notes (P31 t5z): + * - §195-C statement-order gap filling: `s4 += 0x80;` MUST precede `s3 -= 8;` + * or the `lh 0x102($s1)` loses its slot and a load-delay nop appears. + * - The OT base is indexed through the 20-byte OtBlk form + * (`D_800A651C[i].a`), NOT `((s32*)D_800A651C)[i * 5]`: only the struct + * form lets gcc fold the symbol into the load (`lw %lo(sym)($at)`); the + * s32[] form materialises `la` + `addu` (2 extra instructions). + * - The frame-0 `+2` bump is staged through `w` (the SAME local the 0x100 + * angle clamp uses further down). A fresh local there re-orders the block; + * reusing the else-arm's `t` fixes the block but costs the hoisted + * `lui $v1, 0xFC00` in the entry branch's delay slot. + */ +void func_80184AA4(s32 arg0) +{ + extern s32 rand(void); + extern void func_8012C218(void *a0); + extern void *func_80010A08(s32 a0); + extern void func_8004914C(void *a0); + extern void func_800491AC(void *a0); + extern s32 func_80047948(s32 a0); + extern s32 func_8004787C(s32 a0); + extern s32 func_80143C74(s32 a0, s32 a1); + extern void SetLineF2(void *p); + extern s32 RotTransPers(s32 v, s32 sxy, s32 *p, s32 *flag); + extern s32 AddPrim(s32 ot, void *p); + extern u8 D_800AF648; + extern s16 D_800B9A02; + extern struct { s32 a; s32 b[4]; } D_800A651C[]; + + s32 obj; + u8 *db; + u8 *prim; + s32 s3; + s32 s4; + s16 w; + s32 i; + s32 r; + s32 t; + s32 otz; + s32 ot; + s16 cur[3]; + s16 nxt[3]; + s32 pz; + s32 flag; + + obj = arg0; + + if (*(u16 *)(obj + 2) == 0) { + *(u16 *)(obj + 0xFC) = rand() & 0xFFF; + *(u16 *)(obj + 0x102) = (rand() & 0x1F) + 0x30; + *(u16 *)(obj + 0x104) = rand() & 0x3F; + w = *(u16 *)(obj + 2) + 1; + *(u16 *)(obj + 0xFE) = *(u16 *)(obj + 0x102) + 0x2C0; + *(u16 *)(obj + 2) = w; + return; + } + + t = *(s32 *)(obj + 8) - 0x4000; + *(s32 *)(obj + 8) = t; + if (t < -0x4000000) { + func_8012C218((void *)obj); + return; + } + + prim = (u8 *)func_80010A08(0x80); + if (prim == 0) { + return; + } + + db = &D_800AF648; + func_8004914C(db); + func_800491AC(db); + + s3 = *(s16 *)(obj + 0xFE); + s4 = *(s16 *)(obj + 0xFC); + w = *(u16 *)(obj + 0x100) + 0x10; + *(u16 *)(obj + 0x100) = w; + if (w >= 0x401) { + *(u16 *)(obj + 0x100) = 0x400; + *(u16 *)(obj + 0xA) = *(u16 *)(obj + 0xA) - 4; + *(u16 *)(obj + 0xFC) = (*(u16 *)(obj + 0xFC) + 0x200) & 0xFFF; + } else { + *(u16 *)(obj + 0xFE) = *(u16 *)(obj + 0x102) + ((func_80047948(w) * 704) >> 12); + *(u16 *)(obj + 0xFC) = + (*(u16 *)(obj + 0xFC) + (func_8004787C(*(s16 *)(obj + 0x100)) >> 4)) & 0xFFF; + } + + cur[0] = *(u16 *)(obj + 6) + ((s3 * func_80047948(s4)) >> 12); + cur[1] = *(u16 *)(obj + 0xA); + cur[2] = *(u16 *)(obj + 0xE) + ((s3 * func_8004787C(s4)) >> 12); + nxt[1] = cur[1]; + + if (*(s16 *)(obj + 0x104) != 0) { + *(s16 *)(obj + 0x104) = *(s16 *)(obj + 0x104) - 1; + } else { + *(u16 *)(obj + 0x104) = rand() & 0x3F; + r = func_80143C74(obj, 0); + if (r != 0) { + *(u16 *)(r + 6) = cur[0]; + *(u16 *)(r + 0xA) = cur[1]; + *(u16 *)(r + 0xE) = cur[2]; + *(s32 *)(r + 0x10) = -(func_8004787C(s4) << 8); + *(s16 *)(r + 0x16) = -2; + *(s32 *)(r + 0x18) = -(func_80047948(s4) << 8); + } + } + + for (i = 0; i < 8; i++) { + *(u32 *)(prim + 4) = 0xFFFFFF; + SetLineF2(prim); + s4 += 0x80; + s3 -= 8; + if (s3 < *(s16 *)(obj + 0x102)) { + s3 = *(s16 *)(obj + 0x102); + } + nxt[0] = *(u16 *)(obj + 6) + ((s3 * func_80047948(s4)) >> 12); + nxt[2] = *(u16 *)(obj + 0xE) + ((s3 * func_8004787C(s4)) >> 12); + otz = RotTransPers((s32)cur, (s32)(prim + 8), &pz, &flag); + if (otz > 0 && flag >= 0) { + if (RotTransPers((s32)nxt, (s32)(prim + 0xC), &pz, &flag) > 0 && flag >= 0) { + ot = D_800A651C[*(u16 *)&D_800B9A02].a + (otz << 2); + AddPrim(ot, prim); + prim += 0x10; + } + } + cur[0] = nxt[0]; + cur[2] = nxt[2]; + } +} + + +#include "common.h" + +extern u8 *func_8012913C(s32 a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern s32 rand(void); + +/* Per-frame emitter: every 8th tick spawn one type-0x7E particle at a random + * polar offset around the owner, with two randomized 16.16 velocities and a + * randomized downward gravity term. + * + * Matching notes (S54 wave V, second pass): + * - The two `rand() % 4` magnitudes are written HAND-EXPANDED (copy / +3 / + * sra 2 / sll 2 / subu) instead of with the `%` operator. With `%`, + * expand_divmod's own t1 = copy_to_mode_reg(op0) dies BEFORE op0 (the + * `subu` is op0's last use), so cse's make_regs_eqv leaves op0 canonical + * and the compare reads $v0 -- freeing reorg to put the copy in the branch + * delay slot. Writing `m = (rand() % 4) << 16;` in C gives that same RTL + * but allocates the chain to $v0/$v1 and costs a duplicated `sra` in the + * delay slot (+1 insn per block, 119 vs 117). Spelling the chain out with + * a temp `n` whose last use is the SAME insn as `q`'s reproduces the + * canonicalization (`bgez $v0`, `addiu $s0,$v0,3`) and the filled slot. + * - `n` is pinned to $s0: it crosses no call, so global_alloc's find_reg + * hands it the lowest already-used free reg ($v1); the target reuses $s0 + * (which `m` owns and which `n` does not conflict with). Cookbook §17. + * - The `ent+0x2C = a0` store must come AFTER the `ent+0x14` store: it + * lengthens a0's live range just enough to drop its allocno_compare + * priority below `ent`'s, which is what puts a0 in $s2 and ent in $s1. + */ +void func_80184E4C(s32 a0) { + s32 p; + s32 ent; + s32 t; + s32 m; + s32 q; + register s32 n __asm__("$16"); + unsigned int sp10; + + p = *(s32 *)(a0 + 0x20); /* owner's actor */ + *(u16 *)(p + 0x14) = *(u16 *)(p + 0x14) + 0x200; + + *(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) + 1; /* tick counter */ + if ((*(s32 *)(a0 + 0x1C) & 7) != 0) { + return; + } + ent = (s32)func_8012913C(0x7E); /* alloc particle */ + if (ent == 0) { + return; + } + /* polar scatter: angle in [0,0x1000), radius in [0, actor_r*3/512) */ + func_8012B0B4(&sp10, rand() % 0x1000, + rand() % ((*(s16 *)(*(s32 *)(a0 + 0x20) + 0x18) * 3) >> 9)); + t = (s32)sp10; /* packed dx (lo16) / dz (hi16) */ + *(u16 *)(ent + 6) = *(u16 *)(a0 + 6) + t; /* X */ + *(u16 *)(ent + 0xA) = *(u16 *)(a0 + 0xA); /* Y */ + *(u16 *)(ent + 0xE) = *(u16 *)(a0 + 0xE) + (t >> 16); /* Z */ + + /* vel X = +/- (rand() % 4) << 16 */ + q = rand(); + n = q; + if (q < 0) n = q + 3; + n = n >> 2; + n = n << 2; + m = (q - n) << 16; + if ((rand() & 1) == 0) m = -m; + *(s32 *)(ent + 0x10) = m; + + /* vel Z = +/- (rand() % 4) << 16 */ + q = rand(); + n = q; + if (q < 0) n = q + 3; + n = n >> 2; + n = n << 2; + m = (q - n) << 16; + if ((rand() & 1) == 0) m = -m; + *(s32 *)(ent + 0x18) = m; + + /* vel Y = (-12 - rand() % 9) << 16 (0x38E38E39 magic /9) */ + *(s32 *)(ent + 0x14) = -0xC0000 - ((rand() % 9) << 16); + *(s32 *)(ent + 0x2C) = a0; /* owner backref */ +} + + + +extern void (*D_801942B4[])(void); + +void func_80185020(void *a0) { + D_801942B4[*(u16 *)((s32)a0 + 0x2)](); +} + + +#include "common.h" + +/* func_8018505C — ov_SC05_010 / ov_SC05_010_jr_80181CDC (139 ins) + * + * Fresh mass-lane crack (Phase-31 wave V). No banked twin; the head + * (three-s32 Square0 scratch VECTOR on the stack) was read off the + * ALREADY-BANKED func_80181CDC in THIS SAME TU (it uses `LVec1CDC d;` + + * `Square0(&d.vx, &d.vx);`), and the tail (in3/out2 + abs() compares around + * func_8012EFB8) off src/ov_SC04_002/..._jr_8017BEBC.c:func_80184724. + * Both used as READING sources only — every symbol below is spelled from + * asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC/func_8018505C.s. + * + * FRAME (0x38): + * 0x00..0x0F outgoing args + * 0x10 u16 in3[3] (6 bytes -> 8-byte stride, §193-I) + * 0x18 s16 out2[2] (4 bytes -> 8-byte stride) + * 0x20 {s32 vx,vy,vz,pad} d (16 bytes; GTE square scratch — same body + * as the TU's LVec1CDC, kept anonymous to avoid a typedef clash) + * 0x30 s0 / 0x34 ra + * + * OBJECT FIELDS (widths from the load/store widths in the .s): + * 0x06 s16 x 0x0A s16 y 0x0E s16 z + * 0x10 s32 0x14 s32 0x18 s32 + * 0x20 ptr -> sub-object with u16 at 0x10/0x12/0x14 + * 0x2C ptr -> another object (its s16 x/z at 0x06/0x0E) + * 0x30/0x32/0x34 u16 deltas 0x36 s16 state counter + */ + +struct vec; +extern void func_8012931C(struct vec *a0); +extern void func_801292C8(u8 *a0); +extern void func_8012EFB8(s32 a0); /* TU spelling (line 329) — cast at use */ +extern s32 rand(void); + +void func_8018505C(void *a0) { + u16 in3[3]; /* 0x10 */ + s16 out2[2]; /* 0x18 */ + struct { s32 vx, vy, vz, pad; } d; /* 0x20 — same body as the TU's LVec1CDC, + * left ANONYMOUS so banking cannot collide + * with engine_types.h's typedef (§183.1/law 8) */ + s32 v; + void *tgt = *(void **)((s32)a0 + 0x2C); + + d.vx = *(s16 *)((s32)a0 + 0x6) - *(s16 *)((s32)tgt + 0x6); + d.vy = 0; + d.vz = *(s16 *)((s32)a0 + 0xE) - *(s16 *)((s32)tgt + 0xE); + /* The target INLINES the GTE square (lwc2 IR1..IR3 / sqr 0 / swc2 MAC1..MAC3) + * off ONE base register instead of calling Square0 — same idiom already used + * in src/ov_SC03_099/ov_SC03_099_jr_8012ACE0.c:2737. */ + { + s32 *p = &d.vx; + __asm__ __volatile__( + "lwc2 $9, 0(%0)\n" + "lwc2 $10, 4(%0)\n" + "lwc2 $11, 8(%0)\n" + "nop\n" + "nop\n" + "sqr 0\n" + : : "r"(p) : "$9", "$10", "$11", "memory"); + __asm__ __volatile__( + "swc2 $25, 0(%0)\n" + "swc2 $26, 4(%0)\n" + "swc2 $27, 8(%0)\n" + : : "r"(p) : "memory"); + } + + if (*(s16 *)((s32)a0 + 0x36) == 0) { + /* the pointer is re-loaded per statement: each `sh` kills the CSE + * of `*(s32 *)(a0+0x20)` (§193-E), which is why the target has three + * `lw $a0,0x20($s0)`. */ + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x10) += *(u16 *)((s32)a0 + 0x30); + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) += *(u16 *)((s32)a0 + 0x32); + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x14) += *(u16 *)((s32)a0 + 0x34); + + if (d.vx + d.vz > 0x9000) { + *(s32 *)((s32)a0 + 0x14) = 0x18000; + *(s32 *)((s32)a0 + 0x18) = 0; + *(s32 *)((s32)a0 + 0x10) = 0; + *(u16 *)((s32)a0 + 0x36) += 1; + } + } else { + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x10) += 0x80; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x14) += 0x80; + + if (d.vx + d.vz < 0x4001) { + /* its OWN pseudo: sharing `v` with the abs() block below gives the + * merged pseudo a whole-function live range, and global_alloc then + * seats it in $a0 instead of $v0 (§186c). */ + s32 t = rand(); + *(s16 *)((s32)a0 + 0x36) = 0; + *(s32 *)((s32)a0 + 0x14) = -0x100000 - ((t % 9) << 16); + } + } + + func_8012931C((struct vec *)a0); + + in3[0] = *(u16 *)((s32)a0 + 0x6); + in3[1] = *(u16 *)((s32)a0 + 0xA); + in3[2] = *(u16 *)((s32)a0 + 0xE); + ((void (*)(u16 *, s16 *))func_8012EFB8)(in3, out2); + + /* CALL unless (|out2[0]| < 0xB5 && |out2[1]| < 0x8D && obj->y < 0x10). + * Written as a nested if with an early `return` so the call is emitted + * ONCE (a duplicated tail would need cross_jump to refund it, §193-C). */ + v = out2[0]; + if (v < 0) { + v = -v; + } + if (v < 0xB5) { + v = out2[1]; + if (v < 0) { + v = -v; + } + if (v < 0x8D) { + if (*(s16 *)((s32)a0 + 0xA) < 0x10) { + return; + } + } + } + func_801292C8((u8 *)a0); +} + + + +extern void (*D_801942CC[])(void); + +void func_80185288(void *a0) { + D_801942CC[*(u16 *)((s32)a0 + 0x2)](); +} + + +void func_801852C4(s32 arg0) +{ + extern void func_80187B80(s32 a0); + extern void func_8017E910(void); + void *s0; + + func_80187B80(4); + s0 = (void *)(arg0 + 0x76); + func_8017BF08(s0, s0, 5, 0xD2); + func_8017E910(); + func_8002D4C8(0x89E, 0); +} + + +extern void func_80187BAC(void); +extern void func_8017E9B4(void); +void func_8018531C(void) { + func_80187BAC(); + func_8017E9B4(); +} + + +s32 func_80185344(s32 a0) { + extern int func_8001AAA0(void); + if (*(s16 *)(a0 + 0x84) != 0) { + ((int (*)(int))func_8001AAA0)(0x84); + return 1; + } + return 0; +} + + +extern u16 D_80126B62; + void func_80185378(void) { + *(s16 *)((s32)&D_80126B62 + 0x0) += 0xC; + } + + +extern u16 D_80126B62; +void func_80185394(void) { + register s32 *p __asm__("$3"); /* pinned to $v1 */ + register s32 v __asm__("$2"); /* pinned to $v0 */ + p = &D_80126B62; + v = *(u16 *)p + -12; + *(u16 *)p = v; +} + + +void func_801853B0(s32 a0) +{ + extern void func_8012A828(s32 a0, void *a1); + extern s32 func_8012C588(s32 a0, s32 a1); + extern s32 D_801C7E4C[]; + extern void (*D_801A33AC)(void); + + s32 s1 = a0; + s32 v; + s32 i; + s32 r; + + v = *(s32 *)(s1 + 0x1C); + if (v == 0) { + *(u16 *)(s1 + 2) = 1; + func_8012A828(s1, &D_801A33AC); + *(s32 *)(s1 + 0x1C) = 0xB4; + } else { + v = v - 1; + *(s32 *)(s1 + 0x1C) = v; + if ((v & 7) == 0) { + func_8012C588(0x275, s1); + *(u16 *)(*(s32 *)(*(s32 *)D_801C7E4C + 0x20) + 0x1A) = 0xC00; + for (i = 0; i < 8; i++) { + r = func_8012C588(0x2ED, s1); + if (r != 0) { + *(s16 *)(r + 0x16) = -0x10; + *(u16 *)(r + 6) = *(u16 *)(r + 6) + 0x25B; + *(u16 *)(r + 0xA) = *(u16 *)(r + 0xA) - 0x70; + *(u16 *)(r + 0x12) = (rand() & 7) - 4; + *(u16 *)(r + 0x1A) = -4 - (rand() & 7); + func_8002D4C8(0x895, 0); + } + } + } + } +} + + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8018473C", func_801854B8); + +INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8018473C", func_80185570); + +void func_80185684(void) { +} + +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern u8 D_80192514[]; +extern void *D_80192548[]; +extern u16 D_8019255C[]; +extern void (*D_80188CCC)(void); + +void func_8018568C(s32 a0) { + if (func_8012C354(a0, (s32)D_80192514) != 0) { + func_8001C214(*(s32 *)(a0 + 0x20), (s32)D_80192548[*(s16 *)(a0 + 0x70)]); + *(u16 *)(a0 + 6) = *(u16 *)(a0 + 6) + D_8019255C[*(s16 *)(a0 + 0x70)]; + *(u16 *)(a0 + 2) = 1; + func_8012A828(a0, &D_80188CCC); + *(u8 *)(a0 + 0xC0) = 1; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) | 0x10; + *(s32 *)(a0 + 0x6C) = func_8012C588(0x28A, a0); + } +} + + +void func_80185744(s32 a0) { + switch (*(s16 *)(a0 + 0x10A)) { + case 0: + break; + case 1: + *(s16 *)(a0 + 2) = 2; + *(s32 *)(a0 + 0x1C) = 0xF; + break; + case 2: + *(s16 *)(a0 + 2) = 3; + *(s16 *)(a0 + 0x34) = 0; + *(s32 *)(a0 + 0x1C) = 0; + *(s16 *)(a0 + 0xFC) = 3; + func_8002D4C8(0x903, 0); + break; + case 3: + *(s16 *)(a0 + 2) = 4; + *(s16 *)(a0 + 0x34) = 0; + *(s32 *)(a0 + 0x1C) = 0; + *(s16 *)(a0 + 0xFC) = 3; + break; + } + *(s16 *)(a0 + 0x10A) = 0; +} + + +void func_801857EC(s32 a0) { + s32 v0; + s32 v1; + v0 = *(s32 *)(a0 + 0x1C); + if (v0 != 0) { + v0--; + v1 = *(s32 *)(a0 + 0x20); + *(s32 *)(a0 + 0x1C) = v0; + *(u16 *)(v1 + 0x1A) ^= 0x100; + v1 = *(s32 *)(a0 + 0x20); + *(u16 *)(v1 + 0x1C) ^= 0x100; + v0 = *(s32 *)(a0 + 0x1C); + if ((v0 & 1) != 0) { + func_8002D4C8(0x902, 0); + } + } else { + v1 = 0x1000; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x1A) = 0x1000; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x1C) = 0x1000; + *(u16 *)(a0 + 0x2) = 1; + func_8012C658(0x274, *(s16 *)(a0 + 0x70), a0); + } +} + + +void func_80185894(s32 a0) { + extern s32 func_8012C354(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern s32 func_8012C588(s32 a0, s32 a1); + extern u8 D_8019257C[]; + extern void (*D_80188CCC)(void); + + if (func_8012C354(a0, (s32)D_8019257C) != 0) { + *(u16 *)(a0 + 2) = 1; + *(u16 *)(a0 + 6) = *(u16 *)(a0 + 6) + 0x205; + *(u16 *)(a0 + 0xA) = *(u16 *)(a0 + 0xA) + 1; + func_8012A828(a0, &D_80188CCC); + *(u8 *)(a0 + 0xC0) = 1; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) | 0x10; + *(s32 *)(a0 + 0x6C) = func_8012C588(0x2D4, a0); + } +} + + +void func_80185920(void *a0) { + s16 x; + s32 a1; + s16 temp; + + x = *(s16 *)((s32)a0 + 0x10A); + if (x == 1) { + } else if (x < 2) { + } else if (x == 2) { + } else if (x == 3) { + *(s16 *)((s32)a0 + 0x2) = 4; + *(s16 *)((s32)a0 + 0x34) = 0; + *(s32 *)((s32)a0 + 0x1C) = 0; + *(s16 *)((s32)a0 + 0xFC) = 3; + } + + a1 = *(s32 *)((s32)a0 + 0x20); + *(s16 *)((s32)a0 + 0x10A) = 0; + temp = *(s16 *)(a1 + 0x1A); + if (temp < 0x1000) { + *(s16 *)(a1 + 0x1A) = temp + 0x40; + } +} + + +#include "common.h" + +/* Obj1CDC / Sub20_1CDC copied verbatim from src/shared/engine_types.h (law 2; + * match_one's cpp has no include path to that file, same pattern used by + * other drafts of this TU, e.g. .run/drafts-p30beh/func_80181CDC.c). obj-> + * unk20 points at a Sub20_1CDC whose only named member is unk14; offsets + * 0x1A/0x1C on it, and offsets 0x1C/0x34 on obj itself, fall inside coarse + * array members of Obj1CDC (unk10[8], unk24[16]) rather than being + * individually named, so they are reached with M2C_FIELD raw-offset access + * (law 2 fallback: type by access width) instead of a struct edit. + * + * RECONCILER (§183 TYPE-adopted-TU): the destination TU pulls these very types in + * via ../shared/engine_core.h -> engine_types.h, so an unguarded copy here is a hard + * `redefinition of struct Obj1CDC` (verified: cc1 rc=33 on the substituted TU). + * Guarded with the banked repo idiom (cookbook §41 step 1, e.g. + * src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.c:4520) so this file compiles BOTH + * standalone under match_one AND spliced into the real TU, where the header's + * definitions (identical layout; `Sub64_1CDC *unk64` instead of the placeholder + * `void *unk64`, a field this function never touches) are the ones that win. */ +#ifndef BFM_ENGINE_TYPES_H + + +#endif /* BFM_ENGINE_TYPES_H */ + +extern s32 func_8004787C(s32 a0); + +void func_80185990(Obj1CDC *obj) { + register s32 t __asm__("$3"); /* pinned to $v1 (matches target; law 186c) */ + u16 state = M2C_FIELD(obj, u16 *, 0x34); + + switch (state) { + case 0: + M2C_FIELD(obj, s32 *, 0x1C) += 0x80; + t = func_8004787C(M2C_FIELD(obj, s32 *, 0x1C)) >> 6; + t += 0x1000; + M2C_FIELD(obj->unk20, s16 *, 0x1A) = (s16) t; + M2C_FIELD(obj->unk20, s16 *, 0x1C) = (s16) t; + if (M2C_FIELD(obj, s32 *, 0x1C) >= 0x800) { + M2C_FIELD(obj, s32 *, 0x1C) &= 0x7FF; + if (--obj->unkFC == 0) { + M2C_FIELD(obj, u16 *, 0x34) += 1; + } + } + break; + + case 1: + M2C_FIELD(obj, s32 *, 0x1C) += 0x80; + t = func_8004787C(M2C_FIELD(obj, s32 *, 0x1C)) >> 3; + t += 0x1000; + M2C_FIELD(obj->unk20, s16 *, 0x1A) = (s16) t; + M2C_FIELD(obj->unk20, s16 *, 0x1C) = (s16) t; + if (M2C_FIELD(obj, s32 *, 0x1C) >= 0x800) { + M2C_FIELD(obj->unk20, s16 *, 0x1A) = 0x1000; + M2C_FIELD(obj->unk20, s16 *, 0x1C) = 0x1000; + obj->unk2 = 1; + } + break; + } +} + + +void func_80185AAC(s32 arg0) +{ + extern void func_801806A0(s32 a0, s32 a1); + u16 temp; + + temp = *(u16 *)(arg0 + 0x76); + *(u8 *)(arg0 + 0xC1) = 0; + *(u16 *)(arg0 + 0x5E) = 0; + *(u16 *)(arg0 + 0x76) = temp - 0xA; + + *(u16 *)(arg0 + 0x5C) &= 0xFFFE; + if (*(s16 *)(arg0 + 0x76) < -0x12B) { + *(s16 *)(arg0 + 0x76) = -0x12C; + } + + if ((u16)(*(u16 *)(arg0 + 0x76) + 0xA) < 0xA) { + *(s16 *)(arg0 + 0x76) = -0x12C; + } + + func_801806A0(arg0, 0); +} + + +void func_80185B20(s32 a0) { + extern s32 func_8012C354(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern u8 D_801926E0; + extern void (*D_80188CCC)(void); + extern M2C_UNK D_80192714; + extern s32 D_801922B0[]; + u16 v0; + + if (func_8012C354(a0, (s32)&D_801926E0) != 0) { + *(u32 *)(*(s32 *)(a0 + 0x20) + 4) = *(u32 *)(*(s32 *)(a0 + 0x20) + 4) | 0x80000000; + *(u16 *)(a0 + 2) = 1; + func_8012A828(a0, &D_80188CCC); + *(u8 *)(a0 + 0x75) = 3; + *(u8 *)(a0 + 0xC0) = 1; + *(s32 *)(a0 + 0xBC) = (s32)&D_80192714; + *(s16 *)(a0 + 0xAE) = -1; + *(s32 *)(a0 + 0xB4) = 0; + *(s32 *)(a0 + 0xC4) = *(s32 *)(a0 + 0xC4) | 2; + v0 = *(u16 *)(*(s32 *)(a0 + 0x64) + 0x70); + *(u16 *)(a0 + 0x70) = v0; + *(s32 *)(a0 + 0x58) = (s32)D_801922B0 + ((s16)v0 << 4); + } +} + + +#include "common.h" + +extern s32 func_800CF8B4(); +extern s32 func_8014CB8C(void); + +void func_80185BD8(s32 arg0) +{ + extern void func_801806A0(s32 a0, s32 a1); + s16 sVar1; + + if ((*(u8 *)(arg0 + 0x74) != 0) && (func_800CF8B4() != 0) && (func_8014CB8C() != 0)) { + sVar1 = *(u16 *)(arg0 + 0x76) - 4; + *(s16 *)(arg0 + 0x76) = sVar1; + if (sVar1 < -0x12B) { + *(s16 *)(arg0 + 0x76) = -0x12C; + } + if ((u16)(*(u16 *)(arg0 + 0x76) + 4) < 4) { + *(s16 *)(arg0 + 0x76) = -0x12C; + } + func_801806A0(arg0, 0); + } +} + + +void func_80185C80(s32 a0) { + extern s32 func_8012C354(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern u8 D_8019273C[]; + extern void (*D_80188CCC)(void); + + if (func_8012C354(a0, (s32)D_8019273C) != 0) { + *(u32 *)(*(s32 *)(a0 + 0x20) + 4) = *(u32 *)(*(s32 *)(a0 + 0x20) + 4) | 0x80000000; + *(s16 *)(a0 + 2) = 1; + func_8012A828(a0, &D_80188CCC); + *(u8 *)(a0 + 0x75) = 3; + *(u8 *)(a0 + 0xC0) = 1; + *(s16 *)(a0 + 0xAE) = -1; + } +} + + +void func_80185CF8(void) { +} + +void func_80185D00(s32 a0) { + extern s32 func_8012C354(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern M2C_UNK D_80192778; + extern void (*D_80188CCC)(void); + extern u16 D_801927AC[]; + s32 s0 = a0; + if (func_8012C354(a0, (s32)&D_80192778)) { + *(u16 *)(s0 + 2) = 1; + ((void (*)(s32 *, void *))func_8012A828)((s32 *)s0, (s32)&D_80188CCC); + *(u8 *)(s0 + 0xC0) = 1; + *(u16 *)(s0 + 0xFE) = 0xF; + *(u16 *)((s32)*(void **)(s0 + 0x20) + 0x2C) |= 0x10; + *(u16 *)(s0 + 0xA) += D_801927AC[*(u16 *)(s0 + 0x70) & 0xF]; + } +} + + +#include "common.h" + +extern void func_8017ECE4(void); +extern void func_8012B1B4(s32 a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern s32 rand(void); + +void func_80185D98(s32 a0) { + s32 v1; + s32 s0; + s32 q; + s32 i; + s32 sp10[3]; + + v1 = *(s32 *)(a0 + 0x20); + *(s16 *)(v1 + 0x12) = *(u16 *)(v1 + 0x12) - 0x400; + func_8017ECE4(); + sp10[0] = 0; + sp10[1] = 0; + sp10[2] = 0x40000; + func_8012B1B4(a0, (s32)sp10); + *(s32 *)(a0 + 0x14) = 0xFFF80000; + for (i = 0; i < 3; i++) { + s0 = func_8012C588(0x2ED, a0); + if (s0 != 0) { + *(u16 *)(s0 + 0x06) = *(u16 *)(a0 + 0x7C); + *(u16 *)(s0 + 0x0A) = *(u16 *)(a0 + 0x7E); + *(u16 *)(s0 + 0x0E) = *(u16 *)(a0 + 0x80); + q = rand(); + *(s16 *)(s0 + 0x12) = (*(s16 *)(a0 + 0x12) * (q & 0x3FF)) >> 8; + q = rand(); + *(s16 *)(s0 + 0x1A) = (*(s16 *)(a0 + 0x1A) * (q & 0x3FF)) >> 8; + q = rand(); + *(u16 *)(s0 + 0x16) = -0xC - (q & 3); + } + } +} + + +extern void func_8012B200(u8 *a0); +extern void func_8012C218(void *a0); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern s32 rand(void); + +void func_80185EA0(s32 a0) { + s32 r; + + if ((rand() & 7) == 0) { + r = func_8012C658(0x27B, 0, a0); + if (r != 0) { + func_8012B200((u8 *)r); + *(s16 *)(r + 0xE) = 0; + } + } + + ((void (*)(s32))func_8012C218)(a0); +} + + +extern void func_8017ECE4(void); + void func_80185F08(s32 arg0) { + if (*(u16 *)arg0 != 0) { + ((void (*)(void))func_8017ECE4)(); + } + } + + +extern void func_80131B14(); +extern void func_80143CD4(s32 a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_800CB0E8(s32 a0); +extern void func_8017ECE4(void); +extern void func_8012B23C(s32 a0); + +void func_80185F38(s32 param_1) +{ + func_80131B14(); + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) - 0x400; + *(s32 *)(param_1 + 0x1C) = 0x78; + func_80143CD4(param_1); + func_8002D4C8(0x47B, 0); + func_8002D4C8(0x478, 0); + func_800CB0E8(param_1); + ((void (*)(s32))func_8017ECE4)((s32)param_1); + func_8012B23C(param_1); +} + + +#include "common.h" + +extern void func_8012CBF4(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8017ECE4(void); + +void func_80185FB4(s32 a0) { + func_8012CBF4(a0); + if (func_8012BEE8(a0) != 0) { + *(u8 *)(a0 + 0xC1) = 0; + *(u16 *)(a0 + 0x5E) = 0; + } + ((void (*)(s32))func_8017ECE4)(a0); +} + + +void func_80185FFC(s32 a0) { + extern s32 func_8012C354(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern void func_8012B23C(s32 a0); + extern s32 rand(void); + extern u8 D_801927D0[]; + extern void (*D_80188CCC)(void); + extern u8 D_80192804[]; + + s32 s0 = a0; + + if (func_8012C354(s0, (s32)D_801927D0) != 0) { + *(u16 *)(s0 + 2) = 1; + func_8012A828(s0, &D_80188CCC); + *(u8 *)(s0 + 0xC0) = 1; + *(s32 *)(s0 + 0xB4) = -0x2041; + *(s16 *)(s0 + 0xAE) = 0x2000; + *(s32 *)(s0 + 0xC4) |= 1; + func_8012B23C(s0); + *(u16 *)(*(s32 *)(s0 + 0x20) + 0x2C) |= 0x10; + *(void **)(s0 + 0xBC) = D_80192804; + *(s32 *)(s0 + 4) = 0x25B0000; + *(s32 *)(s0 + 8) = 0xFF900000; + *(s32 *)(s0 + 0x10) = ((rand() % 0x240) + 0x60) << 11; + *(u16 *)(s0 + 0xFE) = (rand() & 0x1FF) + 0x100; + } +} + + +#include "common.h" + +void func_801860F4(s32 a0) { + if (*(s32 *)(a0 + 0x1C) == 0) { + *(u8 *)(a0 + 0xC1) = 0; + *(u16 *)(a0 + 0x5E) = 0; + *(u16 *)(a0 + 0x5C) = 0x8000; + } else { + *(s32 *)(a0 + 0x1C) -= 1; + } +} + + +void func_80186124(s32 a0) { + extern s32 func_8012C354(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern void func_8001D0E8(s32 a0, s32 a1, s32 a2); + extern s32 func_8012C588(s32 a0, s32 a1); + extern M2C_UNK D_801928F0; + extern void (*D_80188CCC)(void); + extern u8 *D_801C7E54; + s32 s0 = a0; + + if (func_8012C354(a0, (s32)&D_801928F0) != 0) { + *(u16 *)(s0 + 2) = 1; + func_8012A828(s0, &D_80188CCC); + *(u8 *)(s0 + 0xC0) = 1; + *(s32 *)(s0 + 0xB4) = -1; + *(s16 *)(s0 + 0xAE) = -1; + *(u16 *)(*(s32 *)(s0 + 0x20) + 0x14) = 0x180; + *(u16 *)(s0 + 0xFC) = 0; + *(s16 *)(s0 + 0xFE) = 0x400; + *(u16 *)(s0 + 0x100) = 0; + func_8001D0E8(*(s32 *)(s0 + 0x20), 0x400, 0x400); + *(u8 *)(s0 + 0x75) = 3; + D_801C7E54 = (u8 *) func_8012C588(0x28D, s0); + } +} + + + + +void func_801861D0(s32 a0) { + extern s32 func_8012C354(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern void func_8001D0E8(s32 a0, s32 a1, s32 a2); + extern u8 D_8019294C; + extern u8 D_801AB1A8[]; + s32 s0 = a0; + + if (func_8012C354(a0, (s32)&D_8019294C)) { + *(u16 *)(s0 + 2) = 1; + func_8012A828((s32)s0, D_801AB1A8); + *(u8 *)(s0 + 0x75) = 3; + *(u8 *)(s0 + 0xC0) = 1; + *(s32 *)(s0 + 0xB4) = -1; + *(s16 *)(s0 + 0xAE) = -1; + func_8001D0E8(*(s32 *)(s0 + 0x20), 0x400, 0x400); + } +} + + +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern u16 D_80126B96; +extern s16 D_80126B98; +extern s32 D_80127078; +extern u8 D_80192980[]; +extern u8 D_80192988; + +void func_8018624C(s32 arg0) { + s16 temp; + + if (*(s16 *)(*(s32 *)(arg0 + 0x64) + 0x10A) == 3) { + temp = *(s16 *)(arg0 + 0x10A); + if (temp == 1 && func_8012DEB8(arg0, D_80192980, &D_80192988) == temp) { + D_80126B96 = 0x400F; + D_80126B98 = 0; + D_80127078 = arg0; + } + } +} + + +void func_801862D8(s32 a0) { + extern s32 func_8012C354(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern void func_8001D0E8(s32 a0, s32 a1, s32 a2); + extern s32 func_8012C588(s32 a0, s32 a1); + extern M2C_UNK D_801929A8; + extern void (*D_80188CCC)(void); + extern s32 D_801C7E5C; + s32 s0 = a0; + + if (func_8012C354(a0, (s32)&D_801929A8) != 0) { + *(u16 *)(s0 + 2) = 1; + func_8012A828(s0, &D_80188CCC); + *(u8 *)(s0 + 0x75) = 3; + *(u8 *)(s0 + 0xC0) = 1; + *(s32 *)(s0 + 0xB4) = -1; + *(s16 *)(s0 + 0xAE) = -1; + *(u16 *)(*(s32 *)(s0 + 0x20) + 0x14) = 0x180; + *(u16 *)(s0 + 0xFC) = 0; + *(s16 *)(s0 + 0xFE) = -0x400; + *(u16 *)(s0 + 0x100) = 0; + func_8001D0E8(*(s32 *)(s0 + 0x20), 0x400, 0x400); + D_801C7E5C = func_8012C588(0x28F, s0); + } +} + + +extern s32 D_801C7E50[1]; + +void func_80186384(s32 arg0) { + *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x14) = *(u16 *)(*(s32 *)(D_801C7E50[0] + 0x20) + 0x14); + *(u16 *)(arg0 + 0xFC) = -0x8000 - *(s16 *)(D_801C7E50[0] + 0xFC); + *(u16 *)(arg0 + 0xFE) = -0x8000 - *(s16 *)(D_801C7E50[0] + 0xFE); +} + + +void func_801863E0(s32 a0) { + extern s32 func_8012C354(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern void func_8001D0E8(s32 a0, s32 a1, s32 a2); + extern u8 D_801929F4; + extern u8 D_801AB180[]; + s32 s0 = a0; + + if (func_8012C354(a0, (s32)&D_801929F4)) { + *(u16 *)(s0 + 2) = 1; + func_8012A828((s32)s0, D_801AB180); + *(u8 *)(s0 + 0x75) = 3; + *(u8 *)(s0 + 0xC0) = 1; + *(s32 *)(s0 + 0xB4) = -1; + *(s16 *)(s0 + 0xAE) = -1; + func_8001D0E8(*(s32 *)(s0 + 0x20), 0x400, 0x400); + } +} + + +extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2); +extern u16 D_80126B96; +extern s16 D_80126B98; +extern s32 D_80127078; +extern u8 D_80192980[]; +extern u8 D_80192988; +extern s32 D_801C7E50[1]; + +void func_8018645C(s32 arg0) { + s16 temp; + + if (*(s16 *)((*(s32 *)D_801C7E50) + 0x10A) == 3) { + temp = *(s16 *)(arg0 + 0x10A); + if (temp == 1 && func_8012DEB8(arg0, D_80192980, &D_80192988) == temp) { + D_80126B96 = 0x400F; + D_80126B98 = 0; + D_80127078 = arg0; + } + } +} + + +void func_801864E4(int a0) { + int t; + int r; + int sel; + int start; + + t = *(u16 *)(a0 + 0xFC) + 0x20; + *(u16 *)(a0 + 0xFC) = t; + *(int *)(a0 + 4) = *(int *)(a0 + 0x10) + (func_80047948((s16)t) << 13); + *(int *)(a0 + 8) = *(int *)(a0 + 0x14) - (func_8004787C(*(s16 *)(a0 + 0xFC)) << 13); + + if (*(s16 *)(a0 + 0xFC) >= 0x400) { + sel = (rand() & 1) ? -0x255555 : -0x1D5555; + __asm__("" : "=r"(sel) : "0"(sel)); + start = sel; + for (; start <= 0x3AAAA9; start += 0x1AAAAA) { + r = func_8012C658(0x29E, 1, a0); + if (r != 0) { + *(int *)(r + 0x10) = start; + } + } + func_8012C218(a0); + } +} + + +extern void func_8012CBCC(s32 a0); + extern void func_8012C218(void *a0); + void func_801865E8(void *a0) { + if ((((s32 (*)(s32))func_8012CBCC)((s32)a0) & 0x2000) != 0) { + ((void (*)(s32))func_8012C218)((s32)a0); + } + } + + +extern s32 func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8012B200(u8 *a0); +extern void func_8001CA1C(void *a0, void *a1); +extern void func_8012A828(s32 a0, void *a1); +extern s32 rand(void); + +extern u8 D_80192AFC[]; +extern u8 D_80192B38[]; + +void func_80186624(s32 param_1) +{ + s32 v0; + s32 v1; + + if ((*(s32 *)(param_1 + 0x20) = func_8012C1B8()) == 0) { + func_8012CAE4((void *)param_1); + } else { + func_8012B200((u8 *)param_1); + func_8001CA1C((void *)(*(s32 *)(param_1 + 0x20)), D_80192AFC); + func_8012A828(param_1, D_80192B38); + *(s16 *)(param_1 + 2) = 1; + *(u32 *)(*(s32 *)(param_1 + 0x20) + 4) |= 0x50000000; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x2C) |= 0x10; + v1 = *(s32 *)(param_1 + 0x20); + *(s16 *)(v1 + 0x1A) = 0x4000; + *(s16 *)(v1 + 0x18) = 0x4000; + v0 = rand(); + v1 = ((v0 & 0x7FF) - 0x400) * 0x156; + *(s32 *)(param_1 + 0x10) = v1; + v0 = rand(); + *(s32 *)(param_1 + 0x14) = ((v0 & 0x7FF) - 0x400) * 0x80; + *(s16 *)(param_1 + 6) = 0x270; + *(s16 *)(param_1 + 0xA) = -0xC0; + *(s16 *)(param_1 + 0xE) = -0x40; + } +} + + +extern s32 func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8001CA1C(void *a0, void *a1); +extern void func_8012A828(s32 a0, void *a1); + +extern u8 D_80192B70[]; +extern u8 D_80192C30[]; + +void func_8018672C(s32 param_1) +{ + s32 v0; + s32 v1; + + if ((*(s32 *)(param_1 + 0x20) = func_8012C1B8()) == 0) { + func_8012CAE4((void *)param_1); + } else { + func_8012B23C(param_1); + func_8001CA1C((void *)(*(s32 *)(param_1 + 0x20)), D_80192B70); + func_8012A828(param_1, D_80192C30); + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(param_1 + 2) = 1; + *(u32 *)(v0 + 4) |= 0x50000000; + v1 = *(s32 *)(param_1 + 0x20); + *(u16 *)(v1 + 0x2C) |= 0x10; + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x18) = 0x2000; + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x1A) = 0x2000; + } +} + + +extern void func_8012CBCC(s32 a0); +extern void func_8012C218(void *a0); +extern void func_8017ECE4(void); +extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80143C74(s32 a0, s32 a1); +extern s32 rand(void); + +void func_801867E4(s32 a0) { + s32 r; + s32 i; + s32 ang; + + func_8012CBCC(a0); + if (((s32 (*)(s32))func_8017ECE4)(a0) <= 0) { + return; + } + r = func_80143C74(a0, 0); + if (r != 0) { + *(s16 *)(*(s32 *)(r + 0x20) + 0x18) = 0x5000; + *(s16 *)(*(s32 *)(r + 0x20) + 0x1A) = 0x5000; + *(s16 *)(r + 0x16) = -8; + } + for (i = 0; i < 8; i++) { + r = func_8012C658(0x29E, 2, a0); + if (r != 0) { + ang = (rand() & 0x1FF) + (i << 9); + *(s32 *)(r + 0x10) = func_8004787C(ang) << 6; + *(s32 *)(r + 0x18) = func_80047948(ang) << 6; + *(s32 *)(r + 0x14) = 0xFFF80000 - ((rand() & 0x3FF) << 8); + } + } + func_8012C218(a0); +} + + +void func_801868EC(s32 a0) { + extern s32 D_801C7E30; + extern s32 D_801C7E60; + extern s32 D_801C7E78; + extern u8 D_801924A0[]; + extern u8 D_801A36FC[]; + extern void func_8017C010(s32 a0, s32 a1, s32 a2); + extern void func_8016AA50(s32 a0, s32 a1); + extern void func_8016B3F4(s32 a0); + extern void func_8012C218(void *a0); + extern void func_8012A828(s32 a0, void *a1); + extern void func_8002A520(void *a0); + extern void func_8002D4C8(s32 a0, s32 a1); + s32 s0 = a0; + s32 cnt; + + *(u16 *)(D_801C7E30 + 0x76) -= 0x80; + func_8017C010(*(s32 *)(s0 + 0x64) + 0x76, (s32)D_801924A0, 0xD2); + func_8016AA50(s0, 0x80); + func_8016B3F4(s0); + + if (*(s16 *)(D_801C7E30 + 0x76) <= 0) { + *(u16 *)(D_801C7E30 + 0x2) = 0xB; + func_8012C218((void *)D_801C7E60); + func_8012A828(D_801C7E30, D_801A36FC); + *(u16 *)(s0 + 0x2) = 4; + *(u16 *)(s0 + 0x34) = 0; + } else { + *(u16 *)(s0 + 0x76) = 0x3E8; + *(s32 *)(s0 + 0x1C) = 0x1E; + cnt = D_801C7E78; + *(u16 *)(s0 + 0x2) = 5; + D_801C7E78 = cnt + 1; + } + + if (*(u8 *)(s0 + 0xC8) != 0) { + func_8002A520((void *)s0); + } + *(u16 *)(s0 + 0x5C) = 0; + *(u8 *)(s0 + 0xC1) = 0; + func_8002D4C8(0x9CE, 0); +} + + +void func_80186A00(s32 a0) { + extern s32 func_8012C354(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern void (*D_80192D18)(void); + extern void (*D_80188CCC)(void); + extern s32 D_801C7E74; + extern u8 D_80192D4C[]; + extern u8 D_80192D54[]; + + s32 v0; + s32 v1; + u16 t; + + if (func_8012C354(a0, (s32)&D_80192D18) != 0) { + *(s16 *)(a0 + 2) = 1; + func_8012A828(a0, &D_80188CCC); + v1 = *(s32 *)(a0 + 0x20); + *(s8 *)(a0 + 0xC0) = 1; + t = *(u16 *)(v1 + 0x2C); + D_801C7E74 = 0; + *(u16 *)(v1 + 0x2C) = t | 0x80; + v1 = *(s32 *)(a0 + 0x20); + *(s32 *)(v1 + 0x80) = (s32)D_80192D4C; + *(s16 *)(a0 + 0xAE) = -0x13; + *(s32 *)(a0 + 0xBC) = (s32)D_80192D54; + v0 = *(s32 *)(a0 + 0xC4); + *(s32 *)(a0 + 0xB4) = 0; + *(s32 *)(a0 + 0x1C) = 8; + *(s32 *)(a0 + 0xC4) = v0 | 3; + } +} + + +void func_80186AA8(s32 arg0) { + if (*(s32 *)(arg0 + 0x1C) != 0) { + *(s32 *)(arg0 + 0x1C) = *(s32 *)(arg0 + 0x1C) - 1; + *(u16 *)(arg0 + 6) = *(u16 *)(arg0 + 6) + 1; + *(u16 *)(arg0 + 0xA) = *(u16 *)(arg0 + 0xA) - 1; + } else { + *(u16 *)(arg0 + 2) = *(u16 *)(arg0 + 2) + 1; + *(s32 *)(arg0 + 0x1C) = 0x12C; + } +} + + +void func_80186AF4(s32 arg0) { + extern s32 func_8012C588(s32 a0, s32 a1); + s32 s0; + s32 i; + + if (*(s32 *)(arg0 + 0x1C) != 0) { + *(s32 *)(arg0 + 0x1C) = *(s32 *)(arg0 + 0x1C) - 1; + } else { + *(s16 *)(arg0 + 2) = *(u16 *)(arg0 + 2) + 1; + *(s32 *)(arg0 + 0x1C) = 2; + func_8002D4C8(0x89D, 0); + for (i = 0; i < 8; i++) { + s0 = func_8012C588(0x2ED, arg0); + if (s0 != 0) { + *(s16 *)(s0 + 0x16) = -0x10; + *(s16 *)(s0 + 0xA) = *(u16 *)(s0 + 0xA) + 0x20; + *(s16 *)(s0 + 0xE) = *(u16 *)(s0 + 0xE) - 0x18; + *(u16 *)(s0 + 0x12) = (rand() & 7) - 4; + *(u16 *)(s0 + 0x1A) = -4 - (rand() & 7); + } + } + } +} + + +extern s32 D_801C7E30; +extern s32 D_801C7E34[]; + +void func_80186BD8(void *a0) +{ + s32 v0; + s32 v1; + + v0 = *(s32 *)(a0 + 0x1C); + if (v0 != 0) { + *(s32 *)(a0 + 0x1C) = v0 - 1; + *(s16 *)(a0 + 0x6) = *(s16 *)(a0 + 0x6) - 6; + *(s16 *)(a0 + 0xA) = *(s16 *)(a0 + 0xA) + 8; + } else { + v1 = D_801C7E30; + D_801C7E34[0] = 0; + *(u16 *)(v1 + 0x34) = *(u16 *)(v1 + 0x34) + 1; + func_8012C218(a0); + } +} + + +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_8012C588(s32 a0, s32 a1); +extern s32 rand(void); + +void func_80186C44(s32 a0) +{ + s32 s1 = a0; + s32 v; + s32 i; + s32 s0; + + v = *(s32 *)(s1 + 0x1C) - 1; + *(s32 *)(s1 + 0x1C) = v; + if (v == 0) { + *(s32 *)(s1 + 0x1C) = 2; + *(u16 *)(s1 + 2) = 3; + func_8002D4C8(0x89D, 0); + for (i = 0; i < 8; i++) { + s0 = func_8012C588(0x2ED, s1); + if (s0 != 0) { + *(s16 *)(s0 + 0x16) = -0x10; + *(s16 *)(s0 + 0xA) = *(u16 *)(s0 + 0xA) + 0x20; + *(s16 *)(s0 + 0xE) = *(u16 *)(s0 + 0xE) - 0x18; + *(u16 *)(s0 + 0x12) = (rand() & 7) - 4; + *(u16 *)(s0 + 0x1A) = -4 - (rand() & 7); + } + } + } else { + *(u16 *)(s1 + 6) = *(u16 *)(s1 + 6) ^ 4; + } +} + + +void func_80186D38(void) { +} + + +/* ---- externs ------------------------------------------------------------ */ +extern void func_8001CD50(s32 a0, s32 a1); +extern void func_800233CC(void *a0, unsigned short a1); + + +/* align-1 4-byte block: lowers via emit_block_move (unaligned lwl/lwr + swl/swr) + * with ZERO memcpy-symbol reference, so the TU's `extern memcpy` cannot turn + * this into a CALL. (house idiom, cf. func_8017B238 / func_8017B614) */ + +void func_80186D40(s32 param_1) +{ + + extern u8 D_801C7E7C; + extern u8 D_801C7E80; + extern u8 D_801C5B80; + extern u8 D_801C5B84; + func_8001CD50(*(s32 *)(param_1 + 0x20), (s32)&D_801C7E7C); + + *(u16 *)(param_1 + 0xA) -= 0x100; + *(u32 *)(*(s32 *)(param_1 + 0x20) + 4) |= 0x50000000; + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = 0x400; + *(s16 *)(param_1 + 0x2C) = 0x10; + + func_800233CC(&D_801C7E7C, 0x10); + + *(Blk4_8018CE04_80186D40 *)&D_801C7E7C = *(Blk4_8018CE04_80186D40 *)&D_801C5B80; + *(Blk4_8018CE04_80186D40 *)&D_801C7E80 = *(Blk4_8018CE04_80186D40 *)&D_801C5B84; + + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x1E) = 0xC00; + *(u16 *)(param_1 + 2) += 1; +} + + +extern u8 D_801C7E80; + +void func_80186E1C(void *param_1) +{ + s16 v0; + s16 v1; + + v0 = *(s16 *)((s32)param_1 + 0x2C); + v1 = v0; + if (v0 < 0x700) { + *(s16 *)((s32)param_1 + 0x2C) = v1 + 0x30; + func_80184100((u8 *)&D_801C7E80, -4); + func_800233CC((void *)((s32)&D_801C7E80 - 4), *(u16 *)((s32)param_1 + 0x2C)); + } else { + func_801292C8((u8 *)param_1); + } +} + + + + +extern s32 func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C810(s32 a0, s32 a1); + +extern u8 D_801B5C84; +extern u8 D_801B6434; + +void func_80186E94(s32 param_1) +{ + s32 v0; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0x20) = v0; + if (v0 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + return; + } + + ((void (*)(s32, s32))func_8001C810)(v0, (s32)&D_801B5C84); + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(param_1 + 0xCC) = v0; + if (v0 == 0) { + ((void (*)(s32))func_8012CAE4)(param_1); + v0 = *(s32 *)(param_1 + 0x20); + *(s16 *)v0 = 0; + return; + } + + ((void (*)(s32, s32))func_8001C810)(v0, (s32)&D_801B6434); + + *(u8 *)(param_1 + 0xC0) = 0; + *(u32 *)(*(s32 *)(param_1 + 0x20) + 4) |= 0x50000000; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x2C) |= 0x10; + *(u32 *)(*(s32 *)(param_1 + 0xCC) + 4) |= 0x50000000; + *(u16 *)(*(s32 *)(param_1 + 0xCC) + 0x2C) |= 0x10; + + func_801841E4((s32 *)param_1); +} + + +#include "common.h" + +extern void func_80184214(void *a0); + +void func_80186F7C(s32 param_1) +{ + s32 a1; + u16 v0; + u16 v1; + + a1 = *(s32 *)(param_1 + 0xCC); + v1 = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x18); + if (v1 < 0x3000) { + s32 p20; + + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x18) = v1 + 0x100; + + p20 = *(s32 *)(param_1 + 0x20); + v1 = *(u16 *)(p20 + 0x18); + *(u16 *)(p20 + 0x1C) = v1; + *(u16 *)(p20 + 0x1A) = v1; + + v0 = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = v0 + 0x100; + + *(u16 *)(a1 + 0x12) = *(u16 *)(a1 + 0x12) - 0x100; + + *(u16 *)(a1 + 0x8) = *(u16 *)(param_1 + 0x6) + *(u16 *)(param_1 + 0x50); + *(u16 *)(a1 + 0xA) = *(u16 *)(param_1 + 0xA) + *(u16 *)(param_1 + 0x52); + *(u16 *)(a1 + 0xC) = *(u16 *)(param_1 + 0xE) + *(u16 *)(param_1 + 0x54); + + *(u16 *)(a1 + 0x18) = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x18); + *(u16 *)(a1 + 0x1A) = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1A); + *(u16 *)(a1 + 0x1C) = *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1C); + } else { + func_80184214((void *)param_1); + } +} + + +extern s32 func_8012BEE8(s32 a0); +extern void func_80016450(s32 a0, s32 a1); +extern void func_8018423C(void); + +void func_80187074(s32 param_1) +{ + switch (*(u16 *)(param_1 + 0x34)) { + case 0: + { + u8 v0 = *(u8 *)(param_1 + 0xFC) + 0x10; + *(u8 *)(param_1 + 0xFC) = v0; + if (v0 >= 0xF1) { + *(u32 *)(*(s32 *)(param_1 + 0x20) + 4) |= 0x80000000; + *(u32 *)(*(s32 *)(param_1 + 0xCC) + 4) |= 0x80000000; + *(s32 *)(param_1 + 0x1C) = 8; + *(u16 *)(param_1 + 0x34) += 1; + } + break; + } + case 1: + if (func_8012BEE8(param_1) != 0) { + ((void (*)(s32))func_8018423C)(param_1); + } + break; + } + + func_80016450(*(u8 *)(param_1 + 0xFC), 0); +} + + +void func_80187144(u8 *a0) +{ + s32 v = a0[0xFC] - 3; + a0[0xFC] = (u8)v; + if ((u32)(v & 0xFF) >= 9) { + func_80016450(v & 0xFF, 0); + } else { + func_8012C218((void *)a0); + } +} + + +#include "common.h" + +extern void func_8012CBCC(s32 a0); +extern void func_8012C218(void *a0); + +void func_80187198(s32 a0) +{ + s32 s0; + s32 v0; + + s0 = a0; + v0 = ((s32 (*)(s32))func_8012CBCC)(a0); + if (v0 != 0) { + *(u16 *)(s0 + 0xFC) = -*(u16 *)(s0 + 0xFC); + *(u16 *)(s0 + 0xFE) = -*(u16 *)(s0 + 0xFE); + *(u16 *)(s0 + 0x100) = -*(u16 *)(s0 + 0x100); + if (v0 & 0x8000) { + *(s32 *)(s0 + 0x10) = -*(s32 *)(s0 + 0x10); + *(s32 *)(s0 + 0x18) = -*(s32 *)(s0 + 0x18); + } else { + *(s32 *)(s0 + 0x14) = -*(s32 *)(s0 + 0x14); + } + } + + *(u16 *)(*(s32 *)(s0 + 0x20) + 0x10) += *(u16 *)(s0 + 0xFC); + *(u16 *)(*(s32 *)(s0 + 0x20) + 0x12) += *(u16 *)(s0 + 0xFE); + *(u16 *)(*(s32 *)(s0 + 0x20) + 0x14) += *(u16 *)(s0 + 0x100); + + if (--*(s32 *)(s0 + 0x1C) < 0x10) { + *(u32 *)(*(s32 *)(s0 + 0x20) + 4) ^= 0x80000000; + if (*(s32 *)(s0 + 0x1C) == 0) { + func_8012C218((void *)s0); + } + } +} + + +extern s32 func_8012C354(s32, s32); +extern void func_8012A828(s32 a0, void *a1); +extern void func_8012B23C(s32 a0); +extern s32 rand(void); +extern void (*D_80192D18[])(void); +extern void (*D_80188CCC)(void); + +void func_801872BC(s32 param_1) { + if (((s32 (*)(s32, void *))func_8012C354)(param_1, &D_80192D18) != 0) { + *(u8 *)(param_1 + 0xC0) = 1; + *(u16 *)(param_1 + 0x5C) = 0; + func_8012A828(param_1, &D_80188CCC); + *(u16 *)(param_1 + 2) = 1; + func_8012B23C(param_1); + *(s16 *)(param_1 + 0xFC) = (rand() & 0xFF) - 0x80; + *(s16 *)(param_1 + 0xFE) = (rand() & 0xFF) - 0x80; + *(s16 *)(param_1 + 0x100) = (rand() & 0xFF) - 0x80; + *(s16 *)(param_1 + 0x12) = (rand() & 0xF) - 8; + *(s16 *)(param_1 + 0x1A) = (rand() & 0xF) - 8; + *(s16 *)(param_1 + 0x16) = -((rand() & 0xF) + 0x28); + *(s32 *)(param_1 + 0x1C) = 0x5A; + } +} + + +void func_8018738C(s32 a0) { + extern s32 func_8012C354(s32 a0, s32 a1); + extern void func_8012A828(s32 a0, void *a1); + extern void (*D_80188CCC)(void); + extern void (*D_80192E00)(void); + + if (func_8012C354(a0, (s32)&D_80192E00) != 0) { + *(s32 *)(*(s32 *)(a0 + 0x20) + 4) = *(s32 *)(*(s32 *)(a0 + 0x20) + 4) | 0x40000040; + *(u8 *)(a0 + 0xC0) = 1; + *(u16 *)(a0 + 0x5C) = 0; + func_8012A828(a0, &D_80188CCC); + *(u16 *)(a0 + 2) = 1; + *(s32 *)(a0 + 0x1C) = 6; + } +} + + + +extern void func_8012C218(void*); + s32 func_80187404(s32 arg0) { + *(s32 *)(arg0 + 0x1c) -= 1; + if (*(s32 *)(arg0 + 0x1c) == 0) { + ((void (*)(void))func_8012C218)(); + } + } + + +#include "common.h" + +extern s32 func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8001CA1C(void *a0, void *a1); +extern void func_8012A828(s32 a0, void *a1); + +extern u8 D_80192E3C[]; +extern u8 D_80192E48[]; + +void func_80187438(s32 param_1) +{ + s32 v0; + + if ((*(s32 *)(param_1 + 0x20) = func_8012C1B8()) == 0) { + func_8012CAE4((void *)param_1); + } else { + func_8012B23C(param_1); + func_8001CA1C((void *)(*(s32 *)(param_1 + 0x20)), D_80192E3C); + func_8012A828(param_1, D_80192E48); + v0 = *(s32 *)(param_1 + 0x20); + *(u16 *)(param_1 + 2) = 1; + *(s16 *)(param_1 + 0xE) = -0x30; + *(u32 *)(v0 + 4) |= 0x8000000; + *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x14) = 0xC00; + *(s32 *)(param_1 + 0x1C) = 0x14; + } +} + + +extern void func_8012C218(void*); +extern void func_8017ECE4(void); +extern s32 D_801C7E64; + +void func_801874DC(void *param_1) { + s32 v; + + v = *(s32 *)((u8 *)param_1 + 0x1C) - 1; + *(s32 *)((u8 *)param_1 + 0x1C) = v; + if (v == 0) { + ((void (*)(void))func_8012C218)(); + D_801C7E64 = 0; + } + *(u16 *)((u8 *)param_1 + 0xA) = 0; + ((void (*)(s32))func_8017ECE4)((s32)param_1); + *(u16 *)((u8 *)param_1 + 0xA) -= 0x20; +} + + +#include "common.h" + +extern s32 func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8012B23C(s32 a0); +extern void func_8001CA1C(void *a0, void *a1); +extern void func_8012A828(s32 a0, void *a1); +extern s32 rand(void); + +extern u8 D_80192E58[]; +extern u8 D_80192E64[]; + +void func_80187540(s32 param_1) +{ + s32 v0; + s32 temp; + s16 r; + + if ((*(s32 *)(param_1 + 0x20) = func_8012C1B8()) == 0) { + func_8012CAE4((void *)param_1); + } else { + func_8012B23C(param_1); + func_8001CA1C((void *)(*(s32 *)(param_1 + 0x20)), D_80192E58); + func_8012A828(param_1, D_80192E64); + temp = *(s32 *)(param_1 + 0x20); + *(u16 *)(param_1 + 2) = 1; + *(u32 *)(temp + 4) |= 0x50000000; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x2C) |= 0x10; + r = (rand() & 0x3FF) + 0xA00; + v0 = *(s32 *)(param_1 + 0x20); + *(s16 *)(v0 + 0x1A) = r; + *(s16 *)(v0 + 0x18) = r; + *(s32 *)(param_1 + 0x1C) = 0x1E; + } +} + + +extern void func_8012CBF4(s32 a0); + +void func_80187600(s32 a0) { + s32 t; + + func_8012CBF4(a0); + t = *(s32 *)(a0 + 0x1C) - 1; + *(s32 *)(a0 + 0x1C) = t; + if (t == 0) { + func_8012C218((void *)a0); + } +} + + +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern s32 rand(void); +extern u8 D_80194290[]; + +void func_80187644(s32 arg0) +{ + s32 q; + + func_8001CB6C(*(u8 **)(arg0 + 0x20), D_80194290, 0x254, 0x1C0); + *(u8 *)(*(u32 *)(arg0 + 0x20) + 0x27) = 0x25; + *(u16 *)(*(u32 *)(arg0 + 0x20) + 0x10) = 0xC00; + q = rand(); + *(u16 *)(*(u32 *)(arg0 + 0x20) + 0x14) = q % 0x1000; + *(u32 *)(*(u32 *)(arg0 + 0x20) + 4) |= 0x50000000; + *(u16 *)(arg0 + 2) = *(u16 *)(arg0 + 2) + 1; + *(s32 *)(arg0 + 0x1C) = *(s16 *)(arg0 + 0x36); +} + + +extern s32 rand(void); + +void func_801876EC(s32 arg0) { + s16 val; + s32 work; + + *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x14) += 0x100; + if (*(s32 *)(arg0 + 0x1C) != 0) { + *(s32 *)(arg0 + 0x1C) -= 1; + } else { + *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x18) += 0x400; + *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x1A) += 0x400; + work = *(s32 *)(arg0 + 0x20); + val = *(s16 *)(arg0 + 0x34); + if (val < *(s16 *)(work + 0x18)) { + *(u16 *)(work + 0x1A) = val; + *(u16 *)(work + 0x18) = val; + *(s32 *)(arg0 + 0x1C) = rand(); + *(u16 *)(arg0 + 2) += 1; + } + } +} + + +extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); +extern s32 rand(void); +extern u8 D_801942C0[]; + +void func_801877A8(s32 arg0) +{ + u8 *work; + s32 q; + s32 r; + + func_8001CB6C(*(u8 **)(arg0 + 0x20), D_801942C0, 0x234, 0x1C0); + *(u8 *)(*(u32 *)(arg0 + 0x20) + 0x27) = 0x26; + *(u16 *)(arg0 + 0x30) = rand() & 0x1FF; + *(u16 *)(arg0 + 0x32) = rand() & 0x1F; + *(u16 *)(arg0 + 0x34) = rand() & 0x7F; + q = rand(); + work = *(u8 **)(arg0 + 0x20); + r = q % 0x1000 + 0x800; + *(u16 *)(work + 0x1A) = r; + *(u16 *)(work + 0x18) = r; + *(u16 *)(arg0 + 2) = *(u16 *)(arg0 + 2) + 1; +} + + +extern void func_8013373C(s32 arg0); + void func_80187854(void) { + func_8013373C(0); + } + + + +extern void func_8013C08C(void *a0, void *a1); +extern s32 D_801C7FC0; +extern s32 D_801988EC; + +void func_80187874(void) { + func_8013C08C(&D_801C7FC0, &D_801988EC); +} + + +s32 func_801878A4(void) { + return 0x6C; + } + + + +extern void (*D_801C3CF0[])(void); + +void func_801878AC(void *a0) { + D_801C3CF0[*(u16 *)((s32)a0 + 0x2)](); +} + + + + +extern void func_801465C0(void); +extern void func_80146C3C(void); + +extern void func_8001CBDC(s32 a0, s32 a1, s32 a2, s32 a3); + + + +void func_801878E8(void *a0) { + + extern s16 D_801C3B7C[][2]; + extern u8 D_801C3BA8[]; + extern EffectSlot4_801878E8 D_801C3BB4[]; + extern u8 D_801C3BE0[]; + extern EffectSlot4_801878E8 D_801C3C18; + extern EffectSlot4_801878E8 D_801C3C40; + extern EffectSlot4_801878E8 D_801C3C44; + extern EffectSlot4_801878E8 D_801C3C74; + extern EffectSlot4_801878E8 D_801C3C78; + extern EffectSlot4_801878E8 D_801C3CA8; + extern EffectSlot4_801878E8 D_801C3CAC; + extern EffectSlot4_801878E8 D_801C3CDC; + extern EffectSlot4_801878E8 D_801C3CE0; + register void *s0 __asm__("$16"); + register void *s1 __asm__("$17"); + + s0 = a0; + s1 = ((void *(*)(void))func_801465C0)(); + if (s1 != 0) { + s32 idx; + u8 uVar1; + + *(s32 *)((s32)s0 + 0x20) = (s32)s1; + idx = *(s32 *)((s32)s0 + 0x2C); + func_8001CBDC((s32)s1, (s32)D_801C3BE0, D_801C3B7C[idx][0], D_801C3B7C[idx][1]); + uVar1 = D_801C3BA8[*(s32 *)((s32)s0 + 0x2C)]; + *(s16 *)((s32)s1 + 0x2C) = 3; + *(u8 *)((s32)s1 + 0x27) = uVar1; + *(s16 *)((s32)s0 + 0x6) = 0; + *(s16 *)((s32)s0 + 0xA) = 0x50; + + /* The shift chain below needs a BASIC-BLOCK BOUNDARY before every copy + except the first: gcc-2.7.2 CSE is per-extended-BB, and inside one BB + it reuses the previous copy's DESTINATION address register as the next + copy's SOURCE address (costing the lui/addiu pair the target emits). + `if (c) X else X` supplies the boundary and is cross-jumped away by + jump2 AFTER regalloc, so it costs 0 instructions (128/128). + + The FIRST copy must stay in block 1 with the `lw 0x2C` / `li 0x50` + pair, or the index pseudo crosses a block and becomes a GLOBAL allocno + (regalloc map K8) -- local-alloc then hands $v0 to the 0x50 constant + and global-alloc is left with $v1 (the REGALLOC-PERM $v0<->$v1 swap). + Both must be LOCAL qtys in the same block for the target's assignment. + Its destination is therefore spelled as an INTERIOR ADDRESS of the + neighbouring symbol (idiom 7): `&D_801C3CDC + 4 == &D_801C3CE0`, a + CSE-distinct rtx, so the next copy still recomputes its source + address. Both spellings relocate to 0x80196E94. */ +#define COND (*(s32 *)((s32)s0 + 0x2C) > 0) + *(EffectSlot4_801878E8 *)((s32)&D_801C3CDC + 4) = D_801C3BB4[*(s32 *)((s32)s0 + 0x2C)]; + if (COND) { D_801C3CDC = D_801C3CE0; } else { D_801C3CDC = D_801C3CE0; } + if (COND) { D_801C3CAC = D_801C3CDC; } else { D_801C3CAC = D_801C3CDC; } + if (COND) { D_801C3CA8 = D_801C3CAC; } else { D_801C3CA8 = D_801C3CAC; } + if (COND) { D_801C3C78 = D_801C3CA8; } else { D_801C3C78 = D_801C3CA8; } + if (COND) { D_801C3C74 = D_801C3C78; } else { D_801C3C74 = D_801C3C78; } + if (COND) { D_801C3C44 = D_801C3C74; } else { D_801C3C44 = D_801C3C74; } +#undef COND + D_801C3C40 = D_801C3C44; + D_801C3C18 = D_801C3C40; + + *(s16 *)((s32)s0 + 0x2) = *(s16 *)((s32)s0 + 0x2) + 1; + } else { + ((void (*)(void *))func_80146C3C)(s0); + } +} + + +extern void func_80187B28(); + void func_80187AE8(void) { + func_80187B28(); + } + + +extern void func_80146C3C(void); + void func_80187B08(void) { + func_80146C3C(); + } + + + +extern void func_80017254(void *a0); +extern void func_800176F0(void *a0); + +void func_80187B28(void) { + + extern u8 D_801C3BF8[]; + extern u8 D_801C3C20[]; + u8 *p; + s32 i; + + func_80017254(D_801C3BF8); + i = 0; + p = D_801C3C20; + do { + func_800176F0(p); + i++; + p += 0x34; + } while (i < 4); +} + + + + +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); + void func_80187B80(void *arg0) { + ((void (*)(s32, s32, s32, s32))func_80146994)(0x28, 0, arg0, 0); + } + + + +extern s32 func_8014C050(s32 a0, s32 a1); + +void func_80187BAC(void) { + + extern s32 D_80126B58; + s32 t; + + t = func_8014C050((s32)&D_80126B58, 0x28); + if (t != 0) { + *(u16 *)(t + 2) += 1; + } +} + + + +extern void (*D_801C3CFC[])(void); + +void func_80187BF0(void *a0) { + D_801C3CFC[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8014E934(s32 a0); +extern void func_8014CC28(s32 a0); +extern s32 func_8014F3E8(s32 a0); +extern void func_80187C74(s32 a0); +extern void func_80146CA0(void *a0); +void func_80187C2C(s32 a0) { + func_8014E934(a0); + func_8014CC28(a0); + func_8014F3E8(a0); + func_80187C74(a0); + func_80146CA0((void *)a0); +} + + +extern u8 D_80062C04[]; + +void func_80187C74(s32 arg0) +{ + s32 s0 = arg0; + + func_80019064(D_80062C04); + func_801511E0(s0); + func_80149020((s32 *)s0); + func_801472C8((struct S *)s0); + *(u8 *)(s0 + 0xDE) = 0x10; + func_80146DE8((s32 *)s0, 0, 0, 0); + func_801477E8((s32 *)s0, 0x40000); + func_8014CBF8((void *)s0); + func_801474EC((s32 *)s0); + func_80146CA0((void *)s0); +} + + +extern void func_80149020(s32 *a0); +extern void func_80147A84(s32 arg0); +extern void func_801473EC(s32 *a0); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern void func_801470B4(s32 a0); +extern void func_80146CA0(void *a0); +void func_80187D00(s32 *a0) { + u8 v1; + func_80149020(a0); + func_80147A84((s32)a0); + func_801473EC(a0); + func_80148038((s32)a0, 0x4000); + func_80147460((s32)a0); + v1 = *((u8 *)a0 + 0xDE); + *((u8 *)a0 + 0xDE) = v1 + 0xFF; + if (v1 == 0) { + func_801470B4((s32)a0); + func_80146CA0(a0); + } +} + + +extern s32 func_8017EC7C(s32 a0); /* match-first, arity 1 */ +extern void func_80149020(s32 *a0); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern void func_80146CA0(void *a0); + +void func_80187D70(s32 a0) +{ + extern s16 D_801C3D10; + extern s16 D_801C3D12; + extern s16 D_801C3D14; + s16 *sp0 = &D_801C3D10; + + *sp0 = func_8017EC7C(a0); + func_80149020((s32 *)a0); + *(s16 *)(a0 + 0x6) = func_80012C6C(*(s16 *)(a0 + 0x6), *sp0, 8); + *(s16 *)(a0 + 0xA) = func_80012C6C(*(s16 *)(a0 + 0xA), D_801C3D12, 8); + *(s16 *)(a0 + 0xE) = func_80012C6C(*(s16 *)(a0 + 0xE), D_801C3D14, 8); + if ((*(s16 *)(a0 + 0x6) == *sp0) && + (*(s16 *)(a0 + 0xA) == D_801C3D12) && + (*(s16 *)(a0 + 0xE) == D_801C3D14)) { + *(u8 *)(a0 + 0xDE) = 0; + *(u8 *)(a0 + 0xDF) = 0; + func_80146CA0((void *)a0); + } +} + + +void func_80187E48(s32 a0) { + s32 pad[4]; + func_80149020((s32 *)a0); + func_80146DE8((s32 *)a0, 0, 0, 0); + func_80187E9C(a0); + func_80159B3C((void *)a0); + func_80165718(a0); +} + + +extern void func_8014BC44(s32 a0, s32 a1); +extern void func_80151664(void); + +void func_80187E9C(s32 a0) +{ + func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); + *(u8 *)(a0 + 0xA8) = 0x20; + ((void (*)(s32))func_80151664)(a0); +} + + + +extern void (*D_801C3D18[])(void); + +void func_80187EDC(void *a0) { + D_801C3D18[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_80187F48(); +extern void func_80146CA0(void *a0); + +void func_80187F18(s32 arg) { + func_80187F48(arg); + ((void (*)(s32))func_80146CA0)(arg); +} + + +extern void func_80019064(void *a0); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_80147324(s32 a0); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80146CA0(void *a0); +extern s32 D_80062C14; +extern M2C_UNK D_800D5904; + +s32 func_80187F48(s32 arg0) +{ + func_80019064(&D_80062C14); + func_80154274((s32 *)arg0, (s32)&D_800D5904); + func_80154A74(arg0, 0x20); + *(u32 *)(arg0 + 0x234) = 0; + ((void (*)(s32, s32))func_801477E8)((s32 *)arg0, 0xFFC00000); + func_80149020((s32 *)arg0); + func_80147324(0x451); + func_80146E90((s32 *)arg0, 0x12C); + func_80146CA0((void *)arg0); +} + + +extern void func_80149020(s32 *a0); +extern void func_80148038(s32 a0, s32 a1); +extern void func_80147460(s32 a0); +extern s32 func_801535F4(void *a0); +extern s32 func_80146E98(s32 a0); +extern int func_801511E0(int arg); +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_8013C9C4(void *a0); +extern void func_80146CA0(void *a0); +extern s32 D_801C3D28; + +void func_80187FCC(s32 arg0) +{ + s32 s0 = arg0; + s32 v0; + s32 v1; + s32 pad[8]; + + func_80149020((s32 *)arg0); + + v1 = *(s32 *)(s0 + 0x20); + *(u16 *)(v1 + 0x12) = (*(u16 *)(v1 + 0x12) + 0x5B) & 0xFFF; + + v1 = *(s32 *)(s0 + 0x20); + *(u16 *)(v1 + 0x10) = (*(u16 *)(v1 + 0x10) - 0x16) & 0xFFF; + + v1 = *(s32 *)(s0 + 0x20); + if (*(s16 *)(v1 + 0x10) < 0xC00) { + v0 = -0x400; + *(u16 *)(v1 + 0x10) = v0; + } + + func_80148038((s32)s0, 0x10000); + func_80147460((s32)s0); + + if (*(s32 *)(s0 + 0x234) == 0) { + if (*(s32 *)(s0 + 0x34) >= 0) { + if ((*(u16 *)(s0 + 0xB8) & 0x8000) != 0) { + *(u16 *)(s0 + 0xB8) = *(u16 *)(s0 + 0xBA); + } + } + } + + v0 = func_801535F4((void *)s0); + if (v0 == 0) { + goto L801880AC; + } + if (v0 < 0) { + goto L801880AC; + } + if (v0 < 3) { + goto L801880BC; + } +L801880AC: + v0 = func_80146E98((s32)s0); + if (v0 == 0) { + return; + } +L801880BC: + func_801511E0((s32)s0); + func_80146E90((s32 *)s0, 0x1E); + func_8013C9C4((void *)&D_801C3D28); + func_80146CA0((void *)s0); + (void)pad; +} + + +extern s32 func_80146E98(s32 a0); +extern s32 func_80188168(); +extern void func_80159B3C(void *a0); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80165718(s32 a0); + +void func_801880FC(s32 arg0) { + if (func_80146E98(arg0) != 0) { + func_80188168(arg0); + func_80159B3C((void *)arg0); + func_80146A6C(2, arg0, 0, 0, 0, 1, 0); + func_80165718(arg0); + } +} + + +extern void func_8014BC44(s32 a0, s32 a1); +extern void func_80151664(void); + +s32 func_80188168(s32 a0) +{ + s32 s0 = a0; + + func_8014BC44(s0, *(s16 *)(s0 + 0xF2)); + *(u16 *)(*(s32 *)(s0 + 0x20) + 0x10) = 0; + *(u8 *)(s0 + 0xA8) = 0x20; + ((void (*)(s32))func_80151664)(s0); +} + + + +extern void (*D_801C3D3C[])(void); + +void func_801881B0(void *a0) { + D_801C3D3C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8014E934(s32 a0); +extern void func_8014CC28(s32 a0); +extern s32 func_8014F3E8(s32 a0); +extern void func_80188234(s32 a0); +extern void func_80146CA0(void *a0); +void func_801881EC(s32 a0) { + func_8014E934(a0); + func_8014CC28(a0); + func_8014F3E8(a0); + func_80188234(a0); + func_80146CA0((void *)a0); +} + + +extern void func_80146E90(s32 *a0, s32 a1); +extern void func_80019064(void *a0); +extern int func_801511E0(int arg); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern void func_80149020(s32 *a0); +extern void func_8001382C(s32 a0, void *a1, void *a2); +extern void func_80146DB8(s32 *a0, s32 *a1); +extern void func_801477E8(s32 *a0, s32 a1); +extern void func_80147324(s32 a0); +extern void func_80146CA0(void *a0); +extern u8 D_80062C04[]; +extern M2C_UNK D_800D5880; +extern s32 D_800D58AC; +extern u8 D_801C3D48[]; +extern s32 D_801C3D54; + +void func_80188234(s32 arg0) +{ + s32 pad[4]; + s32 buf[4]; + register s32 s0a __asm__("$16"); /* $s0 = buf */ + + ((void (*)(s32, s32))func_80146E90)(arg0, 0x12); + func_80019064(&D_80062C04); + func_801511E0(arg0); + if ((s16)func_80012A60((s32)*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12), + (s32)*(s16 *)(arg0 + 0xF4)) >= 0x401) { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D5880); + } else { + ((void (*)(s32, s32))func_80154274)(arg0, (s32)&D_800D58AC); + } + func_80154A74(arg0, 0x16); + ((void (*)(s32))func_80149020)(arg0); + s0a = (s32)buf; + ((void (*)(s32, s32, s32))func_8001382C)((*(u16 *)(arg0 + 0xF4) - *(u16 *)(*(s32 *)(arg0 + 0x20) + 0x12)) & 0xFFF, + (s32)&D_801C3D48, s0a); + ((void (*)(s32, s32))func_80146DB8)(arg0, s0a); + ((void (*)(s32, s32))func_801477E8)(arg0, *(s32 *)(&D_801C3D54)); + func_80147324(0x451); + ((void (*)(s32))func_80146CA0)(arg0); + (void)pad; +} + + +extern void func_80188468(s32 a0); + +void func_80188334(s32 arg0) +{ + int iVar1; + func_80149020(arg0); + if (*(int *)(arg0 + 0x1c) == 0) { + if (*(unsigned short *)(arg0 + 0xb8) == 0x8000) { + func_80188468(arg0); + func_80159B3C(arg0); + goto LAB_8018844c; + } + } else { + *(int *)(arg0 + 0x1c) = *(int *)(arg0 + 0x1c) + -1; + } + func_80147A84(arg0); + func_801473EC(arg0); + func_80148038(arg0, 0x8000); + func_80146A6C(3, arg0, *(s16 *)(arg0 + 6), + ((s32)(*(u16 *)(arg0 + 0xA) - 0x10) << 16) >> 16, + *(s16 *)(arg0 + 0xE), 0x080FFFF8, 0xE000B000); + func_80147460(arg0); + iVar1 = func_801535F4(arg0); + if (iVar1 == 1) goto LAB_80188418; + if (iVar1 < 2) return; + if (iVar1 == 2) goto LAB_80188430; + return; +LAB_80188418: + func_80188468(arg0); + func_80159B3C(arg0); + goto LAB_80188444; +LAB_80188430: + func_80188468(arg0); + func_8015BF48(arg0); +LAB_80188444: + func_8014C010(arg0, 1); +LAB_8018844c: + func_80165718(arg0); + return; +} + + +extern void func_8014BC44(s32 a0, s32 a1); +extern void func_80151664(void); + +void func_80188468(s32 a0) +{ + func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); + *(u8 *)(a0 + 0xA8) = 0x20; + ((void (*)(s32))func_80151664)(a0); +} + + + +extern void (*D_801C3DD8[])(void); + +void func_801884A8(void *a0) { + D_801C3DD8[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_8014E934(s32 a0); +extern void func_8014CC28(s32 a0); +extern s32 func_8014F3E8(s32 a0); +extern void func_8018852C(s32 a0); +extern void func_80146CA0(void *a0); +void func_801884E4(s32 a0) { + func_8014E934(a0); + func_8014CC28(a0); + func_8014F3E8(a0); + func_8018852C(a0); + func_80146CA0((void *)a0); +} + + +extern u8 D_80062BF4[]; +extern s32 D_800D5880; +extern s32 D_800D58AC; +extern void func_80019064(void *a0); +extern void func_80149020(s32 *a0); +extern void func_80147324(s32 a0); +extern int func_801511E0(int a0); +extern s32 func_80012A60(s32 a0, s32 a1); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_80154A74(s32 a0, s32 a1); +extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); +extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); +extern void func_80146CA0(void *a0); + +void func_8018852C(s32 a0) +{ + s32 s1; + s32 s0; + + s1 = a0; + func_80019064(D_80062BF4); + func_80149020((s32 *)s1); + func_80147324(0x451); + func_801511E0(s1); + if ((s16)func_80012A60(*(s16 *)(*(s32 *)(s1 + 0x20) + 0x12), *(s16 *)(s1 + 0xF4)) >= 0x401) { + func_80154274((s32 *)s1, (s32)&D_800D5880); + } else { + func_80154274((s32 *)s1, (s32)&D_800D58AC); + } + s0 = 1; + func_80154A74(s1, 0x16); + func_80149020((s32 *)s1); + func_80146994(0x42, s1, 0, 0); + func_80146A6C(0x42, (void *)s1, 0x20, 0, 0, s0, 0); + func_80146A6C(0x42, (void *)s1, 0, 0, 0x20, s0, 0); + func_80146A6C(0x42, (void *)s1, -0x20, 0, 0, s0, 0); + func_80146A6C(0x42, (void *)s1, 0, 0, -0x20, s0, 0); + func_80146CA0((void *)s1); +} + + +#include "common.h" + +extern void func_801886F4(); +extern void func_80149020(s32 *a0); +extern void func_80159B3C(void *a0); +extern M2C_UNK D_800D5880; +extern void func_801542DC(s32 *a0, s32 a1); +extern u8 D_800D46E4[]; +extern void func_80165718(s32 a0); + +void func_80188680(s32 *arg0) +{ + func_80149020(arg0); + if (*(u16 *)((s32)arg0 + 0xB8) == 0x8000) { + func_801886F4(arg0); + func_80159B3C(arg0); + if (*(s32 *)((s32)arg0 + 0xB4) == (s32)&D_800D5880) { + ((void (*)(s32 *, s32, s32))func_801542DC)(arg0, (s32)D_800D46E4, 0xE); + } + func_80165718(arg0); + } +} + + +extern void func_8014BC44(s32 a0, s32 a1); +extern void func_80151664(void); + +void func_801886F4(s32 a0) +{ + func_8014BC44(a0, *(s16 *)(a0 + 0xF2)); + *(u8 *)(a0 + 0xA8) = 0x20; + ((void (*)(s32))func_80151664)(a0); +} + + + +extern void (*D_801C3E40[])(void); + +void func_80188734(void *a0) { + D_801C3E40[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern void func_801465C0(void); +extern void func_80146C3C(void); +extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); +extern void func_80128EA8(s32 a0, s32 a1, s32 a2); +extern void func_8018890C(s32 a0); +extern u8 D_801C3DE4[]; +extern u8 D_801C3DF0[]; + +void func_80188770(s32 param_1) +{ + s32 ret; + u8 *w; + + ret = ((s32 (*)(void))func_801465C0)(); + if (ret == 0) { + ((void (*)(s32))func_80146C3C)(param_1); + } + *(s32 *)(param_1 + 0x20) = ret; + func_8001CC3C(ret, (s32)&D_801C3DE4, 0x270, 0x100); + *(u8 *)(ret + 0x27) = 0x9B; + *(u32 *)(ret + 4) = *(u32 *)(ret + 4) | 0x50000000; + if (*(s32 *)(param_1 + 0x2C) == 0) { + *(u16 *)(ret + 0x1A) = 0x3000; + *(u16 *)(ret + 0x18) = 0x3000; + } + w = (u8 *)ret; + w[0x25] = 0xC0; + w[0x26] = 0x40; + w[0x24] = 0x40; + func_80128EA8((s32)w, param_1 + 0x24, (s32)&D_801C3DF0); + *(s32 *)(param_1 + 0x14) = 0xfffc0000; + func_8018890C(param_1); + *(volatile s16 *)(param_1 + 2) = *(volatile s16 *)(param_1 + 2) + 1; +} + + +extern s32 func_80128ED8(s32 param_1, s32 *param_2); +extern void func_80146C3C(void); + +void func_80188848(void *a0) { + s32 s1; + u8 v26, v25; + + s1 = *(s32 *)((s32)a0 + 0x20); + if (func_80128ED8(s1, (s32 *)((s32)a0 + 0x24)) != 0) { + ((void (*)(s32))func_80146C3C)((s32)a0); + } else { + *(s32 *)((s32)a0 + 0x14) += -0x8000; + *(s32 *)((s32)a0 + 0x8) += *(s32 *)((s32)a0 + 0x14); + *(u16 *)((s32)s1 + 0x18) += 0x500; + if (*(s32 *)((s32)a0 + 0x2C) == 0) { + *(u16 *)((s32)s1 + 0x1A) += 0x300; + } else { + *(u16 *)((s32)s1 + 0x1A) += 0x600; + } + v26 = *(u8 *)((s32)s1 + 0x26); + v25 = *(u8 *)((s32)s1 + 0x25); + v26 -= 4; + v25 -= 8; + *(u8 *)((s32)s1 + 0x26) = v26; + *(u8 *)((s32)s1 + 0x24) = v26; + *(u8 *)((s32)s1 + 0x25) = v25; + } +} + + +void func_8018890C(s32 a0) { + func_80149374(*(s32 *)((char *)a0 + 0x34), (s32)((char *)a0 + 0x4)); + if (*(s32 *)((char *)a0 + 0x2C) != 0) { + return; + } + func_800D1FC8(a0, 5); +} + + + + + + +