feat(decomp): ox wave di overlays — 81 banked

Committed before the main batch: gate_main reverts on failure and would take these with it.
This commit is contained in:
Drew T
2026-08-25 12:13:33 -06:00
parent baabdd0478
commit ca5fd2e225
84 changed files with 9537 additions and 1267 deletions
+2
View File
@@ -111,6 +111,7 @@ build/src/ov_SC01_006/ov_SC01_006_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
build/src/ov_SC01_006/ov_SC01_006_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC01_006/ov_SC01_006_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC01_006/ov_SC01_006_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
build/src/ov_SC01_006/ov_SC01_006_jr_8017ED5C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28
build/src/ov_SC01_006/ov_SC01_006_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
ov_SC01_006_CHECK_SHA := config/check.ov_SC01_006.sha
ov_SC01_006_SYMBOLS := config/symbols.ov_SC01_006.txt
@@ -911,6 +912,7 @@ build/src/ov_SC02_011/ov_SC02_011_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
build/src/ov_SC02_011/ov_SC02_011_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC02_011/ov_SC02_011_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC02_011/ov_SC02_011_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
build/src/ov_SC02_011/ov_SC02_011_jr_8017AE2C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC02_011/ov_SC02_011_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
ov_SC02_011_CHECK_SHA := config/check.ov_SC02_011.sha
ov_SC02_011_SYMBOLS := config/symbols.ov_SC02_011.txt
+2
View File
@@ -106,6 +106,7 @@ segments:
- [0x31390, c, ov_MAIN_012_jr_801594E8]
- [0x31b2c, c, ov_MAIN_012_jr_80159C84]
- [0x32270, c, ov_MAIN_012_jr_8015A3C8]
- [0x42a14, c, ov_MAIN_012_jr_8016AB6C]
- [0x42d04, c, ov_MAIN_012_jr_8016AE5C]
- [0x499f4, c, ov_MAIN_012_jr_80171B4C]
- [0x50854, c, ov_MAIN_012_jr_801789AC]
@@ -133,6 +134,7 @@ segments:
- [0x5b764, data, tail8]
- [0x5b768, .rodata, ov_MAIN_012_jr_8015A3C8] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x5b7e4, data, tail9]
- [0x5b7fc, .rodata, ov_MAIN_012_jr_8016AB6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x5b81c, .rodata, ov_MAIN_012_jr_8016AE5C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x5b83c, data, tail10]
- [0x5b87c, .rodata, ov_MAIN_012_jr_80171B4C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
+1 -2
View File
@@ -173,13 +173,12 @@ segments:
- [0xbe894, data, tail18]
- [0xbe924, .rodata, ov_SC02_000_jr_8017FB24] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xbe944, .rodata, ov_SC02_000_jr_8017FCB0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xbe984, data, tail19]
- [0xbe9a4, .rodata, ov_SC02_000_jr_801808C4] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xbe9e4, .rodata, ov_SC02_000_jr_80180D6C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xbeaa4, .rodata, ov_SC02_000_jr_80181538] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xbeae4, .rodata, ov_SC02_000_jr_80181698] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xbeb04, .rodata, ov_SC02_000_jr_8018173C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xbeb24, data, tail20]
- [0xbeb24, data, tail19]
- [0xC070C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0xC070F] # 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
+1 -1
View File
@@ -161,7 +161,7 @@ segments:
- [0xc1b78, .rodata, ov_SC02_011_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc1c04, data, tail17]
- [0xc1c08, .rodata, ov_SC02_011_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xc1c1c, data, tail18]
- [0xc1c30, data, tail18]
- [0xC3924, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0xC3927] # 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
+1 -1
View File
@@ -163,7 +163,7 @@ segments:
- [0x74778, data, tail17]
- [0x7477c, .rodata, ov_SC04_006_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x74790, .rodata, ov_SC04_006_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x747b0, data, tail18]
- [0x747c8, data, tail18]
- [0x75C74, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x75C77] # 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
+1 -1
View File
@@ -161,7 +161,7 @@ segments:
- [0x850b4, .rodata, ov_SC06_000_jr_8017A4AC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x85140, data, tail17]
- [0x85144, .rodata, ov_SC06_000_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x8516c, data, tail18]
- [0x85184, data, tail18]
- [0x8A02C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x8A02F] # EOF marker = the 0.4.dec byte length
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
+4 -1
View File
@@ -121,6 +121,7 @@ segments:
- [0x52354, c, ov_SC06_022_jr_8017A4AC]
- [0x52cd4, c, ov_SC06_022_jr_8017AE2C]
- [0x53d64, c, ov_SC06_022_jr_8017BEBC]
- [0x58b78, c, ov_SC06_022_jr_80180CD0]
- [0x5abb0, c, ov_SC06_022_jr_80182D08]
- [0x5c1ac, c, ov_SC06_022_jr_80184304]
- [0x5c8d0, c, ov_SC06_022_jr_80184A28]
@@ -167,10 +168,12 @@ segments:
- [0xb894c, .rodata, ov_SC06_022_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [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
+16 -1
View File
@@ -12,7 +12,22 @@ void func_800CEDFC(void) {
}
INCLUDE_ASM("asm/md_MAIN_008/nonmatchings/md_MAIN_008", func_800CEE44);
extern void func_8001C044(void);
extern void func_80015310(void);
extern u8 D_800B9A11;
extern s32 D_800CF13C;
extern void func_800167B8(s32);
extern void func_800118AC(void);
void func_800CEE44(void) {
func_8001C044();
func_80015310();
D_800B9A11 = 0;
D_800CF13C = 0;
func_800167B8(0);
func_800118AC();
}
void func_800CEE8C(void) {
extern s32 func_800167F0(s32 a0);
+67 -1
View File
@@ -15,7 +15,73 @@ void func_800CEE74(void) {
}
INCLUDE_ASM("asm/md_MAIN_011/nonmatchings/md_MAIN_011", func_800CEF00);
void func_800CEF00(void) {
typedef struct { s32 m; } S70;
extern u8 D_800AF630[];
extern u8 D_800D31FC[];
extern u8 D_800D31F8[];
extern u8 D_800D3248[];
extern u8 D_800D3208[];
extern u8 D_800D3214[];
extern u8 D_800D3220[];
extern u8 D_800D3228[];
extern u8 D_800D3230[];
extern u8 D_800D3238[];
extern u8 D_800D3250[];
extern u8 D_800D3258[];
extern u8 D_800D3264[];
extern u8 D_800D3278[];
extern u8 D_800D3284[];
extern s32 D_800D4C88;
extern s32 D_800D4C8C;
extern s32 D_800D4C90;
extern s32 D_800D4C94;
extern u8 D_800D4B64[];
extern S70 D_800D4B70[];
extern u16 D_800D4C80;
extern u16 D_800D4C84;
extern u16 D_800D4CA4;
extern u16 D_800D4CA0;
extern u16 D_800D4C9C;
extern u16 D_800D4C98;
extern s32 D_800D3344;
register u8 *v0 = D_800AF630;
v0[0xA3E1] = 1;
func_8001C044();
func_80015310();
func_80011B7C(0);
func_8001534C(0, D_800D31FC, 0x40, 0x1E, 0, 0);
func_8001534C(1, D_800D31F8, 0x34, 0x46, 0, 0);
func_8001534C(9, D_800D3248, 0x40, 0x46, 0, 0);
func_8001534C(2, D_800D3208, 0x40, 0x5E, 0, 0);
func_8001534C(3, D_800D3214, 0x40, 0x6A, 0, 0);
func_8001534C(4, D_800D3220, 0x40, 0x76, 0, 0);
func_8001534C(5, D_800D3228, 0x40, 0x82, 0, 0);
func_8001534C(6, D_800D3230, 0x40, 0x8E, 0, 0);
func_8001534C(7, D_800D3238, 0x40, 0x9A, 0, 0);
func_8001534C(0xA, D_800D3250, 0x74, 0x46, 0, 0);
func_8001534C(0xB, D_800D3258, 0x74, 0x52, 0, 0);
func_8001534C(0xE, D_800D3264, 0x40, 0xA6, 0, 0);
func_8001534C(0xF, D_800D3278, 0x40, 0xB2, 0, 0);
func_8001534C(0x10, D_800D3284, 0x40, 0xBE, 0, 0);
D_800D4C88 = 0;
D_800D4C8C = 0;
D_800D4C90 = 0;
D_800D4C94 = 0;
*(u16 *)&v0[0xA3DE] = 0;
func_8001534C(0xC, &D_800D4B64[D_800D4C88 * 20], 0xA4, 0x46, 0x44, 0);
func_8001534C(0xD, D_800D4B70[D_800D4C88 * 5].m + D_800D4C8C * 36, 0xA4, 0x52, 0x44, 0);
D_800D4C80 = 0;
D_800D4C84 = 0;
D_800D4CA4 = 0;
D_800D4CA0 = 0;
D_800D4C9C = 0;
D_800D4C98 = 0;
func_80029514(D_800D3344);
func_800118AC();
}
INCLUDE_RODATA("asm/md_MAIN_011/nonmatchings/md_MAIN_011", D_800CEDF8);
+27 -1
View File
@@ -82,4 +82,30 @@ INCLUDE_ASM("asm/md_MAIN_016/nonmatchings/md_MAIN_016", func_800CB304);
INCLUDE_ASM("asm/md_MAIN_016/nonmatchings/md_MAIN_016", func_800CB400);
INCLUDE_ASM("asm/md_MAIN_016/nonmatchings/md_MAIN_016", func_800CB458);
void func_800CB458(s32 arg0) {
extern void func_800CAF84(void);
extern s32 func_80146A6C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
typedef struct { s32 w[4]; } Struct16;
register s32 keep_a0 __asm__("$4");
s32 s0 = arg0;
s32 s1;
s32 v0;
s32 id;
keep_a0 = arg0;
s1 = *(s32 *)(s0 + 0x34);
v0 = *(s32 *)(s1 + 0x20);
*(Struct16 *)(s0 + 0x38) = *(Struct16 *)(v0 + 0x34);
*(Struct16 *)(s0 + 0x48) = *(Struct16 *)(v0 + 0x44);
__asm__ __volatile__("" :: "r"(keep_a0));
func_800CAF84();
if ((*(s32 *)(s0 + 0x1C) -= 1) == -1) {
id = 0x4B;
func_80146A6C(id, s1, 0, 0, 0, 0x8000, 0);
*(s32 *)(s0 + 0x1C) = 0x18;
}
}
+69 -1
View File
@@ -43,7 +43,75 @@ void func_800CAFB4(void *arg) {
}
INCLUDE_ASM("asm/md_MAIN_018/nonmatchings/md_MAIN_018", func_800CAFE0);
extern u8 D_800CB860[];
extern u8 D_800CB861;
extern u8 D_800CB862;
extern u8 D_800CB864;
extern u8 D_800CB865;
extern u8 D_800CB866;
extern s16 D_800CB5F4;
extern s16 D_800CB5F6;
extern u8 D_800D387C[];
extern void func_800233CC(void *, u16);
extern void func_801465C0(void);
extern void func_80146C3C(void);
extern void func_8001CC3C(s32, void *, s32, s32);
extern void func_8001CD9C(s32, void *);
void func_800CAFE0(s32 param_1) {
s32 pad[2];
s32 node;
s32 node2;
u32 hw;
u32 sh;
s32 sext;
s32 save;
if (*(u32 *)(param_1 + 0x2C) & 0x8000) {
D_800CB861 = 0xA0;
D_800CB860[0] = 0xA0;
D_800CB862 = 0x70;
D_800CB866 = 0;
D_800CB865 = 0;
D_800CB864 = 0;
func_800233CC(D_800CB860, 0x1E);
*(u16 *)(param_1 + 0x12) = 0x1C0;
*(u16 *)(param_1 + 2) = 1;
return;
}
hw = *(u32 *)(param_1 + 0x30);
sh = hw >> 15;
node = ((s32 (*)(void))func_801465C0)();
if (node == 0) {
((void (*)(s32))func_80146C3C)(param_1);
return;
}
sext = (s32)(sh << 16);
func_8001CC3C(node, D_800D387C,
*(s16 *)((s32)&D_800CB5F4 + (sext >> 15)),
*(s16 *)((s32)&D_800CB5F6 + (sext >> 15)));
*(u16 *)(node + 0x1A) = 0x2000;
*(u16 *)(node + 0x18) = 0x2000;
*(u8 *)(node + 0x27) = (sext >> 17) + 0x19;
*(u32 *)(node + 4) |= 0xC0000000;
save = *(u16 *)(param_1 + 0x30);
*(s32 *)(param_1 + 0x20) = node;
*(u16 *)(param_1 + 2) = 2;
*(u32 *)(param_1 + 0x30) = save;
node2 = ((s32 (*)(void))func_801465C0)();
if (node2 == 0) {
((void (*)(s32))func_80146C3C)(param_1);
return;
}
*(s32 *)(param_1 + 0x34) = node2;
func_8001CD9C(node2, D_800CB860);
*(u16 *)(node2 + 0x2C) = 0xC001;
*(u32 *)(node2 + 4) |= 0xD0000000;
*(u16 *)(node2 + 8) = *(u16 *)(param_1 + 6);
*(u16 *)(node2 + 0xA) = *(u16 *)(param_1 + 0xA);
*(u16 *)(node2 + 0xC) = *(u16 *)(param_1 + 0xE);
}
INCLUDE_ASM("asm/md_MAIN_018/nonmatchings/md_MAIN_018", func_800CB168);
+31 -1
View File
@@ -188,7 +188,37 @@ void func_800CB2C8(void *arg0) {
}
INCLUDE_ASM("asm/md_MAIN_019/nonmatchings/md_MAIN_019", func_800CB324);
void func_800CB324(s32 a0) {
extern void func_8014659C(void);
extern void func_8001C2C4(s32 a0);
extern void func_800CB4C8(void *a0);
extern void func_80146E90(s32 *a0, s32 a1);
extern void func_80146CA0(void *a0);
extern void func_800CB4A8(void);
typedef struct { u32 a, b, c, d; } Blk16;
s32 iVar1;
s32 iVar2;
s32 iVar4;
iVar2 = *(s32 *)(a0 + 0x4C);
iVar1 = ((s32 (*)(void))func_8014659C)();
*(s32 *)(a0 + 0x20) = iVar1;
if (iVar1 != 0) {
func_8001C2C4(iVar1);
*(u32 *)(iVar1 + 4) |= 0x80000000;
iVar4 = *(s32 *)(iVar2 + 0x20);
*(Blk16 *)(iVar1 + 0x34) = *(Blk16 *)(iVar4 + 0x34);
*(Blk16 *)(iVar1 + 0x44) = *(Blk16 *)(iVar4 + 0x44);
func_800CB4C8((void *)a0);
func_80146E90((s32 *)a0, 0x40);
func_80146CA0((void *)a0);
} else {
((void (*)(s32))func_800CB4A8)(a0);
}
}
typedef struct { s32 vpx, vpy, vpz, vrx, vry, vrz, rz, super; } RView;
+9 -1
View File
@@ -30,7 +30,15 @@ void func_800CAE78(u8 *a0) {
INCLUDE_ASM("asm/md_MAIN_023/nonmatchings/md_MAIN_023", func_800CAEC0);
INCLUDE_ASM("asm/md_MAIN_023/nonmatchings/md_MAIN_023", func_800CAEF8);
extern void func_8014BB24(s32 a0, s32 a1, s32 a2);
extern void func_801599A4(void *a0);
extern void func_80159B3C(void *a0);
void func_800CAEF8(void *a0) {
func_8014BB24((s32)a0, 10, 1);
func_801599A4(a0);
func_80159B3C(a0);
}
void func_800CAF38(void) {
}
+10 -1
View File
@@ -25,7 +25,16 @@ void func_800CAE78(void *a0) {
}
INCLUDE_ASM("asm/md_MAIN_024/nonmatchings/md_MAIN_024", func_800CAEB0);
extern s32 func_80165910();
extern void func_801655E4(s32 a0);
void func_800CAEB0(void *a0) {
if (func_80165910(a0) == 0) {
func_801655E4((s32)a0);
}
*(u8 *)((s32)a0 + 0x197) += 1;
}
void func_800CAEF8(void) {
}
+63 -1
View File
@@ -200,7 +200,69 @@ void func_800CB518(void *arg0) {
}
INCLUDE_ASM("asm/md_MAIN_038/nonmatchings/md_MAIN_038", func_800CB574);
void func_800CB574(void *param_1) {
typedef struct { u32 a, b, c, d; } Blk16;
extern void func_801465E4(void);
extern void func_8001C810(s32 a0, s32 a1);
extern void func_80149350(s32 a0);
extern void func_80149374(s32 a0, s32 a1);
extern s32 func_80017DC4(void *a0, void *a1);
extern void RotMatrixZ(s32 a0, void *a1);
extern void MulMatrix0(s32 a0, void *a1, s32 a2);
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_80146C3C(void);
extern void func_800CB780(s32 a0);
extern s32 D_800CCA00;
extern s32 D_800636C8;
s32 src;
s32 iVar2;
s32 iVar3;
s16 arr[3];
s32 mat[8];
src = *(s32 *)((s32)param_1 + 0x34);
iVar2 = ((s32 (*)(void))func_801465E4)();
*(s32 *)((s32)param_1 + 0x20) = iVar2;
if (iVar2 != 0) {
func_8001C810(iVar2, (s32)&D_800CCA00);
*(u32 *)(iVar2 + 4) |= 0x50000040;
*(s32 *)(iVar2 + 0x20) = (s32)&D_800636C8;
arr[0] = 0;
arr[1] = -6;
arr[2] = (*(u16 *)((s32)param_1 + 0xE)) - 0x24;
((void (*)(s32, void *, void *))func_80149350)(src, arr, arr);
iVar3 = *(s32 *)(src + 0x20);
*(Blk16 *)((s32)param_1 + 0x38) = *(Blk16 *)(iVar3 + 0x34);
*(Blk16 *)((s32)param_1 + 0x48) = *(Blk16 *)(iVar3 + 0x44);
*(s32 *)((s32)param_1 + 0x4C) = arr[0];
*(s32 *)((s32)param_1 + 0x50) = arr[1];
*(s32 *)((s32)param_1 + 0x54) = arr[2];
func_80149374(src, (s32)param_1 + 4);
arr[2] = 0x1800;
arr[1] = 0x1800;
arr[0] = 0x1800;
((void (*)(void *, void *))func_80017DC4)(arr, mat);
RotMatrixZ(rand() & 0xFFF, mat);
MulMatrix0(*(s32 *)(src + 0x20) + 0x34, mat, iVar2 + 0x34);
func_80146A6C(0x44, (void *)param_1,
*(s16 *)((s32)param_1 + 6),
*(s16 *)((s32)param_1 + 0xA),
*(s16 *)((s32)param_1 + 0xE),
0, 0);
*(s32 *)((s32)param_1 + 0x30) = 0x80;
func_800CB780((s32)param_1);
*(u16 *)((s32)param_1 + 2) = *(u16 *)((s32)param_1 + 2) + 1;
} else {
((void (*)(void *))func_80146C3C)(param_1);
}
}
extern void func_800CB780(s32 param_1);
extern void func_80146C3C(void);
+58 -1
View File
@@ -67,7 +67,64 @@ void func_800CAF9C(s32 a0) {
INCLUDE_ASM("asm/md_MAIN_041/nonmatchings/md_MAIN_041", func_800CB028);
INCLUDE_ASM("asm/md_MAIN_041/nonmatchings/md_MAIN_041", func_800CB118);
extern void func_80162FF4();
extern void func_80162FC0(s32 *a0);
extern s32 func_80146E98(s32 a0);
extern s32 func_801638A0(u8 *a0, s32 a1);
extern void func_80146E90(s32 *a0, s32 a1);
extern void func_80146CA0(void *a0);
extern s32 func_80163408(s32 a0, s32 a1, s32 a2, s32 a3);
extern void func_80163328();
extern s32 func_801632F0();
extern void func_80013E94(void *a0, void *a1);
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_80147324(s32 a0);
extern u8 D_80114EB0[];
extern u8 D_80114EC8[];
extern s16 D_80126B18;
extern s16 D_80126B1A;
extern s16 D_80126B1C;
void func_800CB118(s32 a0) {
s32 sp20[2];
s32 sp28;
register s32 ret __asm__("$3");
register s32 m __asm__("$2");
func_80162FF4(a0, 0, 0x4000, 0);
func_80162FC0((s32 *) a0);
if (func_80146E98(a0) != 0) {
func_80146CA0((void *) a0);
return;
}
ret = func_801638A0((u8 *) a0, (s32) sp20);
if (ret == 0) {
} else if ((m = ret & 0x8000) != 0) {
*(s32 *)(a0 + 0x2C) = 0;
*(s32 *)(a0 + 0x24) = 0;
} else {
func_80146E90((s32 *) a0, 0x20);
func_80146CA0((void *) a0);
return;
}
func_80163408(a0, 0x2C, 0x80, 0x200);
func_80163328(a0);
switch ((u32) func_801632F0(a0)) {
case 1:
func_80013E94(D_80114EB0, &sp28);
sp28 |= 0x80000000;
func_80146A6C(0x1F, (void *) a0, D_80126B18, D_80126B1A, D_80126B1C, sp28, 0);
func_80147324(0x8E6);
break;
case 2:
case 4:
func_80013E94(D_80114EC8, &sp28);
sp28 |= 0x80000000;
func_80146A6C(7, (void *) a0, D_80126B18, D_80126B1A, D_80126B1C, sp28, 0);
break;
}
}
extern s32 func_80146E98(s32 a0);
extern void func_80146CA0(void *a0);
+28 -2
View File
@@ -11,7 +11,20 @@ void func_801E4C64(void *a0) {
INCLUDE_ASM("asm/md_SC02_009/nonmatchings/md_SC02_009", func_801E4CA0);
INCLUDE_ASM("asm/md_SC02_009/nonmatchings/md_SC02_009", func_801E4D14);
void func_801E4D14(s32 a0) {
extern void func_8012A828(s32 a0, void *a1);
extern s32 func_8013767C(s32);
extern s32 D_801270C8;
extern u8 D_8019702C[];
extern void D_801E5E0C;
if (D_801270C8 == 3) {
*(s32 *)(a0 + 0xB0) = func_8013767C((s32)D_8019702C);
func_8012A828(a0, &D_801E5E0C);
*(u16 *)((s32)a0 + 2) += 1;
}
}
void func_801E4D7C(s32 *a0) {
s32 *s0 = a0;
@@ -123,7 +136,20 @@ void func_801E5030(s32 *a0) {
INCLUDE_ASM("asm/md_SC02_009/nonmatchings/md_SC02_009", func_801E5094);
INCLUDE_ASM("asm/md_SC02_009/nonmatchings/md_SC02_009", func_801E50F0);
void func_801E50F0(s32 a0) {
s32 s0 = a0;
extern void func_801E53E0(s32);
extern void func_8012A828(s32 a0, void *a1);
extern s32 D_801270C8;
extern void D_801E626C;
func_801E53E0(s0);
if (D_801270C8 == 15) {
func_8012A828((s32)s0, &D_801E626C);
(*(u16 *)((s32)s0 + 2))++;
}
}
void func_801E514C(s32 a0) {
extern void func_801E53E0(s32);
+16 -1
View File
@@ -207,7 +207,22 @@ void func_801EFB84(void *a0) {
}
INCLUDE_ASM("asm/md_SC03_074/nonmatchings/md_SC03_074", func_801EFBC0);
void func_801EFBC0(void) {
extern u8 D_80078EB1;
extern s32 D_801EF3EC;
extern s32 D_801F5F04;
extern s32 D_801F0234[];
extern s32 D_801F0204[];
D_801F5F04 = 0;
if ((u32)D_80078EB1 >= 0x12) {
*(s32 *)(D_801EF3EC + 4) = (s32)D_801F0234;
} else {
*(s32 *)(D_801EF3EC + 4) = (s32)D_801F0204;
}
}
+35 -1
View File
@@ -322,7 +322,41 @@ void func_801EFD70(void *param_1) {
}
INCLUDE_ASM("asm/md_SC03_075/nonmatchings/md_SC03_075", func_801EFEA4);
extern s32 func_80029504(void);
extern s32 func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001C214(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, s32 a1);
extern void func_8012E8E0(s32 a0, s32 a1);
extern s32 func_80178B18(s32 a0, s32 a1);
void func_801EFEA4(void *a0) {
extern s32 D_801F66FC;
extern s32 D_801F04B4;
extern s16 D_801C3890;
extern s32 D_801F050C;
s32 v0;
if ((u32)(func_80029504() - 0x122) < 0xA) {
func_8012CAE4(a0);
return;
}
v0 = func_8012C1B8();
*(s32 *)((s32)a0 + 0x20) = v0;
if (v0 == 0) {
func_8012CAE4(a0);
} else {
func_8001C214(v0, (s32)&D_801F66FC);
*(s16 *)(*(s32 *)((s32)a0 + 0x68) + 0xC) = 0x7FFF;
func_8012E8E0((s32)a0, (s32)&D_801F04B4);
*(s16 *)((s32)a0 + 0x2) = 1;
*(s16 *)((s32)a0 + 0x34) = 0;
func_8012A828((s32)a0, (s32)&D_801C3890);
func_80178B18((s32)a0, (s32)&D_801F050C);
}
}
extern s32 func_8012BA10(s32 a0, s32 a1);
extern s32 func_8012B608(s32 a0, s32 a1, s32 a2);
+49 -2
View File
@@ -253,7 +253,39 @@ join:
}
INCLUDE_ASM("asm/md_SC03_076/nonmatchings/md_SC03_076_jr_801F218C", func_801F2458);
extern s32 func_80029504(void);
extern s32 func_80029178(s32);
extern void func_80029124(s32, s32);
s32 func_801F2458(void) {
s32 x;
s32 t;
x = func_80029504();
if ((u32)(x - 200) < 100) {
t = 0;
goto join;
}
__asm__("");
if (x < 300) {
t = 1;
goto join;
}
__asm__("");
if (func_80029178(250) & 0xFF) {
t = 0;
goto join;
}
__asm__("");
t = 1;
join:
if (t != 0 && (func_80029178(276) & 0xFF) == 0) {
func_80029124(276, 1);
return 1;
}
return 0;
}
void func_801F24DC(s32 a0) {
extern s32 func_80029504(void);
@@ -451,7 +483,22 @@ void func_801F28B0(void) {
}
INCLUDE_ASM("asm/md_SC03_076/nonmatchings/md_SC03_076_jr_801F218C", func_801F28E0);
void func_801F28E0(void)
{
typedef struct { s32 next; u8 pad[0xC]; } Node_801F28E0;
extern s32 D_801F9DD4;
extern s32 D_801F9F54;
Node_801F28E0 *p;
s32 i;
p = (Node_801F28E0 *)&D_801F9DD4;
for (i = 0; i < D_801F9F54 - 1; ) {
p->next = (s32)(p + 1);
i++;
p = p + 1;
}
}
extern s32 func_80029504(void);
extern void func_80029514(s32 arg0);
+40 -1
View File
@@ -179,7 +179,46 @@ s32 func_801E5504(void) {
}
INCLUDE_ASM("asm/md_SC03_135/nonmatchings/md_SC03_135_jr_801E5358", func_801E5514);
s32 func_801E5514(void) {
extern s32 func_80029504(void);
extern s32 func_80029178(s32);
extern u8 D_801E67E8[];
extern u8 D_801E6828[];
extern s32 D_801E256C;
s32 x;
s32 t;
s32 p;
s32 v;
x = func_80029504();
if ((u32)(x - 200) < 100) {
t = 0;
goto join;
}
__asm__("");
if (x < 300) {
t = 1;
goto join;
}
__asm__("");
if (func_80029178(250) & 0xFF) {
t = 0;
goto join;
}
__asm__("");
t = 1;
join:
if (t != 0) {
p = D_801E256C;
v = (s32)&D_801E67E8;
} else {
p = D_801E256C;
v = (s32)&D_801E6828;
}
*(s32 *)(p + 4) = v;
return v;
}
extern s32 func_80029504(void);
extern s32 func_80029178(s32);
+26 -1
View File
@@ -350,6 +350,31 @@ void func_801E8380(void) {
}
INCLUDE_ASM("asm/md_SC04_029/nonmatchings/md_SC04_029", func_801E83AC);
extern u8 *D_80126B10;
extern void func_80178CBC(s32 a0, s32 a1);
extern void func_80174438(s32 a0);
void func_801E83AC(void *param_1) {
extern s32 func_801789AC();
extern s32 D_801E8654;
switch (*(u16 *)((s32)param_1 + 0x34)) {
case 0:
if (func_801789AC() != 0) {
func_80178CBC((s32)param_1, (s32)&D_801E8654);
*(u16 *)((s32)param_1 + 0x34) = 1;
}
break;
case 1:
if (func_801789AC((s32)param_1) != 0) {
func_80174438((s32)D_80126B10);
*(u16 *)((s32)param_1 + 0x34) = 2;
}
break;
case 2:
break;
}
}
INCLUDE_ASM("asm/md_SC04_029/nonmatchings/md_SC04_029", func_801E8440);
+35 -1
View File
@@ -2219,7 +2219,41 @@ void func_801A3BCC(void *a0)
}
INCLUDE_ASM("asm/md_SC07_003/nonmatchings/md_SC07_003", func_801A419C);
#include "common.h"
/* §37 asm-label alias: the TU canon (md_SC07_003.c:620) declares this symbol
`extern s32 D_80126B78[];`, but the target reads its VALUE twice
(lui/lw rematerialised per call site), which requires the pointer-variable
reading. Distinct C identifier + asm label = no conflicting-types clash,
emitted relocations still spell D_80126B78. */
extern s32 *aD_80126B78 __asm__("D_80126B78");
extern u8 D_800D3918[];
extern u8 D_801A68F4[];
extern u8 D_801152A8[];
extern s32 D_80127078;
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
extern void func_8012B2CC(s32 a0);
extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3);
extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5);
s32 func_801A419C(s32 arg0) {
s32 buf[2]; /* 0x18(sp): projected point A */
s32 out[2]; /* 0x20(sp): projected point B */
func_8012F14C((s32)aD_80126B78 + 0x34, (s32)D_800D3918, (s32)buf);
func_8012F14C((s32)aD_80126B78 + 0x34, (s32)D_801A68F4, (s32)out);
func_8012B2CC(arg0);
if (func_80135888(*(s32 *)(arg0 + 0x20), *(s32 *)(arg0 + 0x58), (s32)buf, (s32)out) != 0) {
func_8012F568(1, 0x1C,
*(u16 *)(*(s32 *)(*(s32 *)(arg0 + 0x64) + 0x20) + 0x12) & 0xFFF,
0x1E, (s32)out, (s32)D_801152A8);
D_80127078 = arg0;
return 1;
}
return 0;
}
INCLUDE_ASM("asm/md_SC07_003/nonmatchings/md_SC07_003", func_801A4268);
+34 -2
View File
@@ -723,7 +723,28 @@ INCLUDE_ASM("asm/md_SC07_004/nonmatchings/md_SC07_004", func_801A2F34);
INCLUDE_ASM("asm/md_SC07_004/nonmatchings/md_SC07_004", func_801A30C8);
INCLUDE_ASM("asm/md_SC07_004/nonmatchings/md_SC07_004", func_801A3114);
extern void func_801A36F0(void *a0);
extern void func_8012AD44(s32 *a0, s16 a1);
extern void func_8012A860(void *a0, int a1);
extern u8 D_801EF9A8;
void func_801A3114(s32 *a0)
{
s32 *s0 = a0;
u16 v0;
v0 = *(u16 *)((s32)s0 + 0x5C);
*(u16 *)((s32)s0 + 0x5E) = 0;
*(u8 *)((s32)s0 + 0xC1) = 0;
*(u16 *)((s32)s0 + 0x5C) = v0 & 0xDFFE;
func_801A36F0((void *)s0);
func_8012AD44(s0, 12);
if (*(s16 *)((s32)s0 + 0xE6) < 0) {
*(u16 *)((s32)s0 + 0x34) = 2;
func_8012A860((void *)s0, (int)&D_801EF9A8);
}
}
INCLUDE_ASM("asm/md_SC07_004/nonmatchings/md_SC07_004", func_801A3180);
@@ -4431,7 +4452,18 @@ void func_801A9EB0(void *arg0) {
}
INCLUDE_ASM("asm/md_SC07_004/nonmatchings/md_SC07_004", func_801A9F5C);
extern void func_801AA0B4(void *a0);
extern void func_8012AD80(s32 a0);
extern void func_8012AD44(s32 *a0, s16 a1);
void func_801A9F5C(void *arg0) {
*(s32 *)((s32)arg0 + 0x1C) = 0x40;
func_801AA0B4(arg0);
func_8012AD80((s32)arg0);
func_8012AD80((s32)arg0);
func_8012AD44((s32 *)arg0, 2);
}
void func_801A9FA8(void *arg0) {
func_8012AD44((s32 *)arg0, 3);
+25 -1
View File
@@ -1390,7 +1390,31 @@ DEFINE_func_8012D5E4() /* dedup: shared engine-core @0x8012d5e4 (src/shared) */
DEFINE_func_8012D624() /* dedup: shared engine-core @0x8012d624 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012", func_8012D664);
int func_8012D664(int arg0, int arg1, int arg2)
{
extern u16 D_80126B5E;
extern u16 D_80126B62;
extern u16 D_80126B66;
extern s32 func_800132BC(s32 a0, s32 a1);
extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5);
extern u8 D_8017E6BC[];
u16 s[3];
int ret;
int t;
s[0] = (*(unsigned short *)&D_80126B5E);
s[1] = (*(unsigned short *)&D_80126B62) - 0x40;
s[2] = (*(unsigned short *)&D_80126B66);
ret = ((int (*)())func_800132BC)(arg0, s);
t = arg1 + 0x20;
if (ret < t * t) {
func_8012F568(1, 1, 0, arg2, arg0, &D_8017E6BC);
return 1;
}
return 0;
}
DEFINE_func_8012D714() /* dedup: shared engine-core @0x8012d714 (src/shared) */
+7 -1
View File
@@ -4950,7 +4950,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_MAIN_012/nonmatchings/ov_MAIN_012_jr_8013F350", func_8014C1A0);
extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2);
extern s32 D_8017FFC0;
void func_8014C1A0(s32 arg0, s32 arg1) {
func_8014C1C8(arg0, arg1, &D_8017FFC0);
}
DEFINE_func_8014C1C8() /* dedup: shared engine-core @0x8014c1c8 (src/shared) */
+17 -4
View File
@@ -8115,7 +8115,23 @@ void func_80168430(s32 param_1) {
}
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8015A3C8", func_801684B4);
extern void func_80146C3C(u8*);
extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3);
void func_801684B4(s32 a0) {
s32 *s0 = (s32 *)a0;
if ((*(s32 *)(*(s32 *)(a0 + 0x34) + 0x44) & 0x2) == 0) {
((void (*)(void))func_80146C3C)();
} else {
s16 v0 = *(u16 *)(a0 + 0x2A) - 1;
*(s16 *)(a0 + 0x2A) = v0;
if (v0 == 0) {
func_80166994(a0, 0, 2, 0);
*(s16 *)(a0 + 0x2) = *(u16 *)(a0 + 0x2) + 1;
}
}
(void)s0;
}
DEFINE_func_80168540() /* dedup: shared engine-core @0x80168540 (src/shared) */
@@ -9033,6 +9049,3 @@ void func_8016AB30(void *a0) {
extern void (*D_801814EC[])(void);
D_801814EC[*(u16 *)((s32)a0 + 0x2)]();
}
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8015A3C8", func_8016AB6C);
File diff suppressed because it is too large Load Diff
+17 -1
View File
@@ -4389,7 +4389,23 @@ DEFINE_func_8016E688() /* dedup: shared engine-core @0x8016e688 (src/shared) */
DEFINE_func_8016E6E4() /* dedup: shared engine-core @0x8016e6e4 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8016AE5C", func_8016E728);
extern void func_80146C3C(u8*);
extern void func_8016E778();
void func_8016E728(u8 *a0) {
s32 v0;
s32 v1;
v0 = (u16)*(u16 *)(a0 + 0x12) + 0x400;
v1 = (u16)*(u16 *)(a0 + 0x16) - 8;
*(u16 *)(a0 + 0x12) = v0;
*(u16 *)(a0 + 0x16) = v1;
if ((s16)v1 <= 0) {
((void (*)(void))func_80146C3C)();
} else {
((void (*)(void))func_8016E778)();
}
}
DEFINE_func_8016E778() /* dedup: shared engine-core @0x8016e778 (src/shared) */
+12 -1
View File
@@ -5723,7 +5723,18 @@ void func_8017BEB4(void) {
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_801789AC", func_8017BEBC);
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_801789AC", func_8017BEE4);
s32 func_8017BEE4(void) {
extern void (*D_80181D6C[10])(void);
extern s16 D_801853F0;
extern s16 D_801853F2;
D_80181D6C[D_801853F0]();
if (D_801853F2 != 0) {
return D_801853F2;
}
return 0;
}
void func_8017BF38(void) {
extern void func_8017C008(s32 a0, s32 a1);
+13 -1
View File
@@ -3109,7 +3109,19 @@ INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8018041
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8018048C);
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180564);
extern u8 D_80185E38[];
extern void func_800D1724(s32 a0);
void func_80180564(s32 *a0) {
s32 v1;
v1 = a0[7] - 1;
a0[7] = v1;
if (v1 != -1) {
return;
}
func_800D1724((s32)D_80185E38);
}
DEFINE_func_801805A0() /* dedup: shared engine-core @0x801805A0 (src/shared) */
+48 -1
View File
@@ -3725,7 +3725,54 @@ void func_8017DA80(void) {
INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8017BE9C", func_8017DA9C);
INCLUDE_ASM("asm/ov_SC01_008/nonmatchings/ov_SC01_008_jr_8017BE9C", func_8017DBEC);
void func_8017DBEC(void) {
extern s16 D_800B9A02;
extern s16 D_801A3320;
extern u8 D_800B9A15;
extern u8 D_801151C8[];
extern s32 D_801151D0;
extern u32 D_801A3458;
extern s32 D_801A345C;
extern u16 D_8011511A;
extern u8 D_80115138[];
extern u16 D_80115112;
extern s32 func_80014ED4(s32 a0);
extern void func_80139954(void);
extern s16 func_8014168C(s16 a0);
extern s32 func_8017EC68(s32 a0, s32 a1);
extern void func_8017E050(void);
extern void func_80137B80(void);
u16 idx;
volatile s32 pad[2];
D_801151D0 = *(s32 *)&D_801151C8[(*(u16 *)&D_800B9A02) * 4];
if (D_801A3458 != 0) {
if (func_801399F0(D_801A345C) != 0) {
D_801A3458 = 0;
}
} else {
if ((func_80014ED4(0) & 0x50) != 0) {
idx = *(u16 *)&D_8011511A;
if (D_80115138[idx] == 8) {
func_8017EC68(0xF, func_8014168C(idx));
}
if (D_801A3320 != 0) {
func_80139954();
D_800B9A15 = 0;
func_8002D4C8(0x474, 0);
D_80115112 = D_80115112 + 1;
} else {
D_80115112 = D_80115112 - 1;
}
}
}
func_8017E050();
func_80137B80();
}
+13 -1
View File
@@ -3161,7 +3161,19 @@ extern void func_8017D2E0(s32 arg0, s32 arg1);
}
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8017E590", func_8017F488);
extern s16 func_8017D2D0(void);
s32 func_8017F488(s32 arg0) {
s16 var;
var = func_8017D2D0();
if (var == 0) {
return 0;
}
*(s16 *)(arg0 + 0x10A) = var - 1;
return 1;
}
extern s32 func_800291B4(s32 arg);
+13 -1
View File
@@ -6211,7 +6211,19 @@ extern s32 func_8012AD50(void *a0);
INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_80183054);
INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_801831A0);
extern void func_80183278();
extern void func_8012C098(void *a0);
void func_801831A0(s32 a0) {
s32 s0;
s0 = a0;
func_80183278();
if ((*(s32 *)(s0 + 0x1C) != 0) && (--*(s32 *)(s0 + 0x1C) == 0)) {
func_8012C098((void *) s0);
}
}
extern u16 D_800B99DA;
extern u32 D_801C7594;
+64 -2
View File
@@ -5129,7 +5129,38 @@ void func_80184FC4(int param_1)
INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017F690", func_8018500C);
INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017F690", func_80185080);
extern s32 func_8012BEE8(s32 a0);
extern void func_8012A828(s32 a0, void *a1);
extern s32 func_80047D3C(s32 a0);
extern s32 func_801807D8(s16 *a0);
extern s32 D_801A1A10;
extern void func_8012CBA4(s32 a0);
void func_80185080(s32 param_1)
{
s16 tmp[3];
s32 sq;
func_8012CBA4(param_1);
if (func_8012BEE8(param_1) != 0) {
*(u16 *)(param_1 + 0xFC) = 0;
*(u8 *)(param_1 + 0xC1) = 0;
*(s16 *)(param_1 + 0x2) = 1;
*(s16 *)(param_1 + 0x34) = 0;
func_8012A828(param_1, &D_801A1A10);
*(s32 *)(param_1 + 0x1C) = 0xA;
*(u16 *)(param_1 + 0x5C) |= 0x8000;
*(u16 *)(param_1 + 0x5E) = 0;
*(u16 *)(param_1 + 0xFC) ^= 1;
tmp[0] = *(s16 *)(param_1 + 0x6);
tmp[1] = *(s16 *)(param_1 + 0xA);
tmp[2] = *(s16 *)(param_1 + 0xE);
sq = (tmp[0] * tmp[0]) + (tmp[2] * tmp[2]);
*(s16 *)(param_1 + 0xDE) = func_80047D3C(sq);
*(s16 *)(param_1 + 0xDC) = func_801807D8(tmp);
}
}
extern s32 D_801270D4;
extern s32 D_801270E4;
@@ -5181,7 +5212,38 @@ void func_801851EC(s32 param_1) {
}
INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017F690", func_8018528C);
extern void func_8002D4C8(s32 a0, s32 a1);
extern s32 func_8012BEE8(s32 a0);
extern void func_80183630(s32 a0);
extern void func_80183790(s32 a0);
void func_8018528C(void *a0) {
void *s0;
register unsigned short state __asm__("$4");
s0 = a0;
state = *(u16 *)((u8 *)s0 + 0x34);
switch (state) {
case 0:
((struct { unsigned short h; } *)((u8 *)s0 + 0x34))->h = state + 1;
((struct { s32 f; } *)((u8 *)s0 + 0x1C))->f = 0;
func_8002D4C8(0x4AA, 0);
break;
case 1:
func_80183630((s32)s0);
break;
case 2:
func_80183790((s32)s0);
break;
case 3:
if (func_8012BEE8((s32)s0) != 0) {
*(u16 *)((u8 *)s0 + 0x34) = 0;
}
break;
}
}
#include "common.h"
+72 -2
View File
@@ -3029,7 +3029,20 @@ DEFINE_func_80180394() /* dedup: shared engine-core @0x80180394 (src/shared) */
DEFINE_func_801803B0() /* dedup: shared engine-core @0x801803B0 (src/shared) */
INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8017FCB0", func_801803D0);
extern void func_8012A828(int, void *);
extern s32 D_801A72C4;
void func_801803D0(int param_1)
{
*(short *)(param_1 + 2) = 0xb;
*(short *)(param_1 + 0x34) = 1;
*(short *)(param_1 + 0x5e) = 0;
*(unsigned short *)(param_1 + 0x5c) = 0xaa10;
func_8012A828(param_1, ((unsigned char *)&D_801A72C4));
*(char *)(param_1 + 0x102) = 0;
*(int *)(param_1 + 0x1c) = 0x1e;
}
// @class: plumbing
@@ -3049,7 +3062,64 @@ void func_80180428(int param_1)
INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8017FCB0", func_8018046C);
INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8017FCB0", func_801806E4);
extern void func_8012B178(s32 a0, s32 a1);
extern void func_8012AD80(s32 a0);
extern s32 func_8012BEE8(s32 a0);
extern void func_8012A828(s32 a0, void *a1);
extern void func_8012C098(void);
extern void func_8012C218(void *a0);
extern s32 D_801270CC;
extern unsigned char D_8018E724[];
extern unsigned char D_801A6534[];
void func_801806E4(int p)
{
switch (*(unsigned short *)(p + 0x34)) {
case 0:
func_8012B178(p, 0xfff40000);
func_8012AD80(p);
if (func_8012BEE8(p) == 0) return;
*(unsigned short *)(p + 0x34) = 1;
func_8012A828(p, D_8018E724);
return;
case 1:
if (*(short *)(p + 0x98) != 0) return;
*(unsigned short *)(p + 0x34) = 2;
func_8012A828(p, D_801A6534);
*(int *)(p + 0x1c) = 4;
return;
case 2:
*(unsigned short *)(*(int *)(p + 0x20) + 0x12) =
*(unsigned short *)(*(int *)(p + 0x20) + 0x12) - 0x200;
if (func_8012BEE8(p) == 0) return;
*(int *)(p + 0x1c) = 0x3c;
*(unsigned short *)(p + 0x34) = 3;
return;
case 3:
func_8012B178(p, 0xfff40000);
func_8012AD80(p);
if (func_8012BEE8(p) == 0) return;
switch (((int)(*(unsigned short *)(p + 0x70) << 16)) >> 24) {
case 0:
case 1:
case 2:
case 5:
case 6:
((void (*)(void *))func_8012C098)(p);
return;
case 3:
case 7:
func_8012C218(p);
return;
case 4:
D_801270CC = D_801270CC - 1;
func_8012C218(p);
return;
}
return;
}
}
// @class: loose-typing
+2 -2
View File
@@ -2712,7 +2712,7 @@ extern void func_80143CD4(s32 a0);
extern int func_800CB0E8(int param);
extern void func_801801EC(int param_1);
extern void func_80180394(void *a0);
extern void func_801803D0(void);
extern void func_801803D0();
extern void func_801803B0(void);
extern unsigned char D_801A73BC[];
extern void func_80180428(int param_1);
@@ -2752,7 +2752,7 @@ extern void func_8012B23C(s32 a0);
extern void func_8012B14C(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, void *a1);
extern void func_801803B0(void);
extern void func_801803D0(void);
extern void func_801803D0();
extern s32 rand(void);
+1 -1
View File
@@ -2713,7 +2713,7 @@ extern void func_80143CD4(s32 a0);
extern int func_800CB0E8(int param);
extern void func_801801EC(int param_1);
extern void func_80180394(void *a0);
extern void func_801803D0(void);
extern void func_801803D0();
extern void func_801803B0(void);
extern unsigned char D_801A73BC[];
extern void func_80180428(int param_1);
+91 -3
View File
@@ -2713,7 +2713,7 @@ extern void func_80143CD4(s32 a0);
extern int func_800CB0E8(int param);
extern void func_801801EC(int param_1);
extern void func_80180394(void *a0);
extern void func_801803D0(void);
extern void func_801803D0();
extern void func_801803B0(void);
extern unsigned char D_801A73BC[];
extern void func_80180428(int param_1);
@@ -3349,7 +3349,26 @@ void func_80182BD0(u8 *a0) {
}
INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8018173C", func_80182CB4);
void func_80182CB4(s32 _arg0)
{
typedef struct { s32 w[4]; } Blk16;
extern u8 D_80126948[];
extern s32 D_80126E60[];
Blk16 *src;
Blk16 *dst;
Blk16 *end;
dst = (Blk16 *)&D_80126948;
src = (Blk16 *)D_80126E60;
end = src + 10;
do {
*dst = *src;
src++;
dst++;
} while (src != end);
*(s32 *)dst = *(s32 *)src;
}
DEFINE_func_80182D00() /* dedup: shared engine-core @0x80182D00 (src/shared) */
@@ -3903,7 +3922,76 @@ DEFINE_func_8018419C() /* dedup: shared engine-core @0x8018419C (src/shared) */
DEFINE_func_80184250() /* dedup: shared engine-core @0x80184250 (src/shared) */
INCLUDE_ASM("asm/ov_SC02_000/nonmatchings/ov_SC02_000_jr_8018173C", func_80184358);
#include "common.h"
typedef struct { s16 vx, vy, vz, pad; } SVEC_80184358;
extern void func_8012B2CC(s32 a0);
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
extern u8 D_8018EFF4;
extern s32 D_801E8738;
extern SVEC_80184358 aD_8018F034 __asm__("D_8018F034");
extern SVEC_80184358 aD_8018F03C __asm__("D_8018F03C");
void func_80184358(s32 p) {
SVEC_80184358 sv;
s32 q;
s32 r;
s16 t;
func_8012B2CC(p);
if (*(s32 *)(p + 0xCC) != 0) {
func_8012F14C(*(s32 *)(p + 0x20) + 0x34, (s32) &aD_8018F034, (s32) &sv);
*(s16 *)(*(s32 *)(p + 0xCC) + 0x8) = sv.vx;
*(s16 *)(*(s32 *)(p + 0xCC) + 0xA) = sv.vy;
*(s16 *)(*(s32 *)(p + 0xCC) + 0xC) = sv.vz;
q = *(s32 *)(p + 0x20);
*(s16 *)(*(s32 *)(p + 0xCC) + 0x10) = *(u16 *)(q + 0x10);
q = *(s32 *)(p + 0x20);
*(s16 *)(*(s32 *)(p + 0xCC) + 0x12) = *(u16 *)(q + 0x12);
q = *(s32 *)(p + 0x20);
*(s16 *)(*(s32 *)(p + 0xCC) + 0x14) = *(u16 *)(q + 0x14);
}
if (*(s32 *)(p + 0xD0) != 0) {
func_8012F14C(*(s32 *)(p + 0x20) + 0x34, (s32) &aD_8018F03C, (s32) &sv);
*(s16 *)(*(s32 *)(p + 0xD0) + 0x8) = sv.vx;
*(s16 *)(*(s32 *)(p + 0xD0) + 0xA) = sv.vy;
*(s16 *)(*(s32 *)(p + 0xD0) + 0xC) = sv.vz;
q = *(s32 *)(p + 0x20);
*(s16 *)(*(s32 *)(p + 0xD0) + 0x10) = *(u16 *)(q + 0x10);
q = *(s32 *)(p + 0x20);
*(s16 *)(*(s32 *)(p + 0xD0) + 0x12) = *(u16 *)(q + 0x12);
q = *(s32 *)(p + 0x20);
*(s16 *)(*(s32 *)(p + 0xD0) + 0x14) = *(u16 *)(q + 0x14);
}
t = *(s16 *)(p + 0xDC);
if (t == 0) {
s16 v = *(u16 *)(p + 0xDE) - 0x40;
*(s16 *)(p + 0xDE) = v;
if (v <= 0) {
*(s16 *)(p + 0xDE) = 0;
}
D_8018EFF4 = (u8) *(u16 *)(p + 0xDE);
if (*(s16 *)(p + 0xDE) == 0) {
if (*(s32 *)(p + 0xCC) != 0) {
*(s16 *)(*(s32 *)(p + 0xCC)) = 0;
}
if (*(s32 *)(p + 0xD0) != 0) {
*(s16 *)(*(s32 *)(p + 0xD0)) = 0;
}
r = *(u16 *)(p + 0x2);
*(s16 *)(p + 0xDC) = 0x1000;
D_801E8738 = 0;
*(s16 *)(p + 0x2) = r + 1;
}
} else {
*(s16 *)(p + 0xDC) = t - 1;
}
}
typedef struct { u16 x, y, z, w; } Blk8_8018453C;
typedef struct { s32 f0, f1, f2, f3, f4, f5, f6, f7; } Blk32_801E8788;
+17 -1
View File
@@ -4069,7 +4069,23 @@ extern u16 D_80126B66;
}
INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8017AE2C", func_8017D9C4);
extern u8 *func_8012913C(s32 arg);
void func_8017D9C4(void *a0)
{
u8 *var_s0;
u8 *var_s1;
var_s1 = a0;
var_s0 = func_8012913C(5);
if (var_s0 != NULL) {
*(u16 *)(var_s0 + 6) = *(u16 *)(var_s1 + 6);
*(u16 *)(var_s0 + 0xA) = *(u16 *)(var_s1 + 0xA);
*(u16 *)(var_s0 + 0xE) = *(u16 *)(var_s1 + 0xE);
*(u16 *)(var_s0 + 0x2E) = rand() & 3;
}
}
INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8017AE2C", func_8017DA30);
+13 -1
View File
@@ -4279,7 +4279,19 @@ void func_8017FA0C(void) {
}
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8017CF90", func_8017FA3C);
extern void func_8002D4C8(s32 a0, s32 a1);
extern s32 func_8013767C(s32 a0);
extern s32 D_80126CF0;
extern s32 D_801972DC;
extern u8 D_80126D6C;
void func_8017FA3C(void) {
func_8017E190();
func_8002D4C8(0x510, 0x107F);
D_80126CF0 = func_8013767C((s32)&D_801972DC);
D_80126D6C = D_80126D6C + 1;
}
#include "common.h"
+107 -6
View File
@@ -2924,7 +2924,46 @@ INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_8018203
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_80182098);
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_801820E4);
#include "common.h"
extern u16 D_801E43B4;
extern s32 D_801270C8;
extern u8 D_80195AFA[];
extern u8 D_8019103C;
extern void func_8018A1D8(s32 a0);
extern void func_8012B23C(s32 a0);
extern void func_8013C9C4(void *a0);
extern void func_80186304();
extern s32 func_801873FC(s32 a0);
extern u16 D_80126B96;
extern s16 D_80126B98;
extern void func_8002D4C8(s32 a0, s32 a1);
s32 func_801820E4(void *arg0)
{
s16 idx;
register u16 cnt asm("v0");
idx = *(s16 *)((u8 *)arg0 + 0xE0);
if (idx >= 0) {
cnt = D_801E43B4;
D_801270C8 = *(s16 *)((u8 *)D_80195AFA + idx * 8);
D_801E43B4 = cnt + 1;
*(u32 *)((u8 *)arg0 + 0xE8) = (*(u32 *)((u8 *)arg0 + 0xE8) & ~0x400) | 0x800;
}
func_8018A1D8((s32)arg0);
func_8012B23C((s32)arg0);
func_8013C9C4(&D_8019103C);
func_80186304(arg0, 0x12, 0);
*(s16 *)((u8 *)arg0 + 0x34) = 6;
*(u32 *)((u8 *)arg0 + 0xE8) |= 0x20;
if (func_801873FC((s32)arg0) != 0) {
D_80126B96 = 0x4002;
D_80126B98 = 10;
}
func_8002D4C8(0x501, 0);
}
void func_801821C8(s32 *arg0) {
u16 t;
@@ -2975,7 +3014,14 @@ extern void func_801862F0(void * arg0);
}
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_801822B4);
extern void func_8012B23C(s32 a0);
void func_801822B4(s32 arg0) {
func_8012B23C(arg0);
func_8017DF50();
func_801838A8((u8 *)arg0);
}
#include "common.h"
@@ -3318,7 +3364,14 @@ INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_80182A8
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_80182D80);
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_80182DCC);
extern void func_8018622C();
void func_80182DCC(void *a0) {
func_8018622C(a0);
*(u32 *)((s32)a0 + 0x14) = 0x100000;
*(u16 *)((s32)a0 + 0x34) = 1;
}
#include "common.h"
@@ -9632,7 +9685,36 @@ extern void func_8012C218(void *a0);
}
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_8018CC28);
#include "common.h"
typedef struct { u8 b[4]; } Blk4_8018CC28;
/* ---- externs ------------------------------------------------------------ */
extern void func_8001CD50(s32 a0, s32 a1);
extern void func_800233CC(void *a0, unsigned short a1);
extern u8 D_801E4958[];
extern u8 D_801E495C;
extern u8 D_801E2F58;
extern u8 D_801E2F5C;
void func_8018CC28(s32 param_1)
{
func_8001CD50(*(s32 *)(param_1 + 0x20), (s32)&D_801E4958);
*(u16 *)(param_1 + 0xA) -= 0x100;
*(u32 *)(*(s32 *)(param_1 + 0x20) + 4) |= 0x50000000;
*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = 0x400;
*(s16 *)(param_1 + 0x2C) = 0x8;
func_800233CC(&D_801E4958, 0x8);
*(Blk4_8018CC28 *)&D_801E4958 = *(Blk4_8018CC28 *)&D_801E2F58;
*(Blk4_8018CC28 *)&D_801E495C = *(Blk4_8018CC28 *)&D_801E2F5C;
*(u16 *)(param_1 + 2) += 1;
}
#include "common.h"
@@ -10272,7 +10354,16 @@ void func_8018D9A4(void *a0)
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_8018DA40);
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_8018DA8C);
extern void func_8018F704(void);
extern s32 D_801270C8;
void func_8018DA8C(void *a0) {
if (D_801270C8 == 0x21) {
func_8018F704();
*(u16 *)((s32)a0 + 2) += 1;
}
}
void func_8018DAD8(void) {
}
@@ -11731,7 +11822,17 @@ void func_80190074(void *a0) {
}
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_801900B0);
extern s32 func_800CF854(void);
s32 func_801900B0(void) {
register s32 r __asm__("$2");
s32 v;
v = ((s32 (*)(void))func_800CF854)();
r = v ? 9 : 8;
return r;
}
extern s32 D_801E4C40;
+137 -4
View File
@@ -6449,7 +6449,27 @@ extern void func_80171A1C(u8 *a0);
}
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8017AE2C", func_8018015C);
extern s16 D_80126B3A;
extern s16 D_80126B3C;
extern void func_8017EAC0(void *a0, s32 a1, s32 a2);
extern void func_80171A1C(u8 *a0);
void func_8018015C(u8 *a0) {
s32 v;
if (*(u16 *)(a0 + 0xB8) & 0x8000) {
switch ((s16)(*(u16 *)&D_80126B3A - 2)) {
case 0: v = 0; break;
case 1: v = 1; break;
case 2: v = 2; break;
case 3: v = 3; break;
case 4: v = 4; break;
}
D_80126B3C = v;
func_8017EAC0(a0, -0x60, v);
func_80171A1C(a0);
}
}
DEFINE_func_80180210() /* dedup: shared engine-core @0x80180210 (src/shared) */
@@ -7420,7 +7440,22 @@ void func_80182268(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8017AE2C", func_801822F4);
extern s32 func_80172658(s32 *a0);
extern s32 func_801399F0(s32 a0);
extern void func_801823B8(void);
void func_801822F4(s32 param_1) {
s32 s0;
if (func_80172658((s32 *)param_1) != 0) {
s0 = param_1;
if (func_801399F0(*(s32 *)(s0 + 0x198)) != 0) {
func_801823B8();
*(u8 *)(s0 + 0x216) = 0;
}
}
}
extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3);
@@ -8672,7 +8707,15 @@ INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8017AE2C", func_8018526
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8017AE2C", func_801852B0);
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8017AE2C", func_80185388);
extern s32 func_80029178(s32 arg);
void func_80185388(void *a0) {
*(s16 *)((char *)a0 + 2) = 4;
if ((func_80029178(0x9E) & 0xFF) != 0) {
*(s16 *)((char *)a0 + 0xFC) = 1;
}
}
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8017AE2C", func_801853CC);
@@ -10508,7 +10551,97 @@ void func_8018823C(void) {
}
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8017AE2C", func_80188250);
#include "common.h"
/* func_80188250 -- same-class neighbour push-away over the 0x60-entry /
* 0x10C-stride entity table D_801202A0. Banked twin: ov_SC06_018:func_80187320
* (§193-A), minus its second switch case (no 0x2F4 clamp here) and with a
* self-id equality guard instead of constant class ids.
*
* §37/§124 DEF-SIDE ESCAPE (_body spelling, cf. func_801810CC_body,
* ov_SC07_007_jr_8017BEBC.c:6600): this TU already declares
* `extern void func_80188250(s32 a0);` at file scope (the func_80188654 block),
* while the target tail (`addiu $v0,$zero,1` / `addu $v0,$zero,$zero`) proves
* an s32 return. A same-name s32 definition is a hard `conflicting types`;
* a void definition cannot emit the $v0 constants. Define under a private C
* identifier carrying an __asm__ label: emitted symbol unchanged, no collision,
* the existing extern keeps compiling the caller at func_80188654.
*
* §8d: func_8012CEB0 is declared ONLY at block scope in this TU (the
* func_80187844 block) -- its extern rides INSIDE the body, not at file scope.
*
* Load-bearing constructs (do NOT "clean up"):
* 1. NO SECOND WALKED POINTER. All of +0x6/+0xA/+0xE written off the single
* biv `p` (twin note 1): an explicit q = p + 0xE excludes the bare *q from
* givs and yields THREE IVs / wrong anchor.
* 2. `self4` and `sc` are REAL pre-loop locals, in that order (twin note 4):
* written inline at the calls they fold into the argument moves and the
* $s5/$s6 hoists never happen. Declaration ORDER (p, i, self4, sc) gives
* $s2/$s4/$s5/$s6 in the target's prologue emission order.
* 3. do-while with `i++` BEFORE `p += 0x10C` (twin note 3): strength_reduce
* emits the giv addiu immediately before ITS biv increment =>
* addiu $s4,1 / addiu $s3,0x10C / (delay) addiu $s0,0x10C.
* 4. NO `s16 y` scalar: the twin's short-local/dead-slot pair belongs to its
* second switch case, absent here. Frame is exactly 0x48 with no dead slot.
* 5. §5a cross-jump barrier before the second `return 1`: the target keeps TWO
* [j .epi][addiu $v0,$zero,1] tails; without the barrier gcc merges them
* into one shared li (93 ins).
*/
extern u8 D_801202A0[];
extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1);
extern s32 func_8012B6D4(s16 *a0, s16 *a1);
extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3);
extern void func_8012ADE4(u8 *a0);
s32 func_80188250_body(s32 a0) __asm__("func_80188250");
s32 func_80188250_body(s32 a0) {
extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2);
u8 *p;
s16 *self4;
unsigned int *sc;
s32 i;
s32 ang;
s16 v10[4]; /* sp+0x10 */
s16 v18[4]; /* sp+0x18 */
s32 sp20[2]; /* sp+0x20 - func_8012B0B4 output */
p = D_801202A0;
i = 0;
self4 = (s16 *)(a0 + 4);
sc = (unsigned int *)sp20;
do {
if (*(u16 *)a0 == *(u16 *)p && (u8 *)a0 != p) {
if (func_8012BC60(self4, (struct Vec *)(p + 4)) < 0x1000) {
ang = func_8012B6D4(self4, (s16 *)(p + 4));
func_8012B0B4(sc, ang, 0x41);
v18[0] = *(u16 *)(p + 6);
v18[1] = *(u16 *)(p + 0xA);
v18[2] = *(u16 *)(p + 0xE);
v18[0] += sp20[0];
v18[2] += sp20[0] >> 16;
v10[0] = *(u16 *)(a0 + 0x3A);
v10[1] = *(u16 *)(a0 + 0x3E);
v10[2] = *(u16 *)(a0 + 0x42);
if ((func_8012CEB0((s32)&v10[0], (s32)&v18[0], 0) & 0x2000) == 0) {
func_8012ADE4((u8 *)a0);
return 1;
}
*(u16 *)(a0 + 6) = v18[0];
*(u16 *)(a0 + 0xA) = v18[1];
*(u16 *)(a0 + 0xE) = v18[2];
__asm__ __volatile__("" ::: "memory"); /* zero-byte cross-jump barrier (§5a) */
return 1;
}
}
i++;
p += 0x10C;
} while (i < 0x60);
return 0;
}
extern void func_8002D4C8(s32 arg0, s32 arg1);
void func_801883C8(void) {
+11 -1
View File
@@ -3449,7 +3449,17 @@ void func_8017F1C8(void *a0) {
}
INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_8017DC70", func_8017F228);
extern s32 func_8017F264();
extern u16 D_80126B96;
extern s16 D_80126B98;
void func_8017F228() {
if (func_8017F264() != 0) {
D_80126B96 = 0x4018;
D_80126B98 = 0x10;
}
}
extern s32 func_8012DEB8(s32, s32, s32);
extern u16 D_801880E0;
+12 -1
View File
@@ -4323,7 +4323,18 @@ void func_801809A8(void *arg0) {
INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8017DF34", func_80180A10);
INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8017DF34", func_80180AB8);
extern void func_8012E88C(u8 *a0);
extern void func_80180C90(s32 a0);
void func_80180AB8(s32 param_1) {
if (*(s32 *)(param_1 + 0xDC) != 0) {
*(u16 *)((s32)param_1 + 2) = 2;
*(u16 *)((s32)param_1 + 0x34) = 0;
func_8012E88C((u8 *)param_1);
func_80180C90(param_1);
}
}
extern s32 func_80180CEC();
extern s32 func_80180C44();
+26 -1
View File
@@ -3433,7 +3433,32 @@ void func_8017EE08(void *a0) {
}
INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_8017D898", func_8017EE44);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8001BFD0(void);
extern void func_800D0C48(s32 a0);
extern void func_800D1E28(void);
extern s32 func_8017FB74(void);
s32 func_8017EE44(void *a0) {
s32 v0;
s32 v1 = -1;
v0 = *(s32 *)(a0 + 0x28);
v0 += -1;
*(s32 *)(a0 + 0x28) = v0;
if (v0 == v1) {
func_8002D4C8(4, 0x6CA);
func_8002D4C8(0x1C, 0);
func_8001BFD0();
func_8002D4C8(0x1D, 0);
if (func_8017FB74() != 0) {
func_800D0C48(1);
}
func_800D1E28();
*(u8 *)(a0 + 0x15) = *(u8 *)(a0 + 0x15) + 1;
}
return 0;
}
extern void func_8016EE40(s32 a0, s32 a1, s32 a2);
extern M2C_UNK D_8018F1EC;
+87 -2
View File
@@ -5375,7 +5375,59 @@ void func_8017FC70(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8017BEBC", func_8017FD14);
extern void func_8012A828(s32 a0, void *a1);
extern void func_8012B200(u8 *a0);
extern s32 func_8012B8E4(s32 arg0, s32 arg1);
extern void func_8012CBCC(s32 a0);
extern s32 func_8012BCCC(s32 a0);
extern s32 func_8017F690(s32 a0, s32 a1);
extern u8 D_801A3560[];
extern u8 D_801A3710[];
extern u8 D_801A3608[];
void func_8017FD14(s32 a0)
{
s32 v0;
unsigned short *p;
s16 t;
if (*(s16 *)(a0 + 0x98) == 0) {
func_8012A828(a0, D_801A3560);
}
if (((s32 (*)(s32))func_8012CBCC)(a0) != 0) {
func_8012B200((u8 *)a0);
}
v0 = func_8012B8E4(a0, 8);
p = (unsigned short *)(*(int *)(a0 + 0x20) + 0x12);
*p = (unsigned short)(*p + v0);
p = (unsigned short *)(*(int *)(a0 + 0x20) + 0x12);
*p = (unsigned short)(*p & 0xFFF);
t = *(s16 *)(a0 + 0xFC);
if (t != 0) {
*(s16 *)(a0 + 0xFC) = t - 1;
return;
}
if (func_8012BCCC(a0) < 0x2401) {
*(s16 *)(a0 + 0x2) = 3;
func_8012A828(a0, D_801A3710);
} else {
if (func_8017F690(a0, 0x48) != 0) {
return;
}
if (0x40000 < func_8012BCCC(a0)) {
return;
}
*(s16 *)(a0 + 0x2) = 2;
func_8012A828(a0, D_801A3608);
}
}
extern s16 D_80126B98;
extern s16 D_80126B9A;
@@ -6659,7 +6711,40 @@ s32 aF8018A224(param_1)
}
INCLUDE_ASM("asm/ov_SC02_041/nonmatchings/ov_SC02_041_jr_8017BEBC", func_80181B04);
void func_80181B04(s32 param_1) {
extern void (*D_801AD318[])(void);
extern void func_80183014(s32 a0);
extern s32 func_8012C0EC(s32 a0);
extern s32 rand(void);
s32 v1;
s32 v0;
s32 rem;
D_801AD318[*(u16 *)(param_1 + 2)]();
if (*(u16 *)(param_1) != 0) {
func_80182B38(param_1);
func_80182CCC(param_1);
func_80183014(param_1);
v1 = *(s32 *)(param_1 + 0xEC) + 1;
v0 = *(s32 *)(param_1 + 0xF0);
rem = v1 % v0;
*(s32 *)(param_1 + 0xEC) = v1;
if (rem == 0 || (rand() & 0xFFF) == 0) {
func_8018317C(param_1);
*(s32 *)(param_1 + 0xF0) = rand() % 32 + 0x10;
}
if (*(s16 *)(param_1 + 0xA) >= 0x10) {
func_80182B08(param_1);
} else {
if (*(s16 *)(param_1 + 0x70) & 0x8000) {
func_8012C0EC(param_1);
}
}
}
}
void func_80181C40(s32 a0) {
extern u8 D_801AD174[];
+29 -1
View File
@@ -7857,7 +7857,35 @@ void func_801837C4(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8017AE2C", func_80183864);
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);
extern void func_8012E8E0(s32 a0, s32 a1);
extern void func_8012E8A8(u8 *a0);
void func_80183864(void *a0) {
extern u8 D_801BD274[];
extern u8 D_801BAEF0[];
extern void (*D_801910C0[])(void);
s32 v0;
v0 = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)((s32)a0 + 0x20) = v0;
if (v0 == 0) {
func_8012CAE4(a0);
} else {
func_8001C214(v0, (s32)D_801BD274);
*(s16 *)((s32)a0 + 0x34) = 0;
*(s32 *)((s32)a0 + 0x1C) = 0;
*(u16 *)((s32)a0 + 2) += 1;
*(u16 *)((s32)a0 + 0x5C) |= 0x10;
func_8012A828((s32)a0, D_801BAEF0);
func_8012E8E0((s32)a0, (s32)D_801910C0);
func_8012E8A8((u8 *)a0);
}
}
extern void (*D_801BFF04[])(void);
extern s32 func_8012C044(s32 a0);
+10 -1
View File
@@ -5948,7 +5948,16 @@ s32 func_801802A4(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8017AE2C", func_8018033C);
extern s32 func_8012B608(s32 a0, s32 a1, s32 a2);
extern s32 func_801803DC(s32 a0);
s32 func_8018033C(s32 a0, s32 a1) {
s32 t;
t = func_801803DC(a0);
return func_8012B608(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12), t, (s16)a1);
}
extern s32 func_8012BC60(void *a0, void *a1);
extern s32 func_8012BCCC(s32 a0);
+34 -1
View File
@@ -4639,7 +4639,40 @@ void func_80188F80(void* arg0)
}
INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_80188FB4);
int func_80188FB4(int a0, void* a1)
{
s16 stack_buf[8];
register u16 *s0 __asm__("$16") = (u16 *)a1;
u16 v0;
s32 result;
v0 = s0[2];
stack_buf[0] = v0;
v0 = s0[3];
stack_buf[4] = v0;
v0 = s0[5];
stack_buf[5] = v0;
stack_buf[1] = v0;
v0 = s0[6];
stack_buf[6] = v0;
stack_buf[2] = v0;
result = func_80189050((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);
if (result != 0) {
return 1;
}
v0 = s0[7];
stack_buf[6] = v0;
stack_buf[2] = v0;
result = func_80189050((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);
if (result != 0) {
return 1;
}
return 0;
}
extern s32 *D_80126B78;
extern s32 *D_80126B90;
+63 -1
View File
@@ -2837,7 +2837,69 @@ s32 func_80184028(void) {
}
INCLUDE_ASM("asm/ov_SC03_015/nonmatchings/ov_SC03_015_o0c", func_80184058);
#include "common.h"
/* 16.16 fixed-point view: unkE0 is a 32-bit accumulator whose HIGH half is the s16
* unkE2 the rest of the function reads (little-endian overlay). */
typedef struct {
/* 0x00 */ s16 unk00;
/* 0x02 */ s16 unk02;
/* 0x04 */ u8 pad04[0xD8];
/* 0xDC */ s16 unkDC;
/* 0xDE */ s16 unkDE;
/* 0xE0 */ s32 unkE0;
} Ent58_fx;
typedef struct {
/* 0x00 */ s16 unk00;
/* 0x02 */ s16 unk02;
/* 0x04 */ u8 pad04[0xD8];
/* 0xDC */ s16 unkDC;
/* 0xDE */ s16 unkDE;
/* 0xE0 */ s16 unkE0;
/* 0xE2 */ s16 unkE2;
/* 0xE4 */ s16 unkE4;
/* 0xE6 */ s16 unkE6;
/* 0xE8 */ s16 unkE8;
/* 0xEA */ s16 unkEA;
} Ent_80184058;
extern s32 D_801EAFD0;
extern s32 D_8018F858[];
extern s32 D_801270C8;
extern u16 D_800B99DC;
extern u8 D_8018BCC8;
extern void func_8017DF84(void *a0, s32 a1, s32 a2, s32 a3);
extern void func_80184354(void);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8013C9C4(void *a0);
extern void func_8013373C(s32 a0);
void func_80184058(Ent_80184058 *p) {
func_8017DF84(&D_801EAFD0, D_8018F858[p->unkE4], p->unkDC, p->unkE2);
func_80184354();
if (p->unkEA == 0) {
((Ent58_fx *)p)->unkE0 += 0x5CCCC;
} else {
if (--p->unkEA == 0) {
func_8002D4C8(0x81E, 0);
}
}
if (--p->unkE8 == 0) {
func_8013C9C4(&D_8018BCC8);
p->unkE8 = (D_800B99DC & 7) + 3;
}
if (p->unkE2 >= 0x259) {
p->unkE2 = 0;
D_801270C8 = 2;
p->unkE4 = 0;
func_8013373C(1);
func_8002D4C8(4, 0x81E);
++p->unk02;
}
p->unkDC += 8;
}
extern void func_8017FA5C(s32 arg0, s32 arg1, s32 arg2);
+13 -1
View File
@@ -3854,7 +3854,19 @@ extern void func_800D0694(void);
}
INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_80183BF8", func_801856BC);
void func_801856BC(s32 a0, s32 a1)
{
typedef struct { short x, y, z, w; } Rec8T;
extern s32 func_8012C658(s32 a0, s32 a1, s32 a2);
extern Rec8T D_801B9330[];
s32 i;
for (i = 0; D_801B9330[i].x != 0; i++) {
func_8012C658(0x10D, i, a0);
}
}
/* func_80185730 — allocates a GTE-projection slot, seeds a random spread
+9 -1
View File
@@ -8828,7 +8828,15 @@ void func_8018A500(void *a0)
}
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_8018A618);
extern void func_8012C218(void *a0);
extern void func_8012CBCC(s32 a0);
void func_8018A618(s32 arg0) {
if ((((s32 (*)(s32))func_8012CBCC)(arg0) != 0) || (*(s16 *)((s32)arg0 + 0xA) >= 0x200)) {
func_8012C218((void *)arg0);
}
}
+15 -1
View File
@@ -4724,7 +4724,21 @@ void func_80180980(void *a0)
}
INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_8017D898", func_80180BD8);
extern void func_80178B18(s32 a0, s32 a1);
extern void func_8012AD44(s32 *a0, s16 a1);
extern s32 D_8019AFD4;
void func_80180BD8(void* a0)
{
s32 *p = &D_8019AFD4;
s32 hi;
hi = *(s16 *)(a0 + 0xE) << 16;
*p = *(u16 *)(a0 + 6) | hi;
func_80178B18(a0, (s32)(p - 1));
func_8012AD44((s32 *)a0, 2);
}
extern void (*D_8019AFE8[])(void);
+12 -1
View File
@@ -2933,7 +2933,18 @@ void func_80183E04(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_100/nonmatchings/ov_SC03_100_jr_80183C10", func_80183EB4);
void func_80183EB4(void *a0) {
struct B16_80185634 { s32 w[4]; };
extern struct B16_80185634 D_800A5EA8;
extern struct B16_80185634 D_801C4F2C;
extern s32 D_800A5EB0;
D_800A5EA8 = D_801C4F2C;
D_800A5EB0 = func_8004787C(*(s16 *)((s32)a0 + 0xFE)) * 6 / 4096 - 3;
*(u16 *)((s32)a0 + 0xFE) = (*(u16 *)((s32)a0 + 0xFE) + 0x71) & 0xFFF;
func_80028620(2, &D_800A5EA8);
}
/* §71 sibling-first: func_80185634 (same TU, already MATCHed) is the exact template.
+24 -1
View File
@@ -4262,7 +4262,30 @@ void func_8018110C(s32 a0)
}
INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8017BEBC", func_801811F0);
extern void func_801292C8(u8 *a0);
s32 func_801811F0(s32 a0)
{
volatile s32 pad;
u32 *p = *(u32 **)((s32)a0 + 0x20);
u32 v = p[1];
u32 w = 0x80000000;
if ((s32)v < 0) {
w = 0x7fffffff;
w = v & w;
} else {
w = v | w;
}
p[1] = w;
if (--*(s32 *)((s32)a0 + 0x1C) == 0) {
func_801292C8((u8 *)a0);
return 1;
}
return 0;
}
#include "common.h"
+20 -1
View File
@@ -3256,7 +3256,26 @@ void func_80185E28(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801855D0", func_80186028);
extern s32 func_801860B0(s32 a0);
void func_80186028(s32 a0)
{
s32 v;
v = *(s16 *)((s32)a0 + 0x70);
switch (v) {
case 0:
func_8002D4C8(0x6D5, 0);
break;
case 1:
func_8002D4C8(0x856, (func_801860B0(a0) | 0x2000) & 0xFFFF);
break;
case 2:
func_8002D4C8(0x857, (func_801860B0(a0) | 0x2000) & 0xFFFF);
break;
}
}
INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_801855D0", func_801860B0);
+26 -1
View File
@@ -4697,7 +4697,32 @@ void func_8017F9F4(void) {
INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8017C294", func_8017F9FC);
INCLUDE_ASM("asm/ov_SC03_113/nonmatchings/ov_SC03_113_jr_8017C294", func_8017FAD4);
extern void func_8012C218(void *a0);
extern void func_8012E014(s32 a0);
extern u16 D_80187164[];
extern s16 D_80187154[];
void func_8017FAD4(void *a0)
{
register s32 t __asm__("$3");
register s32 sum __asm__("$2");
s16 diff;
t = D_80187164[*(s16 *)(*(s32 *)((s32)a0 + 0x64) + 0x70)];
__asm__ __volatile__("");
sum = *(u16 *)((s32)a0 + 0xA) + t;
*(u16 *)((s32)a0 + 0xA) = sum;
diff = sum - *(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0xA);
if (diff < 0) {
diff = -diff;
}
if (diff >= D_80187154[*(s16 *)(*(s32 *)((s32)a0 + 0x64) + 0x70)]) {
func_8012C218(a0);
} else if (*(u8 *)((s32)a0 + 0x74) != 0) {
func_8012E014((s32)a0);
}
}
void func_8017FB88(void) {
}
+13 -1
View File
@@ -4014,7 +4014,19 @@ void func_80187F2C(s32 a0)
}
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_801863CC", func_8018800C);
extern s32 func_8004787C(s32 a0);
void func_8018800C(s32 a0)
{
*(u16 *)(a0 + 0xFC) += 0x20;
*(u16 *)(a0 + 0xA) = *(u16 *)(a0 + 0x100);
*(s32 *)(a0 + 0x8) -= func_8004787C(*(s16 *)(a0 + 0xFC)) << 10;
if (*(s16 *)(a0 + 0xFC) >= 0x800) {
*(s16 *)(a0 + 0x2) = 3;
}
}
DEFINE_func_80188074() /* dedup: shared engine-core @0x80188074 (src/shared) */
+126 -3
View File
@@ -3518,7 +3518,27 @@ void func_8017D658(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8017BEBC", func_8017D698);
#include "common.h"
extern s32 func_8012BD14(s32 a0);
extern s32 func_8016F1AC(void);
extern s32 func_80178BF8();
extern void func_80172710(void);
s32 func_8017D698_x(s32 a0) __asm__("func_8017D698");
s32 func_8017D698_x(s32 a0) {
if (func_8012BD14(*(s32 *)(a0 + 0x64)) >= 0x1001) {
return 0;
}
if (func_8016F1AC() != 0) {
return 0;
}
*(s16 *)(*(s32 *)(a0 + 0x64) + 2) = 2;
func_80178BF8();
return (s32)func_80172710;
}
extern void (*D_80185CCC[])(void);
@@ -5113,7 +5133,57 @@ void func_8017FF18(s32 target, u16 *cur, s32 step)
}
INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8017BEBC", func_8017FF9C);
extern s16 D_80190E2C;
extern s16 D_80190E2E;
extern s16 D_80190E30;
extern void func_800484EC(s32 a0, s32 a1, s32 a2);
extern s32 func_8012C51C(void *a0, s32 a1);
extern void func_8012B2CC(s32 a0);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_8017FF9C(void *a0) {
struct S8017FF9C_sp {
u16 unk0;
u16 unk2;
u16 unk4;
s16 unk6;
s16 unk8;
s16 unkA;
s16 unkC;
s16 unkE;
s32 unk10;
} sp;
s32 vec[3];
s32 out[3];
s32 ret;
vec[0] = D_80190E2C << 8;
vec[1] = D_80190E2E << 8;
vec[2] = D_80190E30 << 8;
func_800484EC(*(s32 *)((s32)a0 + 0x20) + 0x34, (s32)vec, (s32)out);
out[0] += *(s16 *)((s32)a0 + 0x6) << 8;
out[1] += *(s16 *)((s32)a0 + 0xA) << 8;
out[2] += *(s16 *)((s32)a0 + 0xE) << 8;
sp.unk0 = out[0] / 256;
sp.unk2 = out[1] / 256;
sp.unk4 = out[2] / 256;
sp.unk6 = 0x20;
sp.unk8 = 2;
sp.unkA = 0;
sp.unk10 = 0;
sp.unkE = 0;
ret = func_8012C51C(&sp, (s32)a0);
if (ret != 0) {
*(u16 *)(*(s32 *)(ret + 0x20) + 0x12) = *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12);
func_8012B2CC(ret);
func_8002D4C8(0x83A, 0);
}
}
extern s16 D_80126B98;
@@ -5542,7 +5612,60 @@ void func_80180C40(void *a0) {
INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8017BEBC", func_80180CC0);
INCLUDE_ASM("asm/ov_SC04_003/nonmatchings/ov_SC04_003_jr_8017BEBC", func_80180D50);
extern s32 func_80180E34(s32, s32, u16);
s32 func_80180D50(s32 arg0) {
extern u8 D_801202A0[];
register s32 zr __asm__("$0");
u8 *pe;
u8 *ps;
s16 *ca;
s16 *cb;
u16 state;
u16 t;
s32 count;
pe = D_801202A0;
count = 0;
ps = pe + 4;
do {
if ((s32) pe == arg0) {
goto next;
}
state = *(u16 *) pe;
ca = (s16 *) ((s32) arg0 + zr);
if (state == 0x1FC) {
goto b1fc;
}
cb = (s16 *) ((s32) ps + zr);
if (state == 0x239) {
goto b239;
}
goto next;
b1fc:
cb = (s16 *) ((s32) ps + zr);
t = (*(s16 *) (*(s32 *) (arg0 + 0x20) + 0x18) * 9u) >> 9;
goto call;
b239:
t = (u32) (*(s16 *) (*(s32 *) (arg0 + 0x20) + 0x18) + *(s16 *) (*(s32 *) (ps + 0x1C) + 0x18)) >> 6;
/* fall through */
call:
if (((s32 (*)(s16 *, s16 *, s32))func_80180E34)(ca, cb, t) == 0) {
goto next;
}
__asm__ __volatile__("" :: "r"(pe));
return (s32) pe;
next:
count++;
ps += 0x10C;
pe += 0x10C;
} while (count < 0x60);
return 0;
}
s32 func_80180E34(s32 a0, s32 a1, u16 a2) {
s32 d = *(s16 *)(a1 + 2) - *(s16 *)(a0 + 6);
+22 -1
View File
@@ -7178,7 +7178,28 @@ extern void func_8012B21C(void *a0);
}
INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8017AE2C", func_80181BD4);
typedef struct { s32 w[8]; } MTX8L_80181BD4;
void func_80181BD4(s32 a0)
{
extern MTX8L_80181BD4 aD800AE620 __asm__("D_800AE620");
extern void RotMatrixY(s32 a0, void *a1);
extern void func_800484EC(s32 a0, s32 a1, s32 a2);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8012AD44(s32 *a0, s16 a1);
MTX8L_80181BD4 m;
s32 vel[3];
m = aD800AE620;
vel[1] = 0;
vel[0] = 0;
vel[2] = 0xFFF20000;
RotMatrixY(*(s16 *)(*(s32 *)(*(s32 *)(a0 + 0x64) + 0x20) + 0x12), &m);
func_800484EC((s32)&m, (s32)&vel[0], a0 + 0x10);
func_8002D4C8(0xB3F, 0);
func_8012AD44((s32 *)a0, 3);
}
extern s32 D_80192E94;
extern void (*D_80192EA4[])(void);
+15 -1
View File
@@ -8641,7 +8641,21 @@ void func_8018480C(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8017BEBC", func_801849F0);
#include "common.h"
extern void func_8012A828(s32, s32);
extern void func_8012B200(u8 *a0);
extern u8 D_801BE52C[];
void func_801849F0(void *arg0) {
func_8012A828((s32)arg0, (s32)&D_801BE52C);
*(s16 *)((char *)arg0 + 0x2) = 6;
*(s16 *)((char *)arg0 + 0x34) = 0;
*(s32 *)((char *)arg0 + 0xD0) = 0;
func_8012B200((u8 *)arg0);
}
/* func_80184A38 — ov_SC02_041 / ov_SC02_041_jr_8017BEBC.c MATCH (142 ins)
+58 -1
View File
@@ -4635,7 +4635,64 @@ INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8017BEBC", func_8017EF7
INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8017BEBC", func_8017EFF4);
INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8017BEBC", func_8017F180);
void func_8017F180(s32 param_1, s32 param_2) {
typedef struct { s32 w[8]; } Blk32;
extern u8 D_80078EAE;
extern u8 D_80078E78[];
extern u8 D_800D3918[];
extern s16 D_801152B0;
extern Blk32 D_800AE620;
extern s32 rand(void);
extern s32 func_8012B864(s32 a0);
extern s32 func_8012B70C(s16 *a0, s16 *a1);
extern void RotMatrixY(s32 a0, void *a1);
u8 *pb;
s32 pd;
s32 stack[6];
Blk32 m;
s32 q;
s32 r;
pb = D_80078E78;
stack[1] = 0;
stack[0] = 0;
if (D_80078EAE != 0) {
stack[2] = -0x60000;
} else {
stack[2] = -0x80000;
}
switch (param_2) {
case 0:
if (pb[0x36] != 0 && (rand() & 1) != 0) {
break;
}
case 1:
*(s16 *)(param_1 + 0xDC) = func_8012B864(param_1);
break;
case 2:
*(u16 *)(param_1 + 0xDC) += 0x800;
break;
case 3:
do {
r = rand() % 4096;
} while (*(s16 *)(param_1 + 0xDC) == (s16)r);
break;
case 4:
*(s16 *)(param_1 + 0xDC) = (func_8012B864(param_1) + 0x800) & 0xFFF;
break;
case 5:
pd = (s32)D_800D3918;
*(s16 *)&stack[4] = *(s32 *)(param_1 + 0x10) >> 8;
*(s16 *)&stack[5] = *(s32 *)(param_1 + 0x18) >> 8;
q = func_8012B70C((s16 *)pd, &D_801152B0);
*(s16 *)(param_1 + 0xDC) = (q * 2 - func_8012B70C((s16 *)&stack[4], (s16 *)pd)) & 0xFFF;
break;
}
m = *(Blk32 *)&D_800AE620;
RotMatrixY(*(s16 *)(param_1 + 0xDC), &m);
func_800484EC(&m, stack, param_1 + 0x10);
}
INCLUDE_ASM("asm/ov_SC04_006/nonmatchings/ov_SC04_006_jr_8017BEBC", func_8017F354);
+30 -1
View File
@@ -4785,7 +4785,36 @@ void func_8017EFDC(s32 a0) {
INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8017BEBC", func_8017F01C);
INCLUDE_ASM("asm/ov_SC04_007/nonmatchings/ov_SC04_007_jr_8017BEBC", func_8017F080);
extern s16 D_80126CAC;
extern s32 D_801274D8;
extern s32 D_801274DC;
extern s32 func_800132BC(s32 a0, s32 a1);
s32 func_8017F080(u16 *param_1) {
s32 x = *(u16 *)((s32)param_1 + 6);
if ((u32)(x - 0x31) < 2) {
return 1;
}
if ((x & 0xFFFF) == 0x33 || (x & 0xFFFF) == 0x27B) {
return 1;
}
{
register s32 ret __asm__("$4");
register s32 lim __asm__("$3");
s32 res;
s32 hi;
ret = func_800132BC((s32)&D_80126CAC, (s32)param_1);
__asm__ __volatile__("" : : "r"(ret));
lim = D_801274D8;
res = 0;
if (lim < ret) {
hi = D_801274DC;
res = ret < hi;
}
return res;
}
}
extern void (*D_80189860[])(void);
+14 -1
View File
@@ -8713,7 +8713,20 @@ special:
}
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80187574);
#include "common.h"
extern void (*D_801947E4[])(void);
extern void func_80187618(s32 *a0, u16 a1, u16 a2);
extern void func_801876A0(s32 a0);
extern u8 D_801EFD50;
void func_80187574(void *param_1)
{
D_801947E4[*(unsigned short *)((char *)param_1 + 2)]();
func_80187618((s32 *)&D_801EFD50, 0x160, 0x18F);
func_801876A0((s32)param_1);
}
+18 -2
View File
@@ -3860,7 +3860,15 @@ void func_8017CFEC(void *a0) {
}
INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8017AE2C", func_8017D028);
extern void func_8002931C(s32 a0);
s32 func_8017D028(s32 param_1) {
func_8002931C(0x30C0000);
*(s32 *)(param_1 + 0x28) = 0xA;
*(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1;
return 0;
}
extern void func_8016EE40(s32 a0, s32 a1, s32 a2);
void func_8017D06C(void) {
@@ -4118,7 +4126,15 @@ extern s32 func_8013CB84(void);
}
INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8017AE2C", func_8017D930);
extern s32 func_80029178(s32 arg);
s32 func_8017D930(void) {
if ((func_80029178(0x117) & 0xFF) != 0) {
return 0x74;
}
return 0x53;
}
extern void (*D_801822B0[])(void);
+21 -1
View File
@@ -6883,7 +6883,27 @@ void func_801826C8(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC05_001/nonmatchings/ov_SC05_001_jr_8017BEBC", func_801827A0);
extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3);
/* TU declares `extern void func_801827A0(s32);` at :6372 (caller discards the
* result), but the bytes return s32 (both early exits fill $v0 with 0, success
* falls through addiu $v0,$zero,1). §138: asm-label alias on the DEFINITION,
* so the existing caller-side decl stays untouched. */
s32 aF801827A0(s32 a0) __asm__("func_801827A0");
s32 aF801827A0(s32 a0) {
extern u8 D_801A8FA8[];
if ((*(s32 *)(a0 + 0xDC) & 1) != 0) {
return 0;
}
if (func_8012D5E4(a0, (s32)D_801A8FA8, (s32)(D_801A8FA8 + 8), 0x13) != 1) {
return 0;
}
*(s32 *)(a0 + 0xDC) |= 1;
return 1;
}
#include "common.h"
+40 -1
View File
@@ -5113,7 +5113,46 @@ void func_80181F84(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC05_005/nonmatchings/ov_SC05_005_jr_8017D898", func_80181FCC);
extern u8 D_80062BF4[];
extern s32 D_800D5880;
extern s32 D_800D58AC;
extern void func_80019064(void *a0);
extern void func_80149020(s32 *a0);
extern void func_80147324(s32 a0);
extern int func_801511E0(int a0);
extern s32 func_80012A60(s32 a0, s32 a1);
extern void func_80154274(s32 *a0, s32 a1);
extern void func_80154A74(s32 a0, s32 a1);
extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3);
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
extern void func_80146CA0(void *a0);
void func_80181FCC(s32 a0)
{
s32 s1;
s32 s0;
s1 = a0;
func_80019064(D_80062BF4);
func_80149020((s32 *)s1);
func_80147324(0x451);
func_801511E0(s1);
if ((s16)func_80012A60(*(s16 *)(*(s32 *)(s1 + 0x20) + 0x12), *(s16 *)(s1 + 0xF4)) >= 0x401) {
func_80154274((s32 *)s1, (s32)&D_800D5880);
} else {
func_80154274((s32 *)s1, (s32)&D_800D58AC);
}
s0 = 1;
func_80154A74(s1, 0x16);
func_80149020((s32 *)s1);
func_80146994(0x42, s1, 0, 0);
func_80146A6C(0x42, (void *)s1, 0x20, 0, 0, s0, 0);
func_80146A6C(0x42, (void *)s1, 0, 0, 0x20, s0, 0);
func_80146A6C(0x42, (void *)s1, -0x20, 0, 0, s0, 0);
func_80146A6C(0x42, (void *)s1, 0, 0, -0x20, s0, 0);
func_80146CA0((void *)s1);
}
extern void func_80149020(s32 *a0);
extern void func_80182194(s32 a0);
+16 -1
View File
@@ -3376,7 +3376,22 @@ void func_8017DA90(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8017C8D0", func_8017DC5C);
void func_8017DC5C(void) {
extern s16 D_8018C4DC;
extern s16 D_8018C4DA;
extern s16 D_8018C4D8;
extern void func_80146CA0(void *a0);
s16 sVar1;
sVar1 = D_8018C4DC + 8;
D_8018C4DC = sVar1;
D_8018C4DA = sVar1;
D_8018C4D8 = sVar1;
if (sVar1 >= 0x101) {
((void (*)(void))func_80146CA0)();
}
}
extern s16 D_8018C4D8;
extern s16 D_8018C4DA;
+18 -1
View File
@@ -5982,7 +5982,24 @@ void func_80180048(void *arg0) {
}
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_8017AE2C", func_801800BC);
void func_801800BC(void *arg0) {
extern void func_8012E8E0(s32, s32);
extern void func_8012E88C(s32);
extern void func_8012A828(s32, s32);
extern void func_80184990(s32);
extern s32 D_80191434;
extern short D_801C0CFC;
extern s32 D_801CE1C0;
extern s32 D_801D5210;
*(short *)((char *)arg0 + 0x2) = 3;
func_8012E8E0((s32)arg0, (s32)&D_80191434);
func_8012E88C((s32)arg0);
func_8012A828((s32)arg0, (s32)&D_801C0CFC);
func_80184990((s32)arg0);
D_801CE1C0 = D_801D5210;
}
extern void func_8012E88C(s32);
extern void func_8012A828(s32, s32);
+72 -3
View File
@@ -3456,7 +3456,43 @@ void func_80189BA0(void) {
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_80189DB4);
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_80189E68);
void func_80189E68(s32 a0, s32 a1)
{
extern s32 D_801ED7E4;
register s32 rv __asm__("$2");
s32 x = D_801ED7E4;
s32 y = a1;
s32 d;
if (y < a0) {
if (x < y) {
x = x + 0x5A0;
}
y = y + 0x5A0;
}
if (a0 >= x) {
rv = -1;
goto done;
}
if (x >= y) {
rv = -1;
goto done;
}
d = x - a0;
if (d < 16) {
rv = d * 2;
goto done;
}
d = y - x;
if (d < 16) {
rv = d * 2;
goto done;
}
rv = 31;
done:
__asm__("" :: "r"(rv));
}
extern s32 (*D_801E6758[])();
extern s32 D_801ED7E0;
@@ -4460,7 +4496,23 @@ void func_8018B430(void *a0) {
}
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018B498);
extern s32 func_801848AC(s32 arg0, s32 arg1);
extern u8 D_80078EBA;
void func_8018B498(void *a0) {
s32 v0;
*(s32 *)(*(s32 *)((s32)a0 + 0xCC) + 0xB0) = 2;
if (D_80078EBA == 3) {
v0 = 0;
} else {
v0 = func_801848AC(0x7, 0x13);
v0 = (0U < (u32)v0) ? 1 : 0;
}
if (v0 != 0) {
*(s16 *)((char *)a0 + 0x2) = 1;
}
}
extern s32 func_8012E57C(s32 a0, s32 a1);
extern s32 func_801848AC(s32 arg0, s32 arg1);
@@ -4745,7 +4797,24 @@ extern void func_80178CBC(s32, s32);
}
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_80188B1C", func_8018BC64);
extern s32 func_801848AC(s32 arg0, s32 arg1);
void func_8018BC64(void *arg0) {
register s32 *s0 asm("$16") = arg0;
s32 v0, v1;
*(s32 *)((u8 *)(*(s32 **)((u8 *)s0 + 0xCC)) + 0xB0) = 2;
v0 = func_801848AC(6, 0x12);
if (v0 != 0) {
v1 = 1;
} else {
v0 = func_801848AC(0x12, 0x15);
v1 = (v0 != 0) ? 2 : 0;
}
if (v1 != 0) {
func_8018BAE0(s0);
}
}
extern s32 func_801848AC(s32 arg0, s32 arg1);
+59 -2
View File
@@ -4717,7 +4717,49 @@ void func_8017DE24(s32 *a0) {
}
INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_8017DE8C);
extern void func_80147324(s32 a0);
extern void func_80147060(u8 *a0);
extern void func_80029124(s32 a0, s32 a1);
extern void func_80029514(s32 a0);
extern s32 func_80174650(s32 a0);
extern void func_80171A1C(u8 *a0);
extern s16 D_80126B3A;
extern s16 D_8011F9C8;
void func_8017DE8C(u8 *a0) {
u16 flags = *(u16 *)(a0 + 0xB8);
if (flags & 0x4000) {
func_80147324(0x445);
return;
}
if (!(flags & 0x8000)) {
return;
}
func_80147060(a0);
switch ((s16)(*(u16 *)&D_80126B3A - 2)) {
case 0:
func_80029124(0x16, 1);
func_80029514(0x85);
break;
case 1:
func_80029124(0x17, 1);
break;
case 2:
func_80029124(0x18, 1);
break;
case 3:
func_80029124(0x19, 1);
break;
case 4:
func_80029124(0x1A, 1);
break;
}
(*(s32 *)&D_8011F9C8) = 1;
func_80174650((s32)a0);
func_80171A1C(a0);
}
DEFINE_func_8017DF7C() /* dedup: shared engine-core @0x8017DF7C (src/shared) */
@@ -7779,7 +7821,22 @@ void func_80182B68(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_80182BB8);
void func_80182BB8(s32 arg0)
{
s32 i;
s32 *ptr;
i = 0;
ptr = (s32 *)((s32)arg0 + 0xCC);
do {
if (*ptr != 0) {
func_80183130((void *)*ptr);
}
i = i + 1;
ptr = ptr + 1;
} while (i < 4);
}
void func_80182C10(s32 a0) {
extern s32 func_800133BC(s32 a0, s32 a1);
+18 -1
View File
@@ -3398,7 +3398,24 @@ void func_8017BEF8(void *a0) {
DEFINE_func_8017C090() /* dedup: shared engine-core @0x8017C090 (src/shared) */
INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8017AE2C", func_8017C0A4);
extern void func_800D22E4(s32 a0);
void func_8017C0A4(s32 param_1) {
s32 var_v0;
*(s32 *)(param_1 + 0x14) = *(s32 *)(param_1 + 0x14) + 0xC000;
((void (*)(void))func_800D22E4)();
var_v0 = *(s32 *)(param_1 + 0x1C) - 1;
*(s32 *)(param_1 + 0x1C) = var_v0;
if (var_v0 == -1) {
*(s32 *)(param_1 + 0x2C) = 0;
*(s32 *)(param_1 + 0x10) = *(s32 *)(param_1 + 4);
*(s32 *)(param_1 + 0x18) = *(s32 *)(param_1 + 0xC);
func_80146E90(param_1, 0x14);
*(u16 *)(param_1 + 2) += 1;
}
}
INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8017AE2C", func_8017C120);
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+43 -2
View File
@@ -6712,7 +6712,27 @@ void func_8018B19C(s32 a0)
}
INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80184A28", func_8018B25C);
extern void func_8012A828(s32 a0, void *a1);
void func_8018B25C(s32 a0) {
extern u8 D_801DCF74[];
extern u8 D_801DD074[];
extern u8 D_801DD174[];
if (*(s16 *)(a0 + 0xFC) == 0) {
*(u16 *)(a0 + 2) = 1;
func_8012A828(a0, D_801DCF74);
if (*(s32 *)(a0 + 0xCC) != 0) {
func_8012A828(*(s32 *)(a0 + 0xCC), D_801DD074);
}
if (*(s32 *)(a0 + 0xD0) != 0) {
func_8012A828(*(s32 *)(a0 + 0xD0), D_801DD174);
}
} else {
*(s16 *)(a0 + 0xFC) = *(s16 *)(a0 + 0xFC) - 1;
}
}
@@ -7904,7 +7924,28 @@ extern void func_8018B9E8(void);
}
INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80184A28", func_8018CBDC);
extern void func_801319E0(s32 a0);
extern s32 func_8012BEE8(s32 a0);
extern s32 func_8012CBF4(s32 a0);
extern void func_80131E00(s32 a0, s32 a1);
extern void func_80131C78(s32 a0);
extern void func_8018B9E8(void);
void func_8018CBDC(s32 a0) {
if (*(s16 *)(a0 + 0xA) >= 0x10) {
func_801319E0(a0);
} else {
if (func_8012BEE8(a0) != 0) {
func_80131E00(a0, 6);
} else {
if (func_8012CBF4(a0) & 0x2000) {
func_80131C78(a0);
}
((void (*)(s32))func_8018B9E8)(a0);
}
}
}
extern s32 func_8012C354(s32 a0, s32 a1);
+7 -1
View File
@@ -4456,7 +4456,13 @@ void func_80182850(s32 *a0) {
INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8017EEC4", func_801828A0);
INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8017EEC4", func_80182938);
s32 func_80182938(u8 *param_1)
{
*(u16 *)(*(u8 **)(param_1 + 0x20) + 0x10) = 0;
*(u32 *)(param_1 + 0x1C) = 0xFF;
return 0xFF;
}
INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8017EEC4", func_80182950);
+9 -1
View File
@@ -3750,7 +3750,15 @@ void func_8017E584(s32 param_1) {
}
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_8017E610);
extern s16 D_80126B30;
extern void func_8017303C(void *);
extern u8 D_8019003C[];
void func_8017E610(void) {
func_8017303C((void *)D_8019003C);
D_80126B30 = 0;
}
extern s16 D_80126B30;
extern void func_8017303C(void *);
+44 -1
View File
@@ -3737,7 +3737,50 @@ void func_8018F194(s32 arg0) {
void func_8018F2BC(void) {
}
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8018D98C", func_8018F2C4);
extern void func_8012B23C();
extern void func_8012C218(void *a0);
extern void func_8012CBCC(s32 a0);
extern u8 *func_8012913C(s32 a0);
void func_8018F2C4(s32 param_1)
{
s32 iv;
u32 ret;
if (*(u16 *)(param_1 + 2) == 0) {
*(u8 *)(param_1 + 0xC0) = 1;
*(u16 *)(param_1 + 2) += 1;
func_8012B23C(param_1);
*(s32 *)(param_1 + 0x1C) = 1;
return;
}
*(s32 *)(param_1 + 0xDC) = *(s32 *)(param_1 + 0x14);
ret = ((s32 (*)(s32))func_8012CBCC)(param_1);
if (ret != 0 && (ret & 0x6000) != 0) {
if (--*(s32 *)(param_1 + 0x1C) == 0) {
goto kill;
}
*(s32 *)(param_1 + 0x14) = -*(s32 *)(param_1 + 0xDC) >> 2;
}
if ((++*(u16 *)(param_1 + 0xFC)) & 1) {
iv = (s32)func_8012913C(0x23);
if (iv != 0) {
*(u16 *)((u8 *)iv + 6) = *(u16 *)(param_1 + 6);
*(u16 *)((u8 *)iv + 0xA) = *(u16 *)(param_1 + 0xA);
*(u16 *)((u8 *)iv + 0xE) = *(u16 *)(param_1 + 0xE);
*(u32 *)((u8 *)iv + 0x18) = 0;
*(u32 *)((u8 *)iv + 0x14) = 0;
*(u32 *)((u8 *)iv + 0x10) = 0;
*(u16 *)((u8 *)iv + 0x34) = 0x3000;
}
}
if (*(s16 *)(param_1 + 0xA) < 0x20) {
return;
}
kill:
func_8012C218((void *)param_1);
}
extern s32 func_8004787C(s32 a0);
+19 -1
View File
@@ -5140,7 +5140,25 @@ void func_80180D74(void *a0) {
}
INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8017BEBC", func_80180E78);
extern s16 D_801AAD6E[];
extern void func_8012C218(s32 a0);
extern void func_8018088C(s32 a0);
extern void func_8012E014(s32 a0);
void func_80180E78(void *a0) {
if (D_801AAD6E[*(s16 *)((s32)a0 + 0x70) * 4] >= 0x400) {
func_8012C218((s32)a0);
return;
}
*(s16 *)((s32)a0 + 0xA) = D_801AAD6E[*(s16 *)((s32)a0 + 0x70) * 4] + *(u16 *)((s32)a0 + 0x8A);
func_8018088C((s32)a0);
if (*(s32 *)((s32)a0 + 0x3C) != *(s32 *)((s32)a0 + 0x8)) {
if (*(u8 *)((s32)a0 + 0x74) != 0) {
func_8012E014((s32)a0);
}
}
}
void func_80180F18(void) {
}
+21 -2
View File
@@ -5309,7 +5309,16 @@ void func_8017F478(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8017BEBC", func_8017F540);
extern s32 func_8012AD50(void *arg0);
void func_8017F540(s32 a0) {
if (*(s16 *)(a0 + 0x98) != 0) {
*(u16 *)(a0 + 0xE) -= 1;
} else {
func_8012AD50((void *)a0);
}
}
void func_8017F584(s32 a0) {
extern s32 func_80180FA4(s32, s32);
@@ -6238,7 +6247,17 @@ void func_8018090C(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8017BEBC", func_801809FC);
extern s32 func_80180F84(void);
extern s32 func_80181334(s32 a0, s32 a1);
extern s32 func_8012AD50(void *a0);
void func_801809FC(s32 a0)
{
if (func_80180F84() == 0x13 && func_80181334(a0, 1) != 0) {
func_8012AD50(a0);
}
}
extern s32 func_8012AD50(void*);
extern s32 func_80180F84(void);
+36 -1
View File
@@ -4951,7 +4951,42 @@ void func_8017EFA4(void) {
}
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8017EFC4);
void func_8017EFC4(s32 a0) {
extern void func_8012C194(void);
extern void func_8012CAE4(void *a0);
extern void func_8001CD9C(s32 a0, void *a1);
extern void func_800233CC(void *a0, unsigned short a1);
extern s32 rand(void);
extern s32 func_8012AD50(void *a0);
extern u32 D_801A7D0C[];
extern s32 D_80185C90[];
register s32 s2 __asm__("$18") = a0;
register s32 s0 __asm__("$16");
register s32 v0 __asm__("$2");
s32 s1;
s1 = (*(s16 *)(s2 + 0x70) << 6) + (s32)&D_801A7D0C;
v0 = ((s32 (*)(void))func_8012C194)();
__asm__ volatile("addu %0,%1,$0" : "=r"(s0) : "r"(v0));
*(s32 *)(s2 + 0x20) = v0;
if (v0 == 0) {
func_8012CAE4((void *)s2);
} else {
func_8001CD9C(s0, (void *)s1);
func_800233CC((void *)s1, 0x80);
*(s16 *)(s0 + 0x1E) = 0xC00;
*(s16 *)(s0 + 0x10) = 0x400;
*(s32 *)(s0 + 4) |= 0x50000000;
*(s16 *)(s0 + 0x1A) = 0;
*(s16 *)(s0 + 0x18) = 0;
*(s32 *)s1 = D_80185C90[rand() & 7];
*(s32 *)(s1 + 4) = 0;
func_8012AD50((void *)s2);
}
}
extern s32 func_8017F478(u8 *a0);
extern s32 func_8017F4A8(void *a0, void *a1);
+17 -1
View File
@@ -1884,7 +1884,23 @@ s32 func_800D1938(S800D1938 *arg0) {
return 0;
}
INCLUDE_ASM("asm/resident/nonmatchings/resident", func_800D1984);
s32 aF800D1984(u8 *arg0) __asm__("func_800D1984");
s32 aF800D1984(u8 *arg0) {
extern s32 func_800D19DC();
register s32 zr __asm__("$0");
s32 (*fp)(void);
u8 *p;
fp = *(s32 (**)(void)) (arg0 + 0xC);
if (fp() != 0) {
p = arg0 + zr;
p[0x14] = arg0[0x14] + 1;
return func_800D19DC(p);
}
return 0;
}
extern s8 D_800B9A10;
+5 -5
View File
@@ -59979,7 +59979,7 @@
extern int func_800CB0E8(int param); \
extern void func_801801EC(int param_1); \
extern void func_80180394(void *a0); \
extern void func_801803D0(void); \
extern void func_801803D0(); \
extern void func_801803B0(void); \
extern unsigned char D_801A73BC[]; \
extern void func_80180428(int param_1); \
@@ -65074,7 +65074,7 @@
extern int func_800CB0E8(int param); \
extern void func_801801EC(int param_1); \
extern void func_80180394(void *a0); \
extern void func_801803D0(void); \
extern void func_801803D0(); \
extern void func_801803B0(void); \
extern unsigned char D_801A73BC[]; \
extern void func_80180428(int param_1); \
@@ -90085,7 +90085,7 @@
}
#define DEFINE_func_801803B0() \
extern void func_801803D0(void); \
extern void func_801803D0(); \
void func_801803B0(void) { \
func_801803D0(); \
}
@@ -155377,7 +155377,7 @@
extern int func_800CB0E8(int param); \
extern void func_801801EC(int param_1); \
extern void func_80180394(void *a0); \
extern void func_801803D0(void); \
extern void func_801803D0(); \
extern void func_801803B0(void); \
extern unsigned char D_801A73BC[]; \
extern void func_80180428(int param_1); \
@@ -160472,7 +160472,7 @@
extern int func_800CB0E8(int param); \
extern void func_801801EC(int param_1); \
extern void func_80180394(void *a0); \
extern void func_801803D0(void); \
extern void func_801803D0(); \
extern void func_801803B0(void); \
extern unsigned char D_801A73BC[]; \
extern void func_80180428(int param_1); \