mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-28 06:49:47 -04:00
feat(decomp): ox wave dr overlays — 28 banked
Committed before the main batch: gate_main reverts on failure and would take these with it.
This commit is contained in:
+2
-1
@@ -4404,7 +4404,7 @@ ov_SC06_022_ELF := $(ov_SC06_022_OUT).elf
|
||||
ov_SC06_022_MAPFILE := $(ov_SC06_022_OUT).map
|
||||
ov_SC06_022_LD_SCRIPT := $(ov_SC06_022_OUT).ld
|
||||
ov_SC06_022_SPLAT_YAML := config/splat.ov_SC06_022.yaml
|
||||
ov_SC06_022_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_022.o,ov_SC06_022_jr_8012ACE0.o,tail2.data.o,ov_SC06_022_jr_80135888.o,tail3.data.o,ov_SC06_022_jr_80135A4C.o,tail4.data.o,ov_SC06_022_jr_80135D20.o,tail5.data.o,ov_SC06_022_jr_801380E0.o,ov_SC06_022_o0c.o,tail6.data.o,ov_SC06_022_jr_8013F350.o,tail7.data.o,ov_SC06_022_jr_8013FFD8.o,tail8.data.o,ov_SC06_022_jr_80140608.o,tail9.data.o,ov_SC06_022_jr_8015444C.o,ov_SC06_022_jr_80154C24.o,ov_SC06_022_jr_801588CC.o,ov_SC06_022_jr_80159C84.o,tail10.data.o,ov_SC06_022_jr_8015A3C8.o,tail11.data.o,ov_SC06_022_jr_8015AE2C.o,tail12.data.o,ov_SC06_022_jr_8015C32C.o,tail13.data.o,ov_SC06_022_jr_8016AB6C.o,tail14.data.o,ov_SC06_022_jr_80171B4C.o,ov_SC06_022_jr_801734BC.o,tail15.data.o,ov_SC06_022_jr_801789AC.o,ov_SC06_022_jr_80178D40.o,tail16.data.o,ov_SC06_022_jr_8017A4AC.o,tail17.data.o,ov_SC06_022_jr_8017AE2C.o,ov_SC06_022_jr_8017BEBC.o,tail18.data.o,ov_SC06_022_jr_80180CD0.o,ov_SC06_022_jr_80182D08.o,ov_SC06_022_jr_80184304.o,ov_SC06_022_jr_80184A28.o,tail19.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
ov_SC06_022_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_022.o,ov_SC06_022_jr_8012ACE0.o,tail2.data.o,ov_SC06_022_jr_80135888.o,tail3.data.o,ov_SC06_022_jr_80135A4C.o,tail4.data.o,ov_SC06_022_jr_80135D20.o,tail5.data.o,ov_SC06_022_jr_801380E0.o,ov_SC06_022_o0c.o,tail6.data.o,ov_SC06_022_jr_8013F350.o,tail7.data.o,ov_SC06_022_jr_8013FFD8.o,tail8.data.o,ov_SC06_022_jr_80140608.o,tail9.data.o,ov_SC06_022_jr_8015444C.o,ov_SC06_022_jr_80154C24.o,ov_SC06_022_jr_801588CC.o,ov_SC06_022_jr_80159C84.o,tail10.data.o,ov_SC06_022_jr_8015A3C8.o,tail11.data.o,ov_SC06_022_jr_8015AE2C.o,tail12.data.o,ov_SC06_022_jr_8015C32C.o,tail13.data.o,ov_SC06_022_jr_8016AB6C.o,tail14.data.o,ov_SC06_022_jr_80171B4C.o,ov_SC06_022_jr_801734BC.o,tail15.data.o,ov_SC06_022_jr_801789AC.o,ov_SC06_022_jr_80178D40.o,tail16.data.o,ov_SC06_022_jr_8017A4AC.o,tail17.data.o,ov_SC06_022_jr_8017AE2C.o,ov_SC06_022_jr_8017BEBC.o,tail18.data.o,ov_SC06_022_jr_80180CD0.o,tail19.data.o,ov_SC06_022_jr_80182D08.o,ov_SC06_022_jr_80184304.o,ov_SC06_022_jr_80184A28.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
|
||||
build/src/ov_SC06_022/ov_SC06_022.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
|
||||
build/src/ov_SC06_022/ov_SC06_022_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
|
||||
build/src/ov_SC06_022/ov_SC06_022_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
@@ -4419,6 +4419,7 @@ build/src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (
|
||||
build/src/ov_SC06_022/ov_SC06_022_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
|
||||
build/src/ov_SC06_022/ov_SC06_022_jr_80180CD0.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
|
||||
build/src/ov_SC06_022/ov_SC06_022_jr_80182D08.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
build/src/ov_SC06_022/ov_SC06_022_jr_80184A28.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
|
||||
build/src/ov_SC06_022/ov_SC06_022_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
|
||||
ov_SC06_022_CHECK_SHA := config/check.ov_SC06_022.sha
|
||||
ov_SC06_022_SYMBOLS := config/symbols.ov_SC06_022.txt
|
||||
|
||||
@@ -169,10 +169,11 @@ segments:
|
||||
- [0xb8960, .rodata, ov_SC06_022_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb8980, data, tail18]
|
||||
- [0xb8998, .rodata, ov_SC06_022_jr_80180CD0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb89b4, data, tail19]
|
||||
- [0xb89d4, .rodata, ov_SC06_022_jr_80182D08] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb8ab4, .rodata, ov_SC06_022_jr_80184304] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb8acc, .rodata, ov_SC06_022_jr_80184A28] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xb8ae0, data, tail19]
|
||||
- [0xb8ae0, data, tail20]
|
||||
- [0xBA114, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0xBA117] # 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
|
||||
|
||||
@@ -163,7 +163,7 @@ segments:
|
||||
- [0xa6534, data, tail17]
|
||||
- [0xa6538, .rodata, ov_SC07_000_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xa654c, .rodata, ov_SC07_000_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
|
||||
- [0xa65a0, data, tail18]
|
||||
- [0xa6588, data, tail18]
|
||||
- [0xA8B8C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
|
||||
- [0xA8B8F] # 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
|
||||
|
||||
@@ -2603,7 +2603,26 @@ void func_801A4A78(s32 arg0) {
|
||||
|
||||
INCLUDE_ASM("asm/md_SC07_003/nonmatchings/md_SC07_003", func_801A4CF4);
|
||||
|
||||
INCLUDE_ASM("asm/md_SC07_003/nonmatchings/md_SC07_003", func_801A4D58);
|
||||
typedef struct { s16 m[3][3]; s32 t[3]; } Mtx32_801A4D58;
|
||||
|
||||
extern void RotMatrixY(s32 a0, void *a1);
|
||||
extern void func_800484EC(s32 a0, s32 a1, s32 a2);
|
||||
|
||||
void func_801A4D58(s32 a0, s32 a1)
|
||||
{
|
||||
extern u8 D_800AE620[];
|
||||
|
||||
Mtx32_801A4D58 m;
|
||||
s32 vel[3];
|
||||
|
||||
m = *(Mtx32_801A4D58 *)&D_800AE620;
|
||||
vel[1] = 0;
|
||||
vel[0] = 0;
|
||||
vel[2] = a1;
|
||||
RotMatrixY(*(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x14), &m);
|
||||
func_800484EC((s32)&m, (s32)&vel[0], a0 + 0x10);
|
||||
}
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
@@ -4187,7 +4187,36 @@ void func_8017DB48(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8017AE2C", func_8017DB60);
|
||||
extern void func_8017DC24(s32);
|
||||
extern void func_8012931C(void *a0, s32 a1);
|
||||
extern u8 *func_801290DC(s32 a0, u8 *a1);
|
||||
extern s32 D_80181D90;
|
||||
|
||||
void func_8017DB60(void *a0) {
|
||||
register s8 *s0 __asm__("$16");
|
||||
s32 t;
|
||||
u8 *p;
|
||||
s32 x;
|
||||
|
||||
s0 = (s8 *)a0;
|
||||
((void (*)(void))func_8017DC24)();
|
||||
*(s32 *)(s0 + 0x10) = *(volatile s32 *)(s0 + 0x10);
|
||||
t = *(volatile s32 *)(s0 + 0x18);
|
||||
*(s32 *)(s0 + 0x18) = t;
|
||||
*(s32 *)(s0 + 0x14) = *(s32 *)(s0 + 0x14) + 0xC000;
|
||||
func_8012931C(s0, t);
|
||||
if (*(s16 *)(s0 + 0x2E) < *(s16 *)(s0 + 0xA)) {
|
||||
*(s16 *)(s0 + 0xA) = *(s16 *)(s0 + 0x2E);
|
||||
func_80015978((s32)s0 + 4, &x);
|
||||
p = func_801290DC(0x28, (u8 *)&x);
|
||||
if (p != 0) {
|
||||
*(u32 *)(p + 0x2C) = D_80181D90++ & 7;
|
||||
}
|
||||
func_8002D4C8(0x572, 0);
|
||||
func_801292C8((u8 *)s0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern void func_80015978(s32 a0, s32 *a1);
|
||||
extern s32 func_8012EF34(s32 a0, s32 a1);
|
||||
|
||||
@@ -5011,7 +5011,43 @@ void func_80180830(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8017C730", func_8018094C);
|
||||
extern s32 func_8018094C_bank(void) __asm__("func_8018094C");
|
||||
|
||||
s32 func_8018094C_bank(void)
|
||||
{
|
||||
extern void func_8012BD14(s32 a0);
|
||||
extern s32 func_80178BF8();
|
||||
extern void func_80172710(void);
|
||||
|
||||
register s32 a0v __asm__("$4");
|
||||
register s32 s0 __asm__("$16") = a0v;
|
||||
s32 ptr;
|
||||
u16 st;
|
||||
|
||||
ptr = *(s32 *)((s32)s0 + 0x64);
|
||||
st = *(u16 *)((s32)ptr + 0x2);
|
||||
if (st != 4) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (((s32 (*)(s32))func_8012BD14)(ptr) >= 0x4001) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
{
|
||||
register s32 p __asm__("$4");
|
||||
u16 st2;
|
||||
p = *(s32 *)((s32)s0 + 0x64);
|
||||
st2 = *(u16 *)((s32)p + 0x34);
|
||||
if (st2 == 0) {
|
||||
*(u16 *)((s32)p + 0x34) = st2 + 1;
|
||||
func_80178BF8();
|
||||
return (s32)func_80172710;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
extern void func_8012E88C(u8 *a0);
|
||||
extern s32 func_80178B18(s32 param_1, s32 param_2);
|
||||
|
||||
@@ -3883,7 +3883,188 @@ INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017DC70", func_8018041
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017DC70", func_80180444);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017DC70", func_801804A0);
|
||||
extern void func_800291C8(s32, s32);
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
extern s32 func_80143B6C(s32 a0, s32 a1);
|
||||
extern s32 func_8012CBCC(s32 a0);
|
||||
extern void func_80131C78(s32 a0);
|
||||
extern s32 func_8012BC60();
|
||||
extern s32 func_8012B6D4(s16 *a0, s16 *a1);
|
||||
extern void func_8012B2CC(s32 a0);
|
||||
extern void func_8012B1B4(s32 a0, s32 a1);
|
||||
extern s32 func_8012B030(void *a0);
|
||||
extern u8 D_801202A0[];
|
||||
extern s32 D_801D9758;
|
||||
extern s32 D_801D975C;
|
||||
extern s32 D_801C00D0;
|
||||
extern s32 D_801C0200;
|
||||
extern s16 D_801C03F0;
|
||||
extern s32 D_8018B8C0;
|
||||
extern u16 D_8018B8E4;
|
||||
extern u16 D_8018B8E6;
|
||||
extern u16 D_8018B8E8;
|
||||
|
||||
void func_801804A0(s32 a0) {
|
||||
register u16 *s2 __asm__("$18");
|
||||
register s32 s3 __asm__("$19");
|
||||
register s32 s4 __asm__("$20");
|
||||
register u16 *s5 __asm__("$21");
|
||||
s32 pad[4];
|
||||
s32 D;
|
||||
s32 t;
|
||||
s32 r2;
|
||||
s16 *ent;
|
||||
|
||||
switch (*(u8 *)(a0 + 0xC2)) {
|
||||
case 0:
|
||||
D_801D9758 = D = func_8012CBCC(a0);
|
||||
if (D & 0x2000) {
|
||||
if (D & 0x1000) {
|
||||
*(s16 *)(a0 + 2) = 4;
|
||||
*(u8 *)(a0 + 0xC1) = 0;
|
||||
*(u16 *)(a0 + 0x5E) = 0;
|
||||
*(s32 *)(a0 + 0x1C) = 0x30;
|
||||
func_8012A828(a0, &D_801C00D0);
|
||||
func_8002D4C8(0x531, 0);
|
||||
func_8002D4C8(0x526, 0);
|
||||
func_800291C8(0xA, 0x3025);
|
||||
return;
|
||||
}
|
||||
func_80143B6C(a0, 1);
|
||||
*(u8 *)(a0 + 0xC2) = 1;
|
||||
*(s32 *)(a0 + 0x14) = 0xFFF30000;
|
||||
*(s32 *)(a0 + 0x1C) = 0;
|
||||
}
|
||||
t = *(s32 *)(a0 + 0x1C) + 1;
|
||||
*(s32 *)(a0 + 0x1C) = t;
|
||||
if (t >= 0x78) {
|
||||
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = 0;
|
||||
*(s16 *)(a0 + 2) = 3;
|
||||
*(s32 *)(a0 + 0x1C) = 2;
|
||||
*(u16 *)(a0 + 0xFC) = 0x3C;
|
||||
*(u16 *)(a0 + 6) = D_8018B8E4;
|
||||
*(u16 *)(a0 + 0xA) = D_8018B8E6;
|
||||
*(u16 *)(a0 + 0xE) = D_8018B8E8;
|
||||
func_8012B030((void *)a0);
|
||||
*(u16 *)(a0 + 0x5C) = 0x8A10;
|
||||
if (*(s16 *)(a0 + 0x76) < 0x320) {
|
||||
*(u16 *)(a0 + 0x76) = 0x384;
|
||||
}
|
||||
func_800291C8(0xA, 0x3025);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
D_801D975C = *(s32 *)(a0 + 0x14);
|
||||
D_801D9758 = D = func_8012CBCC(a0);
|
||||
if (D & 0x2000) {
|
||||
if (D & 0x1000) {
|
||||
*(s16 *)(a0 + 2) = 4;
|
||||
*(u8 *)(a0 + 0xC1) = 0;
|
||||
*(u16 *)(a0 + 0x5E) = 0;
|
||||
*(s32 *)(a0 + 0x1C) = 0x30;
|
||||
func_8012A828(a0, &D_801C00D0);
|
||||
func_8002D4C8(0x531, 0);
|
||||
func_8002D4C8(0x526, 0);
|
||||
func_800291C8(0xA, 0x3025);
|
||||
return;
|
||||
}
|
||||
func_80143B6C(a0, 1);
|
||||
{
|
||||
s32 n;
|
||||
n = D_801D975C;
|
||||
*(u8 *)(a0 + 0xC2) = 2;
|
||||
*(s32 *)(a0 + 0x1C) = 0;
|
||||
*(s32 *)(a0 + 0x14) = -n;
|
||||
}
|
||||
}
|
||||
t = *(s32 *)(a0 + 0x1C) + 1;
|
||||
*(s32 *)(a0 + 0x1C) = t;
|
||||
if (t >= 0x28) {
|
||||
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = 0;
|
||||
*(s16 *)(a0 + 2) = 3;
|
||||
*(s32 *)(a0 + 0x1C) = 2;
|
||||
*(u16 *)(a0 + 0xFC) = 0x3C;
|
||||
*(u16 *)(a0 + 6) = D_8018B8E4;
|
||||
*(u16 *)(a0 + 0xA) = D_8018B8E6;
|
||||
*(u16 *)(a0 + 0xE) = D_8018B8E8;
|
||||
func_8012B030((void *)a0);
|
||||
*(u16 *)(a0 + 0x5C) = 0x8A10;
|
||||
if (*(s16 *)(a0 + 0x76) < 0x320) {
|
||||
*(u16 *)(a0 + 0x76) = 0x384;
|
||||
}
|
||||
func_800291C8(0xA, 0x3025);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
*(s32 *)(a0 + 0x10) = *(s32 *)(a0 + 0x10) * 15 / 16;
|
||||
*(s32 *)(a0 + 0x18) = *(s32 *)(a0 + 0x18) * 15 / 16;
|
||||
D_801D9758 = D = func_8012CBCC(a0);
|
||||
if (D & 0x2000) {
|
||||
if (D & 0x1000) {
|
||||
void *p;
|
||||
*(s16 *)(a0 + 2) = 4;
|
||||
*(u8 *)(a0 + 0xC1) = 0;
|
||||
*(u16 *)(a0 + 0x5E) = 0;
|
||||
*(s32 *)(a0 + 0x1C) = 0x30;
|
||||
__asm__("" : "=r"(p) : "0"(&D_801C00D0));
|
||||
func_8012A828(a0, p);
|
||||
func_8002D4C8(0x531, 0);
|
||||
func_8002D4C8(0x526, 0);
|
||||
func_800291C8(0xA, 0x3025);
|
||||
func_8012A828(a0, &D_801C00D0);
|
||||
} else {
|
||||
t = *(s32 *)(a0 + 0x1C) + 1;
|
||||
*(s32 *)(a0 + 0x1C) = t;
|
||||
if (t >= 0x11) {
|
||||
func_80131C78(a0);
|
||||
func_8012A828(a0, &D_801C0200);
|
||||
s2 = (u16 *)D_801202A0;
|
||||
s5 = s2 + 0x3240;
|
||||
s4 = 0;
|
||||
if (s2 != s5) {
|
||||
s3 = a0 + 4;
|
||||
do {
|
||||
ent = (s16 *)(s2 + 2);
|
||||
if (*s2 == 0xF2) {
|
||||
if (func_8012BC60((void *)s3, (void *)ent) < 0x4000) {
|
||||
s4 = 1;
|
||||
*(s16 *)(a0 + 2) = 2;
|
||||
r2 = func_8012B6D4((s16 *)s3, ent);
|
||||
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = r2;
|
||||
*(s32 *)(a0 + 0xCC) = (s32)s2;
|
||||
func_8012A828(a0, &D_801C03F0);
|
||||
func_8012B2CC(a0);
|
||||
func_8012B1B4(a0, &D_8018B8C0);
|
||||
*(s16 *)(a0 + 0x16) = -2;
|
||||
}
|
||||
}
|
||||
s2 += 0x86;
|
||||
} while (s2 != s5);
|
||||
}
|
||||
if (!s4) {
|
||||
func_8012B030((void *)a0);
|
||||
*(s16 *)(a0 + 2) = 1;
|
||||
}
|
||||
func_800291C8(0xA, 0x3025);
|
||||
}
|
||||
if ((*(s32 *)(a0 + 0x1C) & 3) == 3) {
|
||||
func_80143B6C(a0, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
t = *(u8 *)(a0 + 0x109) - 1;
|
||||
*(u8 *)(a0 + 0x109) = t;
|
||||
if ((t & 0xFF) == 0) {
|
||||
func_800291C8(0xA, 0x3025);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void func_80180904(s32 arg0) {
|
||||
register s32 base __asm__("$2");
|
||||
|
||||
@@ -2914,126 +2914,7 @@ INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_801800F
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_80180270);
|
||||
|
||||
void func_8018035C(s32 param_1)
|
||||
{
|
||||
extern void func_80180C40(s32);
|
||||
extern void func_80180D2C();
|
||||
extern s32 func_8012CC64(s32 a0, void *a1);
|
||||
extern s32 func_8012CC1C(s32 a0, void *a1);
|
||||
extern void func_8012B23C(s32 a0);
|
||||
extern void func_80131C78(s32 a0);
|
||||
extern s32 func_80143B6C(s32 a0, s32 a1);
|
||||
extern void func_80131E00(s32 a0, s32 a1);
|
||||
extern s32 D_8019C004;
|
||||
|
||||
s32 iVar1;
|
||||
|
||||
if (*(s16 *)(param_1 + 0xa) >= 0x10) {
|
||||
func_80180C40(param_1);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (*(u16 *)(param_1 + 0x34)) {
|
||||
case 0:
|
||||
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) -= 0x100;
|
||||
iVar1 = func_8012CC64(param_1, &D_8019C004);
|
||||
if ((iVar1 & 0xff) == 0x1a) {
|
||||
goto EXIT;
|
||||
}
|
||||
if ((iVar1 & 0x2000) != 0) {
|
||||
*(u16 *)(param_1 + 0x34) += 1;
|
||||
*(s32 *)(param_1 + 0x1c) = 0;
|
||||
*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = 0;
|
||||
goto TAIL;
|
||||
}
|
||||
if ((iVar1 & 0x4000) != 0) {
|
||||
*(u16 *)(param_1 + 0x34) = 4;
|
||||
*(s32 *)(param_1 + 0x1c) = 0;
|
||||
*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = 0;
|
||||
func_8012B23C(param_1);
|
||||
goto TAIL;
|
||||
}
|
||||
*(s32 *)(param_1 + 0x1c) += 1;
|
||||
if (*(s32 *)(param_1 + 0x1c) >= 0x3c) {
|
||||
*(u16 *)(param_1 + 0x34) = 2;
|
||||
}
|
||||
goto TAIL;
|
||||
|
||||
case 1:
|
||||
*(s32 *)(param_1 + 0x10) = *(s32 *)(param_1 + 0x10) * 15 / 16;
|
||||
*(s32 *)(param_1 + 0x18) = *(s32 *)(param_1 + 0x18) * 15 / 16;
|
||||
iVar1 = func_8012CC1C(param_1, &D_8019C004);
|
||||
if ((iVar1 & 0xff) == 0x1a) {
|
||||
goto EXIT;
|
||||
}
|
||||
if ((iVar1 & 0x6000) == 0) {
|
||||
*(s32 *)(param_1 + 0x1c) = 0;
|
||||
*(u16 *)(param_1 + 0x34) += 1;
|
||||
func_8012B23C(param_1);
|
||||
goto TAIL;
|
||||
}
|
||||
if ((*(u32 *)(param_1 + 0x1c) % 4) == 0) {
|
||||
func_80143B6C(param_1, 1);
|
||||
}
|
||||
*(s32 *)(param_1 + 0x1c) += 1;
|
||||
if (*(s32 *)(param_1 + 0x1c) < 0x10) {
|
||||
goto TAIL;
|
||||
}
|
||||
func_80131C78(param_1);
|
||||
goto TAIL;
|
||||
|
||||
case 2:
|
||||
iVar1 = func_8012CC64(param_1, &D_8019C004);
|
||||
if ((iVar1 & 0x2000) != 0) {
|
||||
func_80143B6C(param_1, 1);
|
||||
func_80131C78(param_1);
|
||||
goto TAIL;
|
||||
}
|
||||
if ((iVar1 & 0x4000) == 0) {
|
||||
goto L_E00;
|
||||
}
|
||||
*(u16 *)(param_1 + 0x34) = 4;
|
||||
func_80143B6C(param_1, 1);
|
||||
func_8012B23C(param_1);
|
||||
goto TAIL;
|
||||
|
||||
case 3:
|
||||
*(s32 *)(param_1 + 0x1c) += 1;
|
||||
if (*(s32 *)(param_1 + 0x1c) < 0x10) {
|
||||
goto TAIL;
|
||||
}
|
||||
func_80131C78(param_1);
|
||||
goto TAIL;
|
||||
|
||||
case 4:
|
||||
iVar1 = func_8012CC1C(param_1, &D_8019C004);
|
||||
if ((iVar1 & 0xff) == 0x1a) {
|
||||
EXIT:
|
||||
func_80180C40(param_1);
|
||||
return;
|
||||
}
|
||||
if ((iVar1 & 0x2000) == 0) {
|
||||
goto C4_B;
|
||||
}
|
||||
func_80131C78(param_1);
|
||||
goto TAIL;
|
||||
C4_B:
|
||||
if ((*(u32 *)(param_1 + 0x1c) % 4) == 0) {
|
||||
func_80143B6C(param_1, 1);
|
||||
}
|
||||
L_E00:
|
||||
*(s32 *)(param_1 + 0x1c) += 1;
|
||||
if (*(s32 *)(param_1 + 0x1c) >= 0x3c) {
|
||||
func_80131E00(param_1, 0xd);
|
||||
}
|
||||
}
|
||||
TAIL:
|
||||
((s32 (*)(s32))func_80180D2C)(param_1);
|
||||
if (0x100000 < *(s32 *)(param_1 + 0x14)) {
|
||||
*(s32 *)(param_1 + 0x14) = 0x100000;
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_8018035C);
|
||||
|
||||
extern s32 D_8019BFAC;
|
||||
extern void func_80180D2C();
|
||||
|
||||
@@ -4114,121 +4114,7 @@ void func_8017E6A0(s32 param_1) {
|
||||
}
|
||||
|
||||
|
||||
extern void func_8013C9C4(void *a0);
|
||||
extern s32 func_8012BEE8(s32 a0);
|
||||
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
|
||||
extern void func_8012A828(s32 a0, s32 a1);
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
extern void func_8017EB34(s32);
|
||||
extern void func_8017ECC4(s32 arg0, u16 arg1);
|
||||
extern s32 func_8012C588(s32 a0, s32 a1);
|
||||
extern void func_80029124(s32, s32);
|
||||
extern void func_8002959C(void);
|
||||
extern void func_80180C78(void);
|
||||
extern s32 func_80178970(void);
|
||||
extern void func_80178D18(void);
|
||||
extern void func_8017E99C(s32 a0);
|
||||
extern s16 D_8018503C;
|
||||
extern u8 D_80185018;
|
||||
extern u8 D_801884F4[];
|
||||
|
||||
void func_8017E6EC(void *arg0) {
|
||||
register s32 t __asm__("$2");
|
||||
s32 c;
|
||||
s32 s0;
|
||||
|
||||
switch (*(u16 *)((s32)arg0 + 0x34)) {
|
||||
case 0:
|
||||
if ((*(u32 *)((s32)arg0 + 0x1C) & 7) == 0) {
|
||||
func_8013C9C4(&D_8018503C);
|
||||
}
|
||||
if (func_8012BEE8((s32)arg0) != 0) {
|
||||
*(u32 *)(*(s32 *)((s32)arg0 + 0x20) + 0x24) = 0;
|
||||
s0 = 0;
|
||||
do {
|
||||
func_8012C658(0x1E0, s0, (s32)arg0);
|
||||
s0 = s0 + 1;
|
||||
} while (s0 < 0xB);
|
||||
func_8012A828((s32)arg0, (s32)&D_801884F4);
|
||||
func_8002D4C8(0x866, 0);
|
||||
*(u16 *)((s32)arg0 + 0x34) = *(u16 *)((s32)arg0 + 0x34) + 1;
|
||||
}
|
||||
((void (*)(void *))func_8017EB34)(arg0);
|
||||
break;
|
||||
case 1:
|
||||
if ((*(u16 *)((s32)arg0 + 0x72) & 0x4000) != 0) {
|
||||
func_8002D4C8(0x866, 0);
|
||||
}
|
||||
c = *(s32 *)((s32)arg0 + 0x94);
|
||||
if (c == 0x10) {
|
||||
t = *(u16 *)((s32)arg0 + 0x106) + 1;
|
||||
*(u16 *)((s32)arg0 + 0x106) = t;
|
||||
if ((t << 16) >> 16 == 2) {
|
||||
*(u16 *)((s32)arg0 + 0x98) = 0;
|
||||
t = *(u16 *)((s32)arg0 + 0x34) + 1;
|
||||
*(u16 *)((s32)arg0 + 0x34) = t;
|
||||
func_8002D4C8(0x865, 0);
|
||||
}
|
||||
}
|
||||
if ((*(u32 *)((s32)arg0 + 0x1C) & 7) == 0) {
|
||||
func_8013C9C4(&D_8018503C);
|
||||
}
|
||||
t = *(u32 *)((s32)arg0 + 0x1C) + 1;
|
||||
*(u32 *)((s32)arg0 + 0x1C) = t;
|
||||
((void (*)(void *))func_8017EB34)(arg0);
|
||||
break;
|
||||
case 2:
|
||||
func_8017ECC4((s32)arg0, 0);
|
||||
((void (*)(void *))func_8017EB34)(arg0);
|
||||
c = *(s16 *)((s32)arg0 + 0xFE);
|
||||
if (c != 6) {
|
||||
break;
|
||||
}
|
||||
t = *(u16 *)((s32)arg0 + 0x34);
|
||||
*(s32 *)((s32)arg0 + 0x1C) = 0x10;
|
||||
goto lab_e958;
|
||||
case 3:
|
||||
func_8017ECC4((s32)arg0, 0);
|
||||
if (func_8012BEE8((s32)arg0)) {
|
||||
*(u16 *)((s32)arg0 + 0x5C) = 0;
|
||||
*(u16 *)((s32)arg0 + 0x108) = 1;
|
||||
*(u16 *)((s32)arg0 + 0x10A) = 1;
|
||||
func_8012C588(0x23A, (s32)arg0);
|
||||
*(u16 *)((s32)arg0 + 0xE2) = 0;
|
||||
func_8002D4C8(0x868, 0);
|
||||
goto lab_e954;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
func_8017ECC4((s32)arg0, 1);
|
||||
if ((*(u32 *)((s32)arg0 + 0x1C) & 0xF) == 0) {
|
||||
func_8013C9C4(&D_80185018);
|
||||
}
|
||||
t = *(u32 *)((s32)arg0 + 0x1C) + 1;
|
||||
*(u32 *)((s32)arg0 + 0x1C) = t;
|
||||
if (*(s16 *)((s32)arg0 + 0xE2) == 0) {
|
||||
break;
|
||||
}
|
||||
func_80029124(0xBB, 1);
|
||||
func_8002959C();
|
||||
func_8002D4C8(4, 0x868);
|
||||
func_80180C78();
|
||||
lab_e954:
|
||||
t = *(u16 *)((s32)arg0 + 0x34);
|
||||
lab_e958:
|
||||
t = t + 1;
|
||||
*(u16 *)((s32)arg0 + 0x34) = t;
|
||||
break;
|
||||
case 5:
|
||||
break;
|
||||
}
|
||||
|
||||
if (((s32 (*)(void *))func_80178970)(arg0) != 0) {
|
||||
((void (*)(void *))func_80178D18)(arg0);
|
||||
func_8017E99C((s32)arg0);
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_8017E6EC);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_8017E99C);
|
||||
|
||||
|
||||
@@ -3414,7 +3414,26 @@ s16 func_80185B78(void) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80185498", func_80185B88);
|
||||
void func_80185B88(s32 a0) {
|
||||
extern void func_80185BD4(void);
|
||||
extern u8 D_800B9A15;
|
||||
extern unsigned char D_800B9A13;
|
||||
extern u16 D_80115110;
|
||||
extern unsigned short D_80115112;
|
||||
extern s16 D_80115126;
|
||||
extern void *D_8011DB24;
|
||||
|
||||
void *func_ptr;
|
||||
|
||||
D_800B9A15 = 1;
|
||||
D_800B9A13 = 4;
|
||||
D_80115110 = 3;
|
||||
func_ptr = func_80185BD4;
|
||||
D_80115112 = 0;
|
||||
D_80115126 = (s16)a0;
|
||||
D_8011DB24 = func_ptr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern void func_80029444(void);
|
||||
@@ -3436,4 +3455,19 @@ void func_80185BD4(void) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80185498", func_80185C44);
|
||||
void func_80185C44(void) {
|
||||
extern void func_800D24A0(s32 a0);
|
||||
extern void func_80185C98(void);
|
||||
extern u16 D_8011511A;
|
||||
extern u16 D_80115112;
|
||||
extern s32 D_80115130;
|
||||
extern s32 D_801E2358;
|
||||
|
||||
func_800D24A0(3);
|
||||
D_8011511A = 0;
|
||||
func_80185C98();
|
||||
D_80115130 = 0;
|
||||
D_801E2358 = 0;
|
||||
D_80115112++;
|
||||
}
|
||||
|
||||
|
||||
@@ -5259,186 +5259,7 @@ void func_8017FEBC(s32 a0) {
|
||||
|
||||
|
||||
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
extern void func_8012C218(void *a0);
|
||||
extern void func_800233CC(void *a0, unsigned short a1);
|
||||
extern void func_80029514(s32 a0);
|
||||
extern void func_8001CD50(s32 a0, s32 a1);
|
||||
extern void func_800D0F4C(s32 a0);
|
||||
extern s32 func_80178970();
|
||||
extern void func_80178D18();
|
||||
extern u8 *func_8012913C(s32 a0);
|
||||
extern u8 D_801A9CE8;
|
||||
extern u8 D_801A9CE9;
|
||||
extern u8 D_801A9CEA;
|
||||
extern u8 D_801A9CEC;
|
||||
extern u8 D_801A9D68;
|
||||
extern u8 D_801A9D69;
|
||||
extern u8 D_801A9D6A;
|
||||
extern u8 D_801A9D6C;
|
||||
extern u8 D_801A9D28;
|
||||
extern u8 D_801A9D29;
|
||||
extern u8 D_801A9D2A;
|
||||
extern u8 D_801A9D2C;
|
||||
|
||||
void func_80180020(s32 arg) {
|
||||
register u8 *s0 __asm__("$16");
|
||||
register s32 s1 __asm__("$17");
|
||||
register s32 v1 __asm__("$3");
|
||||
register s32 t __asm__("$2");
|
||||
register s32 ca0 __asm__("$4");
|
||||
register s32 ca1 __asm__("$5");
|
||||
volatile u8 pad[40];
|
||||
s32 u34;
|
||||
|
||||
s1 = arg;
|
||||
|
||||
switch (*(s16 *)(s1 + 0x10A)) {
|
||||
case 0:
|
||||
goto tailjoin;
|
||||
case 1:
|
||||
v1 = (s32)func_8012913C(0x6D);
|
||||
if (v1 == 0) {
|
||||
goto tailjoin;
|
||||
}
|
||||
s0 = &D_801A9CE8;
|
||||
*(s32 *)(s1 + 0xD0) = v1;
|
||||
*(u16 *)(v1 + 6) = *(u16 *)(s1 + 6) + 0x80;
|
||||
*(u16 *)(v1 + 0xA) = *(u16 *)(s1 + 0xA) - 0x38;
|
||||
*(u16 *)(v1 + 0xE) = *(u16 *)(s1 + 0xE) - 0x28;
|
||||
func_8001CD50(*(s32 *)(v1 + 0x20), (s32)s0);
|
||||
D_801A9CE9 = 0;
|
||||
D_801A9CEA = 0;
|
||||
D_801A9CEC = 0;
|
||||
D_801A9CE9 = 0;
|
||||
D_801A9CEA = 0;
|
||||
*s0 = 0xFF;
|
||||
func_800233CC(s0, 0x40);
|
||||
*(s16 *)(s1 + 0x10A) = 2;
|
||||
*(s16 *)(s1 + 0xFC) = 0x20;
|
||||
return;
|
||||
case 2:
|
||||
t = *(s16 *)(s1 + 0xFC);
|
||||
v1 = t;
|
||||
if (t != 0) {
|
||||
goto decr;
|
||||
}
|
||||
v1 = (s32)func_8012913C(0x6D);
|
||||
if (v1 == 0) {
|
||||
goto tailjoin;
|
||||
}
|
||||
s0 = &D_801A9D68;
|
||||
*(s32 *)(s1 + 0xD8) = v1;
|
||||
*(u16 *)(v1 + 6) = *(u16 *)(s1 + 6) + 0x68;
|
||||
*(u16 *)(v1 + 0xA) = *(u16 *)(s1 + 0xA) - 0x20;
|
||||
*(u16 *)(v1 + 0xE) = *(u16 *)(s1 + 0xE) - 0x28;
|
||||
func_8001CD50(*(s32 *)(v1 + 0x20), (s32)s0);
|
||||
D_801A9D69 = 0;
|
||||
D_801A9D6A = 0;
|
||||
D_801A9D6C = 0;
|
||||
*s0 = 0;
|
||||
D_801A9D69 = 0;
|
||||
D_801A9D6A = 0xFF;
|
||||
func_800233CC(s0, 0x40);
|
||||
*(s16 *)(s1 + 0x10A) = 3;
|
||||
*(s16 *)(s1 + 0xFC) = 0x20;
|
||||
return;
|
||||
case 3:
|
||||
t = *(s16 *)(s1 + 0xFC);
|
||||
v1 = t;
|
||||
if (t != 0) {
|
||||
goto decr;
|
||||
}
|
||||
v1 = (s32)func_8012913C(0x6D);
|
||||
if (v1 == 0) {
|
||||
goto tailjoin;
|
||||
}
|
||||
s0 = &D_801A9D28;
|
||||
*(s32 *)(s1 + 0xD4) = v1;
|
||||
*(u16 *)(v1 + 6) = *(u16 *)(s1 + 6) + 0x9C;
|
||||
*(u16 *)(v1 + 0xA) = *(u16 *)(s1 + 0xA) - 0x20;
|
||||
*(u16 *)(v1 + 0xE) = *(u16 *)(s1 + 0xE) - 0x28;
|
||||
func_8001CD50(*(s32 *)(v1 + 0x20), (s32)s0);
|
||||
D_801A9D29 = 0;
|
||||
D_801A9D2A = 0;
|
||||
D_801A9D2C = 0;
|
||||
*s0 = 0;
|
||||
D_801A9D2A = 0;
|
||||
D_801A9D29 = 0xFF;
|
||||
func_800233CC(s0, 0x40);
|
||||
*(s16 *)(s1 + 0x10A) = 4;
|
||||
*(s16 *)(s1 + 0xFC) = 0x20;
|
||||
return;
|
||||
case 4:
|
||||
t = *(s16 *)(s1 + 0xFC);
|
||||
v1 = t;
|
||||
if (t != 0) {
|
||||
goto decr;
|
||||
}
|
||||
v1 = *(s32 *)(s1 + 0xD0);
|
||||
*(u16 *)(v1 + 2) += 1;
|
||||
v1 = *(s32 *)(s1 + 0xD4);
|
||||
*(u16 *)(v1 + 2) += 1;
|
||||
v1 = *(s32 *)(s1 + 0xD8);
|
||||
*(u16 *)(v1 + 2) += 1;
|
||||
*(s16 *)(s1 + 0x10A) = 5;
|
||||
*(s16 *)(s1 + 0xFC) = 0x20;
|
||||
return;
|
||||
case 5:
|
||||
t = *(s16 *)(s1 + 0xFC);
|
||||
v1 = t;
|
||||
if (t == 0) {
|
||||
goto set6;
|
||||
}
|
||||
decr:
|
||||
t = v1 - 1;
|
||||
*(s16 *)(s1 + 0xFC) = t;
|
||||
return;
|
||||
set6:
|
||||
t = 6;
|
||||
*(s16 *)(s1 + 0x10A) = t;
|
||||
ca0 = 0xC1F;
|
||||
ca1 = 0;
|
||||
goto c6call;
|
||||
case 6:
|
||||
*(u16 *)(s1 + 6) -= 2;
|
||||
{
|
||||
u8 *p = *(u8 **)(s1 + 0xCC);
|
||||
*(u16 *)(s1 + 0xA) ^= 2;
|
||||
*(u16 *)(p + 6) += 2;
|
||||
*(u16 *)(p + 0xA) ^= 2;
|
||||
if (*(s16 *)(s1 + 0x88) - *(s16 *)(s1 + 6) >= 0x81) {
|
||||
*(s16 *)(s1 + 0x10A) = 0;
|
||||
ca0 = 4;
|
||||
ca1 = 0xC1F;
|
||||
} else {
|
||||
goto tailjoin;
|
||||
}
|
||||
}
|
||||
c6call:
|
||||
func_8002D4C8(ca0, ca1);
|
||||
break;
|
||||
}
|
||||
|
||||
tailjoin:
|
||||
if (((s32 (*)(s32))func_80178970)(s1) == 0) {
|
||||
return;
|
||||
}
|
||||
((void (*)(s32))func_80178D18)(s1);
|
||||
u34 = *(u16 *)(s1 + 0x34);
|
||||
*(s16 *)(s1 + 2) = 1;
|
||||
if (u34 == 0) {
|
||||
return;
|
||||
}
|
||||
func_80029514(0x30C);
|
||||
func_8012C218((void *)*(s32 *)(s1 + 0xCC));
|
||||
func_8012C218((void *)*(s32 *)(s1 + 0x6C));
|
||||
func_8012C218((void *)s1);
|
||||
func_800D0F4C(0x60);
|
||||
func_800D0F4C(0x61);
|
||||
func_800D0F4C(0x62);
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8017BEBC", func_80180020);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8017BEBC", func_801803BC);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -6043,60 +6043,7 @@ DEFINE_func_8018178C() /* dedup: shared engine-core @0x8018178C (src/shared) */
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_801817B8);
|
||||
|
||||
#include "common.h"
|
||||
|
||||
extern s32 func_80185BE0(s32 a0);
|
||||
extern s32 func_80184FA4(s32);
|
||||
extern void func_80184ED4(s32, s32, s32, s32);
|
||||
extern void func_80184CB8(s32*, s32);
|
||||
extern u8 D_801B66C0[];
|
||||
extern u8 D_801B6670[];
|
||||
extern u8 D_801B662C[];
|
||||
extern short D_80191B34;
|
||||
|
||||
void func_80181804(void *a0)
|
||||
{
|
||||
switch (*(u16 *)((s32)a0 + 0x34)) {
|
||||
case 0:
|
||||
if (func_80185BE0(0xD) == 0) {
|
||||
return;
|
||||
}
|
||||
*(u16 *)((s32)a0 + 0x34) = 1;
|
||||
func_80184ED4((s32)a0, (s32)D_801B66C0, 1, 0x80);
|
||||
return;
|
||||
case 1:
|
||||
func_80185BE0(0xD);
|
||||
if (func_80184FA4((s32)a0) == 0) {
|
||||
return;
|
||||
}
|
||||
*(u16 *)((s32)a0 + 0x34) = 2;
|
||||
func_80184ED4((s32)a0, (s32)D_801B6670, 1, 0x80);
|
||||
return;
|
||||
case 2:
|
||||
if (func_80184FA4((s32)a0) == 0) {
|
||||
return;
|
||||
}
|
||||
*(u16 *)((s32)a0 + 0x34) = 3;
|
||||
*(s32 *)((s32)a0 + 0x1C) = 0x20;
|
||||
return;
|
||||
case 3:
|
||||
if (func_80185BE0(3) == 0) {
|
||||
return;
|
||||
}
|
||||
*(u16 *)((s32)a0 + 0x34) = 4;
|
||||
func_80184ED4((s32)a0, (s32)D_801B662C, 1, 0x80);
|
||||
return;
|
||||
case 4:
|
||||
func_80185BE0(3);
|
||||
if (func_80184FA4((s32)a0) == 0) {
|
||||
return;
|
||||
}
|
||||
*(u16 *)((s32)a0 + 0x2) = 1;
|
||||
func_80184CB8((s32 *)a0, (s32)&D_80191B34);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80181804);
|
||||
|
||||
|
||||
extern void (*D_80191BDC[])(void);
|
||||
|
||||
@@ -4474,7 +4474,22 @@ void func_8018B6F4(void *a0) {
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B730);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B798);
|
||||
extern s32 func_80184BAC(s32 arg0, s32 arg1);
|
||||
extern u8 D_80078EBA;
|
||||
|
||||
void func_8018B798(void *a0) {
|
||||
s32 v0;
|
||||
*(s32 *)(*(s32 *)((s32)a0 + 0xCC) + 0xB0) = 2;
|
||||
if (D_80078EBA == 3) {
|
||||
v0 = 0;
|
||||
} else {
|
||||
v0 = func_80184BAC(7, 0x13) != 0;
|
||||
}
|
||||
if (v0 != 0) {
|
||||
*(u16 *)((char *)a0 + 2) = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8018B7FC() /* dedup: shared engine-core @0x8018B7FC (src/shared) */
|
||||
|
||||
@@ -4626,7 +4641,24 @@ extern void func_80178CBC(s32, s32);
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018BF64);
|
||||
extern s32 func_80184BAC(s32 arg0, s32 arg1);
|
||||
|
||||
void func_8018BF64(void *arg0) {
|
||||
register s32 *s0 asm("$16") = arg0;
|
||||
s32 v0, v1;
|
||||
*(s32 *)((u8 *)(*(s32 **)((u8 *)s0 + 0xCC)) + 0xB0) = 2;
|
||||
v0 = func_80184BAC(6, 0x12);
|
||||
if (v0 != 0) {
|
||||
v1 = 1;
|
||||
} else {
|
||||
v0 = func_80184BAC(0x12, 0x15);
|
||||
v1 = (v0 != 0) << 1;
|
||||
}
|
||||
if (v1 != 0) {
|
||||
func_8018BDE0(s0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern s32 func_80184BAC(s32 arg0, s32 arg1);
|
||||
|
||||
|
||||
@@ -5157,7 +5157,38 @@ void func_8018025C(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8017C294", func_801802BC);
|
||||
#include "common.h"
|
||||
|
||||
extern void func_8012C1B8(void);
|
||||
extern void func_8012CAE4(void *a0);
|
||||
extern void func_8001C214(s32 a0, s32 a1);
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
|
||||
void func_801802BC(s32 param_1)
|
||||
{
|
||||
extern u8 D_8019E628[];
|
||||
extern u8 D_80185B40[];
|
||||
|
||||
s32 v0;
|
||||
|
||||
v0 = ((s32 (*)(void))func_8012C1B8)();
|
||||
*(s32 *)(param_1 + 0x20) = v0;
|
||||
if (v0 == 0) {
|
||||
func_8012CAE4((void *)param_1);
|
||||
} else {
|
||||
func_8001C214(v0, (s32)D_8019E628);
|
||||
func_8012A828(param_1, (void *)D_80185B40);
|
||||
*(u16 *)(param_1 + 0x2) = 1;
|
||||
*(s32 *)(param_1 + 0x1C) = 0x40;
|
||||
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) =
|
||||
*(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x10);
|
||||
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) =
|
||||
*(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x12);
|
||||
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) =
|
||||
*(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x14);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern void func_8012AD80(s32 a0);
|
||||
extern void func_8012B14C(s32 a0, s32 a1);
|
||||
|
||||
@@ -3220,51 +3220,7 @@ void func_801815CC(s32 param_1) {
|
||||
void func_8018165C(void) {
|
||||
}
|
||||
|
||||
extern void func_8012C1B8(void);
|
||||
extern void func_8012CAE4(void *a0);
|
||||
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
|
||||
extern void func_80180CB0(s32 a0);
|
||||
|
||||
void func_80181664(s32 param_1)
|
||||
{
|
||||
s32 v1;
|
||||
|
||||
v1 = ((s32 (*)(void))func_8012C1B8)();
|
||||
*(s32 *)(param_1 + 0x20) = v1;
|
||||
if (v1 == 0) {
|
||||
((void (*)(s32))func_8012CAE4)(param_1);
|
||||
return;
|
||||
}
|
||||
|
||||
*(u16 *)v1 = 1;
|
||||
*(u16 *)(*(s32 *)(param_1 + 0x20) + 2) = 9;
|
||||
|
||||
switch (*(s16 *)(param_1 + 0x70)) {
|
||||
case 0:
|
||||
*(s32 *)(param_1 + 0x6C) = func_8012C658(0x2F9, 2, *(s32 *)(param_1 + 0x64));
|
||||
break;
|
||||
|
||||
case 1:
|
||||
*(s32 *)(param_1 + 0x6C) = func_8012C658(0x2F9, 3, *(s32 *)(param_1 + 0x64));
|
||||
break;
|
||||
|
||||
case 2:
|
||||
case 3:
|
||||
*(s32 *)(param_1 + 0x6C) =
|
||||
func_8012C658(0x2F9, *(s16 *)(param_1 + 0x70) + 2, param_1);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
case 5:
|
||||
*(s32 *)(param_1 + 0xD0) = func_8012C658(0x2F9, 6, param_1);
|
||||
/* fall through */
|
||||
case 6:
|
||||
default:
|
||||
func_80180CB0(param_1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80180CD0", func_80181664);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80180CD0", func_80181744);
|
||||
|
||||
|
||||
@@ -4073,7 +4073,61 @@ s32 func_8017E8F8(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_8017EADC);
|
||||
extern void func_8012EC04(s32 a0, s32 a1, s32 *a2);
|
||||
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8012B77C(void *a0, s32 a1, void *a2);
|
||||
extern void func_80049CAC(s32 a0, s32 a1);
|
||||
extern s32 func_800133BC();
|
||||
extern void func_800484EC(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8012D3B4(s32 a0, s32 a1, s32 a2);
|
||||
extern s32 D_801E1158;
|
||||
extern u16 D_80193440[];
|
||||
extern u16 D_80193468[];
|
||||
extern u8 D_80126B5C;
|
||||
extern s32 D_80126B64;
|
||||
extern s32 D_80126B60;
|
||||
|
||||
void func_8017EADC(s32 a0) {
|
||||
s16 m[16];
|
||||
s16 s1[4];
|
||||
s16 tmp2[3];
|
||||
s16 tmp[3];
|
||||
s32 s2[3];
|
||||
s16 s3[6];
|
||||
s16 outb[6];
|
||||
s32 val;
|
||||
|
||||
func_8012EC04(a0, D_801E1158, (s32 *)m);
|
||||
func_8012F14C((s32)m, (s32)&D_80193468, (s32)s1);
|
||||
func_8012F14C((s32)m, (s32)&D_80193440, *(s32 *)(a0 + 0xD4) + 8);
|
||||
|
||||
s2[0] = *(s32 *)&D_80126B5C;
|
||||
s2[1] = D_80126B60 + 0xFFD00000;
|
||||
s2[2] = D_80126B64;
|
||||
s3[1] = s1[0];
|
||||
s3[3] = s1[1];
|
||||
s3[5] = s1[2];
|
||||
func_8012B77C(&val, (s32)s3, (s32)s2);
|
||||
|
||||
tmp[0] = val;
|
||||
tmp[1] = val >> 16;
|
||||
tmp[2] = 0;
|
||||
func_80049CAC((s32)tmp, (s32)m);
|
||||
|
||||
*(s16 *)(a0 + 0x102) = func_800133BC((s32)s1, (s32)s2);
|
||||
|
||||
*(s32 *)&s3[2] = 0;
|
||||
*(s32 *)&s3[0] = 0;
|
||||
s3[5] = -*(u16 *)(a0 + 0x102);
|
||||
s3[4] = 0;
|
||||
func_800484EC((s32)m, (s32)s3, (s32)outb);
|
||||
|
||||
tmp2[0] = s1[0] + outb[1];
|
||||
tmp2[1] = s1[1] + outb[3];
|
||||
tmp2[2] = s1[2] + outb[5];
|
||||
func_8012D3B4((s32)s1, (s32)tmp2, 0xFF);
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_8017EC4C);
|
||||
|
||||
|
||||
@@ -5360,166 +5360,7 @@ void func_80182DB0(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
extern void func_80183478();
|
||||
extern void func_8002D4C8();
|
||||
extern void func_8012F214();
|
||||
extern void func_80183534();
|
||||
extern s32 func_80013478(s32 a0, s32 a1);
|
||||
extern s32 D_801DDB28;
|
||||
extern s32 D_801DDB3C;
|
||||
extern u16 D_800B99DA;
|
||||
extern u8 D_80126B5C;
|
||||
extern u8 D_80190858[];
|
||||
extern u8 D_801908D8[];
|
||||
extern s32 D_801DFE54[];
|
||||
extern s32 D_801DFDD4[];
|
||||
|
||||
void func_80182ED8(s32 arg0) {
|
||||
s32 val;
|
||||
s16 top[4];
|
||||
s16 bot[4];
|
||||
s32 *q;
|
||||
s32 ctr;
|
||||
s32 *p;
|
||||
u8 *p8;
|
||||
s32 r;
|
||||
s32 *w;
|
||||
s32 t;
|
||||
s32 dd4;
|
||||
s32 pbase;
|
||||
u16 vol;
|
||||
|
||||
switch (*(u16 *)(arg0 + 0x34)) {
|
||||
case 0:
|
||||
*(u16 *)(arg0 + 0x100) += 0x20;
|
||||
if (*(s16 *)(arg0 + 0x100) >= 0x121) {
|
||||
*(u16 *)(arg0 + 0x100) = 0x120;
|
||||
*(u16 *)(arg0 + 0x34) = *(u16 *)(arg0 + 0x34) + 1;
|
||||
func_80183478(arg0, 1);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (*(s32 *)(arg0 + 0xE0) != 0) {
|
||||
func_801834D8(arg0, 0);
|
||||
*(u16 *)(arg0 + 0x34) = *(u16 *)(arg0 + 0x34) + 1;
|
||||
}
|
||||
if ((*(s16 *)(D_801DDB28 + 0x100) == 2) && ((D_800B99DA & 0x7F) == 0)) {
|
||||
func_801834D8(arg0, 0);
|
||||
*(u16 *)(arg0 + 0x34) = 4;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
*(u16 *)(arg0 + 0xFE) += 0x20;
|
||||
if (*(s16 *)(arg0 + 0xFE) >= 0x121) {
|
||||
*(u16 *)(arg0 + 0xFE) = 0x120;
|
||||
*(u16 *)(arg0 + 0x34) = *(u16 *)(arg0 + 0x34) + 1;
|
||||
func_801834D8(arg0, 0);
|
||||
func_801834D8(arg0, 1);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
*(u16 *)(arg0 + 2) = 2;
|
||||
if (*(s16 *)(arg0 + 0x70) == 3) {
|
||||
func_8002D4C8(4, 0x9CF);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
*(u16 *)(arg0 + 0xFE) += 0x20;
|
||||
if (*(s16 *)(arg0 + 0xFE) >= 0x121) {
|
||||
*(u16 *)(arg0 + 0xFE) = 0;
|
||||
*(u16 *)(arg0 + 0x100) = 0;
|
||||
*(u16 *)(arg0 + 0x34) = 0;
|
||||
if (*(s32 *)(*(s32 *)(arg0 + 0x64) + 0x64) == D_801DDB3C) {
|
||||
if (*(s32 *)(arg0 + 8) == 0) {
|
||||
*(s16 *)(arg0 + 0xA) = 0x200;
|
||||
} else {
|
||||
*(s16 *)(arg0 + 0xA) = 0;
|
||||
}
|
||||
} else {
|
||||
if (*(s32 *)(arg0 + 8) == 0) {
|
||||
*(s16 *)(arg0 + 0xA) = -0x200;
|
||||
} else {
|
||||
*(s16 *)(arg0 + 0xA) = 0;
|
||||
}
|
||||
}
|
||||
func_80183478(arg0, 0);
|
||||
func_801834D8(arg0, 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
w = (s32 *)(arg0 + 0xE4);
|
||||
ctr = 0;
|
||||
t = *(s16 *)(arg0 + 0x70);
|
||||
p8 = D_80190858 + (t << 5);
|
||||
r = (s32)&D_801DFE54[t * 4];
|
||||
dd4 = (s32)D_801DFDD4;
|
||||
pbase = dd4 + 4;
|
||||
p = (s32 *)(pbase + (t << 5));
|
||||
q = (s32 *)(dd4 + (t << 5));
|
||||
|
||||
while (ctr < 4) {
|
||||
func_8012F214(*(s32 *)(arg0 + 0x64), (s32)p8, (s32)top);
|
||||
bot[0] = top[0];
|
||||
bot[1] = top[1];
|
||||
bot[2] = top[2];
|
||||
top[1] += *(u16 *)(arg0 + 0xFE) + *(u16 *)(arg0 + 0xA);
|
||||
bot[1] += *(u16 *)(arg0 + 0x100) + *(u16 *)(arg0 + 0xA);
|
||||
if (*q != 0) {
|
||||
*(s16 *)(*q + 8) = top[0];
|
||||
*(s16 *)(*q + 10) = top[1];
|
||||
*(s16 *)(*q + 12) = top[2];
|
||||
}
|
||||
if (*p != 0) {
|
||||
*(s16 *)(*p + 8) = bot[0];
|
||||
*(s16 *)(*p + 10) = bot[1];
|
||||
*(s16 *)(*p + 12) = bot[2];
|
||||
}
|
||||
func_80183534(arg0, (s32)top, (s32)bot, (s32)w);
|
||||
func_80183848(arg0, (s32)top, (s32)bot);
|
||||
top[0] = (top[0] + bot[0]) >> 1;
|
||||
top[1] = (top[1] + bot[1]) >> 1;
|
||||
top[2] = (top[2] + bot[2]) >> 1;
|
||||
*(s32 *)r = func_80013478((s32)&D_80126B5C, (s32)top);
|
||||
r += 4;
|
||||
ctr++;
|
||||
p8 += 8;
|
||||
p += 2;
|
||||
q += 2;
|
||||
w++;
|
||||
}
|
||||
|
||||
func_8012F214(*(s32 *)(arg0 + 0x64),
|
||||
(s32)(D_801908D8 + (*(s16 *)(arg0 + 0x70) << 3)), (s32)top);
|
||||
bot[0] = top[0];
|
||||
bot[1] = top[1];
|
||||
bot[2] = top[2];
|
||||
top[1] += *(u16 *)(arg0 + 0xFE) + *(u16 *)(arg0 + 0xA);
|
||||
bot[1] += *(u16 *)(arg0 + 0x100) + *(u16 *)(arg0 + 0xA);
|
||||
func_80183848(arg0, (s32)top, (s32)bot);
|
||||
|
||||
if ((*(u16 *)(arg0 + 0x34) != 3) && (*(s16 *)(arg0 + 0x70) == 3)) {
|
||||
val = D_801DFE54[0];
|
||||
for (ctr = 1; ctr < 0x10; ctr++) {
|
||||
if (D_801DFE54[ctr] < val) {
|
||||
val = D_801DFE54[ctr];
|
||||
}
|
||||
}
|
||||
val -= 0x4000;
|
||||
if (val <= 0) {
|
||||
func_8002D4C8(0x9CF, 0x107F);
|
||||
} else {
|
||||
vol = 0x7F;
|
||||
if (val <= 0xFFFFF) {
|
||||
vol -= (val * 111) / 1048576;
|
||||
} else {
|
||||
vol = 0x10;
|
||||
}
|
||||
func_8002D4C8(0x9CF, vol | 0x1000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80182ED8);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_801833FC);
|
||||
|
||||
|
||||
@@ -4859,71 +4859,7 @@ void func_80181938(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
extern void *D_80126CC8;
|
||||
extern u8 D_801B72B4[];
|
||||
extern u8 D_801B6914[];
|
||||
extern void func_8001C214(s32 a0, s32 a1);
|
||||
extern void func_80180D68(void);
|
||||
|
||||
void func_80181A80(void *a0) {
|
||||
u16 state = *(u16 *)((s32)a0 + 0x34);
|
||||
|
||||
switch (state) {
|
||||
case 4:
|
||||
{
|
||||
u8 *p = D_801202A0;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 0x60; i++, p += 0x10C) {
|
||||
if (*(u16 *)(p + 0) == 0x2E7 && *(u16 *)(p + 2) == 4) {
|
||||
func_8001C214(*(s32 *)((s32)a0 + 0x20), (s32)D_801B72B4);
|
||||
*(u16 *)((s32)a0 + 0x5C) = 0x8800;
|
||||
*(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400;
|
||||
*(s16 *)((s32)a0 + 0x34) = 3;
|
||||
}
|
||||
}
|
||||
/* fall through */
|
||||
}
|
||||
case 0:
|
||||
if (D_80126CC8 == a0) {
|
||||
u16 t0 = *(u16 *)((s32)a0 + 0x88);
|
||||
u16 t1 = *(u16 *)((s32)a0 + 0x8A);
|
||||
u16 t2 = *(u16 *)((s32)a0 + 0x8C);
|
||||
|
||||
*(s16 *)((s32)a0 + 0x34) = 1;
|
||||
*(s16 *)((s32)a0 + 0x5C) = 0;
|
||||
*(u16 *)((s32)a0 + 0x6) = t0;
|
||||
*(u16 *)((s32)a0 + 0xA) = t1;
|
||||
*(u16 *)((s32)a0 + 0xE) = t2;
|
||||
func_80180D68();
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
break;
|
||||
case 2:
|
||||
{
|
||||
u8 *p = D_801202A0;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 0x60; i++, p += 0x10C) {
|
||||
if (*(u16 *)(p + 0) == 0x2E7 && *(u16 *)(p + 2) == 4) {
|
||||
func_8001C214(*(s32 *)((s32)a0 + 0x20), (s32)D_801B6914);
|
||||
*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x4) |= 0x60000040;
|
||||
*(u16 *)((s32)a0 + 0x5C) = 0x9000;
|
||||
*(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400;
|
||||
*(s16 *)((s32)a0 + 0x34) = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_80181A80);
|
||||
|
||||
|
||||
extern void (*D_801B4DA8[])(void);
|
||||
|
||||
@@ -9326,36 +9326,7 @@ void func_8018CD54(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
extern void func_8012C1B8(void);
|
||||
extern void func_8012CAE4(s32 a0);
|
||||
extern void func_8001C214(s32 a0, s32 a1);
|
||||
extern void func_8012A828(s32 a0, void *a1);
|
||||
|
||||
void func_8018CDB4(s32 param_1) {
|
||||
|
||||
extern s32 D_801CC5A8;
|
||||
extern u8 D_80193650[];
|
||||
|
||||
s32 v0;
|
||||
|
||||
v0 = ((s32 (*)(void))func_8012C1B8)();
|
||||
*(s32 *)(param_1 + 0x20) = v0;
|
||||
if (v0 == 0) {
|
||||
func_8012CAE4(param_1);
|
||||
} else {
|
||||
func_8001C214(v0, (s32)&D_801CC5A8);
|
||||
func_8012A828(param_1, D_80193650);
|
||||
*(s16 *)(param_1 + 2) = 1;
|
||||
*(s32 *)(param_1 + 0x1C) = 0x40;
|
||||
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) =
|
||||
*(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x10);
|
||||
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) =
|
||||
*(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x12);
|
||||
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) =
|
||||
*(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x14);
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_8018CDB4);
|
||||
|
||||
extern u8 D_801CA8D4[];
|
||||
extern u8 D_801CA8E0[];
|
||||
|
||||
@@ -3548,7 +3548,102 @@ retry_state6:
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8018C2D8", func_8018CD5C);
|
||||
extern void func_8012B23C(void *);
|
||||
extern void func_8012B1B4(void *, void *);
|
||||
extern s32 rand(void);
|
||||
extern void func_8004914C(void *a0);
|
||||
extern void func_800491AC(void *a0);
|
||||
extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3);
|
||||
extern s32 func_8004787C(s32 a0);
|
||||
extern s32 func_80047948(s32 a0);
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
|
||||
void func_8018CD5C(s32 a0) {
|
||||
extern u8 D_800AF648;
|
||||
extern u8 D_801C834C;
|
||||
|
||||
struct {
|
||||
s16 v[3]; /* sp+0x10 */
|
||||
s16 pad; /* sp+0x16 */
|
||||
u16 sxy[2]; /* sp+0x18 */
|
||||
s32 z; /* sp+0x1C */
|
||||
s32 flag; /* sp+0x20 */
|
||||
} L;
|
||||
|
||||
if (*(s16 *)(a0 + 0xFC) != *(s16 *)(*(s32 *)(a0 + 0x64) + 0x36)) {
|
||||
*(s16 *)(a0 + 2) = 5;
|
||||
*(s16 *)(a0 + 0x34) = 0;
|
||||
((void (*)(void))func_8012B23C)();
|
||||
func_8012B1B4((void *)a0, &D_801C834C);
|
||||
*(s16 *)(a0 + 0x16) = (rand() & 3) - 0x1B;
|
||||
*(s16 *)(a0 + 0xA) = *(u16 *)(a0 + 0xA) - 0x38;
|
||||
*(s16 *)(a0 + 0xFC) = (rand() & 0xFF) - 0x80;
|
||||
*(s16 *)(a0 + 0xFE) = (rand() & 0xFF) - 0x80;
|
||||
*(s16 *)(a0 + 0x100) = (rand() & 0xFF) - 0x80;
|
||||
*(s32 *)(a0 + 0x1C) = 0x3C;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (*(u16 *)(a0 + 0x34)) {
|
||||
case 0:
|
||||
if (*(s32 *)(a0 + 0x1C) != 0) {
|
||||
*(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) - 1;
|
||||
*(s16 *)(a0 + 0xA) = *(u16 *)(a0 + 0xA) - 4;
|
||||
return;
|
||||
}
|
||||
*(s32 *)(a0 + 0x1C) = 0x14;
|
||||
*(u16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1;
|
||||
L.v[0] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x48);
|
||||
L.v[1] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x4C);
|
||||
L.v[2] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x50);
|
||||
/* $a0-pinned scopes: rematerialise &D_800AF648 (lui/addiu) before EACH call */
|
||||
{ register void *r4 __asm__("$4"); r4 = &D_800AF648; func_8004914C(r4); }
|
||||
{ register void *r4 __asm__("$4"); r4 = &D_800AF648; func_800491AC(r4); }
|
||||
RotTransPers((s32)L.v, (s32)L.sxy, &L.z, &L.flag);
|
||||
if (L.flag >= 0 && (u32)((L.sxy[0] + 0x9F) & 0xFFFF) < 0x13F
|
||||
&& (u32)((L.sxy[1] + 0x77) & 0xFFFF) < 0xEF) {
|
||||
s32 sx; /* screen X, then REUSED as the pan field */
|
||||
register s32 av __asm__("$5"); /* |X| */
|
||||
s32 vol;
|
||||
sx = (s16)L.sxy[0];
|
||||
av = sx;
|
||||
if (sx < 0) {
|
||||
av = -sx;
|
||||
}
|
||||
vol = ((0xA0 - av) * 0x7F) / 0xA0;
|
||||
/* sched1 otherwise hoists the PAN multiply ahead of this one */
|
||||
__asm__("" : "=r"(vol) : "0"(vol));
|
||||
sx = (sx + 0xA0) / 0x14;
|
||||
if (sx == 0x10) {
|
||||
sx = 0xF;
|
||||
}
|
||||
sx = sx << 8; /* in place, so reorg can steal it into the bne delay slot */
|
||||
func_8002D4C8(0x9E5, (vol | (0x3000 | sx)) & 0xFFFF);
|
||||
}
|
||||
return;
|
||||
|
||||
case 1:
|
||||
if (*(s32 *)(a0 + 0x1C) != 0) {
|
||||
*(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) - 1;
|
||||
*(s32 *)(a0 + 4) =
|
||||
*(s32 *)(a0 + 4) - (func_8004787C(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12)) << 5);
|
||||
*(s32 *)(a0 + 0xC) =
|
||||
*(s32 *)(a0 + 0xC) - (func_80047948(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12)) << 5);
|
||||
return;
|
||||
}
|
||||
*(u16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1;
|
||||
return;
|
||||
|
||||
case 2:
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x10) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x10) + 0x20;
|
||||
if (*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) != 0x380) {
|
||||
return;
|
||||
}
|
||||
*(u16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
typedef struct {
|
||||
SVECTOR_8016E7C8 v[4]; /* 0x00 */
|
||||
|
||||
@@ -5063,32 +5063,7 @@ void func_80180B54(void *a0) {
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8017BEBC", func_80180B90);
|
||||
|
||||
void func_80180C2C(s32 param_1)
|
||||
{
|
||||
extern u16 D_801AAD8C;
|
||||
extern u16 D_80126B5E;
|
||||
extern u16 D_80126B62;
|
||||
extern u16 D_80126B66;
|
||||
extern u16 D_80126BE2;
|
||||
extern u16 D_80126BE4;
|
||||
extern u8 D_80126BE0[];
|
||||
extern void func_8012E014(s32 a0);
|
||||
|
||||
u16 t;
|
||||
|
||||
if (D_801AAD8C == 3) {
|
||||
t = D_801AAD8C + 1;
|
||||
*(u16 *)((s32)param_1 + 0x34) = 0;
|
||||
D_801AAD8C = t;
|
||||
}
|
||||
if (*(u8 *)((s32)param_1 + 0x74) != 0) {
|
||||
func_8012E014(param_1);
|
||||
*(u16 *)&D_80126BE0[0] = D_80126B5E;
|
||||
D_80126BE2 = D_80126B62;
|
||||
D_80126BE4 = D_80126B66;
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8017BEBC", func_80180C2C);
|
||||
|
||||
extern s32 func_8012C1B8(void);
|
||||
extern void func_8012CAE4(void *a0);
|
||||
|
||||
@@ -5463,24 +5463,7 @@ void func_8018247C(void)
|
||||
}
|
||||
|
||||
|
||||
extern s32 func_80132EF4(s32 a0, s32 a1);
|
||||
extern s32 rand(void);
|
||||
|
||||
void func_80182538(s32 param_1)
|
||||
{
|
||||
s32 p;
|
||||
s32 t;
|
||||
|
||||
p = func_80132EF4(param_1, 0x72);
|
||||
if (p != 0) {
|
||||
t = *(u16 *)(p + 6) - 0x30 + rand() % 96;
|
||||
*(u16 *)(p + 6) = t;
|
||||
*(u16 *)(p + 0xA) = *(u16 *)(param_1 + 0x52) + (*(u16 *)(p + 0xA) + 0x80);
|
||||
t = *(u16 *)(p + 0xE) - 0x30 + rand() % 96;
|
||||
*(u16 *)(p + 0xE) = t;
|
||||
}
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80182538);
|
||||
|
||||
extern void func_8012AD44(s32 *a0, s16 a1);
|
||||
extern u16 D_8018A464[];
|
||||
|
||||
@@ -2247,50 +2247,7 @@ DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */
|
||||
} /* dedup: shared engine-core @0x801498e0 (src/shared) */
|
||||
|
||||
|
||||
extern void func_80015978(s32 a0, s32 *a1);
|
||||
extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3);
|
||||
extern void func_8002D4C8(s32 a0, s32 a1);
|
||||
extern void func_80147364();
|
||||
extern s32 func_800CCF28(s32 a0);
|
||||
extern u16 *func_80146750(u16 *param_1);
|
||||
extern s16 currentLocationId;
|
||||
s32 func_80149954(s32 s0) {
|
||||
|
||||
extern u8 D_80126B5C;
|
||||
extern void *D_8012707C;
|
||||
s32 sp10[2];
|
||||
s16 buf[10];
|
||||
if (*(s32 *)(s0 + 0x44) & 0x404) {
|
||||
return 0;
|
||||
}
|
||||
if ((*(u16 *)(s0 + 0xAA) & 0x90) == 0) {
|
||||
if (currentLocationId == 0x308D) {
|
||||
func_80015978((s32)&D_80126B5C, sp10);
|
||||
((s32 (*)(s32, s32, s32))func_8012E5CC)((s32)sp10, 0x4, 0x8E0);
|
||||
return 0;
|
||||
}
|
||||
func_8002D4C8(0x4, 0x8E0);
|
||||
return 0;
|
||||
}
|
||||
if (*(u16 *)(s0 + 0xAC) & 0x90) {
|
||||
if ((s32)D_8012707C == 0x8E0) {
|
||||
D_8012707C = 0;
|
||||
} else {
|
||||
func_80147364(0x8E0, 0);
|
||||
}
|
||||
}
|
||||
func_800CCF28(s0);
|
||||
*(s16 *)((s32)buf + 0x0) = 0x12;
|
||||
*(s32 *)((s32)buf + 0x8) = s0;
|
||||
*(s16 *)((s32)buf + 0x2) = 0;
|
||||
*(s16 *)((s32)buf + 0x4) = -0x1E;
|
||||
*(s16 *)((s32)buf + 0x6) = 0;
|
||||
*(s32 *)((s32)buf + 0xC) = 0;
|
||||
*(s32 *)((s32)buf + 0x10) = 0;
|
||||
func_80146750(buf);
|
||||
return 1;
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_801457A4", func_80149954);
|
||||
|
||||
DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */
|
||||
|
||||
|
||||
@@ -3792,7 +3792,55 @@ void func_8017CFA4(void) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017D040);
|
||||
typedef struct {
|
||||
s16 off00; s16 off02; s16 off04; s16 off06;
|
||||
u16 off08; s16 off0A; u16 off0C;
|
||||
u8 pad0E[0x12];
|
||||
} Ent8018DE64;
|
||||
|
||||
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 s32 D_801269E4;
|
||||
extern s16 D_801269E8;
|
||||
extern u8 D_80126948[];
|
||||
extern Ent8018DE64 D_8018DE64[];
|
||||
extern s16 *D_801F6098;
|
||||
extern void func_8012A018(s32 a, s32 b);
|
||||
extern void func_8012A094(s32 a0);
|
||||
void func_8017D0F4(void *a0);
|
||||
|
||||
void func_8017D040(s32 arg0) {
|
||||
register s32 t __asm__("v0");
|
||||
register s32 tc __asm__("a1");
|
||||
Ent8018DE64 *ptr;
|
||||
|
||||
t = 0x190;
|
||||
D_80126954 = t;
|
||||
ptr = &D_8018DE64[arg0];
|
||||
t = *(s16 *)((s32)ptr + 0xA);
|
||||
D_8012695C = t;
|
||||
t = *(u16 *)((s32)ptr + 0xC);
|
||||
D_80126968 = t;
|
||||
D_801F6098 = (s16 *)ptr;
|
||||
tc = *(u16 *)((s32)ptr + 8);
|
||||
D_8012696A = tc;
|
||||
D_8012696C = 0;
|
||||
D_80126976 = 0;
|
||||
t = -0x20;
|
||||
D_80126978 = t;
|
||||
D_8012697A = 0;
|
||||
func_8012A018((s32)func_8017D0F4, 1);
|
||||
func_8012A094((s32)D_80126948);
|
||||
D_801269E4 = 0;
|
||||
D_801269E8 = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -4007,7 +4055,49 @@ void func_8017D868(void *a0) {
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017D8A4);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017DA30);
|
||||
extern s32 func_8004787C(s32 a0);
|
||||
|
||||
void func_8017DA30(s32 d, void *x, void *y, s32 t, s32 n, s32 w) {
|
||||
s32 t0;
|
||||
s32 v0;
|
||||
|
||||
t0 = t + ((func_8004787C(w) * (func_8004787C(t >> 1) >> 3)) >> 12);
|
||||
if (n > 0) {
|
||||
do {
|
||||
*(s16 *)d = *(s16 *)x + ((((s16)*(s16 *)y - (s16)*(s16 *)x) * t) >> 12);
|
||||
*(s16 *)(d + 2) = *(s16 *)((u8 *)x + 2) + ((((s16)*(s16 *)((u8 *)y + 2) - (s16)*(s16 *)((u8 *)x + 2)) * t0) >> 12);
|
||||
*(s16 *)(d + 4) = *(s16 *)((u8 *)x + 4) + ((((s16)*(s16 *)((u8 *)y + 4) - (s16)*(s16 *)((u8 *)x + 4)) * t0) >> 12);
|
||||
v0 = *(s16 *)((u8 *)y + 6) - *(s16 *)((u8 *)x + 6);
|
||||
if (v0 >= 0x801) {
|
||||
v0 -= 0x1000;
|
||||
}
|
||||
if (v0 < -0x800) {
|
||||
v0 += 0x1000;
|
||||
}
|
||||
*(s16 *)(d + 6) = *(s16 *)((u8 *)x + 6) + ((v0 * t) >> 12);
|
||||
v0 = *(s16 *)((u8 *)y + 8) - *(s16 *)((u8 *)x + 8);
|
||||
if (v0 >= 0x801) {
|
||||
v0 -= 0x1000;
|
||||
}
|
||||
if (v0 < -0x800) {
|
||||
v0 += 0x1000;
|
||||
}
|
||||
*(s16 *)(d + 8) = *(s16 *)((u8 *)x + 8) + ((v0 * t) >> 12);
|
||||
v0 = *(s16 *)((u8 *)y + 0xA) - *(s16 *)((u8 *)x + 0xA);
|
||||
if (v0 >= 0x801) {
|
||||
v0 -= 0x1000;
|
||||
}
|
||||
if (v0 < -0x800) {
|
||||
v0 += 0x1000;
|
||||
}
|
||||
*(s16 *)(d + 0xA) = *(s16 *)((u8 *)x + 0xA) + ((v0 * t) >> 12);
|
||||
d += 0xC;
|
||||
x = (u8 *)x + 0xC;
|
||||
y = (u8 *)y + 0xC;
|
||||
} while (--n > 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* func_8017DC1C @ ov_SC07_006 (subseg ov_SC07_006_jr_8017BEBC) — behemoth #8, 1,518 ins.
|
||||
*
|
||||
|
||||
@@ -4099,7 +4099,15 @@ void func_8017D6AC(int param_1)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8017BEBC", func_8017D6E4);
|
||||
void func_8017D6E4(void *a0) {
|
||||
extern void (*D_801820B4[])(void);
|
||||
extern void func_800D1724(s32 a0);
|
||||
extern void func_80171928(void *a0);
|
||||
|
||||
func_800D1724((s32)D_801820B4);
|
||||
func_80171928(a0);
|
||||
}
|
||||
|
||||
|
||||
extern void func_8016EE40(s32 a0, s32 a1, s32 a2);
|
||||
void func_8017D720(void) {
|
||||
|
||||
+107
-2
@@ -1053,7 +1053,36 @@ void func_800D00E4(s32 arg0) {
|
||||
#endif
|
||||
INCLUDE_ASM("asm/resident/nonmatchings/resident", func_800D00E4);
|
||||
|
||||
INCLUDE_ASM("asm/resident/nonmatchings/resident", func_800D0214);
|
||||
|
||||
|
||||
s32 func_800D0214(s32 arg0) {
|
||||
extern s16 currentLocationId;
|
||||
extern s32 D_800C7C60;
|
||||
extern s32 *D_800C7C64;
|
||||
extern s32 D_800A2E20;
|
||||
extern s32 D_800D34AC[];
|
||||
extern s16 D_800D34AE[];
|
||||
extern CdFileLoc cdFileLocTable[];
|
||||
extern s32 CdReadRequest(void *, void *, s32, s32);
|
||||
|
||||
register s32 mask __asm__("$3") = ~0xF000;
|
||||
s32 idx = currentLocationId & mask;
|
||||
s32 raw = D_800D34AC[idx];
|
||||
s32 val = D_800D34AE[idx * 2];
|
||||
s32 *p = &D_800C7C60;
|
||||
s32 id;
|
||||
|
||||
__asm__("" ::: "memory");
|
||||
D_800C7C64 = &D_800A2E20;
|
||||
*p = val;
|
||||
|
||||
id = raw & 0xFFF;
|
||||
if (id >= 0 && cdFileLocTable[id].word0 != 0) {
|
||||
return CdReadRequest(&cdFileLocTable[id], arg0, 0, p);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
extern s32 (*D_800D375C)(s32);
|
||||
|
||||
@@ -2625,7 +2654,83 @@ void func_800D2624(void) {
|
||||
func_8002D4C8(0x15, 0);
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/resident/nonmatchings/resident", func_800D2650);
|
||||
typedef struct {
|
||||
u32 *ot; /* 0x00 */
|
||||
u32 pad[4]; /* 0x04..0x13 */
|
||||
} Env_800D2650; /* 0x14 stride */
|
||||
|
||||
typedef struct {
|
||||
u32 addr : 24; /* 0x00 tag */
|
||||
u32 len : 8;
|
||||
} PTag_800D2650;
|
||||
|
||||
#define OT_800D2650 (D_800AE7BC[*(volatile u16 *)&D_800B9A02].ot)
|
||||
#define getaddr_800D2650(t) (((PTag_800D2650 *)(t))->addr)
|
||||
#define setaddr_800D2650(t, v) (((PTag_800D2650 *)(t))->addr = (u32)(v))
|
||||
#define addPrim_800D2650(ot, p) (setaddr_800D2650(p, getaddr_800D2650(ot)), \
|
||||
setaddr_800D2650(ot, p))
|
||||
|
||||
u32 *func_800D2650(u32 *param_1, u8 *param_2, short param_3, short param_4, int a5, u32 a6)
|
||||
{
|
||||
extern Env_800D2650 D_800AE7BC[];
|
||||
extern short D_800B9A02;
|
||||
|
||||
register int cw __asm__("$2");
|
||||
register u32 s_a6 __asm__("$8") = a6;
|
||||
register u32 code __asm__("$14");
|
||||
register int clut __asm__("$13");
|
||||
register u8 bVar1 __asm__("$3");
|
||||
short sVar2;
|
||||
|
||||
if (*param_2 < 0x80) {
|
||||
cw = 0x64000000;
|
||||
code = s_a6 | cw;
|
||||
cw = a5 + 0x100;
|
||||
clut = (cw << 6) | 0x16;
|
||||
do {
|
||||
sVar2 = *(short *)param_2;
|
||||
switch (sVar2) {
|
||||
case 0x1850:
|
||||
case 0x1858:
|
||||
*(short *)((u8 *)param_1 + 8) = param_3 + 4;
|
||||
*(short *)((u8 *)param_1 + 0xA) = param_4 - 7;
|
||||
break;
|
||||
case 0x3870:
|
||||
param_3 = param_3 + 7;
|
||||
param_2 = param_2 + 2;
|
||||
continue;
|
||||
case 0x3871:
|
||||
param_3 = param_3 + 4;
|
||||
param_2 = param_2 + 2;
|
||||
continue;
|
||||
case 0x3872:
|
||||
param_3 = param_3 + 2;
|
||||
param_2 = param_2 + 2;
|
||||
continue;
|
||||
default:
|
||||
*(short *)((u8 *)param_1 + 8) = param_3;
|
||||
*(short *)((u8 *)param_1 + 0xA) = param_4;
|
||||
param_3 = param_3 + 7;
|
||||
break;
|
||||
}
|
||||
*param_1 = 0x04000000;
|
||||
*(u32 *)((u8 *)param_1 + 4) = code;
|
||||
((u8 *)param_1)[0xC] = *param_2;
|
||||
param_2 = param_2 + 1;
|
||||
sVar2 = 8;
|
||||
bVar1 = *param_2;
|
||||
param_2 = param_2 + 1;
|
||||
*(short *)((u8 *)param_1 + 0xE) = clut;
|
||||
((u8 *)param_1)[0xD] = bVar1;
|
||||
*(short *)((u8 *)param_1 + 0x10) = sVar2;
|
||||
*(short *)((u8 *)param_1 + 0x12) = sVar2;
|
||||
addPrim_800D2650(&OT_800D2650[2], param_1);
|
||||
param_1 = param_1 + 5;
|
||||
} while (*param_2 < 0x80);
|
||||
}
|
||||
return param_1;
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/resident/nonmatchings/resident", func_800D27DC);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user