mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-28 06:49:47 -04:00
feat(phase-29): ALL THREE BEHEMOTHS BANKED — func_80183814 (5,122), func_8017DC1C (1,518), func_8017D2DC (1,586)
Zero functions >1000 ins remain unmatched anywhere in the fleet. func_80183814 (5,122 ins — the LARGEST function in the game) — round 2 closed it: length 5127->5122 exact, structural residual 36->0, register-sensitive 1201->0, frame -256 -> -0xF8 exact, saves 10 -> .mask 0x807f0000 exact. Verified independently (R14): match_one MATCH (5122 ins). ROUND 1's DIAGNOSIS WAS WRONG and the agent refuted it properly: the +5 length was a SYMPTOM, not the lever, and the §83d max_reg/cse.c:8340 story does not hold — a 15-line reproducer reproduced the case-0/3 CSE exactly (so it cannot be max_reg-gated), max_qty only gates extension ACROSS blocks, and the target leaves $s7/$fp unused (no pressure story). Confirmed from a second direction: C01 has the identical two groups over the identical symbols with ZERO residual, because a `break` puts a CODE_LABEL between them. The two biggest levers were pure DECLARATION SCOPE (§45/§76), not pins. func_8017DC1C (1,518) — MATCH first round, pin-free, zero __asm__ dials. NOT a jr fn (0 mid-fn jr). func_8017D2DC (1,586) — MATCH first round (banked in the previous commit). BANKING ORDER MATTERS — a new failure mode found and worked around: banking func_8017DC1C BEFORE the carve chain broke the build. Its draft establishes the canon for 39 previously-undeclared externs; jr_isolate_all's re-partition (overlay_src_split) then DROPPED ALL 39 across the new split boundary (`D_801C1EB0 undeclared`), leaving them in NEITHER file. The §77 preamble-drop class, in a third tool. FIX = ordering, not patching: run the §81 carve chain FIRST on a clean tree (gated BYTE-IDENTICAL), then bank. Reverted, re-sequenced, both banked clean. R22 clean-fleet 140/140 BYTE-IDENTICAL; tools-health OK; dedup 1886/0; 0 NON_MATCHING (G4). Fleet: instr 81.6 -> 81.7% · distinct-code 69.1 -> 69.3% · fn-count 89.52%.
This commit is contained in:
+1
-1
@@ -3639,7 +3639,7 @@ ov_SC07_006_ELF := $(ov_SC07_006_OUT).elf
|
||||
ov_SC07_006_MAPFILE := $(ov_SC07_006_OUT).map
|
||||
ov_SC07_006_LD_SCRIPT := $(ov_SC07_006_OUT).ld
|
||||
ov_SC07_006_SPLAT_YAML := config/splat.ov_SC07_006.yaml
|
||||
ov_SC07_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_006.o,tail2.data.o,ov_SC07_006_jr_80131340.o,tail3.data.o,ov_SC07_006_jr_80135888.o,tail4.data.o,ov_SC07_006_jr_80135A4C.o,tail5.data.o,ov_SC07_006_jr_80135D20.o,tail6.data.o,ov_SC07_006_jr_8013F350.o,tail7.data.o,ov_SC07_006_jr_80140608.o,tail8.data.o,ov_SC07_006_jr_80154C24.o,ov_SC07_006_jr_801588CC.o,tail9.data.o,ov_SC07_006_jr_8015C32C.o,tail10.data.o,ov_SC07_006_jr_8017AE2C.o,ov_SC07_006_jr_8017BEBC.o,tail11.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC07_006_JTBL_INTERLEAVE := --order tail.data.o,ov_SC07_006.o,tail2.data.o,ov_SC07_006_jr_80131340.o,tail3.data.o,ov_SC07_006_jr_80135888.o,tail4.data.o,ov_SC07_006_jr_80135A4C.o,tail5.data.o,ov_SC07_006_jr_80135D20.o,tail6.data.o,ov_SC07_006_jr_8013F350.o,tail7.data.o,ov_SC07_006_jr_80140608.o,tail8.data.o,ov_SC07_006_jr_80154C24.o,ov_SC07_006_jr_801588CC.o,tail9.data.o,ov_SC07_006_jr_8015C32C.o,tail10.data.o,ov_SC07_006_jr_8017AE2C.o,ov_SC07_006_jr_8017BEBC.o,tail11.data.o,ov_SC07_006_jr_80183814.o,tail12.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC07_006/ov_SC07_006_jr_8013F350.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC07_006/ov_SC07_006_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x24
|
||||
build/src/ov_SC07_006/ov_SC07_006_jr_801588CC.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28
|
||||
|
||||
@@ -105,6 +105,7 @@ segments:
|
||||
- [0x341d4, c, ov_SC07_006_jr_8015C32C]
|
||||
- [0x52cd4, c, ov_SC07_006_jr_8017AE2C]
|
||||
- [0x53d64, c, ov_SC07_006_jr_8017BEBC]
|
||||
- [0x5b6bc, c, ov_SC07_006_jr_80183814]
|
||||
- [0x62268, data, tail]
|
||||
- [0xcba20, .rodata, ov_SC07_006] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xcba34, data, tail2]
|
||||
@@ -128,6 +129,8 @@ segments:
|
||||
- [0xccb40, .rodata, ov_SC07_006_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xccb54, .rodata, ov_SC07_006_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xccb74, data, tail11]
|
||||
- [0xccb8c, .rodata, ov_SC07_006_jr_80183814] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xccbe0, data, tail12]
|
||||
- [0xCE214, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0xCE217] # EOF marker = the 0.4.dec byte length
|
||||
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
|
||||
|
||||
@@ -4,17 +4,17 @@
|
||||
# cross-binary collapsible-byte leverage: docs/duplicates.cross.md.
|
||||
|
||||
# THREE progress metrics (all matter — see the labels):
|
||||
FLEET fn-count byte-ident: 316656 / 353719 = 89.52% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 10729648 / 13141652 = 81.6% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET distinct-code(uniq): 3895626 / 5634875 = 69.1% (65197/87459 unique fns; the DISTINCT-RE number)
|
||||
FLEET fn-count byte-ident: 316659 / 353720 = 89.52% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 10736288 / 13141652 = 81.7% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET distinct-code(uniq): 3902266 / 5634875 = 69.3% (65199/87459 unique fns; the DISTINCT-RE number)
|
||||
MAIN game-code weighted : 436 / 60201 = 0.7% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-06-14; caveat is R34: no independent second oracle for a PS-X EXE, NOT drift)
|
||||
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 10729212 / 13081451 = 82.0%)
|
||||
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 10735852 / 13081451 = 82.1%)
|
||||
|
||||
FLEET REAL substantive : 314801 (of which dedup-shared 239530 via 1886 groups / 239604 instances)
|
||||
FLEET REAL substantive : 314804 (of which dedup-shared 239530 via 1886 groups / 239604 instances)
|
||||
FLEET LINKED PsyQ objs : 959
|
||||
FLEET NON_MATCHING : 7 (0 in any default build — G4)
|
||||
FLEET INCLUDE_ASM stubs : 37056
|
||||
FLEET matchable : 353719
|
||||
FLEET INCLUDE_ASM stubs : 37054
|
||||
FLEET matchable : 353720
|
||||
|
||||
| binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % |
|
||||
|---|---:|---:|---:|---:|---:|---:|
|
||||
@@ -152,7 +152,7 @@ FLEET matchable : 353719
|
||||
| ov_SC07_000 | 2279 | 1742 | 0 | 2281 | 2521 | 90.5% |
|
||||
| ov_SC07_001 | 2263 | 1738 | 0 | 2265 | 2454 | 92.3% |
|
||||
| ov_SC07_002 | 2291 | 1738 | 0 | 2295 | 2579 | 89.0% |
|
||||
| ov_SC07_006 | 2061 | 1555 | 0 | 2141 | 2455 | 87.2% |
|
||||
| ov_SC07_006 | 2064 | 1555 | 0 | 2144 | 2456 | 87.3% |
|
||||
| ov_SC07_007 | 2058 | 1586 | 0 | 2142 | 2613 | 82.0% |
|
||||
| ov_SC07_008 | 2248 | 1738 | 0 | 2248 | 2386 | 94.2% |
|
||||
| ov_SC07_009 | 2257 | 1738 | 0 | 2259 | 2430 | 93.0% |
|
||||
|
||||
@@ -3777,7 +3777,216 @@ INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017D8A
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017DA30);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017DC1C);
|
||||
/* func_8017DC1C @ ov_SC07_006 (subseg ov_SC07_006_jr_8017BEBC) — behemoth #8, 1,518 ins.
|
||||
*
|
||||
* GATE: .venv/bin/python tools/match_one.py func_8017DC1C \
|
||||
* --c .run/giants/s21_func_8017DC1C_b1.c \
|
||||
* --asm-subdir asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC
|
||||
* => MATCH (1518 ins) [pin-free; run through the §77 probe copy,
|
||||
* see "PROBE" below — SVECTOR2 is a SHARED type]
|
||||
*
|
||||
* NOT BANKED. match_one masks jal/HI16/LO16 and never links. Independently checked
|
||||
* here (the three things match_one is blind to):
|
||||
* §81 0 `jr $vX` — no jump table, NO carve chain needed. (`jr $ra` only.)
|
||||
* §84 0 `%lo(SYM+N)` in the emitted asm — no derived offsets.
|
||||
* §87 all 64 D_ symbols resolve as dlabels in asm/ov_SC07_006/data/tail.data.s.
|
||||
*
|
||||
* PROBE (§77): SVECTOR2 lives in src/shared/engine_types.h, which match_one cannot see
|
||||
* (-Iinclude only). Gate through:
|
||||
* { echo '#include "common.h"';
|
||||
* echo '#include "../src/shared/engine_types.h"';
|
||||
* cat this_file; } > probe.c
|
||||
* The include is deliberately NOT in this file: the real TU
|
||||
* src/ov_SC07_006/ov_SC07_006_jr_8017BEBC.c already reaches engine_types.h via
|
||||
* `#include "../shared/engine_core.h"`, so adding it here would be a double include.
|
||||
*
|
||||
* ------------------------------------------------------------------ what it is
|
||||
* A morph/keyframe blender. 25 statements, each interpolating one model's vertex
|
||||
* block from keyframe `b` toward keyframe `a` by the 1.12 fixed-point factor `t`.
|
||||
* ZERO `jal`: the 25 statements are 25 expansions of ONE `static inline` helper.
|
||||
*
|
||||
* ------------------------------------------------------------------ the levers
|
||||
* L1 `static inline`, NOT a macro and NOT an out-of-line static. THE structural
|
||||
* lever. What each piece of evidence actually proves — stated honestly:
|
||||
* (a) 0 jal + 25 byte-identical 60-ins bodies => the body is EXPANDED in
|
||||
* place 25 times, not called. Rules out the out-of-line `static`
|
||||
* (measured: func_8017DC1C collapses to 199 ins, 25 real calls).
|
||||
* (b) FRAME 0x258 = 600 = 25 * 24. Each expansion of the body's block-scope
|
||||
* locals gets its OWN 24 bytes of frame (measured: 1 body = 24,
|
||||
* 2 expansions = 48, 25 = 600). This confirms 25 in-place expansions
|
||||
* and means the frame is FREE — no padding hack is needed. It does NOT
|
||||
* discriminate inline-vs-macro: the macro spelling ALSO frames 600.
|
||||
* (c) the DISCRIMINATOR is the instruction count. `static inline` = 1518
|
||||
* (MATCH); the equivalent macro = 1537 (+19, LENGTH-DRIFT). Do not
|
||||
* "simplify" this into a macro.
|
||||
* (d) the `addu $a3,$a2,$zero` in the same-symbol blocks (1,2,3,4,8,9,10,11,
|
||||
* 15,16) is integrate.c's copy_to_mode_reg of the SECOND argument after
|
||||
* cse folded the two identical global loads into one register.
|
||||
* L2 the body assigns the two pointer PARAMS to LOCALS (`pb = b; pa = a;`) and
|
||||
* walks the locals. Incrementing the params directly loses BOTH preheader
|
||||
* moves (`addu $t2,$a3,$zero` / `addu $t0,$a2,$zero`): with the params readonly
|
||||
* the arg reg and the loop biv are one pseudo and combine folds the copy into
|
||||
* the load. 2 moves x 25 blocks = 50 ins.
|
||||
* L3 `i = o->n;` is read BEFORE the two copies. Source order here survives into
|
||||
* the schedule: the target fills the `lw $t3,0x10($a1)` load-delay with the
|
||||
* `pb` copy and the `beqz` delay with the `pa` copy. With the copies first,
|
||||
* the count load needs a `nop` AND the reorg pass steals the `pb` copy into
|
||||
* the `j` delay slot (which the target leaves as `nop`).
|
||||
* L4 increment order `d++; pb++; pa++;` — the reverse of the read order.
|
||||
* loop.c PREPENDS each biv to loop_iv_list, so the preheader giv-init order
|
||||
* (`$a3=pa+4`, `$a2=pb+4`, `$a1=d+4`) is the reverse of the increment order.
|
||||
* All 6 permutations measured; this is the only one that puts the three
|
||||
* `+4` givs in the target's registers. See the report's table.
|
||||
* L5 the else-branch is INDEX arithmetic, not a mask: `(u32 *)&o->dst + (o->dst >> 2)`
|
||||
* gives `srl 2; sll 2; addiu 0xC; addu` — 4 separate insns. `o->dst & ~3`
|
||||
* would collapse to a single `andi 0xfffc`. `dst` must be UNSIGNED (`srl`, not `sra`).
|
||||
* L6 `o->mode == 1` is a literal and stays one: an EQUALITY test has no `slti`
|
||||
* form on MIPS, so the 1 is always materialised (`addiu $vX,$zero,1`). The
|
||||
* §78/`slti` literal-position law does NOT apply to `==` — do not "fix" this
|
||||
* into a variable.
|
||||
*
|
||||
* Drop-one ablations (all on the b1 base, all measured) — see s21_8017DC1C_report.md.
|
||||
*/
|
||||
/* ---- the object ---------------------------------------------------------- *
|
||||
* mode == 1 : `dst` (+0x0C) is a POINTER to the vertex block.
|
||||
* otherwise : the vertex block is INLINE and `dst` is a byte count; the data
|
||||
* starts at ((u32 *)&o->dst)[o->dst >> 2].
|
||||
* `n` (+0x10) is the vertex count either way. */
|
||||
typedef struct {
|
||||
s32 unk0; /* 0x00 */
|
||||
s32 mode; /* 0x04 */
|
||||
s32 unk8; /* 0x08 */
|
||||
u32 dst; /* 0x0C */
|
||||
s32 n; /* 0x10 */
|
||||
} Morph_8017DC1C;
|
||||
|
||||
/* ---- per-overlay globals (ov_SC07_006 tail.data) ------------------------- *
|
||||
* Every one of these is an initialised POINTER word in asm/ov_SC07_006/data/
|
||||
* tail.data.s (e.g. D_801BF4F4 = .word D_801AD4DC, D_801C1E14 = .word D_801BFD0C).
|
||||
* None of them is declared anywhere in the tree today — these spellings are free
|
||||
* choices and establish the canon. */
|
||||
extern Morph_8017DC1C *D_801BF4F4;
|
||||
extern Morph_8017DC1C *D_801BF4F8;
|
||||
extern Morph_8017DC1C *D_801BF4FC;
|
||||
extern Morph_8017DC1C *D_801BF500;
|
||||
extern Morph_8017DC1C *D_801BF504;
|
||||
extern Morph_8017DC1C *D_801BF508;
|
||||
extern Morph_8017DC1C *D_801BF50C;
|
||||
extern Morph_8017DC1C *D_801BF510;
|
||||
extern Morph_8017DC1C *D_801BF514;
|
||||
extern Morph_8017DC1C *D_801BF518;
|
||||
extern Morph_8017DC1C *D_801BF51C;
|
||||
extern Morph_8017DC1C *D_801BF520;
|
||||
extern Morph_8017DC1C *D_801BF524;
|
||||
extern Morph_8017DC1C *D_801BF528;
|
||||
extern Morph_8017DC1C *D_801BF52C;
|
||||
extern Morph_8017DC1C *D_801BF530;
|
||||
extern Morph_8017DC1C *D_801BF534;
|
||||
extern Morph_8017DC1C *D_801BF538;
|
||||
extern Morph_8017DC1C *D_801BF650;
|
||||
extern Morph_8017DC1C *D_801BF65C;
|
||||
extern Morph_8017DC1C *D_801BF660;
|
||||
extern Morph_8017DC1C *D_801BF684;
|
||||
extern Morph_8017DC1C *D_801BF6A4;
|
||||
extern Morph_8017DC1C *D_801BF6A8;
|
||||
extern Morph_8017DC1C *D_801BF6AC;
|
||||
|
||||
extern SVECTOR2 *D_801C1E14;
|
||||
extern SVECTOR2 *D_801C1E18;
|
||||
extern SVECTOR2 *D_801C1E1C;
|
||||
extern SVECTOR2 *D_801C1E20;
|
||||
extern SVECTOR2 *D_801C1E24;
|
||||
extern SVECTOR2 *D_801C1E28;
|
||||
extern SVECTOR2 *D_801C1E2C;
|
||||
extern SVECTOR2 *D_801C1E30;
|
||||
extern SVECTOR2 *D_801C1E34;
|
||||
extern SVECTOR2 *D_801C1E38;
|
||||
extern SVECTOR2 *D_801C1E3C;
|
||||
extern SVECTOR2 *D_801C1E40;
|
||||
extern SVECTOR2 *D_801C1E44;
|
||||
extern SVECTOR2 *D_801C1E48;
|
||||
extern SVECTOR2 *D_801C1E4C;
|
||||
extern SVECTOR2 *D_801C1E50;
|
||||
extern SVECTOR2 *D_801C1E54;
|
||||
extern SVECTOR2 *D_801C1E58;
|
||||
extern SVECTOR2 *D_801C1E60;
|
||||
extern SVECTOR2 *D_801C1E64;
|
||||
extern SVECTOR2 *D_801C1E68;
|
||||
extern SVECTOR2 *D_801C1E6C;
|
||||
extern SVECTOR2 *D_801C1E70;
|
||||
extern SVECTOR2 *D_801C1E74;
|
||||
extern SVECTOR2 *D_801C1E78;
|
||||
extern SVECTOR2 *D_801C1E7C;
|
||||
extern SVECTOR2 *D_801C1E80;
|
||||
extern SVECTOR2 *D_801C1E84;
|
||||
extern SVECTOR2 *D_801C1E88;
|
||||
extern SVECTOR2 *D_801C1E8C;
|
||||
extern SVECTOR2 *D_801C1E90;
|
||||
extern SVECTOR2 *D_801C1E94;
|
||||
extern SVECTOR2 *D_801C1E98;
|
||||
extern SVECTOR2 *D_801C1E9C;
|
||||
extern SVECTOR2 *D_801C1EA0;
|
||||
extern SVECTOR2 *D_801C1EA4;
|
||||
extern SVECTOR2 *D_801C1EA8;
|
||||
extern SVECTOR2 *D_801C1EAC;
|
||||
extern SVECTOR2 *D_801C1EB0;
|
||||
|
||||
|
||||
/* MUST be `inline` — see L1. 25 expansions == 1518 ins, 0 jal, frame 25*24=0x258. */
|
||||
static inline void morph_lerp(Morph_8017DC1C *o, SVECTOR2 *b, SVECTOR2 *a, s32 t)
|
||||
{
|
||||
SVECTOR2 *d;
|
||||
SVECTOR2 *pa;
|
||||
SVECTOR2 *pb;
|
||||
s32 i;
|
||||
|
||||
if (o->mode == 1) {
|
||||
d = (SVECTOR2 *)o->dst;
|
||||
} else {
|
||||
d = (SVECTOR2 *)((u32 *)&o->dst + (o->dst >> 2));
|
||||
}
|
||||
i = o->n; /* L3: before the copies */
|
||||
pb = b; /* L2 */
|
||||
pa = a; /* L2 */
|
||||
for (; i != 0; i--) {
|
||||
d->vx = pb->vx + (((pa->vx - pb->vx) * t) >> 12);
|
||||
d->vy = pb->vy + (((pa->vy - pb->vy) * t) >> 12);
|
||||
d->vz = pb->vz + (((pa->vz - pb->vz) * t) >> 12);
|
||||
d++; /* L4: reverse of the read order */
|
||||
pb++;
|
||||
pa++;
|
||||
}
|
||||
}
|
||||
|
||||
void func_8017DC1C(s32 t)
|
||||
{
|
||||
morph_lerp(D_801BF4F4, D_801C1E14, D_801C1E18, t);
|
||||
morph_lerp(D_801BF4F8, D_801C1E1C, D_801C1E1C, t);
|
||||
morph_lerp(D_801BF4FC, D_801C1E20, D_801C1E20, t);
|
||||
morph_lerp(D_801BF500, D_801C1E24, D_801C1E24, t);
|
||||
morph_lerp(D_801BF504, D_801C1E28, D_801C1E28, t);
|
||||
morph_lerp(D_801BF508, D_801C1E40, D_801C1E50, t);
|
||||
morph_lerp(D_801BF50C, D_801C1E44, D_801C1E54, t);
|
||||
morph_lerp(D_801BF510, D_801C1E48, D_801C1E58, t);
|
||||
morph_lerp(D_801BF514, D_801C1E4C, D_801C1E4C, t);
|
||||
morph_lerp(D_801BF518, D_801C1E60, D_801C1E60, t);
|
||||
morph_lerp(D_801BF51C, D_801C1E64, D_801C1E64, t);
|
||||
morph_lerp(D_801BF520, D_801C1E68, D_801C1E68, t);
|
||||
morph_lerp(D_801BF524, D_801C1E80, D_801C1E90, t);
|
||||
morph_lerp(D_801BF528, D_801C1E84, D_801C1E94, t);
|
||||
morph_lerp(D_801BF52C, D_801C1E88, D_801C1E98, t);
|
||||
morph_lerp(D_801BF530, D_801C1E8C, D_801C1E8C, t);
|
||||
morph_lerp(D_801BF534, D_801C1E9C, D_801C1E9C, t);
|
||||
morph_lerp(D_801BF538, D_801C1EA0, D_801C1EA4, t);
|
||||
morph_lerp(D_801BF650, D_801C1EA4, D_801C1EA8, t);
|
||||
morph_lerp(D_801BF65C, D_801C1E2C, D_801C1E38, t);
|
||||
morph_lerp(D_801BF660, D_801C1E30, D_801C1E3C, t);
|
||||
morph_lerp(D_801BF684, D_801C1EAC, D_801C1E34, t);
|
||||
morph_lerp(D_801BF6A4, D_801C1E6C, D_801C1E78, t);
|
||||
morph_lerp(D_801BF6A8, D_801C1E70, D_801C1E7C, t);
|
||||
morph_lerp(D_801BF6AC, D_801C1E74, D_801C1EB0, t);
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017F3D4);
|
||||
|
||||
@@ -3824,112 +4033,3 @@ INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80182D4
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80182F3C);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80183374);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80183814);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8018881C);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189098);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_801890FC);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189708);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8018984C);
|
||||
|
||||
|
||||
|
||||
void func_80189AC8(void *a0) {
|
||||
|
||||
extern void (*D_8018EB2C[])(void);
|
||||
D_8018EB2C[*(u16 *)((s32)a0 + 0x2)]();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void func_80189B04(void *a0) {
|
||||
|
||||
extern void (*D_8018EB44[])(void);
|
||||
D_8018EB44[*(u16 *)((s32)a0 + 0x2)]();
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189B40);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C00);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C14);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C28);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C3C);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C50);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C64);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C78);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189C8C);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189CA0);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189CB4);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189CC8);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189CDC);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189CF0);
|
||||
|
||||
extern void func_8017D040(s8 a0);
|
||||
void func_80189D18(void) {
|
||||
func_8017D040(0);
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189D38);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189D58);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189D78);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189D98);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189DB8);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189EF4);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189F70);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_80189FDC);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8018A124);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8018A150);
|
||||
|
||||
void func_8018A284(void) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
void func_8018A28C(void *a0) {
|
||||
|
||||
extern void (*D_8018EB54[])(void);
|
||||
D_8018EB54[*(u16 *)((s32)a0 + 0x2)]();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
extern s32 func_8012AD50(void *a0);
|
||||
void func_8018A2C8(u8 *a0) {
|
||||
*(s16 *)(a0 + 0xFC) = 0;
|
||||
*(u16 *)(a0 + 0x72) |= 0x1000;
|
||||
((void (*)(void))func_8012AD50)();
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8018A2F4);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user