From bfd591c9cc8d6f49911d54cfa01dfb265ab903a9 Mon Sep 17 00:00:00 2001 From: Drew T <50529377+Druthulu@users.noreply.github.com> Date: Wed, 26 Aug 2026 20:12:09 -0600 Subject: [PATCH] =?UTF-8?q?feat(t5):=20Claude=20wave=20t5a=20=E2=80=94=204?= =?UTF-8?q?1=20banked=20(sonnet=2039/44,=20opus=202/4);=20fleet=20213=20pa?= =?UTF-8?q?ssed,=200=20failed=20of=20213=20(P31=20S62=20T5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/overlays.mk | 3 +- config/splat.ov_SC01_009.yaml | 3 +- src/ov_SC01_006/ov_SC01_006_jr_8017C340.c | 40 ++++- src/ov_SC01_006/ov_SC01_006_jr_8017ED5C.c | 32 +++- src/ov_SC01_009/ov_SC01_009_jr_8017BE9C.c | 73 +++++++- src/ov_SC01_009/ov_SC01_009_jr_8017E590.c | 208 +++++++++++++++++++++- src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c | 74 +++++++- src/ov_SC01_084/ov_SC01_084_jr_8017CA80.c | 66 ++++++- src/ov_SC03_011/ov_SC03_011_jr_8017C730.c | 94 +++++++++- src/ov_SC03_105/ov_SC03_105_jr_8017C8D0.c | 46 ++++- src/ov_SC04_011/ov_SC04_011_jr_8017D494.c | 87 ++++++++- src/ov_SC05_008/ov_SC05_008_jr_8017AE2C.c | 68 ++++++- src/ov_SC05_010/ov_SC05_010_jr_8017AE2C.c | 8 +- src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.c | 67 ++++++- src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c | 140 ++++++++++++++- src/ov_SC06_025/ov_SC06_025_jr_8017BEBC.c | 59 +++++- src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c | 98 +++++++++- src/ov_SC07_010/ov_SC07_010_jr_801457A4.c | 8 +- src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c | 59 +++++- 19 files changed, 1188 insertions(+), 45 deletions(-) diff --git a/config/overlays.mk b/config/overlays.mk index e79ee5b409..052628f5de 100644 --- a/config/overlays.mk +++ b/config/overlays.mk @@ -686,7 +686,7 @@ ov_SC01_009_ELF := $(ov_SC01_009_OUT).elf ov_SC01_009_MAPFILE := $(ov_SC01_009_OUT).map ov_SC01_009_LD_SCRIPT := $(ov_SC01_009_OUT).ld ov_SC01_009_SPLAT_YAML := config/splat.ov_SC01_009.yaml -ov_SC01_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_009.o,ov_SC01_009_jr_8012ACE0.o,tail2.data.o,ov_SC01_009_jr_80135888.o,tail3.data.o,ov_SC01_009_jr_80135A4C.o,tail4.data.o,ov_SC01_009_jr_80135D20.o,tail5.data.o,ov_SC01_009_jr_801380E0.o,ov_SC01_009_o0c.o,tail6.data.o,ov_SC01_009_jr_8013F350.o,tail7.data.o,ov_SC01_009_jr_8013FFD8.o,tail8.data.o,ov_SC01_009_jr_80140608.o,tail9.data.o,ov_SC01_009_jr_8015444C.o,ov_SC01_009_jr_80154C24.o,ov_SC01_009_jr_801588CC.o,ov_SC01_009_jr_80159C84.o,tail10.data.o,ov_SC01_009_jr_8015A3C8.o,tail11.data.o,ov_SC01_009_jr_8015AE2C.o,tail12.data.o,ov_SC01_009_jr_8015C32C.o,tail13.data.o,ov_SC01_009_jr_8016AB6C.o,tail14.data.o,ov_SC01_009_jr_80171B4C.o,ov_SC01_009_jr_801734BC.o,tail15.data.o,ov_SC01_009_jr_801789AC.o,ov_SC01_009_jr_80178D40.o,tail16.data.o,ov_SC01_009_jr_8017A4AC.o,tail17.data.o,ov_SC01_009_jr_8017AE2C.o,ov_SC01_009_jr_8017BE9C.o,tail18.data.o,ov_SC01_009_jr_8017E378.o,ov_SC01_009_jr_8017E590.o,tail19.data.o,ov_SC01_009_jr_8018057C.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve +ov_SC01_009_JTBL_INTERLEAVE := --order tail.data.o,ov_SC01_009.o,ov_SC01_009_jr_8012ACE0.o,tail2.data.o,ov_SC01_009_jr_80135888.o,tail3.data.o,ov_SC01_009_jr_80135A4C.o,tail4.data.o,ov_SC01_009_jr_80135D20.o,tail5.data.o,ov_SC01_009_jr_801380E0.o,ov_SC01_009_o0c.o,tail6.data.o,ov_SC01_009_jr_8013F350.o,tail7.data.o,ov_SC01_009_jr_8013FFD8.o,tail8.data.o,ov_SC01_009_jr_80140608.o,tail9.data.o,ov_SC01_009_jr_8015444C.o,ov_SC01_009_jr_80154C24.o,ov_SC01_009_jr_801588CC.o,ov_SC01_009_jr_80159C84.o,tail10.data.o,ov_SC01_009_jr_8015A3C8.o,tail11.data.o,ov_SC01_009_jr_8015AE2C.o,tail12.data.o,ov_SC01_009_jr_8015C32C.o,tail13.data.o,ov_SC01_009_jr_8016AB6C.o,tail14.data.o,ov_SC01_009_jr_80171B4C.o,ov_SC01_009_jr_801734BC.o,tail15.data.o,ov_SC01_009_jr_801789AC.o,ov_SC01_009_jr_80178D40.o,tail16.data.o,ov_SC01_009_jr_8017A4AC.o,tail17.data.o,ov_SC01_009_jr_8017AE2C.o,ov_SC01_009_jr_8017BE9C.o,tail18.data.o,ov_SC01_009_jr_8017E378.o,ov_SC01_009_jr_8017E590.o,ov_SC01_009_jr_8018057C.o,tail19.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve build/src/ov_SC01_009/ov_SC01_009.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14 build/src/ov_SC01_009/ov_SC01_009_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0 build/src/ov_SC01_009/ov_SC01_009_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18 @@ -699,6 +699,7 @@ build/src/ov_SC01_009/ov_SC01_009_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads ( build/src/ov_SC01_009/ov_SC01_009_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_009/ov_SC01_009_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20 build/src/ov_SC01_009/ov_SC01_009_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178 +build/src/ov_SC01_009/ov_SC01_009_jr_8017E590.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28 build/src/ov_SC01_009/ov_SC01_009_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118 ov_SC01_009_CHECK_SHA := config/check.ov_SC01_009.sha ov_SC01_009_SYMBOLS := config/symbols.ov_SC01_009.txt diff --git a/config/splat.ov_SC01_009.yaml b/config/splat.ov_SC01_009.yaml index b88ce596f9..96b3618acc 100644 --- a/config/splat.ov_SC01_009.yaml +++ b/config/splat.ov_SC01_009.yaml @@ -169,9 +169,8 @@ segments: - [0xc96c8, data, tail18] - [0xc9bd0, .rodata, ov_SC01_009_jr_8017E378] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0xc9bf8, .rodata, ov_SC01_009_jr_8017E590] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9c20, data, tail19] - [0xc9c48, .rodata, ov_SC01_009_jr_8018057C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - - [0xc9ce4, data, tail20] + - [0xc9ce4, data, tail19] - [0xCB304, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word) - [0xCB307] # EOF marker = the 0.4.dec byte length # @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes diff --git a/src/ov_SC01_006/ov_SC01_006_jr_8017C340.c b/src/ov_SC01_006/ov_SC01_006_jr_8017C340.c index 008c16e566..9535354441 100644 --- a/src/ov_SC01_006/ov_SC01_006_jr_8017C340.c +++ b/src/ov_SC01_006/ov_SC01_006_jr_8017C340.c @@ -3399,7 +3399,21 @@ DEFINE_func_8017D7E0() /* dedup: shared engine-core @0x8017D7E0 (src/shared) */ DEFINE_func_8017D808() /* dedup: shared engine-core @0x8017D808 (src/shared) */ -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017C340", func_8017D9A0); +extern int D_800C7C60; +extern int *D_800C7C64; +extern int D_800A2E20; +extern int D_800AE9F0; + +extern void func_8001ABBC(s32 a0, s32 a1, void *a2, s32 a3, s32 sp10); + +void func_8017D9A0(void) +{ + int *p = &D_800C7C60; + *p = 0x3E; + D_800C7C64 = &D_800A2E20; + ((void (*)(int, int, int *, int, int *))func_8001ABBC)(0, 0, &D_800AE9F0, 0, p); +} + INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017C340", func_8017D9F4); @@ -3457,7 +3471,29 @@ void func_8017DB50(void) { } -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017C340", func_8017DBC0); +void func_8017DBC0(void) { + extern void func_800D24A0(s32 a0); + extern s16 D_801CD878; + extern u16 D_8011511A; + extern u16 D_80115112; + extern u32 D_801CD9B0; + extern u32 D_801CD9A8; + extern s32 D_80115130; + + func_800D24A0(4); + func_8017DC48(); + if (D_801CD878 == 0) { + D_8011511A = 0; + } else { + D_8011511A = D_801CD878; + } + D_801CD9B0 = 0; + D_801CD9A8 = 0; + D_80115130 = 0; + D_801CD878 = 0; + D_80115112++; +} + /* Declarations reconciled against src/ov_SC01_004/ov_SC01_004_jr_8017BE9C.c: diff --git a/src/ov_SC01_006/ov_SC01_006_jr_8017ED5C.c b/src/ov_SC01_006/ov_SC01_006_jr_8017ED5C.c index 3876978e12..9d5dfd41bf 100644 --- a/src/ov_SC01_006/ov_SC01_006_jr_8017ED5C.c +++ b/src/ov_SC01_006/ov_SC01_006_jr_8017ED5C.c @@ -3284,11 +3284,39 @@ block_126: } -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_801803AC); +extern u8 D_80185E5C[]; +extern void func_80029514(s32); +extern void func_800D1724(s32 a0); + +void func_801803AC(s32 arg0) { + if ((*(s32 *)(arg0 + 0x1c) -= 1) == -1) { + func_80029514(2); + ((void (*)(u8 *))func_800D1724)(D_80185E5C); + } +} + INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_801803F0); -INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8018041C); +void func_8018041C(param_1) +s32 param_1; +{ + extern void func_8017FD50(s32); + extern s32 func_8016F1AC(void); + extern s32 func_80178B18(s32 param_1, s32 param_2); + extern u8 D_801BC348[]; + + func_8017FD50(param_1); + if (*(s32 *)(param_1 + 0x1C) != 0) { + (*(s32 *)(param_1 + 0x1C))--; + } else { + if (func_8016F1AC() == 0) { + func_80178B18(param_1, (s32)D_801BC348); + *(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1; + } + } +} + INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8018048C); diff --git a/src/ov_SC01_009/ov_SC01_009_jr_8017BE9C.c b/src/ov_SC01_009/ov_SC01_009_jr_8017BE9C.c index a044e65aaf..78936d7ed1 100644 --- a/src/ov_SC01_009/ov_SC01_009_jr_8017BE9C.c +++ b/src/ov_SC01_009/ov_SC01_009_jr_8017BE9C.c @@ -3710,7 +3710,78 @@ void func_8017D920(void) { } -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8017BE9C", func_8017D93C); +#include "common.h" + +extern s16 D_800B9A02; +extern s32 D_801151C8[]; +extern s32 D_801151D0; +extern s32 func_8017DC10(void); +extern void func_8017DEF0(void); +extern u16 D_8011511A; +extern s16 func_8014168C(s16 a0); +extern s16 D_80115126; +extern u8 D_80115138[]; +extern u32 D_801F32B8; +extern s32 func_8017E590(s32 param_1, s32 param_2); +extern s32 D_80115130; +extern void func_80139954(void); +extern s32 D_801E906C; +extern void *func_801376E8(s32 a0, s32 a1); +extern u32 D_801F32BC; +extern void func_80137B80(void); +extern void func_8002D4C8(s32 a0, s32 a1); +extern u8 D_800B9A15; +extern u16 D_80115112; + +void func_8017D93C(void) { + s32 pad[2]; + s32 ret_dc10; + s16 ret_168c; + u8 c; + s32 v0; + s32 s0; + s16 s0_16; + + D_801151D0 = D_801151C8[*(u16 *)&D_800B9A02]; + + ret_dc10 = func_8017DC10(); + func_8017DEF0(); + + ret_168c = func_8014168C((s16)D_8011511A); + c = D_80115138[D_8011511A]; + + if (D_80115126 != 4) { + v0 = D_801F32B8; + if (v0 == 0) { + s0 = func_8017E590(c, (s16)ret_168c); + } else { + s0 = v0; + } + if (s0 != 0) { + s32 *p = &D_80115130; + if (s0 != *p) { + *p = s0; + func_80139954(); + D_801F32BC = (u32)func_801376E8(s0, (s32)&D_801E906C); + } + } + func_80137B80(); + } + + s0_16 = (s16)ret_dc10; + if (s0_16 < 0) { + func_80139954(); + D_800B9A15 = 0; + if (s0_16 == -1) { + func_8002D4C8(0x474, 0); + } + { + u16 *p = &D_80115112; + *p = *p + 2; + } + } +} + INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8017BE9C", func_8017DA8C); diff --git a/src/ov_SC01_009/ov_SC01_009_jr_8017E590.c b/src/ov_SC01_009/ov_SC01_009_jr_8017E590.c index df6c3cbaea..2868eddb40 100644 --- a/src/ov_SC01_009/ov_SC01_009_jr_8017E590.c +++ b/src/ov_SC01_009/ov_SC01_009_jr_8017E590.c @@ -3084,7 +3084,213 @@ s32 *func_8017E7DC(s32 *ot, void *a1p, s32 idx, void *a3p, s32 tag) { } -INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8017E590", func_8017EB08); +#include "common.h" + +s32 func_8017EB08(s32 a0, s32 a1) { + extern u16 D_8011511A; + extern u16 D_8011514A; + extern s16 D_8011514C; + extern s16 D_8011515A; + extern u8 D_80183A40[]; + extern s16 D_801F3180; + extern s16 D_801F3184; + extern u16 D_801F318C; + extern u16 D_801F3190; + extern u8 *D_801F32B4; + extern u32 D_801F32B8; + extern u32 D_801EEE4C; + extern u32 D_801EEE74; + extern u32 D_801EEEB0; + extern u32 D_801EEF40; + extern u32 D_801EEF68; + extern u32 D_801EEFC0; + extern u32 D_801EF030; + extern u32 D_801EF054; + extern u32 D_801EF094; + extern u32 D_801EF0E0; + extern u32 D_801EF18C; + + extern s32 func_80029504(void); + extern s32 func_800291B4(s32 arg); + extern void func_8002D4C8(s32 a0, s32 a1); + extern void func_80029124(s32 a0, s32 a1); + extern s16 func_8014168C(s16 a0); + + s32 mode; + s16 idx; + s32 lt; + s32 t; + s32 r; + s32 b; + u32 sel; + + mode = func_80029504(); + idx = a0 - 1; + + switch (idx) { + case 1: + case 2: + if ((s16)a1 != 0) { + return -1; + } + { + u16 *p = &D_8011511A; + *p = *p + 1; + } + func_8002D4C8(0x45D, 0); + return 0; + + case 3: + if ((s16)a1 == 2) { + return -1; + } + lt = mode < 0xA; + if ((s16)a1 != 0) { + if (lt || (D_8011515A == 0x100)) { + sel = (u32)&D_801EEF68; + goto set_sel; + } + D_8011511A++; + func_8002D4C8(0x45D, 0); + return 0; + } + if (!lt) { + D_801F3180 = 1; + return -1; + } + sel = (u32)&D_801EEF40; + goto set_sel; + + case 4: + if ((s16)a1 == 0) { + D_801F3180 = 1; + } + if ((s16)a1 != 1) { + return -1; + } + if ((func_800291B4(D_801F3184 + 0x62) & 0x20) != 0) { + goto call_45F; + } + D_801F3180 = 2; + return -1; + + case 5: + t = (s16)a1; + if (t == 0) { + sel = (u32)&D_801EF030; + goto set_sel; + } + if (t == 3) { + goto sel_054; + } + if (t == 5) { + __asm__ ("" : "=r"(t) : "0"(t)); + if (t != 3) { + goto sel_094; + } + sel_054: + sel = (u32)&D_801EF054; + goto set_sel; + sel_094: + if ((func_800291B4(0x40) & 0xFF) == 0) { + goto call_45F; + } + sel = (u32)&D_801EF094; + goto set_sel; + } + if ((func_800291B4(D_80183A40[t]) & 0xFF) == 0) { + goto call_45F; + } + if ((u32)(mode - 0x294) < 0xF0) { + if ((t == 0xC) || (t == 0x11) || (t == 0x1A)) { + sel = (u32)&D_801EF0E0; + goto set_sel; + } + } + if ((u32)(mode - 0xA0) < 0x28) { + if ((u16)(a1 - 0xA) < 4) { + sel = (u32)&D_801EF18C; + goto set_sel; + } + } + D_801F3180 = a1 + 1; + return -1; + + case 6: + if ((s16)a1 >= 3) { + if ((func_800291B4(0x62) & 0xFF) == 0) { + sel = (u32)&D_801EEFC0; + goto set_sel; + } + } + case 8: + func_8002D4C8(0x45D, 0); + { + u16 *q = &D_8011511A; + *q = *q + 1; + } + break; + + case 7: + r = ((s32 (*)(s32))func_8014168C)(1); + if ((s16)r == 0) { + func_80029124(0xE8, 1); + } + D_801F3180 = ((r + 1) << 8) | (a1 + 1); + return -1; + + case 9: + b = D_801F32B4[(s16)a1]; + if ((func_800291B4(b + 0x62) & 0x40) == 0) { + goto call_45F; + } + D_801F3180 = b | 0x100; + D_801F3184 = b; + D_801F318C = D_8011514A; + D_801F3190 = *(u16 *)&D_8011514C; + return -1; + + case 0: + if (mode == 0x294) { + if ((s16)a1 < 4) { + if ((s16)a1 == 3) { + D_801F3180 = a1; + return -2; + } + sel = (u32)&D_801EEE4C; + goto set_sel; + } + } + if (mode == 0x3B6) { + if ((s16)a1 < 5) { + if ((s16)a1 == 3) { + D_801F3180 = a1; + return -2; + } + sel = (u32)&D_801EEE74; + goto set_sel; + } + } + if ((u32)(mode - 0x44C) < 0x32) { + if ((s16)a1 == 5) { + sel = (u32)&D_801EEEB0; + set_sel: + D_801F32B8 = sel; + call_45F: + func_8002D4C8(0x45F, 0); + return 0; + } + } + D_801F3180 = a1; + if ((s16)a1 == 3) { + return -2; + } + return -1; + } + + return 0; +} + s16 func_8017EF64(void) { extern s32 func_800291B4(s32 arg); diff --git a/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c b/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c index f0dd251d5c..a9fdbb61a0 100644 --- a/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c +++ b/src/ov_SC01_080/ov_SC01_080_jr_8017AE2C.c @@ -3890,7 +3890,79 @@ void func_8017C59C(s32 arg0) } -INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_8017D468); +#include "common.h" + +/* Declarations conformed to the fleet/engine_core canon (engine_core.h:3695, :3797, + * :3794, :3800, :3833, :3836, :108) and to this TU's own existing spellings + * (ov_SC01_080_jr_8017AE2C.c:2206 func_8004787C, :2470 D_800B9A02, :3379 RotTransPers). + * The vertex struct is BLOCK-scope on purpose: engine_types.h already typedefs a + * file-scope `SVEC`, so a second file-scope definition would be a C89 redefinition. */ +extern void func_8012E32C(void); +extern s32 func_8004787C(s32 a0); +extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); +extern void *func_80010A08(s32); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern s32 AddPrim(s32, void *); +extern void func_8012E28C(s32 arg0, s32 arg1); +extern u32 D_80186FF8[]; +extern s32 D_800A651C; +extern s16 D_800B9A02; + +void func_8017D468(void* p) +{ + struct { s16 vx, vy, vz, pad; } v[4]; + u16 base[3]; + s32 buf[2]; + s32 sp40; + s32 sp44; + s32 A; + s32 rs, i, ang, k, d, r; + u32 *prim; + + func_8012E32C(); + rs = func_8004787C((*(s32 *)(p + 0x1C) * 0x800) / 30); + base[0] = *(u16 *)(p + 6); + base[1] = *(u16 *)(p + 0xA); + A = (rs << 8) >> 12; + base[2] = *(u16 *)(p + 0xE); + ang = *(s32 *)(p + 0x1C) << 4; + i = 0; + do { + func_8012B0B4((unsigned int *)buf, ang, 0x20); + k = rs * 3 + 0x1000; + d = buf[0]; + v[0].vx = base[0] + d; + v[0].vy = base[1]; + v[0].vz = base[2] + (d >> 16); + v[2].vx = base[0] + (((s16)d * k) >> 12); + v[2].vy = base[1] - A; + v[2].vz = base[2] + (((d >> 16) * k) >> 12); + func_8012B0B4((unsigned int *)buf, ang + 0x2AA, 0x20); + d = buf[0]; + v[1].vx = base[0] + d; + v[1].vy = base[1]; + v[1].vz = base[2] + (d >> 16); + v[3].vx = base[0] + (((s16)d * k) >> 12); + v[3].vy = base[1] - A; + v[3].vz = base[2] + (((d >> 16) * k) >> 12); + prim = (u32 *)func_80010A08(0x24); + prim[1] = D_80186FF8[i]; + prim[3] = D_80186FF8[i + 1]; + *((u8 *)prim + 7) = 0x3A; + prim[7] = 0; + prim[5] = 0; + prim[0] = 0x8000000; + r = RotTransPers((s32)&v[0], (s32)(prim + 2), &sp40, &sp44); + RotTransPers((s32)&v[1], (s32)(prim + 4), &sp40, &sp44); + RotTransPers((s32)&v[2], (s32)(prim + 6), &sp40, &sp44); + RotTransPers((s32)&v[3], (s32)(prim + 8), &sp40, &sp44); + AddPrim(*(s32 *)((s8 *)&D_800A651C + ((u16)D_800B9A02 * 0x14)) + r * 4, prim); + func_8012E28C(r, 1); + i++; + ang = ang + 0x2AA; + } while (i < 6); +} + INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_8017D72C); diff --git a/src/ov_SC01_084/ov_SC01_084_jr_8017CA80.c b/src/ov_SC01_084/ov_SC01_084_jr_8017CA80.c index c85fb7b6dc..9a5481754e 100644 --- a/src/ov_SC01_084/ov_SC01_084_jr_8017CA80.c +++ b/src/ov_SC01_084/ov_SC01_084_jr_8017CA80.c @@ -3409,7 +3409,17 @@ void func_8017DE50(s32 *a0) { } -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017CA80", func_8017DE84); +#include "common.h" + +extern s32 ratan2(s32 dx, s32 dy); +extern u16 D_80126B5E; +extern u16 D_80126B66; +extern s32 func_8017DECC(s32 param_1, s32 param_2); + +void func_8017DE84(s32 param_1) { + func_8017DECC(param_1, ratan2(*(s16 *)&D_80126B5E, *(s16 *)&D_80126B66) & 0xFFF); +} + #include "common.h" @@ -3520,7 +3530,23 @@ void func_8017E170(void *a0) { } -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017CA80", func_8017E1AC); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); +extern void func_8017E524(void *a0); + +s32 func_8017E1AC(s32 param_1) +{ + func_8002D4C8(0x1c, 0); + func_8001BFD0(); + func_800D0C48(2); + func_8002D4C8(7, 0); + ((void (*)(void *, s32))func_8016EDEC)(func_8017E524, 0x1000000); + *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; + return 0; +} + s32 func_8017E21C(void) { return 0; @@ -3543,7 +3569,29 @@ void func_8017E290(void *a0) { } -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017CA80", func_8017E2CC); +extern void func_8016F398(void); +extern s32 func_800CF854(); +extern void func_8017DC04(void); +extern void func_80154274(s32 *a0, s32 a1); +extern void func_8014706C(void *arg0); +extern u8 D_800D5A34[]; + +void func_8017E2CC(int param_1) +{ + s8 sVar1; + + func_8016F398(); + if (func_800CF854() != 0) { + sVar1 = 3; + } else { + func_8017DC04(); + func_80154274((s32 *)param_1, (s32)&D_800D5A34); + func_8014706C((void *)param_1); + sVar1 = *(u8 *)(param_1 + 0x214) + 1; + } + *(u8 *)(param_1 + 0x214) = sVar1; +} + extern s32 func_8013767C(s32 a0); extern u16 D_80126980; @@ -3711,7 +3759,17 @@ void func_8017E734(void *a0) { } -INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017CA80", func_8017E770); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8017DBA0(void); +extern void func_80175454(void); + +void func_8017E770(void *a0) { + func_8002D4C8(0x12, 2); + func_8017DBA0(); + func_80175454(); + (*(u8 *)((s32)a0 + 0x214))++; +} + void func_8017E7C0(void *a0) { diff --git a/src/ov_SC03_011/ov_SC03_011_jr_8017C730.c b/src/ov_SC03_011/ov_SC03_011_jr_8017C730.c index f70b853b81..2e63518d30 100644 --- a/src/ov_SC03_011/ov_SC03_011_jr_8017C730.c +++ b/src/ov_SC03_011/ov_SC03_011_jr_8017C730.c @@ -3269,7 +3269,29 @@ s32 func_8017D848(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8017C730", func_8017D888); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8001BFD0(void); +extern void func_800D0C48(s32 a0); +extern void func_800D1E28(void); + +s32 func_8017D888(s32 a0) { + s32 t; + + t = *(s32 *)(a0 + 0x28) - 1; + *(s32 *)(a0 + 0x28) = t; + if (t == -1) { + func_80029124(0x90, 1); + func_8002D4C8(0x1C, 0); + func_8001BFD0(); + func_8002D4C8(0x1D, 0); + func_800D0C48(1); + func_800D1E28(); + *(u8 *)(a0 + 0x15) += 1; + } + return 0; +} + extern void func_800D1EBC(void); void func_8017D910(void) { @@ -3371,7 +3393,18 @@ void func_8017DAC8(s32 *a0) { void func_8017DB20(void) { } -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8017C730", func_8017DB28); +void func_8017DB28(s32 *a0) +{ + s32 iVar1; + + iVar1 = func_80029504(); + if ((u32)(iVar1 - 0x3b6) < 0x32) { + func_80171A10(a0); + } else { + func_80171A04(a0); + } +} + extern s32 D_80184FF4(void *a0); extern s32 D_801A2238; @@ -4149,7 +4182,62 @@ void func_8017ECD4(s32 a0) { } -INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8017C730", func_8017EF28); +extern s32 func_80132EF4(s32 a0, s32 a1); +extern void func_80129374(s32 a0, s32 a1); +extern s32 func_8017F14C(s32 a0, s32 a1); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8017F0D0(s32 a0); +extern u16 D_80126B5E; +extern u16 D_80126B66; +extern u16 D_80126B96; +extern s16 D_80126B98; +extern s16 D_80185448; + +void func_8017EF28(s32 arg0) { + s16 var_s3; + s16 var_s2; + s32 temp_v1; + s32 obj; + s32 dist; + u16 *p96; + + var_s3 = D_80126B5E - *(u16 *)(arg0 + 6); + if (var_s3 < 0) { + var_s3 = -var_s3; + } + var_s2 = D_80126B66 - *(u16 *)(arg0 + 0xE); + if (var_s2 < 0) { + var_s2 = -var_s2; + } + if ((var_s3 < 0x201) && (var_s2 < 0x201)) { + temp_v1 = *(s32 *)(arg0 + 0x1C); + *(s32 *)(arg0 + 0x1C) = temp_v1 + 1; + if (temp_v1 & 1) { + obj = func_80132EF4(arg0, 0x22); + if (obj != 0) { + func_80129374(obj, arg0); + *(u16 *)(obj + 0x34) = 0x4000; + } + } + if (func_8017F14C(arg0, (s32)&D_80185448) != 0) { + p96 = &D_80126B96; + D_80126B98 = 0xC; + *p96 |= 0x4000; + } + if ((*(s32 *)(arg0 + 0x1C) & 3) == 0) { + dist = (var_s3 * var_s3) + (var_s2 * var_s2); + if (dist <= 0x30000) { + func_8002D4C8(0x645, (0x1000 | (((0x30000 - dist) * 127) / 0x30000)) & 0xFFFF); + *(s16 *)(arg0 + 0xFC) = 1; + return; + } + } else { + return; + } + } + func_8017F0D0(arg0); +} + void func_8017F0D0(s32 a0) { if (*(s16 *)(a0 + 0xFC) != 0) { diff --git a/src/ov_SC03_105/ov_SC03_105_jr_8017C8D0.c b/src/ov_SC03_105/ov_SC03_105_jr_8017C8D0.c index 7104c4b5d3..8898e9e4fe 100644 --- a/src/ov_SC03_105/ov_SC03_105_jr_8017C8D0.c +++ b/src/ov_SC03_105/ov_SC03_105_jr_8017C8D0.c @@ -5104,7 +5104,51 @@ INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8018473 void func_801847B0(void) { } -INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_801847B8); +struct vec; +extern void func_80185238(struct vec *a0); +extern void func_80185218(void *arg0); +extern s32 func_80185680(void *a0, void *a1); +extern void func_8018574C(void *a0); +extern void func_80185810(s32 a0); +extern s32 rand(void); + +void func_801847B8(void *a0) { + s32 pad[4]; + u16 state = *(u16 *)((u8 *)a0 + 0x2); + + if (state != 0) { + s32 cnt = *(s32 *)((u8 *)a0 + 0x1C); + if (cnt != 0) { + *(s32 *)((u8 *)a0 + 0x1C) = cnt - 1; + } else { + void *s1 = (u8 *)a0 + 0x20; + + if (func_80185680(s1, (u8 *)a0 + 0x48) == 1) { + if (rand() & 1) { + func_8018574C(s1); + } + func_80185218(a0); + } else { + u16 v0, v1, a1; + + func_80185238((struct vec *)a0); + v0 = *(u16 *)((u8 *)a0 + 0x6); + v1 = *(u16 *)((u8 *)a0 + 0xA); + a1 = *(u16 *)((u8 *)a0 + 0xE); + *(u16 *)((u8 *)a0 + 0x34) = v0; + *(u16 *)((u8 *)a0 + 0x36) = v1; + *(u16 *)((u8 *)a0 + 0x38) = a1; + func_80185810((s32)s1); + } + } + } else { + s32 r; + *(u16 *)((u8 *)a0 + 0x2) = state + 1; + r = rand(); + *(s32 *)((u8 *)a0 + 0x1C) = r % 4; + } +} + #include "common.h" diff --git a/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c b/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c index d62348cab5..6751770ff0 100644 --- a/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c +++ b/src/ov_SC04_011/ov_SC04_011_jr_8017D494.c @@ -4394,7 +4394,32 @@ extern s32 D_801151D4; INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80180228); -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80180320); +void func_80180320(s32 param_1) { + s16 sVar1; + s16 local[4]; + + switch (*(s16 *)(param_1 + 0xA0)) { + case 0: + sVar1 = *(s16 *)(param_1 + 0x22) + 2; + *(s16 *)(param_1 + 0x22) = sVar1; + *(s16 *)(param_1 + 0x1A) = sVar1; + if (0x800 < sVar1) { + *(s16 *)(param_1 + 0xA0) = 1; + } + break; + case 1: + sVar1 = *(s16 *)(param_1 + 0x22) - 2; + *(s16 *)(param_1 + 0x22) = sVar1; + *(s16 *)(param_1 + 0x1A) = sVar1; + if (sVar1 < 0x400) { + *(s16 *)(param_1 + 0xA0) = 0; + } + break; + } + func_80186EFC((s32)local); + func_801803D8(param_1, local); +} + @@ -4526,7 +4551,22 @@ s32 func_80180660(void *param) } -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_801806B8); +void func_801806B8(void *arg0) +{ + extern u16 D_801EFD40; + extern u8 D_80194460[]; + extern void func_8018332C(s32 a0, s32 a1); + extern s32 D_801EFCA0; + extern void func_8018A47C(void *a0); + s32 v; + + D_801EFD40 = (D_801EFD40 | 0x20) & 0xFFF7; + func_8018332C((s32)arg0, (s32)&D_80194460); + v = D_801EFCA0; + *(s32 *)((s32)arg0 + 0x1C) = 0x20; + func_8018A47C((void *)v); +} + extern void func_801833D4(int a0, int a1); extern s32 func_80183A28(u8 *a0); @@ -4550,7 +4590,18 @@ s32 func_80180750(u8 *a0) { } -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80180790); +#include "common.h" + +extern void func_801837C4(s32, s32); +extern void func_80183BAC(u8*); + +void func_80180790(s32 self) { + ((void (*)(s32))func_801837C4)(self); + ((void (*)(s32))func_80183BAC)(self); + *(u16 *)(self + 0x100) = 0; + *(s32 *)(self + 0x1C) = 0x70; +} + extern u16 D_801EFD20; extern s32 aFC4C[] __asm__("D_801EFC4C"); @@ -4659,7 +4710,33 @@ s32 func_80180A20(s32 *param_1) { } -INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80180AB4); +struct Ent_80180AB4 { + /* 0x00 */ u8 pad00[0x34]; + /* 0x34 */ u16 unk34; + /* 0x36 */ u8 pad36[0xAA]; + /* 0xE0 */ u16 unkE0; + /* 0xE2 */ u8 padE2[0x10]; + /* 0xF2 */ s16 unkF2; + /* 0xF4 */ s16 unkF4; +}; + +void func_80180AB4(struct Ent_80180AB4 *arg0) { + extern u8 D_80194470[]; + extern void func_8018332C(s32 a0, s32 a1); + extern void func_80183BAC(u8 *a0); + extern u16 D_801EFD40; + extern void func_8012AD44(s32 *a0, s16 a1); + + arg0->unkF4 = 0; + func_8018332C((s32)arg0, (s32)&D_80194470); + func_80183BAC((u8 *)arg0); + arg0->unkE0 = 0x10; + arg0->unkF2 = 0; + D_801EFD40 |= 0x200; + func_8012AD44((s32 *)arg0, 3); + arg0->unk34 = 3; +} + INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80180B24); @@ -8584,7 +8661,7 @@ extern void func_80139A68(s32 a0, u16 a1); extern u8 D_80194378[]; extern s32 D_801EFD28; extern s32 D_801EFD2C; -extern void func_80180AB4(s32 a0); +extern void func_80180AB4(); void func_80187068(s32 a0) { extern u16 D_80126B58; diff --git a/src/ov_SC05_008/ov_SC05_008_jr_8017AE2C.c b/src/ov_SC05_008/ov_SC05_008_jr_8017AE2C.c index c1fb6ee7b4..bcf3e9e7b4 100644 --- a/src/ov_SC05_008/ov_SC05_008_jr_8017AE2C.c +++ b/src/ov_SC05_008/ov_SC05_008_jr_8017AE2C.c @@ -4862,7 +4862,22 @@ void func_8017F82C(void *a0) { } -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017F874); +void func_8017F874(void *a0) { + extern s32 D_801151D4; + extern s32 func_801823B8(void*, s32, void*); + extern s32 func_80182334(void); + extern void func_8012C098(void); + + if (*(s32 *)((s32)a0 + 0xDC) - 10 == *(u16 *)(D_801151D4 + 0x38)) { + func_8002D4C8(0x894, 3); + } + ((void (*)(s32, s32, s32))func_801823B8)((s32)a0, 0, -1); + if (((s32 (*)(s32))func_80182334)((s32)a0) == 0) { + ((void (*)(s32))func_8012C098)((s32)a0); + func_8002D4C8(0xA76, 0); + } +} + extern void (*D_80186634[])(void); extern s32 func_80013328(s32 a0, s32 a1); @@ -4893,9 +4908,39 @@ extern s32 func_8012AD50(void *a0); } -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017F9FC); +extern void func_8012C1B8(void); +extern void func_8018227C(void*, void*); +extern s32 func_8012AD50(void *a0); +extern s32 D_80199608; + +void func_8017F9FC(void *a0) { + s32 ret; + + ret = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((s32)a0 + 0x20) = ret; + if (ret != 0) { + func_8018227C(a0, &D_80199608); + func_8012AD50(a0); + } +} + + +void func_8017FA44(void *a0) { + extern s32 D_801151D4; + extern s32 func_801823B8(void*, s32, void*); + extern s32 func_80182334(void); + extern void func_8012C098(void); + + if (*(s32 *)((s32)a0 + 0xDC) - 10 == *(u16 *)(D_801151D4 + 0x38)) { + func_8002D4C8(0x894, 4); + } + ((void (*)(s32, s32, s32))func_801823B8)((s32)a0, 0, 0); + if (((s32 (*)(s32))func_80182334)((s32)a0) == 0) { + ((void (*)(s32))func_8012C098)((s32)a0); + func_8002D4C8(0xA76, 0); + } +} -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017FA44); INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017FAC4); @@ -4920,7 +4965,22 @@ void func_8017FBCC(void *a0) { } -INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017FC14); +void func_8017FC14(void *a0) { + extern s32 D_801151D4; + extern s32 func_801823B8(void*, s32, void*); + extern s32 func_80182334(void); + extern void func_8012C098(void); + + if (*(s32 *)((s32)a0 + 0xDC) - 10 == *(u16 *)(D_801151D4 + 0x38)) { + func_8002D4C8(0x894, 5); + } + ((void (*)(s32, s32, s32))func_801823B8)((s32)a0, 0, 1); + if (((s32 (*)(s32))func_80182334)((s32)a0) == 0) { + ((void (*)(s32))func_8012C098)((s32)a0); + func_8002D4C8(0xA76, 0); + } +} + extern void (*D_8018664C[])(void); extern s32 func_80013328(s32 a0, s32 a1); diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8017AE2C.c b/src/ov_SC05_010/ov_SC05_010_jr_8017AE2C.c index 6e4d217541..0f152a8f8a 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_8017AE2C.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_8017AE2C.c @@ -3320,7 +3320,13 @@ DEFINE_func_8017BEAC() /* dedup: shared engine-core @0x8017BEAC (src/shared) */ DEFINE_func_8017BEB4() /* dedup: shared engine-core @0x8017BEB4 (src/shared) */ -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8017AE2C", func_8017BEBC); +extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); + +void func_8017BEBC(s32 arg0, s32 arg1) +{ + func_8017BF34(arg0, arg1, 0xC, 0); +} + DEFINE_func_8017BEE0() /* dedup: shared engine-core @0x8017BEE0 (src/shared) */ diff --git a/src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.c b/src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.c index e7a70c69f2..c9b88bf0ef 100644 --- a/src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.c +++ b/src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.c @@ -3902,9 +3902,59 @@ extern s32 func_80147054(void *a0); } -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8017C8D0", func_8017E874); +void func_8017E874(void) { + extern void func_8012A094(s32 a0); + extern void func_8017E9D4(void *a0); + + D_80126954 = 0x190; + D_8012695C = 0x4B0; + D_80126968 = 0x155; + D_8012696A = 0x800; + D_8012696C = 0; + D_80126976 = 0; + D_80126978 = -0xC0; + D_8012697A = 0; + func_8012A018((s32)func_8017E9D4, 0); + func_8012A094((s32)D_80126948); + func_8017E9D4(D_80126948); +} + + +#include "common.h" + +extern s32 D_80126E60[]; +extern s32 D_80126E6C; +extern s32 D_80126E74; +extern s16 D_80126E80; +extern s16 D_80126E82; +extern s16 D_80126E84; +extern s16 D_80126E8E; +extern s16 D_80126E90; +extern s16 D_80126E92; + +extern void func_8012A048(void *a0, s32 a1, u8 a2); +extern void func_8012A094(s32 a0); +extern void func_8017E9D4(void *a0); +extern void func_8012A100(s8 a0); + +void func_8017E910(void) { + s32 *s0 = (s32 *)D_80126E60; + + D_80126E6C = 0xC8; + D_80126E74 = 0x2BC; + D_80126E80 = -0xE3; + D_80126E82 = 0x400; + D_80126E84 = 0; + D_80126E8E = 0; + D_80126E90 = 0; + D_80126E92 = 0; + + func_8012A048(s0, (s32)func_8017E9D4, 1); + func_8012A094((s32)s0); + func_8017E9D4(s0); + func_8012A100(1); +} -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8017C8D0", func_8017E910); extern void func_8012A100(s8 a0); void func_8017E9B4(void) { @@ -3944,7 +3994,18 @@ void func_8017EA10(s32 a0) { } -INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8017C8D0", func_8017EAB0); +extern void func_8017EAE4(s32 param_1, s16 *param_2); + +void func_8017EAB0(s32 a0) { + extern s16 D_80192288; + s16 v0; + + v0 = *(u16 *)(a0 + 0x22) + 0xB; + *(s16 *)(a0 + 0x22) = v0; + *(s16 *)(a0 + 0x1A) = v0; + func_8017EAE4(a0, &D_80192288); +} + // @class: schedule diff --git a/src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c b/src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c index 0ead7868e2..d15fab72f4 100644 --- a/src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c +++ b/src/ov_SC06_000/ov_SC06_000_jr_8017AE2C.c @@ -7342,7 +7342,46 @@ void func_80181C38(s32 param_1) } -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_80181CCC); +extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); +extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); +extern void func_801860A8(u16 *r, s16 *m); +extern void ApplyMatrixSV(void *a0, void *a1, void *a2); + +void func_80181CCC(s32 param_1, s32 param_2, s32 param_3) +{ + u8 mat[0x20]; + s16 svIn[4]; + u16 vecOut[4]; + u16 r[4]; + + *(s32 *)(param_1 + 0x8) = (s16)func_80012C6C(*(s16 *)(param_1 + 0x8), *(s16 *)(param_1 + 0xC), 4); + *(s32 *)(param_1 + 0x10) = (s16)func_80012C6C(*(s16 *)(param_1 + 0x10), *(s16 *)(param_1 + 0x14), 4); + *(s16 *)(param_1 + 0x18) = func_80012ABC(*(s16 *)(param_1 + 0x18), *(s16 *)(param_1 + 0x20), 4); + *(s16 *)(param_1 + 0x1A) = func_80012ABC(*(s16 *)(param_1 + 0x1A), *(s16 *)(param_1 + 0x22), 4); + *(s16 *)(param_1 + 0x1C) = func_80012ABC(*(s16 *)(param_1 + 0x1C), *(s16 *)(param_1 + 0x24), 4); + *(s16 *)(param_1 + 0x28) = func_80012C6C(*(s16 *)(param_1 + 0x28), *(s16 *)(param_1 + 0x2E), 0x10); + *(s16 *)(param_1 + 0x2A) = func_80012C6C(*(s16 *)(param_1 + 0x2A), *(s16 *)(param_1 + 0x30), 0x10); + *(s16 *)(param_1 + 0x2C) = func_80012C6C(*(s16 *)(param_1 + 0x2C), *(s16 *)(param_1 + 0x32), 0x10); + + *(s32 *)(param_1 + 0x48) = *(s16 *)(param_1 + 0x28) + *(s16 *)(param_2 + 0); + *(s32 *)(param_1 + 0x4C) = *(s16 *)(param_1 + 0x2A) + *(s16 *)(param_2 + 2); + *(s32 *)(param_1 + 0x50) = *(s16 *)(param_1 + 0x2C) + *(s16 *)(param_2 + 4); + + r[0] = *(u16 *)(param_1 + 0x18); + r[1] = *(u16 *)(param_1 + 0x1A) + param_3; + r[2] = *(u16 *)(param_1 + 0x1C); + func_801860A8(r, (s16 *)mat); + + svIn[0] = 0; + svIn[1] = 0; + svIn[2] = *(s32 *)(param_1 + 0x10); + ApplyMatrixSV(mat, svIn, vecOut); + + *(s32 *)(param_1 + 0x3C) = ((s16)vecOut[0] >> 3) + *(s16 *)(param_1 + 0x28) + *(s16 *)(param_2 + 0); + *(s32 *)(param_1 + 0x40) = ((s16)vecOut[1] >> 3) + *(s16 *)(param_1 + 0x2A) + *(s16 *)(param_2 + 2); + *(s32 *)(param_1 + 0x44) = ((s16)vecOut[2] >> 3) + *(s16 *)(param_1 + 0x2C) + *(s16 *)(param_2 + 4); +} + void func_80181E98(void) { } @@ -8249,7 +8288,41 @@ void func_80183884(s32 arg0) { } -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_801838FC); +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C810(s32 a0, s32 a1); +extern s32 func_8012AD50(void *a0); + +extern u8 D_801A7DB0[]; +extern u16 D_8018C674[]; +extern u16 D_8018C676[]; +extern u16 D_8018C678[]; +extern u16 D_8018C67A[]; +extern u8 D_8018C68C[]; + +void func_801838FC(s32 a0) +{ + s32 v0; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(a0 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4((void *)a0); + return; + } + func_8001C810(v0, (s32)D_801A7DB0); + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) |= 0x10; + *(s32 *)(*(s32 *)(a0 + 0x20) + 0x4) |= 0x8040; + *(u16 *)(a0 + 0x6) = D_8018C674[*(s16 *)(a0 + 0x70) * 4]; + *(u16 *)(a0 + 0xA) = D_8018C676[*(s16 *)(a0 + 0x70) * 4]; + *(u16 *)(a0 + 0xE) = D_8018C678[*(s16 *)(a0 + 0x70) * 4]; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = D_8018C67A[*(s16 *)(a0 + 0x70) * 4]; + *(s32 *)(a0 + 0x58) = (s32)D_8018C68C | 0x20000000; + *(u8 *)(a0 + 0x75) = 2; + *(u16 *)(a0 + 0x5C) = 0xCC00; + func_8012AD50((void *)a0); +} + void func_80183A1C(s32 a0) { switch (*(u16 *)(a0 + 0x34)) { @@ -8541,7 +8614,68 @@ L_da8: } -INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_801840F8); +extern void func_8013CABC(void); +extern void func_80184A50(void *a0); +extern int func_8001AAA0(void); +extern void func_8018278C(void); +extern s32 func_8012BEE8(s32 a0); +extern void func_80184398(s32 a0); +extern void func_801842CC(s32 arg0); +extern int func_80178970(void); +extern s32 D_801AECC0; + +void func_801840F8(s32 arg0) +{ + s32 t; + + t = *(s32 *)(arg0 + 0x1C); + if (t == 0x30) { + func_8013CABC(); + } else if (t == 0x10) { + func_80184A50((void *)*(s32 *)(arg0 + 0xD0)); + } + + if (*(u16 *)(arg0 + 0x84) & 1) { + t = *(s32 *)(arg0 + 0x64); + *(u16 *)(t + 0x6) -= 3; + t = *(s32 *)(*(s32 *)(arg0 + 0x64) + 0x20); + *(u16 *)(t + 0x8) -= 3; + *(u16 *)(arg0 + 0x6) -= 3; + } else { + t = *(s32 *)(arg0 + 0x64); + *(u16 *)(t + 0x6) += 3; + t = *(s32 *)(*(s32 *)(arg0 + 0x64) + 0x20); + *(u16 *)(t + 0x8) += 3; + *(u16 *)(arg0 + 0x6) += 3; + } + + *(u16 *)(arg0 + 0x84) += 1; + switch (*(u16 *)(arg0 + 0x34)) { + case 0: + if (((int (*)(int))func_8001AAA0)(0x7B) != 0) { + *(u16 *)(arg0 + 0x34) += 1; + } + break; + case 1: + if (D_801AECC0 == 0) { + D_801AECC0 = ((s32 (*)(void))func_8018278C)(); + } + break; + } + + if ((func_8012BEE8(arg0) != 0) && (D_801AECC0 != 0)) { + func_80184398(arg0); + } else { + if (*(s32 *)(arg0 + 0x1C) < 0x48) { + if ((*(u16 *)(arg0 + 0x84) & 3) == 0) { + func_801842CC(arg0); + } + } + } + + ((void (*)(s32))func_80178970)(arg0); +} + void func_801842CC(s32 arg0) { diff --git a/src/ov_SC06_025/ov_SC06_025_jr_8017BEBC.c b/src/ov_SC06_025/ov_SC06_025_jr_8017BEBC.c index 891c84a324..ac043d60e3 100644 --- a/src/ov_SC06_025/ov_SC06_025_jr_8017BEBC.c +++ b/src/ov_SC06_025/ov_SC06_025_jr_8017BEBC.c @@ -3167,7 +3167,27 @@ void func_8017BEBC(s32 arg0) } -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8017BEBC", func_8017CD9C); +#include "common.h" + +extern void func_8002931C(void); +extern int func_8017DAF0(int); + +extern u8 D_80189E74[]; +extern u8 D_80189EC4[]; + +extern u8 *D_801274C8; +extern void *D_801274CC; + +void func_8017CD9C(void) +{ + ((void (*)(s32))func_8002931C)(0x3C00000); + + D_801274C8 = D_80189E74; + D_801274CC = D_80189EC4; + + func_8017DAF0(0); +} + #include "common.h" @@ -3669,7 +3689,18 @@ int func_8017DAF0(int param_1) } -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8017BEBC", func_8017DB20); +extern void func_8017DD80(void *a0); + +void func_8017DB20(void) { + extern s32 D_801B21FC; + extern s32 D_801AC714; + + if (D_801B21FC == 0) { + func_8017DD80(&D_801AC714); + D_801B21FC = D_801B21FC + 1; + } +} + extern void func_8017DB98(s32 a0, s32 a1); void func_8017DB6C(s32 a0) { @@ -3898,7 +3929,29 @@ void func_8017E290(void *a0) { } -INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8017BEBC", func_8017E2F0); +extern s32 func_80047948(s32 a0); + +s32 func_8017E2F0(s32 a0) +{ + switch (*(u16 *)(a0 + 0x34)) { + case 0: + *(u16 *)(a0 + 0xFC) += 0x40; + if (*(s16 *)(a0 + 0xFC) >= 0x400) { + *(u16 *)(a0 + 0x34) += 1; + } + *(s32 *)(a0 + 8) -= (0x1000 - func_80047948(*(s16 *)(a0 + 0xFC))) << 7; + break; + case 1: + if (*(s16 *)(a0 + 0xA) < -0x156) { + *(s16 *)(a0 + 0xA) = -0x156; + return 1; + } + *(s16 *)(a0 + 0xA) -= 8; + break; + } + return 0; +} + INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8017BEBC", func_8017E3C0); diff --git a/src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c b/src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c index 693fd4985b..a263881d63 100644 --- a/src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c +++ b/src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c @@ -3898,7 +3898,41 @@ void func_8017D1F0(void) { } -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8017BEBC", func_8017D288); +#include "common.h" + +extern void func_8012A018(s32 a0, s32 a1); +extern void func_8012A094(s32 a0); +extern void func_8017D648(void *a0); + +void func_8017D288(void) { + typedef struct { s8 c[8]; } Blk8; + extern u8 D_80126948[]; + extern s32 D_80126954; + extern s32 D_8012695C; + extern s16 D_80126968; + extern s16 D_8012696A; + extern s16 D_8012696C; + extern s16 D_80126976; + extern s16 D_80126978; + extern s16 D_8012697A; + extern Blk8 D_801274F0; + extern Blk8 D_801869C0; + + D_80126954 = 0x190; + D_8012695C = 0x15E; + D_80126968 = 0; + D_8012696A = 0x800; + D_8012696C = 0; + D_80126976 = 0; + D_80126978 = -0x60; + D_8012697A = 0; + + func_8012A018((s32)func_8017D648, 3); + D_801274F0 = D_801869C0; + func_8012A094((s32)D_80126948); + func_8017D648(D_80126948); +} + #include "common.h" @@ -3936,7 +3970,41 @@ void func_8017D350(void) { } -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8017BEBC", func_8017D41C); +#include "common.h" + +extern void func_8012A018(s32 a0, s32 a1); +extern void func_8012A094(s32 a0); +extern void func_8017D648(void *a0); + +void func_8017D41C(void) { + typedef struct { s16 x0, x1, x2, x3; } BlkT; + extern u8 D_80126948[]; + extern s32 D_80126954; + extern s32 D_8012695C; + extern s16 D_80126968; + extern s16 D_8012696A; + extern s16 D_8012696C; + extern s16 D_80126976; + extern s16 D_80126978; + extern s16 D_8012697A; + extern u8 D_801274E8[]; + extern u8 D_801869D0; + + D_80126954 = 0x190; + D_8012695C = 0x15E; + D_80126968 = -0x38; + D_8012696A = 0; + D_8012696C = 0; + D_80126976 = 0; + D_80126978 = -0x60; + D_8012697A = 0; + + func_8012A018((s32)func_8017D648, 5); + *(BlkT *)&D_801274E8 = *(BlkT *)&D_801869D0; + func_8012A094((s32)D_80126948); + func_8017D648(D_80126948); +} + #include "common.h" @@ -4372,7 +4440,12 @@ void func_8017E1D8(void) { } -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8017BEBC", func_8017E234); +extern void func_80016714(void *a0, s32 a1); + +void func_8017E234(void *a0) { + func_80016714(a0, 0x18); +} + s32 func_8017E254(void * arg0) { @@ -4381,7 +4454,24 @@ s32 func_8017E254(void * arg0) } -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8017BEBC", func_8017E268); +extern s32 D_801151D4; +extern void func_80016714(void *a0, s32 a1); + +void func_8017E268(s32 a0) { + s32 p; + s32 t; + + p = D_801151D4; + t = *(s32 *)(p + 0x14) - 1; + *(s32 *)(p + 0x14) = t; + *(s32 *)(p + 0x10) = t; + if (t < 400) { + *(s32 *)(p + 0x10) = 400; + *(s32 *)(p + 0x14) = 400; + func_80016714((void *)a0, 0x18); + } +} + INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8017BEBC", func_8017E2B8); diff --git a/src/ov_SC07_010/ov_SC07_010_jr_801457A4.c b/src/ov_SC07_010/ov_SC07_010_jr_801457A4.c index bfffe9ad97..4da7bb4cb0 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_801457A4.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_801457A4.c @@ -1849,7 +1849,13 @@ DEFINE_func_8014C118() /* dedup: shared engine-core @0x8014c118 (src/shared) */ DEFINE_func_8014C168() /* dedup: shared engine-core @0x8014c168 (src/shared) */ -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_801457A4", func_8014C1A0); +extern void func_8014C1C8(s32 a0, s32 a1, void *a2); +extern s32 D_80183C00; + +void func_8014C1A0(s32 arg0, s32 arg1) { + func_8014C1C8(arg0, arg1, &D_80183C00); +} + DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */ diff --git a/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c b/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c index 2ce34022e9..28e4939051 100644 --- a/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c +++ b/src/ov_SC07_010/ov_SC07_010_jr_8017AE2C.c @@ -4041,9 +4041,39 @@ s32 func_8017D574(u8 *a0) { } -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8017D5F0); +#include "common.h" + +extern s32 func_800167F0(s32 a0); +extern void func_80029514(s32 a0); +extern void func_80029124(s32 a0, s32 a1); +extern void func_8002AEE4(void); +extern s8 D_80078EC6; + +s32 func_8017D5F0(void) { + s32 v0; + + v0 = func_800167F0(4); + if ((v0 & 0xFFFF) != 0) { + func_80029514(0x6A4); + func_80029124(0x11D, 1); + func_80029124(0x123, 1); + D_80078EC6 = 1; + func_8002AEE4(); + return 1; + } + + return 0; +} + + +extern void func_8017DCB8(s32 a0); +extern void func_80171928(void *a0); + +void func_8017D654(void *a0) { + func_8017DCB8(1); + func_80171928(a0); +} -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8017D654); @@ -4131,7 +4161,30 @@ void func_8017D85C(s32 *a0) { } -INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8017D898); +extern s32 func_80171A88(s32 a0); +extern void func_80015978(s32 a0, s32 *a1); +extern void func_8017EBB8(void *a0, void *a1); +extern void func_80147324(s32 a0); +extern void func_8014706C(void *a0); +extern void func_801542A4(s32 *a0, s32 a1); +extern s32 func_80171990(u8 *a0); +extern s32 D_80185A10; + +void func_8017D898(s32 param_1) { + s32 sp10[2]; + + if (func_80171A88(param_1) != 0) { + func_80015978(param_1 + 4, sp10); + *(s16 *)sp10 -= 0x20; + *(s16 *)((u8 *)sp10 + 2) -= 0x20; + func_8017EBB8((void *)0, sp10); + func_80147324(0xC13); + func_8014706C((void *)param_1); + func_801542A4((s32 *)param_1, (s32)&D_80185A10); + func_80171990((u8 *)param_1); + } +} + extern s32 D_801151D4; extern s32 D_80185AC8;