mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-07 01:18:49 -04:00
feat(phase-29): wave22 families swept 548/548 (R22 140/140) — parallel gating proven at scale
4 families x 137 members: BANKED 548 / 0 failed. R22 clean-fleet 140 passed / 0 failed of 140.
MEASURED: fn-count 318,859 -> 319,412 (+553); instr-weighted 84.4 -> 84.7% (+36,640 ins);
distinct-code 74.4 -> 74.5% (+134 unique fns).
TODAY'S PARALLEL GATE WIRING PROVED AT SCALE: this run reported `gating 411 group(s) across distinct
binaries, -j12`. When I shipped it earlier I could only smoke-test 4 fail-fast groups and said
explicitly that the 1.5x measured there was NOT the 8-16x claim; 411 full build-and-gate cycles is
the shape the claim was about.
A PERFECT 548/548 also says the wave's exemplars were right for the right reasons — a body that
templates across 137 byte-variant siblings with zero rejections is not a marginal match.
BAND NOTE: the first sweep attempt used --band substantial and staged NOTHING; these exemplars are
60-76 ins, i.e. the MID band (substantial is >=80). The tool reported that honestly
("0 matched-exemplar families (band=substantial); 0 candidate members") rather than returning a
clean-looking 0 banked — the skip-vs-result distinction this session kept running into.
This commit is contained in:
@@ -13,9 +13,7 @@
|
||||
{"ts": "2026-06-21 22:01:56", "addr": "0x80174cb0", "name": "func_80174CB0", "reach": 134, "klass": "regalloc-order", "nins": 123, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (match_one 123/123). Levers: (1) \u00a721 one combined stack struct {s32 a[5]; ...}", "best_draft": ".run/backlog_drafts/func_80174CB0.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-14 12:56:18", "addr": "0x8014d610", "name": "func_8014D610", "reach": 134, "klass": "WAVE", "nins": 74, "status": "near", "closeness": 60, "where_stuck": "WAVE: 60 mismatch", "best_draft": ".run/backlog_drafts/func_8014D610.c", "binary": "ov_SC01_077", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-22 00:05:13", "addr": "0x8016163c", "name": "func_8016163C", "reach": 134, "klass": "plumbing", "nins": 78, "status": "near", "closeness": 50, "where_stuck": "none \u2014 MATCH (78 ins). First arm calls func_801599A4 with NO arg (asm nop delay slot) via fn-ptr cast ((void(*)(void))func_801599A4)().", "best_draft": ".run/backlog_drafts/func_8016163C.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-24 14:33:44", "addr": "0x80163534", "name": "func_80163534", "reach": 138, "klass": "schedule", "nins": 76, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (76 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_80163534.c", "binary": "ov_SC07_006", "source": "t6-recover", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-22 03:29:52", "addr": "0x80140d68", "name": "func_80140D68", "reach": 134, "klass": "schedule", "nins": 65, "status": "near", "closeness": 5, "where_stuck": "5-ins near-miss \u2014 gcc hoists `lui 0xff00` (the 0xFF000000 mask) one slot too early in the first AddPrim block, so the D_800B9A02 index value lands in $v1 instead of $a1 and *param_1 is read late (idx 35-43). Structure + regs otherwise byte-exact (frame eliminated via struct-array D_800AE7BC, &D_800B9A02 held in $a2 via the pB $6 pin, param_1+8 grouping fixes the rest). Pure sched1 list-order residual -> permuter candidate (try reg-hint + reorder around the lui 0xff00 / lw 0($a0) pair).", "best_draft": ".run/backlog_drafts/func_80140D68.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-24 14:33:44", "addr": "0x8014a738", "name": "func_8014A738", "reach": 138, "klass": "struct", "nins": 62, "status": "near", "closeness": 11, "where_stuck": "wip", "best_draft": ".run/backlog_drafts/func_8014A738.c", "binary": "ov_SC07_006", "source": "t6-recover", "residual": [[9, "00002821 move\ta1,zero", "00003021 addu $a2, $zero, $zero"], [11, "3c060000 lui\ta2,0x0", "3c058012 lui $a1, %hi(D_801202A0)"], [12, "24c6000e addiu\ta2,a2,14", "24a502a0 addiu $a1, $a1, %lo(D_801202A0)"], [13, "90c200b3 lbu\tv0,179(a2)", "90a200c1 lbu $v0, 0xC1($a1)"], [18, "94c2fff8 lhu\tv0,-8(a2)", "94a20006 lhu $v0, 0x6($a1)"], [23, "94c30000 lhu\tv1,0(a2)", "94a3000e lhu $v1, 0xE($a1)"], [34, "24a50001 addiu\ta1,a1,1", "24c60001 addiu $a2, $a2, 0x1"], [47, "24a50001 addiu\ta1,a1,1", "24c60001 addiu $a2, $a2, 0x1"], [52, "24a50001 addiu\ta1,a1,1", "24c60001 addiu $a2, $a2, 0x1"], [53, "2ca20060 sltiu\tv0,a1,96", "2cc20060 sltiu $v0, $a2, 0x60"], [55, "24c6010c addiu\ta2,a2,268", "24a5010c addiu $a1, $a1, 0x10C"]], "passes_tried": null}
|
||||
{"ts": "2026-06-22 00:05:13", "addr": "0x80161774", "name": "func_80161774", "reach": 134, "klass": "plumbing", "nins": 69, "status": "near", "closeness": 53, "where_stuck": "none \u2014 MATCH (69 ins, match_one verified; clean nested-if; param_1 -> $s0 call-crossing)", "best_draft": ".run/backlog_drafts/func_80161774.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-22 00:53:10", "addr": "0x8014e5b4", "name": "func_8014E5B4", "reach": 134, "klass": "regalloc-order", "nins": 59, "status": "near", "closeness": 23, "where_stuck": "none \u2014 MATCH", "best_draft": ".run/backlog_drafts/func_8014E5B4.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-22 00:53:11", "addr": "0x801759d8", "name": "func_801759D8", "reach": 134, "klass": "schedule", "nins": 56, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (56 ins)", "best_draft": ".run/backlog_drafts/func_801759D8.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
@@ -61,10 +59,8 @@
|
||||
{"ts": "2026-06-23 10:33:31", "addr": "0x80159a20", "name": "func_80159A20", "reach": 1, "klass": "struct", "nins": 58, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH. Key lever: block tail-MERGE (gcc shared `bne ...,$L1` cross-jump) by making the two return-tests STRUCTURALLY DIFFERENT \u2014 positive `if(==){goto mask;} return;` per branch (not `if(!=) return;`), so neither tail can merge. Then fix block ORDER by inverting the outer test (`if(d!=1)` makes the ==4/return path the inline fall-through, the d==1/p[2] path the forward `beq`-target block \u2014 matching the target layout).", "best_draft": ".run/backlog_drafts/func_80159A20.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-23 10:33:31", "addr": "0x8015fbe0", "name": "func_8015FBE0", "reach": 1, "klass": "schedule", "nins": 58, "status": "near", "closeness": 1, "where_stuck": "none \u2014 MATCH", "best_draft": ".run/backlog_drafts/func_8015FBE0.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-23 10:33:31", "addr": "0x80183cf4", "name": "func_80183CF4", "reach": 1, "klass": "struct", "nins": 57, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (clean switch + jtbl; orchestrator owns jtbl/rodata migration)", "best_draft": ".run/backlog_drafts/func_80183CF4.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-23 11:48:02", "addr": "0x80148e54", "name": "func_80148E54", "reach": 1, "klass": "regalloc-order", "nins": 67, "status": "near", "closeness": 40, "where_stuck": "67/67 ins, structure+branches+block-order+body-reload all match; residual is pure register-allocation order (permuter-eligible, no register-pins). (1) masked first-angle folds andi->$s1; target keeps it in $a0 then copies addu $s1,$a0 lazily into the beq delay-slot (the s1-copy schedules 1 slot later). (2) the 0x80 const is CSE-held in $a2 across both test+body; target re-materializes 0x80 in $v0 per block (it gets clobbered by `srl v0,v1,8`), which both renames the compare regs ($v0 not $a2) AND fills the body's reload load-delay slot (mine emits a nop there). (3) single-exit ret funnels $v1->$v0 (move v0,v1) where target writes $v0 directly. All three are gcc regalloc/value-prop tie-breaks no C reshape steered (tried: $v0 pin, temp-split, low-mask-reuse compare, memory-clobber-vs-volatile reload) \u2014 leave for the permuter.", "best_draft": ".run/backlog_drafts/func_80148E54.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-23 11:48:02", "addr": "0x80177da8", "name": "func_80177DA8", "reach": 1, "klass": "remat", "nins": 63, "status": "near", "closeness": 58, "where_stuck": "gcc narrows `&0xfffffeff` on a 16-bit (lhu) value to `andi 0xfeff` (inline), but target hoisted -0x101 into $t4 (and-reg) in the loop preheader \u2014 a gcc-2.7.2 LICM-before-combine pass-ordering quirk unsteerable from C; that 1-ins gap cascades the constant-reg numbering + tail reassoc. Secondary: single-IV loop ptr anchors at +0xA (short, 2 accesses) not +0xC (byte) like target.", "best_draft": ".run/backlog_drafts/func_80177DA8.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-23 11:09:10", "addr": "0x801842c8", "name": "func_801842C8", "reach": 1, "klass": "plumbing", "nins": 62, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH", "best_draft": ".run/backlog_drafts/func_801842C8.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-23 11:48:02", "addr": "0x80171b4c", "name": "func_80171B4C", "reach": 1, "klass": "schedule", "nins": 70, "status": "near", "closeness": 3, "where_stuck": "3-off in the tail only (body+prologue MATCH via $s1 pin on arg1). gcc fills the", "best_draft": ".run/backlog_drafts/func_80171B4C.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-25 20:30:02", "addr": "0x8017f114", "name": "func_8017F114", "reach": 1, "klass": "regalloc-order", "nins": 75, "status": "near", "closeness": 1, "where_stuck": "none \u2014 MATCH", "best_draft": ".run/backlog_drafts/func_8017F114.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-14 12:56:21", "addr": "0x80161a90", "name": "func_80161A90", "reach": 134, "klass": "O1", "nins": 34, "status": "near", "closeness": 26, "where_stuck": "WAVE: 26 mismatch", "best_draft": ".run/backlog_drafts/func_80161A90.c", "binary": "ov_SC01_077", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-23 12:17:56", "addr": "0x80162ccc", "name": "func_80162CCC", "reach": 134, "klass": "plumbing", "nins": 23, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH expected; direct translation, psVar1 as u16* gives lhu, $s0=param_1 survives both calls", "best_draft": ".run/backlog_drafts/func_80162CCC.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
@@ -73,7 +69,6 @@
|
||||
{"ts": "2026-06-24 20:13:27", "addr": "0x8012e014", "name": "func_8012E014", "reach": 134, "klass": "other", "nins": 73, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (expected; straightforward struct-field + global-copy body)", "best_draft": ".run/backlog_drafts/func_8012E014.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-14 12:56:15", "addr": "0x80132f40", "name": "func_80132F40", "reach": 134, "klass": "STRUCT", "nins": 72, "status": "near", "closeness": 59, "where_stuck": "STRUCT: 59 mismatch", "best_draft": ".run/backlog_drafts/func_80132F40.c", "binary": "ov_SC01_077", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-24 20:13:28", "addr": "0x80133298", "name": "func_80133298", "reach": 134, "klass": "struct", "nins": 65, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (65 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_80133298.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-24 21:52:35", "addr": "0x8012a328", "name": "func_8012A328", "reach": 134, "klass": "schedule", "nins": 60, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (60 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_8012A328.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-24 22:47:48", "addr": "0x8012b77c", "name": "func_8012B77C", "reach": 134, "klass": "schedule", "nins": 58, "status": "near", "closeness": 33, "where_stuck": "gcc instruction-scheduler load-ordering + 1st-ratan2 delay-slot fill differ (s2 subtraction lands early instead of in the delay slot; `lh s1,2(a2)` hoisted ahead of the iVar8 loads). All regs/ops correct (result pinned $s4 reads uninit then RMW-builds the u32; iVar8 unpinned so both halves load to temps -> `subu s5,v1,v0`). Residual is the \u00a720 store-vs-load/delay-slot scheduler tie-break (source reorder/barrier/precompute all tried, do not move it); ~3-4 real slots, count inflated by offset cascade. move==addu rd,rs,zero byte-identical.", "best_draft": ".run/backlog_drafts/func_8012B77C.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-24 14:33:43", "addr": "0x8012f49c", "name": "func_8012F49C", "reach": 138, "klass": "regalloc-order", "nins": 51, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (51 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_8012F49C.c", "binary": "ov_SC07_006", "source": "t6-recover", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-06-24 21:52:36", "addr": "0x801376e8", "name": "func_801376E8", "reach": 134, "klass": "schedule", "nins": 51, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (51 ins). 3 levers: (1) adjacent-field array u16 D_80126A14[] for A14/A16", "best_draft": ".run/backlog_drafts/func_801376E8.c", "binary": null, "source": "worker", "residual": null, "passes_tried": null}
|
||||
|
||||
+1671
-1676
File diff suppressed because it is too large
Load Diff
+144
-144
@@ -4,157 +4,157 @@
|
||||
# cross-binary collapsible-byte leverage: docs/duplicates.cross.md.
|
||||
|
||||
# THREE progress metrics (all matter — see the labels):
|
||||
FLEET fn-count byte-ident: 318859 / 353720 = 90.14% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 11091367 / 13141652 = 84.4% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET distinct-code(uniq): 4191294 / 5634875 = 74.4% (66761/87459 unique fns; the DISTINCT-RE number)
|
||||
FLEET fn-count byte-ident: 319412 / 353720 = 90.30% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 11128007 / 13141652 = 84.7% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET distinct-code(uniq): 4200272 / 5634875 = 74.5% (66895/87459 unique fns; the DISTINCT-RE number)
|
||||
MAIN game-code weighted : 436 / 60201 = 0.7% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-06-14; caveat is R34: no independent second oracle for a PS-X EXE, NOT drift)
|
||||
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 11090931 / 13081451 = 84.8%)
|
||||
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 11127571 / 13081451 = 85.1%)
|
||||
|
||||
FLEET REAL substantive : 317004 (of which dedup-shared 239530 via 1886 groups / 239604 instances)
|
||||
FLEET REAL substantive : 317557 (of which dedup-shared 239530 via 1886 groups / 239604 instances)
|
||||
FLEET LINKED PsyQ objs : 959
|
||||
FLEET NON_MATCHING : 7 (0 in any default build — G4)
|
||||
FLEET INCLUDE_ASM stubs : 34854
|
||||
FLEET INCLUDE_ASM stubs : 34301
|
||||
FLEET matchable : 353720
|
||||
|
||||
| binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % |
|
||||
|---|---:|---:|---:|---:|---:|---:|
|
||||
| main | 54 | 2 | 959 | 1055 | 2096 | 50.3% |
|
||||
| resident | 129 | 0 | 0 | 131 | 145 | 90.3% |
|
||||
| ov_SC01_000 | 2271 | 1742 | 0 | 2271 | 2403 | 94.5% |
|
||||
| ov_SC01_001 | 2276 | 1743 | 0 | 2278 | 2466 | 92.4% |
|
||||
| ov_SC01_004 | 2266 | 1734 | 0 | 2267 | 2414 | 93.9% |
|
||||
| ov_SC01_005 | 2296 | 1757 | 0 | 2296 | 2503 | 91.7% |
|
||||
| ov_SC01_006 | 2296 | 1757 | 0 | 2296 | 2503 | 91.7% |
|
||||
| ov_SC01_008 | 2266 | 1734 | 0 | 2268 | 2426 | 93.5% |
|
||||
| ov_SC01_009 | 2292 | 1735 | 0 | 2293 | 2507 | 91.5% |
|
||||
| ov_SC01_074 | 2270 | 1735 | 0 | 2272 | 2425 | 93.7% |
|
||||
| ov_SC01_077 | 2449 | 1702 | 0 | 2451 | 2585 | 94.8% |
|
||||
| ov_SC01_080 | 2308 | 1738 | 0 | 2308 | 2512 | 91.9% |
|
||||
| ov_SC01_084 | 2315 | 1738 | 0 | 2320 | 2579 | 90.0% |
|
||||
| ov_SC02_000 | 2368 | 1773 | 0 | 2368 | 2683 | 88.3% |
|
||||
| ov_SC02_003 | 2368 | 1773 | 0 | 2368 | 2683 | 88.3% |
|
||||
| ov_SC02_004 | 2274 | 1738 | 0 | 2274 | 2401 | 94.7% |
|
||||
| ov_SC02_005 | 2382 | 1734 | 0 | 2392 | 2927 | 81.7% |
|
||||
| ov_SC02_011 | 2395 | 1741 | 0 | 2406 | 2893 | 83.2% |
|
||||
| ov_SC02_015 | 2276 | 1740 | 0 | 2276 | 2414 | 94.3% |
|
||||
| ov_SC02_016 | 2310 | 1740 | 0 | 2313 | 2545 | 90.9% |
|
||||
| ov_SC02_017 | 2354 | 1740 | 0 | 2362 | 2732 | 86.5% |
|
||||
| ov_SC02_021 | 2282 | 1740 | 0 | 2282 | 2437 | 93.6% |
|
||||
| ov_SC02_026 | 2297 | 1738 | 0 | 2303 | 2572 | 89.5% |
|
||||
| ov_SC02_027 | 2320 | 1738 | 0 | 2329 | 2692 | 86.5% |
|
||||
| ov_SC02_028 | 2322 | 1738 | 0 | 2332 | 2701 | 86.3% |
|
||||
| ov_SC02_031 | 2308 | 1739 | 0 | 2313 | 2562 | 90.3% |
|
||||
| ov_SC02_035 | 2283 | 1738 | 0 | 2286 | 2520 | 90.7% |
|
||||
| ov_SC02_039 | 2267 | 1738 | 0 | 2267 | 2416 | 93.8% |
|
||||
| ov_SC02_041 | 2305 | 1738 | 0 | 2308 | 2561 | 90.1% |
|
||||
| ov_SC03_001 | 2402 | 1739 | 0 | 2419 | 2869 | 84.3% |
|
||||
| ov_SC03_002 | 2328 | 1743 | 0 | 2343 | 2631 | 89.1% |
|
||||
| ov_SC03_003 | 2277 | 1738 | 0 | 2278 | 2423 | 94.0% |
|
||||
| ov_SC03_006 | 2345 | 1744 | 0 | 2354 | 2767 | 85.1% |
|
||||
| ov_SC03_007 | 2322 | 1738 | 0 | 2326 | 2623 | 88.7% |
|
||||
| ov_SC03_010 | 2285 | 1738 | 0 | 2285 | 2471 | 92.5% |
|
||||
| ov_SC03_011 | 2291 | 1738 | 0 | 2297 | 2527 | 90.9% |
|
||||
| ov_SC03_012 | 2269 | 1738 | 0 | 2270 | 2406 | 94.3% |
|
||||
| ov_SC03_013 | 2290 | 1738 | 0 | 2290 | 2493 | 91.9% |
|
||||
| ov_SC03_014 | 2348 | 1763 | 0 | 2348 | 2685 | 87.4% |
|
||||
| ov_SC03_015 | 2348 | 1763 | 0 | 2348 | 2685 | 87.4% |
|
||||
| ov_SC03_023 | 2276 | 1738 | 0 | 2277 | 2435 | 93.5% |
|
||||
| ov_SC03_024 | 2336 | 1743 | 0 | 2343 | 2641 | 88.7% |
|
||||
| ov_SC03_028 | 2316 | 1738 | 0 | 2320 | 2664 | 87.1% |
|
||||
| ov_SC03_029 | 2318 | 1740 | 0 | 2328 | 2644 | 88.0% |
|
||||
| ov_SC03_030 | 2291 | 1743 | 0 | 2293 | 2495 | 91.9% |
|
||||
| ov_SC03_031 | 2287 | 1738 | 0 | 2290 | 2514 | 91.1% |
|
||||
| ov_SC03_089 | 2304 | 1738 | 0 | 2311 | 2581 | 89.5% |
|
||||
| ov_SC03_090 | 2305 | 1738 | 0 | 2313 | 2625 | 88.1% |
|
||||
| ov_SC03_091 | 2308 | 1738 | 0 | 2316 | 2640 | 87.7% |
|
||||
| ov_SC03_092 | 2318 | 1738 | 0 | 2330 | 2587 | 90.1% |
|
||||
| ov_SC03_093 | 2294 | 1738 | 0 | 2298 | 2563 | 89.7% |
|
||||
| ov_SC03_094 | 2289 | 1738 | 0 | 2295 | 2577 | 89.1% |
|
||||
| ov_SC03_095 | 2279 | 1738 | 0 | 2282 | 2474 | 92.2% |
|
||||
| ov_SC03_096 | 2279 | 1738 | 0 | 2282 | 2465 | 92.6% |
|
||||
| ov_SC03_097 | 2309 | 1738 | 0 | 2316 | 2603 | 89.0% |
|
||||
| ov_SC03_098 | 2287 | 1738 | 0 | 2290 | 2541 | 90.1% |
|
||||
| ov_SC03_099 | 2280 | 1738 | 0 | 2283 | 2504 | 91.2% |
|
||||
| ov_SC03_100 | 2290 | 1738 | 0 | 2294 | 2539 | 90.4% |
|
||||
| ov_SC03_101 | 2290 | 1738 | 0 | 2294 | 2528 | 90.7% |
|
||||
| ov_SC03_102 | 2283 | 1738 | 0 | 2286 | 2492 | 91.7% |
|
||||
| ov_SC03_103 | 2286 | 1740 | 0 | 2289 | 2510 | 91.2% |
|
||||
| ov_SC03_104 | 2312 | 1738 | 0 | 2319 | 2616 | 88.6% |
|
||||
| ov_SC03_105 | 2303 | 1738 | 0 | 2310 | 2597 | 88.9% |
|
||||
| ov_SC03_108 | 2270 | 1738 | 0 | 2270 | 2443 | 92.9% |
|
||||
| ov_SC03_109 | 2274 | 1738 | 0 | 2276 | 2424 | 93.9% |
|
||||
| ov_SC03_110 | 2278 | 1738 | 0 | 2278 | 2468 | 92.3% |
|
||||
| ov_SC03_111 | 2289 | 1738 | 0 | 2292 | 2510 | 91.3% |
|
||||
| ov_SC03_112 | 2285 | 1740 | 0 | 2287 | 2526 | 90.5% |
|
||||
| ov_SC03_113 | 2278 | 1740 | 0 | 2281 | 2468 | 92.4% |
|
||||
| ov_SC03_114 | 2267 | 1738 | 0 | 2269 | 2415 | 94.0% |
|
||||
| ov_SC03_115 | 2284 | 1738 | 0 | 2286 | 2472 | 92.5% |
|
||||
| ov_SC03_116 | 2275 | 1738 | 0 | 2278 | 2438 | 93.4% |
|
||||
| ov_SC03_117 | 2302 | 1738 | 0 | 2308 | 2557 | 90.3% |
|
||||
| ov_SC03_118 | 2348 | 1762 | 0 | 2349 | 2685 | 87.5% |
|
||||
| ov_SC03_119 | 2347 | 1762 | 0 | 2348 | 2685 | 87.4% |
|
||||
| ov_SC03_121 | 2282 | 1738 | 0 | 2285 | 2459 | 92.9% |
|
||||
| ov_SC03_124 | 2360 | 1734 | 0 | 2380 | 2741 | 86.8% |
|
||||
| ov_SC03_125 | 2316 | 1738 | 0 | 2328 | 2588 | 90.0% |
|
||||
| ov_SC03_126 | 2279 | 1740 | 0 | 2279 | 2423 | 94.1% |
|
||||
| ov_SC04_000 | 2295 | 1742 | 0 | 2304 | 2546 | 90.5% |
|
||||
| ov_SC04_002 | 2314 | 1738 | 0 | 2318 | 2636 | 87.9% |
|
||||
| ov_SC04_003 | 2290 | 1738 | 0 | 2294 | 2502 | 91.7% |
|
||||
| ov_SC04_004 | 2299 | 1738 | 0 | 2301 | 2558 | 90.0% |
|
||||
| ov_SC04_005 | 2309 | 1738 | 0 | 2315 | 2612 | 88.6% |
|
||||
| ov_SC04_006 | 2279 | 1738 | 0 | 2281 | 2454 | 93.0% |
|
||||
| ov_SC04_007 | 2303 | 1738 | 0 | 2307 | 2569 | 89.8% |
|
||||
| ov_SC04_008 | 2271 | 1738 | 0 | 2271 | 2415 | 94.0% |
|
||||
| ov_SC04_009 | 2286 | 1738 | 0 | 2289 | 2441 | 93.8% |
|
||||
| ov_SC04_010 | 2276 | 1738 | 0 | 2277 | 2419 | 94.1% |
|
||||
| ov_SC04_011 | 2334 | 1738 | 0 | 2340 | 2803 | 83.5% |
|
||||
| ov_SC04_012 | 2273 | 1738 | 0 | 2274 | 2420 | 94.0% |
|
||||
| ov_SC04_015 | 2338 | 1739 | 0 | 2349 | 2611 | 90.0% |
|
||||
| ov_SC04_016 | 2276 | 1738 | 0 | 2278 | 2440 | 93.4% |
|
||||
| ov_SC04_018 | 2386 | 1773 | 0 | 2386 | 2857 | 83.5% |
|
||||
| ov_SC04_019 | 2392 | 1773 | 0 | 2392 | 2857 | 83.7% |
|
||||
| ov_SC04_020 | 2303 | 1738 | 0 | 2315 | 2567 | 90.2% |
|
||||
| ov_SC04_021 | 2280 | 1740 | 0 | 2280 | 2423 | 94.1% |
|
||||
| ov_SC05_000 | 2277 | 1742 | 0 | 2280 | 2422 | 94.1% |
|
||||
| ov_SC05_001 | 2299 | 1738 | 0 | 2304 | 2574 | 89.5% |
|
||||
| ov_SC05_002 | 2282 | 1738 | 0 | 2285 | 2442 | 93.6% |
|
||||
| ov_SC05_003 | 2279 | 1738 | 0 | 2280 | 2481 | 91.9% |
|
||||
| ov_SC05_004 | 2275 | 1738 | 0 | 2277 | 2464 | 92.4% |
|
||||
| ov_SC05_005 | 2280 | 1738 | 0 | 2281 | 2491 | 91.6% |
|
||||
| ov_SC05_006 | 2273 | 1738 | 0 | 2273 | 2430 | 93.5% |
|
||||
| ov_SC05_007 | 2283 | 1738 | 0 | 2288 | 2482 | 92.2% |
|
||||
| ov_SC05_008 | 2300 | 1738 | 0 | 2302 | 2543 | 90.5% |
|
||||
| ov_SC05_009 | 2279 | 1738 | 0 | 2283 | 2438 | 93.6% |
|
||||
| ov_SC05_010 | 2306 | 1738 | 0 | 2310 | 2588 | 89.3% |
|
||||
| ov_SC05_011 | 2275 | 1738 | 0 | 2276 | 2409 | 94.5% |
|
||||
| ov_SC05_017 | 2382 | 1735 | 0 | 2393 | 2842 | 84.2% |
|
||||
| ov_SC05_018 | 2329 | 1738 | 0 | 2342 | 2673 | 87.6% |
|
||||
| ov_SC05_019 | 2280 | 1740 | 0 | 2280 | 2423 | 94.1% |
|
||||
| ov_SC06_000 | 2344 | 1747 | 0 | 2347 | 2691 | 87.2% |
|
||||
| ov_SC06_006 | 2296 | 1738 | 0 | 2297 | 2511 | 91.5% |
|
||||
| ov_SC06_008 | 2316 | 1740 | 0 | 2322 | 2542 | 91.3% |
|
||||
| ov_SC06_010 | 2296 | 1738 | 0 | 2301 | 2517 | 91.4% |
|
||||
| ov_SC06_011 | 2284 | 1738 | 0 | 2288 | 2468 | 92.7% |
|
||||
| ov_SC06_013 | 2278 | 1738 | 0 | 2279 | 2425 | 94.0% |
|
||||
| ov_SC06_014 | 2284 | 1738 | 0 | 2286 | 2453 | 93.2% |
|
||||
| ov_SC06_015 | 2281 | 1738 | 0 | 2281 | 2421 | 94.2% |
|
||||
| ov_SC06_016 | 2299 | 1738 | 0 | 2301 | 2549 | 90.3% |
|
||||
| ov_SC06_018 | 2310 | 1740 | 0 | 2317 | 2665 | 86.9% |
|
||||
| ov_SC06_020 | 2288 | 1740 | 0 | 2289 | 2518 | 90.9% |
|
||||
| ov_SC06_022 | 2307 | 1738 | 0 | 2315 | 2642 | 87.6% |
|
||||
| ov_SC06_024 | 2317 | 1738 | 0 | 2323 | 2667 | 87.1% |
|
||||
| ov_SC06_025 | 2301 | 1738 | 0 | 2306 | 2572 | 89.7% |
|
||||
| ov_SC06_027 | 2266 | 1738 | 0 | 2267 | 2408 | 94.1% |
|
||||
| ov_SC06_029 | 2327 | 1738 | 0 | 2339 | 2662 | 87.9% |
|
||||
| ov_SC06_030 | 2280 | 1738 | 0 | 2280 | 2456 | 92.8% |
|
||||
| ov_SC06_032 | 2302 | 1739 | 0 | 2309 | 2658 | 86.9% |
|
||||
| ov_SC06_033 | 2304 | 1739 | 0 | 2311 | 2631 | 87.8% |
|
||||
| ov_SC07_000 | 2295 | 1742 | 0 | 2297 | 2521 | 91.1% |
|
||||
| ov_SC07_001 | 2279 | 1738 | 0 | 2281 | 2454 | 93.0% |
|
||||
| ov_SC07_002 | 2307 | 1738 | 0 | 2311 | 2579 | 89.6% |
|
||||
| ov_SC07_006 | 2077 | 1555 | 0 | 2157 | 2456 | 87.8% |
|
||||
| ov_SC07_007 | 2072 | 1586 | 0 | 2156 | 2613 | 82.5% |
|
||||
| ov_SC07_008 | 2264 | 1738 | 0 | 2264 | 2386 | 94.9% |
|
||||
| ov_SC07_009 | 2273 | 1738 | 0 | 2275 | 2430 | 93.6% |
|
||||
| ov_SC07_010 | 2104 | 1608 | 0 | 2187 | 2524 | 86.6% |
|
||||
| ov_SC07_011 | 2072 | 1585 | 0 | 2152 | 2449 | 87.9% |
|
||||
| ov_SC01_000 | 2275 | 1742 | 0 | 2275 | 2403 | 94.7% |
|
||||
| ov_SC01_001 | 2280 | 1743 | 0 | 2282 | 2466 | 92.5% |
|
||||
| ov_SC01_004 | 2270 | 1734 | 0 | 2271 | 2414 | 94.1% |
|
||||
| ov_SC01_005 | 2300 | 1757 | 0 | 2300 | 2503 | 91.9% |
|
||||
| ov_SC01_006 | 2300 | 1757 | 0 | 2300 | 2503 | 91.9% |
|
||||
| ov_SC01_008 | 2270 | 1734 | 0 | 2272 | 2426 | 93.7% |
|
||||
| ov_SC01_009 | 2296 | 1735 | 0 | 2297 | 2507 | 91.6% |
|
||||
| ov_SC01_074 | 2274 | 1735 | 0 | 2276 | 2425 | 93.9% |
|
||||
| ov_SC01_077 | 2454 | 1702 | 0 | 2456 | 2585 | 95.0% |
|
||||
| ov_SC01_080 | 2312 | 1738 | 0 | 2312 | 2512 | 92.0% |
|
||||
| ov_SC01_084 | 2319 | 1738 | 0 | 2324 | 2579 | 90.1% |
|
||||
| ov_SC02_000 | 2372 | 1773 | 0 | 2372 | 2683 | 88.4% |
|
||||
| ov_SC02_003 | 2372 | 1773 | 0 | 2372 | 2683 | 88.4% |
|
||||
| ov_SC02_004 | 2278 | 1738 | 0 | 2278 | 2401 | 94.9% |
|
||||
| ov_SC02_005 | 2386 | 1734 | 0 | 2396 | 2927 | 81.9% |
|
||||
| ov_SC02_011 | 2399 | 1741 | 0 | 2410 | 2893 | 83.3% |
|
||||
| ov_SC02_015 | 2280 | 1740 | 0 | 2280 | 2414 | 94.4% |
|
||||
| ov_SC02_016 | 2314 | 1740 | 0 | 2317 | 2545 | 91.0% |
|
||||
| ov_SC02_017 | 2358 | 1740 | 0 | 2366 | 2732 | 86.6% |
|
||||
| ov_SC02_021 | 2286 | 1740 | 0 | 2286 | 2437 | 93.8% |
|
||||
| ov_SC02_026 | 2301 | 1738 | 0 | 2307 | 2572 | 89.7% |
|
||||
| ov_SC02_027 | 2324 | 1738 | 0 | 2333 | 2692 | 86.7% |
|
||||
| ov_SC02_028 | 2326 | 1738 | 0 | 2336 | 2701 | 86.5% |
|
||||
| ov_SC02_031 | 2312 | 1739 | 0 | 2317 | 2562 | 90.4% |
|
||||
| ov_SC02_035 | 2287 | 1738 | 0 | 2290 | 2520 | 90.9% |
|
||||
| ov_SC02_039 | 2271 | 1738 | 0 | 2271 | 2416 | 94.0% |
|
||||
| ov_SC02_041 | 2309 | 1738 | 0 | 2312 | 2561 | 90.3% |
|
||||
| ov_SC03_001 | 2406 | 1739 | 0 | 2423 | 2869 | 84.5% |
|
||||
| ov_SC03_002 | 2332 | 1743 | 0 | 2347 | 2631 | 89.2% |
|
||||
| ov_SC03_003 | 2281 | 1738 | 0 | 2282 | 2423 | 94.2% |
|
||||
| ov_SC03_006 | 2349 | 1744 | 0 | 2358 | 2767 | 85.2% |
|
||||
| ov_SC03_007 | 2326 | 1738 | 0 | 2330 | 2623 | 88.8% |
|
||||
| ov_SC03_010 | 2289 | 1738 | 0 | 2289 | 2471 | 92.6% |
|
||||
| ov_SC03_011 | 2295 | 1738 | 0 | 2301 | 2527 | 91.1% |
|
||||
| ov_SC03_012 | 2273 | 1738 | 0 | 2274 | 2406 | 94.5% |
|
||||
| ov_SC03_013 | 2294 | 1738 | 0 | 2294 | 2493 | 92.0% |
|
||||
| ov_SC03_014 | 2352 | 1763 | 0 | 2352 | 2685 | 87.6% |
|
||||
| ov_SC03_015 | 2352 | 1763 | 0 | 2352 | 2685 | 87.6% |
|
||||
| ov_SC03_023 | 2280 | 1738 | 0 | 2281 | 2435 | 93.7% |
|
||||
| ov_SC03_024 | 2340 | 1743 | 0 | 2347 | 2641 | 88.9% |
|
||||
| ov_SC03_028 | 2320 | 1738 | 0 | 2324 | 2664 | 87.2% |
|
||||
| ov_SC03_029 | 2322 | 1740 | 0 | 2332 | 2644 | 88.2% |
|
||||
| ov_SC03_030 | 2295 | 1743 | 0 | 2297 | 2495 | 92.1% |
|
||||
| ov_SC03_031 | 2291 | 1738 | 0 | 2294 | 2514 | 91.2% |
|
||||
| ov_SC03_089 | 2308 | 1738 | 0 | 2315 | 2581 | 89.7% |
|
||||
| ov_SC03_090 | 2309 | 1738 | 0 | 2317 | 2625 | 88.3% |
|
||||
| ov_SC03_091 | 2312 | 1738 | 0 | 2320 | 2640 | 87.9% |
|
||||
| ov_SC03_092 | 2322 | 1738 | 0 | 2334 | 2587 | 90.2% |
|
||||
| ov_SC03_093 | 2298 | 1738 | 0 | 2302 | 2563 | 89.8% |
|
||||
| ov_SC03_094 | 2293 | 1738 | 0 | 2299 | 2577 | 89.2% |
|
||||
| ov_SC03_095 | 2283 | 1738 | 0 | 2286 | 2474 | 92.4% |
|
||||
| ov_SC03_096 | 2283 | 1738 | 0 | 2286 | 2465 | 92.7% |
|
||||
| ov_SC03_097 | 2313 | 1738 | 0 | 2320 | 2603 | 89.1% |
|
||||
| ov_SC03_098 | 2291 | 1738 | 0 | 2294 | 2541 | 90.3% |
|
||||
| ov_SC03_099 | 2284 | 1738 | 0 | 2287 | 2504 | 91.3% |
|
||||
| ov_SC03_100 | 2294 | 1738 | 0 | 2298 | 2539 | 90.5% |
|
||||
| ov_SC03_101 | 2294 | 1738 | 0 | 2298 | 2528 | 90.9% |
|
||||
| ov_SC03_102 | 2287 | 1738 | 0 | 2290 | 2492 | 91.9% |
|
||||
| ov_SC03_103 | 2290 | 1740 | 0 | 2293 | 2510 | 91.4% |
|
||||
| ov_SC03_104 | 2316 | 1738 | 0 | 2323 | 2616 | 88.8% |
|
||||
| ov_SC03_105 | 2307 | 1738 | 0 | 2314 | 2597 | 89.1% |
|
||||
| ov_SC03_108 | 2274 | 1738 | 0 | 2274 | 2443 | 93.1% |
|
||||
| ov_SC03_109 | 2278 | 1738 | 0 | 2280 | 2424 | 94.1% |
|
||||
| ov_SC03_110 | 2282 | 1738 | 0 | 2282 | 2468 | 92.5% |
|
||||
| ov_SC03_111 | 2293 | 1738 | 0 | 2296 | 2510 | 91.5% |
|
||||
| ov_SC03_112 | 2289 | 1740 | 0 | 2291 | 2526 | 90.7% |
|
||||
| ov_SC03_113 | 2282 | 1740 | 0 | 2285 | 2468 | 92.6% |
|
||||
| ov_SC03_114 | 2271 | 1738 | 0 | 2273 | 2415 | 94.1% |
|
||||
| ov_SC03_115 | 2288 | 1738 | 0 | 2290 | 2472 | 92.6% |
|
||||
| ov_SC03_116 | 2279 | 1738 | 0 | 2282 | 2438 | 93.6% |
|
||||
| ov_SC03_117 | 2306 | 1738 | 0 | 2312 | 2557 | 90.4% |
|
||||
| ov_SC03_118 | 2352 | 1762 | 0 | 2353 | 2685 | 87.6% |
|
||||
| ov_SC03_119 | 2351 | 1762 | 0 | 2352 | 2685 | 87.6% |
|
||||
| ov_SC03_121 | 2286 | 1738 | 0 | 2289 | 2459 | 93.1% |
|
||||
| ov_SC03_124 | 2364 | 1734 | 0 | 2384 | 2741 | 87.0% |
|
||||
| ov_SC03_125 | 2320 | 1738 | 0 | 2332 | 2588 | 90.1% |
|
||||
| ov_SC03_126 | 2283 | 1740 | 0 | 2283 | 2423 | 94.2% |
|
||||
| ov_SC04_000 | 2299 | 1742 | 0 | 2308 | 2546 | 90.7% |
|
||||
| ov_SC04_002 | 2318 | 1738 | 0 | 2322 | 2636 | 88.1% |
|
||||
| ov_SC04_003 | 2294 | 1738 | 0 | 2298 | 2502 | 91.8% |
|
||||
| ov_SC04_004 | 2303 | 1738 | 0 | 2305 | 2558 | 90.1% |
|
||||
| ov_SC04_005 | 2313 | 1738 | 0 | 2319 | 2612 | 88.8% |
|
||||
| ov_SC04_006 | 2283 | 1738 | 0 | 2285 | 2454 | 93.1% |
|
||||
| ov_SC04_007 | 2307 | 1738 | 0 | 2311 | 2569 | 90.0% |
|
||||
| ov_SC04_008 | 2275 | 1738 | 0 | 2275 | 2415 | 94.2% |
|
||||
| ov_SC04_009 | 2290 | 1738 | 0 | 2293 | 2441 | 93.9% |
|
||||
| ov_SC04_010 | 2280 | 1738 | 0 | 2281 | 2419 | 94.3% |
|
||||
| ov_SC04_011 | 2338 | 1738 | 0 | 2344 | 2803 | 83.6% |
|
||||
| ov_SC04_012 | 2277 | 1738 | 0 | 2278 | 2420 | 94.1% |
|
||||
| ov_SC04_015 | 2342 | 1739 | 0 | 2353 | 2611 | 90.1% |
|
||||
| ov_SC04_016 | 2280 | 1738 | 0 | 2282 | 2440 | 93.5% |
|
||||
| ov_SC04_018 | 2390 | 1773 | 0 | 2390 | 2857 | 83.7% |
|
||||
| ov_SC04_019 | 2396 | 1773 | 0 | 2396 | 2857 | 83.9% |
|
||||
| ov_SC04_020 | 2307 | 1738 | 0 | 2319 | 2567 | 90.3% |
|
||||
| ov_SC04_021 | 2284 | 1740 | 0 | 2284 | 2423 | 94.3% |
|
||||
| ov_SC05_000 | 2281 | 1742 | 0 | 2284 | 2422 | 94.3% |
|
||||
| ov_SC05_001 | 2303 | 1738 | 0 | 2308 | 2574 | 89.7% |
|
||||
| ov_SC05_002 | 2286 | 1738 | 0 | 2289 | 2442 | 93.7% |
|
||||
| ov_SC05_003 | 2283 | 1738 | 0 | 2284 | 2481 | 92.1% |
|
||||
| ov_SC05_004 | 2279 | 1738 | 0 | 2281 | 2464 | 92.6% |
|
||||
| ov_SC05_005 | 2284 | 1738 | 0 | 2285 | 2491 | 91.7% |
|
||||
| ov_SC05_006 | 2277 | 1738 | 0 | 2277 | 2430 | 93.7% |
|
||||
| ov_SC05_007 | 2287 | 1738 | 0 | 2292 | 2482 | 92.3% |
|
||||
| ov_SC05_008 | 2304 | 1738 | 0 | 2306 | 2543 | 90.7% |
|
||||
| ov_SC05_009 | 2283 | 1738 | 0 | 2287 | 2438 | 93.8% |
|
||||
| ov_SC05_010 | 2310 | 1738 | 0 | 2314 | 2588 | 89.4% |
|
||||
| ov_SC05_011 | 2279 | 1738 | 0 | 2280 | 2409 | 94.6% |
|
||||
| ov_SC05_017 | 2386 | 1735 | 0 | 2397 | 2842 | 84.3% |
|
||||
| ov_SC05_018 | 2333 | 1738 | 0 | 2346 | 2673 | 87.8% |
|
||||
| ov_SC05_019 | 2284 | 1740 | 0 | 2284 | 2423 | 94.3% |
|
||||
| ov_SC06_000 | 2348 | 1747 | 0 | 2351 | 2691 | 87.4% |
|
||||
| ov_SC06_006 | 2300 | 1738 | 0 | 2301 | 2511 | 91.6% |
|
||||
| ov_SC06_008 | 2320 | 1740 | 0 | 2326 | 2542 | 91.5% |
|
||||
| ov_SC06_010 | 2300 | 1738 | 0 | 2305 | 2517 | 91.6% |
|
||||
| ov_SC06_011 | 2288 | 1738 | 0 | 2292 | 2468 | 92.9% |
|
||||
| ov_SC06_013 | 2282 | 1738 | 0 | 2283 | 2425 | 94.1% |
|
||||
| ov_SC06_014 | 2288 | 1738 | 0 | 2290 | 2453 | 93.4% |
|
||||
| ov_SC06_015 | 2285 | 1738 | 0 | 2285 | 2421 | 94.4% |
|
||||
| ov_SC06_016 | 2303 | 1738 | 0 | 2305 | 2549 | 90.4% |
|
||||
| ov_SC06_018 | 2314 | 1740 | 0 | 2321 | 2665 | 87.1% |
|
||||
| ov_SC06_020 | 2292 | 1740 | 0 | 2293 | 2518 | 91.1% |
|
||||
| ov_SC06_022 | 2311 | 1738 | 0 | 2319 | 2642 | 87.8% |
|
||||
| ov_SC06_024 | 2321 | 1738 | 0 | 2327 | 2667 | 87.3% |
|
||||
| ov_SC06_025 | 2305 | 1738 | 0 | 2310 | 2572 | 89.8% |
|
||||
| ov_SC06_027 | 2270 | 1738 | 0 | 2271 | 2408 | 94.3% |
|
||||
| ov_SC06_029 | 2331 | 1738 | 0 | 2343 | 2662 | 88.0% |
|
||||
| ov_SC06_030 | 2284 | 1738 | 0 | 2284 | 2456 | 93.0% |
|
||||
| ov_SC06_032 | 2306 | 1739 | 0 | 2313 | 2658 | 87.0% |
|
||||
| ov_SC06_033 | 2308 | 1739 | 0 | 2315 | 2631 | 88.0% |
|
||||
| ov_SC07_000 | 2299 | 1742 | 0 | 2301 | 2521 | 91.3% |
|
||||
| ov_SC07_001 | 2283 | 1738 | 0 | 2285 | 2454 | 93.1% |
|
||||
| ov_SC07_002 | 2311 | 1738 | 0 | 2315 | 2579 | 89.8% |
|
||||
| ov_SC07_006 | 2081 | 1555 | 0 | 2161 | 2456 | 88.0% |
|
||||
| ov_SC07_007 | 2076 | 1586 | 0 | 2160 | 2613 | 82.7% |
|
||||
| ov_SC07_008 | 2268 | 1738 | 0 | 2268 | 2386 | 95.1% |
|
||||
| ov_SC07_009 | 2277 | 1738 | 0 | 2279 | 2430 | 93.8% |
|
||||
| ov_SC07_010 | 2108 | 1608 | 0 | 2191 | 2524 | 86.8% |
|
||||
| ov_SC07_011 | 2076 | 1585 | 0 | 2156 | 2449 | 88.0% |
|
||||
|
||||
@@ -669,7 +669,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -755,7 +755,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80180780) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80180780[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80180780[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1052,7 +1079,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -755,7 +755,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_801853D0) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_801853D0[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_801853D0[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1052,7 +1079,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3834,7 +3834,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_001/nonmatchings/ov_SC01_001_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80180D94) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80180D94[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80180D94[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_004/nonmatchings/ov_SC01_004_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -758,7 +758,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80183F28) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80183F28[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80183F28[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1055,7 +1082,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3837,7 +3837,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -758,7 +758,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80183F28) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80183F28[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80183F28[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1055,7 +1082,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3837,7 +3837,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80181308) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80181308[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80181308[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_801844F0) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_801844F0[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_801844F0[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80180170) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80180170[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80180170[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_074/nonmatchings/ov_SC01_074_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_801850D0) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_801850D0[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_801850D0[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_801883C4) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_801883C4[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_801883C4[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3835,7 +3835,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_8018C774) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_8018C774[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_8018C774[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3834,7 +3834,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_8018C774) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_8018C774[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_8018C774[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3834,7 +3834,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_8017F854) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_8017F854[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_8017F854[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80192458) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80192458[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80192458[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3834,7 +3834,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_801928A8) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_801928A8[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_801928A8[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_8017FDBC) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_8017FDBC[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_8017FDBC[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3834,7 +3834,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80185FF4) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80185FF4[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80185FF4[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_8018C04C) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_8018C04C[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_8018C04C[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80181640) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80181640[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80181640[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80187C94) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80187C94[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80187C94[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_026/nonmatchings/ov_SC02_026_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_8018CDB8) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_8018CDB8[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_8018CDB8[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_8018CFBC) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_8018CFBC[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_8018CFBC[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_801867E8) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_801867E8[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_801867E8[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -672,7 +672,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80186048) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80186048[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80186048[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_035/nonmatchings/ov_SC02_035_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80180C74) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80180C74[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80180C74[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80186944) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80186944[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80186944[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_8018F084) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_8018F084[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_8018F084[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80187074) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80187074[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80187074[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80180E3C) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80180E3C[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80180E3C[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_8018E158) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_8018E158[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_8018E158[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80188F50) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80188F50[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80188F50[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
@@ -757,7 +757,34 @@ final:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_80148E54);
|
||||
|
||||
extern s32 ratan2(s32, s32);
|
||||
/* derived from asm: lui/addu/lw %lo(D_80181A70) indexed by (u16>>12)*4, then jalr with no args;
|
||||
* the result is sign-extended from 16 bits => the table's functions return s16. */
|
||||
|
||||
s32 func_80148E54(s32 arg0) {
|
||||
|
||||
extern s32 D_801151D4;
|
||||
extern s16 (*D_80181A70[])();
|
||||
register s32 tmp __asm__("$4") = (ratan2(*(s32 *)(D_801151D4 + 0x44) - *(s32 *)(D_801151D4 + 0x50),
|
||||
*(s32 *)(D_801151D4 + 0x48) - *(s32 *)(D_801151D4 + 0x3C)) - 0x400) & 0xFFF;
|
||||
s32 ang;
|
||||
__asm__("" : "=r"(tmp) : "0"(tmp));
|
||||
ang = tmp;
|
||||
|
||||
switch (*(u8 *)(arg0 + 0xA9)) {
|
||||
case 0x41:
|
||||
return D_80181A70[*(u16 *)(arg0 + 0xAA) >> 12]();
|
||||
case 0x53:
|
||||
case 0x73:
|
||||
if ((*(u16 *)(arg0 + 0xAE) & 0xFF) == 0x80 && (*(u16 *)(arg0 + 0xAE) >> 8) == 0x80) {
|
||||
return -1;
|
||||
}
|
||||
return (ang + ratan2((*(u16 *)(arg0 + 0xAE) & 0xFF) - 0x80,
|
||||
0x80 - (*(u16 *)(arg0 + 0xAE) >> 8))) & 0xFFF;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80148F60() /* dedup: shared engine-core @0x80148F60 (src/shared) */
|
||||
|
||||
@@ -1054,7 +1081,74 @@ DEFINE_func_8014A6C4() /* dedup: shared engine-core @0x8014A6C4 (src/shared) */
|
||||
|
||||
DEFINE_func_8014A71C() /* dedup: shared engine-core @0x8014A71C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_after", func_8014A738);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80029178(s32);
|
||||
|
||||
s32 func_8014A738(void *arg0) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
typedef struct {
|
||||
s16 vx;
|
||||
s16 vy;
|
||||
s16 vz;
|
||||
s16 pad;
|
||||
} Vec_8014A738;
|
||||
typedef struct {
|
||||
u8 pad0[6];
|
||||
u16 x;
|
||||
u8 pad8[6];
|
||||
u16 z;
|
||||
u8 pad10[0xB1];
|
||||
u8 state;
|
||||
u8 padC2[0x4A];
|
||||
} Ent_801202A0;
|
||||
Vec_8014A738 d;
|
||||
u32 i;
|
||||
Ent_801202A0 *base;
|
||||
|
||||
if ((func_80029178(0x83) & 0xFF) == 0) {
|
||||
return 0;
|
||||
}
|
||||
base = (Ent_801202A0 *)D_801202A0;
|
||||
for (i = 0; i < 0x60; i++) {
|
||||
if (base[i].state == 7) {
|
||||
d.vx = ((Ent_801202A0 *)arg0)->x - base[i].x;
|
||||
d.vz = ((Ent_801202A0 *)arg0)->z - base[i].z;
|
||||
if (d.vx >= 0) {
|
||||
if (d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
} else {
|
||||
if (-d.vx < 0x40) {
|
||||
goto zcheck;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
zcheck:
|
||||
if (d.vz >= 0) {
|
||||
if (d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
} else {
|
||||
if (-d.vz < 0x40) {
|
||||
goto found;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
found:
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A830() /* dedup: shared engine-core @0x8014A830 (src/shared) */
|
||||
|
||||
|
||||
@@ -3836,7 +3836,52 @@ void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_010/nonmatchings/ov_SC03_010_jr_8015C32C", func_80163534);
|
||||
extern void func_80163664(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32);
|
||||
|
||||
void func_80163534(a0, a1, a2, a3, a4, a5)
|
||||
s32 a0;
|
||||
u16 a1;
|
||||
u16 a2;
|
||||
s32 a3;
|
||||
u16 a4;
|
||||
u16 *a5;
|
||||
{
|
||||
|
||||
extern s32 D_80115100;
|
||||
extern s32 D_80115200;
|
||||
extern s32 D_80115204;
|
||||
extern s32 D_80115208;
|
||||
extern u16 D_80126B18[];
|
||||
extern u16 D_801270B0[];
|
||||
extern u16 D_801270B2;
|
||||
extern u16 D_801270B4;
|
||||
extern u16 D_80126B1A[];
|
||||
extern u16 D_80126B1C;
|
||||
extern s32 D_80114EB0;
|
||||
extern s32 D_80114EC8;
|
||||
extern s32 D_8011DAF0;
|
||||
extern s32 D_80115298;
|
||||
extern s32 D_80126734;
|
||||
s32 *p = &D_80115200;
|
||||
|
||||
*p = 0;
|
||||
D_80115204 = 0;
|
||||
D_80115208 = 0;
|
||||
|
||||
D_801270B0[0] = *(u16 *)(a0 + 0x44) + a5[0];
|
||||
D_801270B2 = *(u16 *)(a0 + 0x46) + a5[1];
|
||||
D_801270B4 = *(u16 *)(a0 + 0x48) + a5[2];
|
||||
|
||||
D_80126B18[0] = *(u16 *)(a0 + 0x6) + a5[0];
|
||||
D_80126B1A[0] = *(u16 *)(a0 + 0xA) + a5[1];
|
||||
D_80126B1C = *(u16 *)(a0 + 0xE) + a5[2];
|
||||
|
||||
*p = ((s32 (*)(s32, u16, u16, s32, s32, s32, s32, s32, s32, s32, u16, s32, s32))func_80163664)(a0, a1, a2, (s32)D_801270B0, (s32)D_80126B18,
|
||||
(s32)&D_80114EB0, (s32)&D_80114EC8, (s32)&D_80115100,
|
||||
(s32)&D_8011DAF0, a3, a4, (s32)&D_80115298,
|
||||
(s32)&D_80126734);
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_80163664() /* dedup: shared engine-core @0x80163664 (src/shared) */
|
||||
|
||||
|
||||
@@ -671,7 +671,52 @@ DEFINE_func_8012A2F4() /* dedup: shared engine-core @0x8012A2F4 (src/shared) */
|
||||
|
||||
DEFINE_func_8012A304() /* dedup: shared engine-core @0x8012A304 (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011", func_8012A328);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_80012F74(s32, s32, s32, s32);
|
||||
|
||||
void func_8012A328(void)
|
||||
{
|
||||
|
||||
extern s8 D_801152C0;
|
||||
extern s16 D_801152C2;
|
||||
extern s16 D_80126940;
|
||||
extern s16 D_80126942;
|
||||
extern s16 D_80126944;
|
||||
extern s16 D_80127080;
|
||||
extern s16 D_80126CAE;
|
||||
typedef struct {
|
||||
u8 pad[0x154];
|
||||
u16 f154;
|
||||
s16 f156;
|
||||
u16 f158;
|
||||
} Obj_80126B58;
|
||||
Obj_80126B58 *p = (Obj_80126B58 *)&D_80126B58;
|
||||
s16 *q;
|
||||
s32 a, b;
|
||||
if (*(u8 *)&D_801152C0 != 0) {
|
||||
a = D_80127080; b = D_80126CAE;
|
||||
if (D_801152C2 < ((a - b) < 0 ? (b - a) : (a - b))) {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, p->f156, 4, 1);
|
||||
} else {
|
||||
q = &D_80126942;
|
||||
*q = func_80012F74(*q, D_80127080, 4, 1);
|
||||
}
|
||||
} else {
|
||||
s16 *r = &D_80126942;
|
||||
*r = func_80012F74(*r, D_80126CAE, 4, 1);
|
||||
}
|
||||
D_80126940 = p->f154;
|
||||
D_80126944 = p->f158;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8012A418() /* dedup: shared engine-core @0x8012A418 (src/shared) */
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user