feat(decomp): ox wave bb overlays — 29 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-24 07:54:38 -06:00
parent 7f70a9f42f
commit f74fd335e0
21 changed files with 840 additions and 33 deletions
+21 -2
View File
@@ -3049,7 +3049,16 @@ void func_801A8738(s32 a0) {
}
INCLUDE_ASM("asm/md_SC07_004/nonmatchings/md_SC07_004", func_801A876C);
void func_801A876C(s32 arg0, s16 arg1, s32 arg2) {
if (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) < arg1) {
*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) = *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) + arg2;
}
if (*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x1A) < arg1) {
*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x1A) = *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x1A) + arg2;
}
}
void func_801A87C4(s32 a0, s16 a1, s32 a2) {
s16 varA;
@@ -3998,7 +4007,17 @@ s32 func_801AA4EC(s32 param_1, s32 param_2)
}
INCLUDE_ASM("asm/md_SC07_004/nonmatchings/md_SC07_004", func_801AA540);
void func_801AA540(void *arg0) {
extern u16 D_80126B96;
extern s16 D_80126B98;
extern s32 func_801AA584();
if (func_801AA584()) {
D_80126B98 = 100;
D_80126B96 |= 0x4000;
}
}
extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2);
+12 -1
View File
@@ -3001,7 +3001,18 @@ s32 *func_8017EFA8(s32 *ot, void *a1p, s32 idx, void *a3p, s32 tag) {
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017F2D4);
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017F730);
s32 func_8017F730(void) {
extern s32 func_800291B4(s32 arg);
extern s16 func_8014168C(s16 a0);
extern u8 D_8018347E;
extern u8 D_80183478[];
if ((func_800291B4(D_8018347E) & 0xFF) != 0) {
return (func_800291B4(D_80183478[func_8014168C(1)]) & 0xFF) == 0;
}
return 0;
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017F790);
+26 -1
View File
@@ -6039,7 +6039,32 @@ void func_801853C4(void) {
INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017CA80", func_801853CC);
INCLUDE_ASM("asm/ov_SC01_084/nonmatchings/ov_SC01_084_jr_8017CA80", func_8018544C);
void func_8018544C(s32 arg0)
{
s16 sp10[3];
s16 temp_v0;
s32 temp_a0;
temp_v0 = *(s16 *)(arg0 + 0xDC) + 0x10;
*(s16 *)(arg0 + 0xDC) = temp_v0;
temp_a0 = func_8004787C(temp_v0);
*(s16 *)(arg0 + 0xA) = *(s16 *)(arg0 + 0xDE) + (temp_a0 << 5 >> 12);
sp10[0] = *(u16 *)(arg0 + 6);
sp10[1] = *(u16 *)(arg0 + 0xA);
sp10[2] = *(u16 *)(arg0 + 0xE);
*(u16 *)(*(s32 *)(arg0 + 0xCC) + 8) = sp10[0];
*(u16 *)(*(s32 *)(arg0 + 0xCC) + 0xA) = sp10[1];
*(u16 *)(*(s32 *)(arg0 + 0xCC) + 0xC) = sp10[2];
func_80183DA4(sp10);
if (*(u16 *)(arg0 + 0x5C) & 1) {
if (*(u16 *)(arg0 + 0x5E) == 0x10) {
func_80184090(arg0);
} else {
*(u16 *)(arg0 + 0x5C) = *(u16 *)(arg0 + 0x5C) & ~1;
}
}
}
extern void func_8012AD80(s32 a0);
extern void func_80183DA4();
+16 -1
View File
@@ -7387,7 +7387,22 @@ void func_8018A0E4(s32 arg0)
}
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_8018A174);
void func_8018A174(s32 arg0) {
u8 *ptr;
s32 i;
s16 val;
i = 0;
val = 0x4000;
do {
ptr = func_8018A30C(arg0, i);
if (ptr != NULL) {
*(s16 *) (ptr + 0x34) = val;
}
i++;
} while (i < 4);
}
#include "common.h"
+17 -1
View File
@@ -9476,7 +9476,23 @@ void func_80187110(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8017AE2C", func_801871CC);
extern Block4 D_801EB524;
extern u8 D_801EB525;
extern u8 D_801EB526;
void func_801871CC(void) {
if (D_801EB524.b[0] < 0xc0) {
D_801EB524.b[0] += 4;
}
if (D_801EB525 < 0xc0) {
D_801EB525 += 4;
}
if (D_801EB526 < 0x20) {
D_801EB526 += 4;
}
}
extern s32 func_80186740(void);
void func_80187234(void) {
+14 -1
View File
@@ -6781,7 +6781,20 @@ void func_801815A8(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8017AE2C", func_8018163C);
extern void func_800291A0(s32 a0, s32 a1);
extern void func_8012C218(void *a0);
void func_8018163C(s32 arg0) {
short v;
v = *(short *)((s8 *)arg0 + 0xE) - 0x10;
*(short *)((s8 *)arg0 + 0xE) = v;
if (v < 0x345) {
func_800291A0(0xCC, 0x10);
func_8012C218((void *)arg0);
}
}
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8017AE2C", func_80181694);
+57 -1
View File
@@ -5421,7 +5421,63 @@ INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8017AE2C", func_8017FB4
INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8017AE2C", func_8017FBA0);
INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8017AE2C", func_8017FC6C);
#include "common.h"
typedef struct { s16 a, b, c, d; } SV4_FC6C;
extern s32 *D_80126B78;
extern u8 D_8018BE48[];
extern u8 D_8018BE50[];
extern void RotTransSV(void *a0, void *a1, void *a2);
#define SRM_FC6C(r0) __asm__ volatile ( \
"lw $12, 0( %0 );" \
"lw $13, 4( %0 );" \
"ctc2 $12, $0;" \
"ctc2 $13, $1;" \
"lw $12, 8( %0 );" \
"lw $13, 12( %0 );" \
"lw $14, 16( %0 );" \
"ctc2 $12, $2;" \
"ctc2 $13, $3;" \
"ctc2 $14, $4" \
: \
: "r"( r0 ) \
: "$12", "$13", "$14" )
#define STM_FC6C(r0) __asm__ volatile ( \
"lw $12, 20( %0 );" \
"lw $13, 24( %0 );" \
"ctc2 $12, $5;" \
"lw $14, 28( %0 );" \
"ctc2 $13, $6;" \
"ctc2 $14, $7" \
: \
: "r"( r0 ) \
: "$12", "$13", "$14" )
extern u8 *func_8017FD6C(s32 a0, s32 a1, s32 a2);
void func_8017FC6C(s32 s2)
{
SV4_FC6C sv0; /* sp+0x10 */
SV4_FC6C sv1; /* sp+0x18 */
s32 flag; /* sp+0x20 */
SRM_FC6C(*(s32 *)((char *)s2 + 0x20) + 0x34);
STM_FC6C(*(s32 *)((char *)s2 + 0x20) + 0x34);
RotTransSV((void *)D_8018BE48, &sv0, &flag);
RotTransSV((void *)D_8018BE50, &sv1, &flag);
func_8017FD6C(*(s16 *)(*(s32 *)((char *)s2 + 0x20) + 0x12), (s32)&sv0, *(s16 *)((char *)s2 + 0xDC));
func_8017FD6C(*(s16 *)(*(s32 *)((char *)s2 + 0x20) + 0x12), (s32)&sv1, *(s16 *)((char *)s2 + 0xDC));
*(u16 *)((char *)s2 + 0xDC) = *(u16 *)((char *)s2 + 0xDC) + 1;
if ((s16)*(u16 *)((char *)s2 + 0xDC) >= 3) {
*(u16 *)((char *)s2 + 0xDC) = 2;
}
}
extern u32 D_8018BD88[];
extern u8 *func_801290DC(s32 a0, u8 *a1);
+41 -1
View File
@@ -3776,7 +3776,47 @@ void func_8017F31C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017F324);
extern void (*D_80184EA8)(void);
extern s32 func_8012C194(void);
extern s32 func_80024054(u8 *, u8 *);
extern void func_8001CE28(void *, void *);
extern void func_8001CE68(void *, void *);
extern void func_800242D0(s32, void *, s32);
extern u16 D_800AF7BC;
extern u16 D_800AF7BE;
extern u8 D_801AD328[];
extern u8 D_801AD350[];
void func_8017F324(s32 arg0) {
u16 *bc;
s32 h;
s16 q;
func_8017F5A4();
h = func_8012C194();
if (h != 0) {
*(s32 *)(arg0 + 0xE0) = h;
func_80024054((u8 *)&D_80184EA8, (u8 *)&D_801AD328);
func_8001CE28((void *)h, (void *)&D_801AD328);
bc = &D_800AF7BC;
*(s16 *)(h + 8) = -*bc / 2 + 0x10;
*(s16 *)(h + 0xA) = -D_800AF7BE / 2 + 0x18;
*(s16 *)(h + 0x2C) = 1;
*(u8 *)(h + 0x27) = 1;
h = func_8012C194();
if (h != 0) {
q = (s16)((s16)*(u16 *)(arg0 + 0xFC) / 30);
*(s32 *)(arg0 + 0xDC) = h;
func_800242D0(q, (void *)&D_801AD350, 2);
func_8001CE68((void *)h, (void *)&D_801AD350);
*(s16 *)(h + 8) = -*bc / 2 + 0x18;
*(s16 *)(h + 0xA) = -D_800AF7BE / 2 + 0x20;
*(s16 *)(h + 0x2C) = 1;
*(u16 *)(arg0 + 2) += 1;
}
}
}
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017F4B4);
+72 -3
View File
@@ -5877,7 +5877,24 @@ void func_80185984(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_801859CC);
extern void func_800183E0(s32 a0);
extern s32 D_80190948[];
void func_801859CC(s32 arg0) {
u16 var;
var = *(u16 *)(arg0 + 0xFC);
var = var + 1;
*(u16 *)(arg0 + 0xFC) = var;
if ((s16)var < 9) {
func_800183E0(D_80190948[(s16)var >> 1]);
} else {
*(s16 *)(arg0 + 2) = 2;
*(u8 *)(arg0 + 0xC1) = 0;
*(u16 *)(arg0 + 0x5C) = 0x8000;
}
}
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80185A3C);
@@ -7863,7 +7880,37 @@ INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80189AF
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80189BF0);
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80189C90);
extern void func_800183E0(s32 a0);
extern s32 func_8012C588(s32 a0, s32 a1);
extern void (*D_80190918[])(void *);
void func_80189C90(s32 arg0)
{
u16 var;
s16 cmp;
s32 a0;
var = *(u16 *)(arg0 + 0xFC);
if ((s16)var < 13) {
func_800183E0((s32)D_80190918[(s16)var >> 1]);
cmp = *(s16 *)(arg0 + 0xFC);
if (cmp == 5) {
if (*(s16 *)(*(s32 *)(arg0 + 0x64) + 0xFC) == 0) {
a0 = func_8012C588(*(s16 *)(arg0 + 0xFE), arg0);
if (a0 != 0) {
*(s32 *)(a0 + 0x64) = *(s32 *)(arg0 + 0x64);
*(s32 *)(a0 + 4) = *(s32 *)(*(s32 *)(arg0 + 0x64) + 4);
*(s32 *)(a0 + 8) = *(s32 *)(*(s32 *)(arg0 + 0x64) + 8) - 0x40000;
*(s32 *)(a0 + 0xC) = *(s32 *)(*(s32 *)(arg0 + 0x64) + 0xC);
*(s16 *)(*(s32 *)(arg0 + 0x64) + 0xFC) = 8;
}
}
}
} else {
*(s16 *)(arg0 + 2) = 2;
}
}
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80189D8C);
@@ -7873,7 +7920,29 @@ INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80189ED
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80189F7C);
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_8018A078);
typedef struct {
u8 pad00[2]; /* 0x00 */
s16 unk2; /* 0x02 */
u8 pad04[2]; /* 0x04 */
s16 unk6; /* 0x06 */
u8 pad08[0x14];/* 0x08 */
s32 unk1C; /* 0x1C */
u8 pad20[0xDC];/* 0x20 */
u16 unkFC; /* 0xFC */
} Struct_8018A078;
extern s32 D_801909A4[];
extern void func_800183E0(s32 a0);
void func_8018A078(Struct_8018A078 *arg0)
{
func_800183E0(D_801909A4[((s16)arg0->unkFC >> 1) % 6]);
arg0->unk6 = arg0->unk6 + 8;
if (--arg0->unk1C == 0) {
arg0->unk2 = 2;
}
}
extern void func_800183E0(s32 a0);
extern s32 func_8012C588(s32 a0, s32 a1);
+25 -1
View File
@@ -4332,7 +4332,31 @@ INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_801831E
INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_801834A4);
INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8018364C);
extern s32 rand(void);
extern s32 func_801850D8();
extern u8 D_8018E47C[];
void func_8018364C(void *arg0) {
s16 sp20[3];
s32 i;
s32 r;
s32 ret;
sp20[2] = 0;
sp20[0] = 0;
sp20[1] = -0x120;
for (i = 0; i < 10; i++) {
r = rand();
ret = func_801850D8(6, (s16)(i * 0x200 + 0x3000 + r % 1024), 0, 0, sp20,
(s32)arg0, (s32)D_8018E47C, 0);
if (ret != 0) {
*(s16 *)(ret + 0x52) = i;
r = rand();
*(s16 *)(ret + 0x4C) = r % 8;
}
}
}
void func_8018373C(void *a0, s32 a1)
{
+64 -2
View File
@@ -7224,7 +7224,32 @@ s32 func_801826E8(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_80182808);
extern s32 func_80132E6C(s16 *a0);
extern s32 func_8012B864(s32 a0);
s32 func_80182808(s32 a0) {
s32 t;
s16 r;
s16 sd;
if (func_80132E6C((s16 *)a0) > 0x23FFF) {
return 0;
}
t = func_8012B864(a0);
r = t;
sd = t - (*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF);
if (sd < 0) {
sd = -sd;
}
if (sd < 0x180) {
if ((t << 16) == 0) {
r = t + 1;
}
return r;
}
return 0;
}
extern s32 func_8012C588(s32 a0, s32 a1);
extern void func_8002D4C8(s32 a0, s32 a1);
@@ -7591,7 +7616,44 @@ void func_80183008(s32 param_1) {
}
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_801830EC);
#include "common.h"
extern s32 func_80182564(s32 a0, s32 a1, s32 *a2);
extern void func_8012ADE4(u8 *a0);
extern void func_8012A8B0(u8 *a0, s32 a1);
extern void func_8012B23C(s32 a0);
extern void func_8012AD44(s32 *a0, s16 a1);
extern s32 func_8012BEE8(s32 a0);
extern s32 D_801A86E4;
extern s32 func_80182808(s32 a0);
extern void func_80181CE8(void *arg0, s16 a1);
extern void func_80182BA4(s32 a0, s32 a1);
void func_801830EC(s32 param_1) {
s32 out;
if (func_80182564(param_1, 0xFFFB0000, &out) == 1) {
func_8012ADE4((u8 *)param_1);
*(s32 *)(param_1 + 0x1C) = 8;
func_8012A8B0((u8 *)param_1, (s32)&D_801A86E4);
func_8012B23C(param_1);
func_8012AD44((s32 *)param_1, 1);
} else if (func_8012BEE8(param_1) != 0) {
*(s32 *)(param_1 + 0x1C) = 8;
func_8012A8B0((u8 *)param_1, (s32)&D_801A86E4);
func_8012B23C(param_1);
func_8012AD44((s32 *)param_1, 1);
} else {
if ((*(u16 *)(param_1 + 0x86) & 1) == 0) {
s16 r = func_80182808(param_1);
if (r != 0) {
func_80181CE8((void *)param_1, r);
}
}
}
func_80182BA4(param_1, 1);
}
#include "common.h"
+34 -1
View File
@@ -7610,7 +7610,40 @@ void func_80186908(void) {
}
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80186940);
#include "common.h"
extern u16 D_801EFD40;
extern s32 D_801EFC48;
extern s32 D_801EFD24;
extern s32 D_801EFD28;
extern s16 func_80186A20(s32 a0, s32 a1);
extern void func_80186A68(void);
extern void func_8016AA50(s32 param_1, s32 param_2);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_80186940(void *a0, s32 a1, s32 a2) {
s16 ret;
s16 a2s;
s32 msg;
a2s = a2;
D_801EFD40 |= 0x80;
ret = func_80186A20(D_801EFC48, (s16)a1);
*(u16 *)(D_801EFC48 + 0x60) = *(u16 *)(D_801EFC48 + 0x60) + ret;
if (a2s != 0) {
func_8016AA50((s32)a0, ret);
}
*(u16 *)&D_801EFD24 = 8;
if (ret != 0) {
func_80186A68();
msg = 0xBA9;
if (*(u16 *)&D_801EFD28 - *(s16 *)(D_801EFC48 + 0x60) > 0) {
msg = 0x906;
}
func_8002D4C8(msg, 0);
}
}
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80186A20);
+21 -1
View File
@@ -4541,7 +4541,27 @@ INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017FBC
INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017FC14);
INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017FC94);
extern void (*D_8018664C[])(void);
extern s32 func_80013328(s32 a0, s32 a1);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_8017FC94(s32 *p) {
extern s32 D_80126B58;
register s32 *q __asm__("$17");
D_8018664C[*(u16 *)((s32)p + 0x2)]();
q = &D_80126B58;
if (p[8] != 0) {
s16 v = ((s16 (*)(s32, s32))func_80013328)((s32)p + 4, (s32)(q + 1));
if (v >= 0xA01) {
*(s32 *)(p[8] + 4) |= 0x80000000;
} else {
func_8002D4C8(0xA76, (((0xA00 - v) * 0x7F) / 0xA00) & 0xFFFF);
*(s32 *)(p[8] + 4) &= 0x7FFFFFFF;
}
}
}
extern s32 func_8012AD50(void *a0);
void func_8017FD7C(s32 *a0) {
+54 -1
View File
@@ -3440,7 +3440,60 @@ INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_8017ECE
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_8017ED60);
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_8017EDD0);
extern void func_80129FF4(void);
extern void func_801805E0(void);
extern void func_8013C9C4(void *a0);
extern s16 func_8012A758(void);
extern void func_80015978(s32 a0, s32 *a1);
extern void func_80182CDC(void *a0, void *a1, s32 a2, s32 a3);
extern void func_8017F818(void *a0, s32 a1, s32 a2, s32 a3);
extern void func_8017F990();
extern s32 func_80171990(u8 *a0);
extern u8 D_8018A880[];
extern u16 D_8018A898[];
void func_8017EDD0(s32 arg0)
{
struct { s16 x, y; } pos;
s32 cnt;
s16 r;
s32 temp;
if ((*(s32 *)(arg0 + 0x200) >= 0x2BC) && (*(s16 *)(arg0 + 0x20E) == 0)) {
*(s16 *)(arg0 + 0x20E) = 1;
func_80129FF4();
func_801805E0();
cnt = 0;
func_8013C9C4(D_8018A880);
r = func_8012A758() - 0x200;
func_80015978(arg0 + 4, (s32 *)&pos);
pos.x = pos.x - 0xC0;
pos.y = pos.y + 0x80;
do {
func_80182CDC(&pos, D_8018A898, r, 2);
if ((cnt & 1) != 0) {
D_8018A898[1] = D_8018A898[1] + 0x30;
} else {
D_8018A898[1] = D_8018A898[1] - 0x30;
}
cnt++;
r = r + 0x63;
} while (cnt < 8);
}
func_8017F818((void *)arg0, *(s16 *)(arg0 + 0x20C), *(s32 *)(arg0 + 0x200), 0);
func_8017F990(arg0, 0);
temp = *(s32 *)(arg0 + 0x204) - 0x4000;
*(s32 *)(arg0 + 0x204) = temp;
if (temp <= 0xFFFF) {
*(s32 *)(arg0 + 0x204) = 0x10000;
}
*(s32 *)(arg0 + 0x200) += *(s16 *)(arg0 + 0x206);
if (*(s32 *)(arg0 + 0x200) >= 0x316) {
*(s32 *)(arg0 + 0x200) = 0x1E;
func_80171990((u8 *)arg0);
}
}
extern s32 func_80171990(u8*);
void func_8017EF54(void *a0) {
+20 -3
View File
@@ -5794,7 +5794,7 @@ void func_80182C30(void *param)
extern s32 func_80183020(void);
extern s32 func_80183020();
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_80171928(void *a0);
@@ -5828,7 +5828,7 @@ void func_80182CE0(void *a0) {
INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8017C8D0", func_80182D1C);
extern s32 func_80183020(void);
extern s32 func_80183020();
extern void func_8002D4C8(s32 a0, s32 a1);
extern s32 func_80171990(u8*);
@@ -5847,7 +5847,24 @@ INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8017C8D0", func_80182E6
INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8017C8D0", func_80182F44);
INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8017C8D0", func_80183020);
s32 func_80183020(s32 s0) {
s32 v0, v1;
s32 tmp;
v0 = *(s32 *)(s0 + 0x204);
v1 = *(s32 *)(v0 + 0x20);
if (v0 != 0) {
*(u16 *)(v1 + 0x12) = *(u16 *)(v1 + 0x12) + 0x80;
func_8012F14C(v1 + 0x34, s0 + 0x20C, &tmp);
func_80015954(&tmp, s0 + 0x4);
}
v1 = *(s32 *)(s0 + 0x20);
v0 = *(u16 *)(v1 + 0x12) + 0x80;
*(u16 *)(v1 + 0x12) = v0;
v0 = *(u16 *)(s0 + 0x208) + 0x80;
*(u16 *)(s0 + 0x208) = v0;
return !((s16)v0 ^ 0x800);
}
INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8017C8D0", func_801830B4);
+1 -1
View File
@@ -2767,7 +2767,7 @@ extern void func_80182B2C(void);
extern s32 D_8019A464;
extern void (*D_8019A47C[])(void);
extern void func_80182BF4(void *a0);
extern s32 func_80183020(void);
extern s32 func_80183020();
extern void func_80182C78(void *param);
extern s32 D_8019A484;
extern void func_80182CB8(void);
+52 -1
View File
@@ -5281,7 +5281,58 @@ extern void func_8002D4C8(s32 arg0, s32 arg1);
}
INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_80187AEC", func_8018B9D4);
extern u16 D_80126B96;
extern s16 D_80126B98;
void func_8018B9D4(s32 param_1)
{
struct { u16 a; u16 b; s16 c; u16 d; } t1;
struct { u16 a; u16 b; s16 c; u16 d; } t2;
s32 r1, r2, r3, r4;
s32 pad[2];
s32 var_ea;
s32 var_fe;
s32 var_a0;
s32 var_v0;
register s32 zr __asm__("$0");
func_8018BCC4((void *)param_1, 0, (u16 *)(param_1 + 0xE8), 0x81818);
func_8018BCC4((void *)param_1, 1, (u16 *)(param_1 + 0xE8), 0x204040);
t1.b = 0;
t1.a = 0;
t1.c = -*(u16 *)(param_1 + 0xE8);
t2.b = 0;
t2.a = 0;
t2.c = -*(u16 *)(param_1 + 0xEA);
(void)r1; (void)r2; (void)r3; (void)r4; (void)pad;
if (func_8012DEB8(param_1, &t1, &t2) != 0) {
D_80126B96 = 0x4018;
D_80126B98 = 0x96;
}
var_ea = *(s16 *)(param_1 + 0xEA);
var_fe = *(s16 *)(param_1 + 0xFE);
var_a0 = var_ea + zr;
if (var_ea < var_fe) {
var_v0 = var_a0 + 0x40;
*(s16 *)(param_1 + 0xEA) = var_v0;
if ((var_v0 << 16) >> 16 >= *(s16 *)(param_1 + 0xFE)) {
*(s16 *)(param_1 + 0xEA) = *(s16 *)(param_1 + 0xFE);
func_8018BC40(param_1);
}
} else {
var_v0 = *(u16 *)(param_1 + 0xE8) + 0x40;
*(u16 *)(param_1 + 0xE8) = var_v0;
if ((var_v0 << 16) >> 16 < *(s16 *)(param_1 + 0xFE)) {
return;
}
if (*(s32 *)(param_1 + 0xCC) != 0) {
func_80016714((void *)*(s32 *)(param_1 + 0xCC), 0x38);
}
*(s32 *)(*(s32 *)(param_1 + 0x64) + 0xD0) = 0;
func_8012C218((void *)param_1);
}
}
extern void func_80016714(void *a0, s32 a1);
extern void func_8012C218(void *a0);
+33 -1
View File
@@ -3838,7 +3838,39 @@ void func_80180AA8(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_80180B5C);
#include "common.h"
extern s32 func_80047948(s32 a0);
extern s32 D_80126B60;
s32 func_80180B5C(s32 arg0)
{
u16 v1 = *(u16 *)((s32)arg0 + 0x34);
switch (v1) {
case 0: {
u16 t = *(u16 *)((s32)arg0 + 0xFC);
t = t + 0x40;
*(u16 *)((s32)arg0 + 0xFC) = t;
if ((s16)t >= 0x400) {
*(u16 *)((s32)arg0 + 0x34) = *(u16 *)((s32)arg0 + 0x34) + 1;
}
*(s32 *)((s32)arg0 + 0x8) =
*(s32 *)((s32)arg0 + 0x8) -
((0x1000 - func_80047948(*(s16 *)((s32)arg0 + 0xFC))) << 7);
break;
}
case 1:
if (D_80126B60 != *(s32 *)((s32)arg0 + 0xDC)) {
*(u16 *)((s32)arg0 + 0xA) = *(u16 *)((s32)arg0 + 0xA) - 8;
}
break;
}
*(s32 *)((s32)arg0 + 0xDC) = D_80126B60;
return 0;
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_80180C34);
+97 -3
View File
@@ -4677,7 +4677,25 @@ void func_80181C04(s32 param_1)
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80181D40);
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80181D94);
extern void (*D_80190238[])(void);
extern void *func_80185C6C();
extern void func_801856A4(s32 *a0, s32 a1);
void func_80181D94(s32 param_1)
{
s32 iVar1;
s32 iVar2;
iVar1 = (s32)func_80185C6C(*(u16 *)(param_1 + 0x70) & 0xF, 0);
iVar2 = 0;
do {
func_801856A4((s32 *)iVar1, (s32)&D_80190238);
*(s8 *)(iVar1 + 6) = (s8)iVar2;
iVar2 = iVar2 + 1;
iVar1 = iVar1 + 8;
} while (iVar2 < 4);
}
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80181DF8);
@@ -8523,7 +8541,53 @@ void func_8018A5F0(s32 a0)
}
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_8018A6A4);
extern void func_8012BEE8(void);
void func_8018A6A4(s32 p) {
s32 o;
s32 tbl;
s32 lim1, lim2;
s16 t1, t2, lv1, lv2;
s32 pad[3];
(void)&pad;
o = *(s32 *)(p + 0x20);
if (*(u16 *)(p + 0x34) == 0) {
t1 = *(u16 *)(o + 0x1C) + 0x800;
tbl = *(s32 *)(p + 0xDC);
*(s16 *)(o + 0x1C) = t1;
*(s16 *)(o + 0x18) = t1;
lim1 = *(s16 *)tbl;
lv1 = lim1;
if (lim1 < t1) {
*(s16 *)(o + 0x1C) = lv1;
*(s16 *)(o + 0x18) = lv1;
}
t2 = *(u16 *)(o + 0x1A) + 0x800;
*(s16 *)(o + 0x1A) = t2;
lim2 = *(s16 *)(tbl + 2);
lv2 = lim2;
if (lim2 < t2) {
*(s16 *)(o + 0x1A) = lv2;
*(s32 *)(p + 0x1C) = *(s16 *)(tbl + 4);
*(u16 *)(p + 0x34) += 1;
}
} else if (((s32 (*)(void))func_8012BEE8)() != 0) {
t1 = *(u16 *)(o + 0x1C) + 0x400;
*(s16 *)(o + 0x1C) = t1;
*(s16 *)(o + 0x18) = t1;
if (t1 >= 0x7001) {
*(s16 *)(o + 0x1C) = 0x7000;
*(s16 *)(o + 0x18) = 0x7000;
}
t2 = *(u16 *)(o + 0x1A) + 0x100;
*(s16 *)(o + 0x1A) = t2;
if (t2 >= 0x7001) {
*(s16 *)(o + 0x1A) = 0x7000;
}
}
}
#include "common.h"
@@ -9680,7 +9744,37 @@ void func_8018BE14(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_8018BE68);
extern u8 D_80062BF4[];
extern void func_80019064(void *a0);
extern void func_80149020(s32 *a0);
extern void func_80147324(s32 a0);
extern int func_801511E0(int arg);
extern s32 func_80012A60(s32 a0, s32 a1);
extern M2C_UNK D_800D5880;
extern s32 D_800D58AC;
extern void func_80154274(s32 *a0, s32 a1);
extern void func_80154A74(s32 a0, s32 a1);
extern void func_80146CA0(void *a0);
void func_8018BE68(s32 param_1)
{
short ret;
func_80019064(D_80062BF4);
func_80149020((s32 *)param_1);
func_80147324(0x451);
func_801511E0(param_1);
ret = func_80012A60(*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12), *(s16 *)(param_1 + 0xF4));
if (ret > 0x400) {
func_80154274((s32 *)param_1, (s32)&D_800D5880);
} else {
func_80154274((s32 *)param_1, (s32)&D_800D58AC);
}
func_80154A74(param_1, 0x16);
func_80149020((s32 *)param_1);
func_80146CA0((void *)param_1);
}
#include "common.h"
+109 -4
View File
@@ -4040,13 +4040,57 @@ void func_80180CAC(void) {
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80180CCC);
extern s32 func_80180DAC(void);
extern s32 func_80180DAC();
void func_80180D8C(void) {
func_80180DAC();
}
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80180DAC);
typedef struct { s16 m0, m1, m2, m3; } Pos;
extern s16 D_80126940[4];
extern void func_80180F7C(s32 a0, void *a1);
s32 func_80180DAC(s32 a0)
{
Pos cur;
Pos target;
s32 ret;
s32 dist;
s16 clamped;
register s16 ang __asm__("$5");
register s32 sc __asm__("$2");
cur = *(Pos *) D_80126940;
ret = func_8012E544(0x306);
if (ret != 0) {
func_80015978(ret + 4, (s32 *) &target);
if (cur.m1 > -0x200) {
cur.m1 = -0x200;
}
func_80015978(ret + 4, (s32 *) &target);
target.m1 = cur.m1;
dist = func_80013294(&cur, &target) - 0x80;
clamped = dist;
if (clamped < 0) {
clamped = 0;
}
if (clamped > 0x380) {
clamped = 0x380;
}
ang = ((clamped * 111) / 896) - 0x70;
*(s16 *) (a0 + 0x30) = ang;
sc = ((clamped * 1000) / 896) + 0x190;
*(s32 *) (a0 + 0x14) = (s16) sc;
} else {
target = *(Pos *) D_80126940;
}
cur.m0 = (cur.m0 + target.m0) / 2;
cur.m2 = (cur.m2 + target.m2) / 2;
func_80180F7C(a0, &cur);
}
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80180F7C);
@@ -4225,7 +4269,63 @@ void func_80181CBC(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80181CF0);
#include "common.h"
extern s32 func_8004787C(s32 a0);
extern void func_8012C218(void *a0);
extern void func_801829F0(s32 *a0);
void func_80181CF0(void *a0)
{
s32 s0 = (s32)a0;
s32 v;
s32 p;
s32 q;
switch (*(u16 *)(s0 + 0x34)) {
case 0:
*(u16 *)(s0 + 0x100) = *(u16 *)(s0 + 0x100) + 0x40;
if (0x80 < *(s32 *)(s0 + 0xE0)) {
*(s32 *)(s0 + 0xE0) = *(s32 *)(s0 + 0xE0) - 0x10;
}
if (0x300 < *(s16 *)(*(s32 *)(s0 + 0x20) + 0x18)) {
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x18) =
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x18) - 0x40;
*(u16 *)(*(s32 *)(s0 + 0x20) + 0x1A) =
*(u16 *)(*(s32 *)(s0 + 0x20) + 0x18);
*(u16 *)(*(s32 *)(s0 + 0x20) + 0x1C) =
*(u16 *)(*(s32 *)(s0 + 0x20) + 0x18);
}
if (0x1800 < *(s16 *)(s0 + 0x100)) {
*(u16 *)(s0 + 0x34) = *(u16 *)(s0 + 0x34) + 1;
}
break;
case 1:
*(u16 *)(s0 + 0x100) = *(u16 *)(s0 + 0x100) + 0x80;
*(s32 *)(s0 + 0xE0) = *(s32 *)(s0 + 0xE0) - 4;
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x18) =
*(s16 *)(*(s32 *)(s0 + 0x20) + 0x18) - 0x10;
*(u16 *)(*(s32 *)(s0 + 0x20) + 0x1A) =
*(u16 *)(*(s32 *)(s0 + 0x20) + 0x18);
*(u16 *)(*(s32 *)(s0 + 0x20) + 0x1C) =
*(u16 *)(*(s32 *)(s0 + 0x20) + 0x18);
if (*(s32 *)(s0 + 0xE0) > 0) {
break;
}
func_8012C218((void *)s0);
return;
}
v = *(u16 *)(s0 + 0x104) + 0x30;
*(u16 *)(s0 + 0x104) = v;
v = func_8004787C((s16)v);
*(u16 *)(s0 + 0x102) = v >> 4;
func_801829F0((s32 *)s0);
p = *(s32 *)(s0 + 0x20);
*(u16 *)(p + 0x10) = *(u16 *)(p + 0x10) + *(u16 *)(s0 + 0x106);
q = *(s32 *)(s0 + 0x20);
*(u16 *)(q + 0x14) = *(u16 *)(q + 0x14) + *(u16 *)(s0 + 0x108);
}
extern void (*D_8018A428[])(void);
@@ -4388,7 +4488,12 @@ void func_80182270(void *a0) {
}
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_8018241C);
void func_8018241C(void *a0) {
s16 v = (s16)(*(u16 *)((s32)a0 + 0xE8) + 0x30);
*(u16 *)((s32)a0 + 0xE8) = v;
*(u16 *)((s32)a0 + 0x52) = func_8004787C(v) >> 8;
}
void func_80182464(void *a0) {
s32 v0 = *(u16 *)((s32)a0 + 0xA);
+54 -2
View File
@@ -4540,7 +4540,21 @@ void func_8017E4D0(s32 a0) {
DEFINE_func_8017E518() /* dedup: shared engine-core @0x8017E518 (src/shared) */
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8017E520);
extern void func_8017E5B8();
void func_8017E520(s32 a0) {
s16 t;
if (*(s16 *)((s32)a0 + 0xFC) < 6) {
t = *(u16 *)((s32)a0 + 0xFE) - 1;
*(u16 *)((s32)a0 + 0xFE) = t;
if (t == -1) {
func_8017E5B8(a0, (*(s16 *)((s32)a0 + 0xFC))++);
func_8017E5B8(a0, (*(s16 *)((s32)a0 + 0xFC))++);
*(u16 *)((s32)a0 + 0xFE) = 4;
}
}
}
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8017E5B8);
@@ -5033,7 +5047,45 @@ void func_8017FBB8(void) {
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8017FBD8);
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8017FC54);
extern void func_8017FD54(void *a0);
extern void func_8017FED8(u8 *a0);
extern void func_8017FF68(s32 a0, void *a1);
extern u8 D_801A814C[][0x44];
void func_8017FC54(u8 *arg0) {
s32 i;
u8 *p;
s16 kind;
s16 t;
for (i = 0; i < 0x40; i++) {
p = D_801A814C[i];
kind = *(s16 *)p;
switch (kind) {
case 0:
t = *(u16 *)(p + 2);
t = t - 1;
*(u16 *)(p + 2) = t;
if (t == -1) {
*(u16 *)(p + 2) = 0x14;
*(u16 *)p = *(u16 *)p + 1;
}
break;
case 1:
t = *(u16 *)(p + 2);
t = t - 1;
*(u16 *)(p + 2) = t;
if (t == -1) {
func_8017FD54(p);
} else {
func_8017FF68(arg0, p);
func_8017FED8(p);
}
break;
}
}
}
void func_8017FD54(void *param_1) {
extern s32 D_80185C70[];