feat(decomp): ox wave cf overlays — 50 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 01:09:05 -06:00
parent 5e2c15b454
commit 829361dd7b
17 changed files with 1480 additions and 53 deletions
+318 -7
View File
@@ -2,7 +2,47 @@
INCLUDE_ASM("asm/md_MAIN_031/nonmatchings/md_MAIN_031", func_800CAE0C);
INCLUDE_ASM("asm/md_MAIN_031/nonmatchings/md_MAIN_031", func_800CAE74);
extern s32 func_80029178(s32 arg0);
void func_800CAE74(s32 arg0, s32 arg1, s32 *arg2) {
s32 base;
s32 p;
s32 z;
s32 *iter;
s32 s;
extern void func_800183E0(s32 a0);
base = *(s32 *)(arg1 + 0xC);
*(u16 *)(arg1 + 0x2) = *(u16 *)(arg0 + 0x2);
*(u16 *)(arg1 + 0x4) = *(u16 *)(arg0 + 0x4);
*(u16 *)(arg1 + 0x6) = *(u16 *)(arg0 + 0x6);
*(u16 *)(arg1 + 0x8) = *(u16 *)(arg0 + 0x8);
*(u16 *)(arg1 + 0xA) = *(u16 *)(arg0 + 0xA);
p = base;
s = *(s32 *)(arg0 + 0xC);
do {
*(u8 *)p = *(u8 *)s;
p += 1;
s += 1;
} while (p < base + 0x1F);
s = *arg2;
if (s != 0) {
iter = arg2;
z = base;
do {
if ((func_80029178(s) & 0xFF) == 0) {
*(u8 *)z = 0;
*(u8 *)(z + 1) = 0;
}
iter += 1;
s = *iter;
z += 2;
} while (s != 0);
}
func_800183E0(arg1);
}
@@ -28,7 +68,7 @@ extern u16 D_801270C0;
extern void func_80154150(s32 a0, s32 a1);
extern void func_801655E4(s32 a0);
extern void func_800183E0(s32 a0);
extern void func_800CAE74(void *a0, void *a1, void *a2);
extern void func_800CAE74();
extern void func_80146E90(s32 *a0, s32 a1);
extern void func_80147324(s32 a0);
extern u8 D_800CC09C[];
@@ -57,7 +97,7 @@ void func_800CAFE4(u8 *a0) {
}
extern void func_800CB428(void *a0, void *a1, void *a2);
extern void func_800CB428();
extern void func_800CB6A0(void *a0, void *a1, void *a2, s32 a3);
extern void func_800CB964(void *a0, void *a1, void *a2);
extern void func_80147324(s32 a0);
@@ -150,11 +190,180 @@ void func_800CB288(s32 arg0)
INCLUDE_ASM("asm/md_MAIN_031/nonmatchings/md_MAIN_031", func_800CB3B4);
INCLUDE_ASM("asm/md_MAIN_031/nonmatchings/md_MAIN_031", func_800CB428);
void func_800CB428(void *a0) {
extern u32 func_80029204(s32 arg0);
extern void func_800CB5C8(void *a0, void *a1);
extern void func_800183E0(s32 a0);
extern u8 D_800CC0FC[];
extern u8 D_800CBF7C[];
extern u8 D_800CC11C[];
extern u8 D_800CBFA8[];
extern u8 D_800CBF3C[];
extern u8 D_800CBF5C[];
u16 sp10[3];
u16 *s0;
s32 *s1;
s32 id;
s32 flag;
s32 v;
id = func_80029204(4);
__asm__("" : "=r"(id) : "0"(id));
flag = 0;
s0 = (u16 *)D_800CC0FC;
s1 = (s32 *)D_800CBF7C;
loop1:
v = *s1;
if (v == 0) {
goto done1;
}
if (id == v) {
sp10[0] = *s0 & 0x1F;
sp10[1] = (*s0 >> 5) & 0x1F;
sp10[2] = (*s0 >> 10) & 0x1F;
func_800CB5C8(sp10, (u8 *)a0 + 0xBE);
*s0 = ((sp10[2] << 10 | sp10[1] << 5) | sp10[0]) | 0x8000;
flag = 1;
}
s0++;
s1++;
if (flag == 0) {
goto loop1;
}
done1:
flag = 0;
s0 = (u16 *)D_800CC11C;
s1 = (s32 *)D_800CBFA8;
loop2:
v = *s1;
if (v == 0) {
goto done2;
}
if (id == v) {
sp10[0] = *s0 & 0x1F;
sp10[1] = (*s0 >> 5) & 0x1F;
sp10[2] = (*s0 >> 10) & 0x1F;
func_800CB5C8(sp10, (u8 *)a0 + 0xBF);
*s0 = ((sp10[2] << 10 | sp10[1] << 5) | sp10[0]) | 0x8000;
flag = 1;
}
s0++;
s1++;
if (flag == 0) {
goto loop2;
}
done2:
func_800183E0((s32)&D_800CBF3C);
func_800183E0((s32)&D_800CBF5C);
}
INCLUDE_ASM("asm/md_MAIN_031/nonmatchings/md_MAIN_031", func_800CB5C8);
INCLUDE_ASM("asm/md_MAIN_031/nonmatchings/md_MAIN_031", func_800CB6A0);
typedef struct { s16 m[3][4]; } Mat_CB6A0;
#define SETROT_A(p) __asm__ __volatile__( \
"lw $12, 0(%0)\n" \
"lw $13, 4(%0)\n" \
"ctc2 $12, $0\n" \
"ctc2 $13, $1\n" \
"lw $12, 8(%0)\n" \
"lw $13, 12(%0)\n" \
"lw $14, 16(%0)\n" \
"ctc2 $12, $2\n" \
"ctc2 $13, $3\n" \
"ctc2 $14, $4\n" \
: : "r"(p) : "$12", "$13", "$14", "memory")
#define LDV_A(p) __asm__ __volatile__( \
"lwc2 $0, 0(%0)\n" \
"lwc2 $1, 4(%0)\n" \
: : "r"(p) : "memory")
#define MVMVA_A() __asm__ __volatile__( \
"nop\n" \
"nop\n" \
"mvmva 1, 0, 0, 3, 0\n" \
: : : "memory")
#define STSV_A(p) __asm__ __volatile__( \
"mfc2 $12, $9\n" \
"mfc2 $13, $10\n" \
"mfc2 $14, $11\n" \
"sh $12, 0(%0)\n" \
"sh $13, 2(%0)\n" \
"sh $14, 4(%0)\n" \
: : "r"(p) : "$12", "$13", "$14", "memory")
extern s32 func_80017DC4(void *a0, void *a1);
extern void func_80016ED4(void *a0);
extern u16 D_800CBFFC[];
extern u16 D_800CBFF8[];
void func_800CB6A0(void *a0, void *a1, void *a2, s32 a3) {
s16 mat[4][4];
u16 vin[3];
u16 vec[4][4];
u16 tc[8];
u8 tail[10];
register u16 *o0 __asm__("$4");
u16 *tp;
s32 idx;
u16 w;
idx = a3;
tp = (u16 *)D_800CBFFC + idx * 4;
func_80017DC4(a2, mat);
o0 = &vec[0][0];
vin[2] = 0;
vin[0] = *(u16 *)((u8 *)a1 + 0) - 0x30;
vin[1] = *(u16 *)((u8 *)a1 + 2) - 0x20;
SETROT_A(mat);
LDV_A(vin);
MVMVA_A();
STSV_A(o0);
vin[0] = *(u16 *)((u8 *)a1 + 0) + 0x30;
vin[1] = *(u16 *)((u8 *)a1 + 2) - 0x20;
SETROT_A(mat);
LDV_A(vin);
MVMVA_A();
STSV_A(vec[1]);
vin[0] = *(u16 *)((u8 *)a1 + 0) - 0x30;
vin[1] = *(u16 *)((u8 *)a1 + 2) + 0x20;
SETROT_A(mat);
LDV_A(vin);
MVMVA_A();
STSV_A(vec[2]);
vin[0] = *(u16 *)((u8 *)a1 + 0) + 0x30;
vin[1] = *(u16 *)((u8 *)a1 + 2) + 0x20;
SETROT_A(mat);
LDV_A(vin);
MVMVA_A();
STSV_A(vec[3]);
tc[0] = tp[0];
tc[1] = tp[1];
tc[2] = tp[2];
tc[3] = tp[1];
tc[4] = tp[0];
tc[5] = tp[3];
tc[6] = tp[2];
tc[7] = tp[3];
w = *(u16 *)((u8 *)D_800CBFF8 + idx * 2);
tail[2] = 0x80;
tail[1] = 0x80;
tail[0] = 0x80;
*(u32 *)(tail + 4) = 0x40000000;
tail[8] = w;
func_80016ED4(o0);
}
INCLUDE_ASM("asm/md_MAIN_031/nonmatchings/md_MAIN_031", func_800CB964);
@@ -174,9 +383,111 @@ void func_800CBBB8(void *arg0) {
}
INCLUDE_ASM("asm/md_MAIN_031/nonmatchings/md_MAIN_031", func_800CBC14);
void func_800CBC14(void *arg0) {
extern void func_80146578(void);
extern void func_8001CB00(s32, void *, s32, s32);
extern void func_80146DE8(s32 *, s32, s32, s32);
extern void func_80146CA0(void *);
extern void func_800CBEB8(void);
extern u8 D_800CC00C;
s32 v0;
v0 = ((s32 (*)(void))func_80146578)();
*(s32 *)((s32)arg0 + 0x20) = v0;
if (v0 != 0) {
func_8001CB00(v0,
(void *)((s32)&D_800CC00C + (*(s32 *)((s32)arg0 + 0x50)) * 12),
0x200, 0x100);
*(s16 *)(v0 + 0x2C) = 1;
*(u8 *)(v0 + 0x27) = 8;
*(u8 *)(v0 + 0x25) = 0x20;
*(u8 *)(v0 + 0x24) = 0x20;
*(s32 *)(v0 + 0x4) |= 0x40000000;
func_80146DE8((s32 *)arg0, 0, 0xFFFC0000, 0);
func_80146CA0(arg0);
} else {
((void (*)(void *))func_800CBEB8)(arg0);
}
}
typedef struct { char c[8]; } Blk8;
void func_800CBCD4(u8 *s0) {
extern s32 func_80012ABC(s32, s32, s32);
extern void func_80162F08(s32, s32, s32, s32);
extern void func_80013B64(s32, s32, s32);
extern void func_80162FC0(s32 *);
extern void func_800CBED8(s32 *);
extern void func_80146DE8(s32 *, s32, s32, s32);
extern s32 rand(void);
extern u8 D_800CC13C[];
extern u8 D_800CC140[];
s32 v0, v1, flag;
u8 *s1;
s32 i;
s32 sp10[3];
u8 *a2, *a3;
u16 w;
v0 = *(s32 *)(s0 + 0x54);
s1 = *(u32 **)(s0 + 0x20);
if (v0 == 0) {
v0 = func_80012ABC(*(s16 *)(s1 + 0x14), *(s16 *)(s0 + 0x60), 0xA);
*(s16 *)(s1 + 0x14) = v0;
func_80162F08(s0, 0, 0xC00, 0);
func_80013B64(*(s16 *)(s1 + 0x14), s0 + 0x24, sp10);
*(s32 *)(s0 + 0x10) = sp10[0];
*(s32 *)(s0 + 0x14) = sp10[1];
*(s32 *)(s0 + 0x18) = sp10[2];
func_80162FC0(s0);
func_800CBED8(s0);
flag = *(s32 *)(s0 + 0x28) >= (s32)0xFFFE0000;
if (flag) {
func_80146DE8(s0, 0, 0xFFFC0000, 0);
v0 = rand();
v0 = v0 & 0x1F;
v0 = v0 << 6;
v1 = *(u16 *)(s0 + 0x60);
v0 = v0 - 0xC00;
v1 = v1 - v0;
v1 = v1 & 0xFFF;
*(u16 *)(s0 + 0x60) = v1;
}
i = 0xF;
v0 = (s32)D_800CC13C;
a3 = (u8 *)v0 + 0x78;
a2 = (u8 *)v0 + 0x70;
do {
*(Blk8 *)a3 = *(Blk8 *)a2;
a3 -= 8;
i--;
a2 -= 8;
} while (i > 0);
*(u16 *)D_800CC13C = *(u16 *)(s0 + 0x6);
*(u16 *)(D_800CC13C + 2) = *(u16 *)(s0 + 0xA);
*(u16 *)D_800CC140 = *(u16 *)(s0 + 0xE);
*(u16 *)(D_800CC140 + 2) = *(u16 *)(s1 + 0x14);
} else {
v0 = *(s32 *)(s0 + 0x54);
v0 = (v0 - 1) << 4;
v1 = *(u16 *)(D_800CC13C + v0);
*(u16 *)(s0 + 0x6) = v1;
v0 = *(s32 *)(s0 + 0x54);
v0 = (v0 - 1) << 4;
v1 = *(u16 *)(D_800CC13C + 2 + v0);
*(u16 *)(s0 + 0xA) = v1;
v0 = *(s32 *)(s0 + 0x54);
v0 = (v0 - 1) << 4;
v1 = *(u16 *)(D_800CC140 + v0);
*(u16 *)(s0 + 0xE) = v1;
v0 = *(s32 *)(s0 + 0x54);
v0 = (v0 - 1) << 4;
w = *(u16 *)(D_800CC140 + 2 + v0);
*(u16 *)(s1 + 0x14) = w;
}
}
INCLUDE_ASM("asm/md_MAIN_031/nonmatchings/md_MAIN_031", func_800CBCD4);
extern void func_80162CCC(void);
void func_800CBEB8(void) {
+152 -6
View File
@@ -55,7 +55,42 @@ void func_800CAFD4(void *arg0) {
}
INCLUDE_ASM("asm/md_MAIN_036/nonmatchings/md_MAIN_036", func_800CB030);
void func_800CB030(s32 param_1) {
extern void func_8014659C(void);
extern void func_8001CA1C(void *a0, void *a1);
extern void func_80149374(s32 a0, s32 a1);
extern void func_80146E90(s32 *a0, s32 a1);
extern s32 func_80146CA0(void *a0);
extern void func_800CB5A8(void);
extern u8 D_800CBFA0[];
extern s32 D_800CC12C;
extern void (*D_800CC130[])(void);
s32 obj;
s32 p;
obj = *(s32 *)(param_1 + 0x4C);
p = ((s32 (*)(void))func_8014659C)();
*(s32 *)(param_1 + 0x20) = p;
if (p != 0) {
func_8001CA1C((void *)p, (void *)((s32)&D_800CBFA0 + *(s32 *)(param_1 + 0x50) * 12));
*(u32 *)(p + 4) |= 0x08000000;
func_80149374(obj, param_1 + 4);
*(u16 *)(param_1 + 0x60) = *(u16 *)(param_1 + 0xA);
*(u16 *)(param_1 + 0xA) = *(u16 *)(param_1 + 0xA) - 0x200;
*(s32 *)(param_1 + 0x58) = 0;
if (*(s32 *)(param_1 + 0x50) == 0) {
func_80146E90((s32 *)param_1, 0);
D_800CC130[0] = 0;
}
*(u16 *)(param_1 + 0x62) = 0;
D_800CC12C = 0x384;
func_80146CA0((void *)param_1);
} else {
((void (*)(s32))func_800CB5A8)(param_1);
}
}
extern void func_80147324(s32 a0);
extern s32 func_80146CA0(void *a0);
@@ -139,7 +174,42 @@ void func_800CB5D8(void *arg0) {
}
INCLUDE_ASM("asm/md_MAIN_036/nonmatchings/md_MAIN_036", func_800CB634);
extern void func_8014659C(void);
extern void func_8001CA1C(void *a0, void *a1);
extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3);
extern void func_80146E90(s32 *a0, s32 a1);
extern s32 func_80146CA0(void *a0);
extern void func_800CB774(void);
extern int rand(void);
typedef struct { s32 vx, vy, vz; } V3_800CB634; /* 12-byte entries: idx*12 addressing */
void func_800CB634(void *a0) {
extern V3_800CB634 D_800CBFA0[];
void *s1;
s32 vx;
s32 vy;
s32 vz;
s1 = (void *)((s32 (*)(void))func_8014659C)();
*(s32 *)((s32)a0 + 0x20) = (s32)s1;
if (s1 != NULL) {
func_8001CA1C(s1, &D_800CBFA0[*(s32 *)((s32)a0 + 0x50)]);
vx = ((rand() & 0x3f) - 0x20) << 15;
vy = ((rand() & 0x3f) - 0x20) << 15;
vz = -(((rand() & 0x1f) + 0x10) << 15);
func_80146DE8((s32 *)a0, vx, vz, vy);
func_80146E90((s32 *)a0, 0x40);
func_80146CA0(a0);
} else {
((void (*)(void *))func_800CB774)(a0);
}
}
INCLUDE_ASM("asm/md_MAIN_036/nonmatchings/md_MAIN_036", func_800CB708);
@@ -149,7 +219,40 @@ void func_800CB774(void) {
}
INCLUDE_ASM("asm/md_MAIN_036/nonmatchings/md_MAIN_036", func_800CB794);
void func_800CB794(s32 arg0) {
extern u8 D_801202A0[];
extern u8 D_80126720[];
extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3);
extern s32 func_8014C278(s32 a0, s32 a1, s32 a2);
extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3);
u8 *p;
s32 ptr;
s16 buf[4];
p = D_801202A0;
if (p < D_801202A0 + 0x6480) {
do {
if (func_8014C308(arg0, (s32)p, 0x33, 0x4000) != 0) {
if (func_8014C278(arg0, (s32)p, 0xC0) != 0) {
func_80015978((s32)(p + 4), (s32 *)buf);
buf[3] = 0;
if (func_8014C3D0((void *)arg0, (s32)p, 0x33, (s32)buf) != 0) {
if (*(u16 *)p == 0x219) {
ptr = *(s32 *)(p + 0x78);
if (ptr != 0) {
*(s16 *)(p + 0x60) = *(s16 *)(p + 0x76) * 0x1000 /
*(s16 *)(ptr + 0x30) + 1;
}
}
}
}
}
p += 0x10C;
} while (p < D_80126720);
}
}
extern u8 D_80078EC1;
extern void (*D_800CC01C[])(void);
@@ -274,7 +377,28 @@ void func_800CB910(s32 param_1) {
INCLUDE_ASM("asm/md_MAIN_036/nonmatchings/md_MAIN_036", func_800CBC14);
INCLUDE_ASM("asm/md_MAIN_036/nonmatchings/md_MAIN_036", func_800CBC90);
extern void func_800CBD2C(s32 param_1);
extern void func_800CBEB0(s32 a0);
extern void func_800CBF3C();
extern s32 func_80146E98(s32 a0);
extern void func_80146C3C();
void func_800CBC90(s32 arg0) {
u16 *rec = *(u16 **)(arg0 + 0x20);
rec[8] += 0x2D;
rec[9] += 0x2D;
rec[0xA] += 0x2D;
*(s32 *)(arg0 + 0x14) += 0x4000;
func_800CBD2C(arg0);
func_800CBEB0(arg0);
if (*(s32 *)(arg0 + 0x2C) == 0) {
func_800CBF3C();
}
if (func_80146E98(arg0) != 0) {
((void (*)(s32))func_80146C3C)(arg0);
}
}
extern void func_800CBD54(s32 param_1, s32 *param_2);
@@ -300,6 +424,28 @@ void func_800CBEB0(s32 a0) {
}
INCLUDE_ASM("asm/md_MAIN_036/nonmatchings/md_MAIN_036", func_800CBF24);
extern s32 D_800CC010;
void func_800CBF24(void) {
D_800CC010 = 0x40404040;
}
extern s32 D_800CC010;
extern u8 D_800CC011;
extern u8 D_800CC012;
extern u8 D_800CC013;
void func_800CBF3C(void) {
u8 c;
c = D_800CC013 - 2;
D_800CC013 = c;
if (c >= 0x81) {
D_800CC013 = 0;
}
c = D_800CC013;
(*(u8 *)&D_800CC010) = c;
D_800CC011 = c;
D_800CC012 = c;
}
INCLUDE_ASM("asm/md_MAIN_036/nonmatchings/md_MAIN_036", func_800CBF3C);
+142 -4
View File
@@ -12,7 +12,45 @@ void func_800CCB8C(void *a0) {
}
INCLUDE_ASM("asm/md_MAIN_043/nonmatchings/md_MAIN_043", func_800CCBCC);
void func_800CCBCC(s32 a0)
{
extern void func_80148038(s32 a0, s32 a1);
extern void func_80147460(s32 a0);
extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
extern void func_801473EC(s32 *a0);
extern void func_8014ED28();
extern void func_80146D90(s32 a0);
extern void func_8016151C(void *a0);
extern s32 func_801725A4(u8 *a0);
extern void func_801477E8(s32 *a0, s32 a1);
extern void func_80154274(s32 *a0, s32 a1);
extern void func_80146CA0(void *a0);
extern void func_800CCEAC(void *a0);
extern u8 D_800D53C0[];
func_80148038(a0, 0x1A000);
func_80147460(a0);
func_80147AD4(a0, 0, 0, 0);
func_801473EC((s32 *)a0);
{
register s32 ret __asm__("$2");
func_8014ED28(a0);
__asm__ __volatile__("" : "=r"(ret));
if (ret != 0) {
func_80146D90(a0);
}
}
func_8016151C((void *)a0);
func_801725A4((u8 *)a0);
if (*(s32 *)(a0 + 0x34) > 0) {
func_801477E8((s32 *)a0, 0x40000);
func_80154274((s32 *)a0, (s32)D_800D53C0);
func_80146CA0((void *)a0);
} else {
func_800CCEAC((void *)a0);
}
}
void func_800CCC88(void *a0) {
extern void func_8014ED28(s32);
@@ -36,7 +74,38 @@ void func_800CCC88(void *a0) {
}
INCLUDE_ASM("asm/md_MAIN_043/nonmatchings/md_MAIN_043", func_800CCD04);
void func_800CCD04(void *a0) {
extern void func_80148038(s32 a0, s32 a1);
extern void func_80147460(s32 a0);
extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3);
extern void func_801473EC(s32 *a0);
extern void func_8014ED28(s32);
extern void func_80146D90(s32 a0);
extern void func_80161450(void *a0);
extern void func_80146E90(s32 *a0, s32 a1);
extern void func_80146CA0(void *a0);
extern s32 func_801725A4(u8 *a0);
s32 s1;
func_80148038((s32)a0, 0x1A000);
func_80147460((s32)a0);
func_80147AD4((s32)a0, 0, 0, 0);
func_801473EC((s32 *)a0);
if (((int (*)(int))func_8014ED28)((s32)a0) != 0) {
func_80146D90((s32)a0);
}
s1 = ((int (*)(int))func_80161450)(a0);
if ((s1 & 5) != 0) {
func_800CCE24(a0);
func_80146E90((s32 *)a0, 0x10);
func_80146CA0(a0);
}
if (s1 == 0) {
func_801725A4((u8 *)a0);
func_800CCEAC(a0);
}
}
INCLUDE_ASM("asm/md_MAIN_043/nonmatchings/md_MAIN_043", func_800CCDC4);
@@ -73,7 +142,52 @@ void func_800CCF14(void *a0) {
}
INCLUDE_ASM("asm/md_MAIN_043/nonmatchings/md_MAIN_043", func_800CCF50);
void func_800CCF50(void *a0) {
extern void func_80146578(void);
extern void func_8001CD50(s32 a0, s32 a1);
extern void func_80149374(s32 a0, s32 a1);
extern void func_80146E90(s32 *a0, s32 a1);
extern void func_800CD1F4(void *a0, void *a1);
extern void func_800CD258(void *a0, void *a1);
extern void func_800CD27C(s32 a0);
extern void func_80146CA0(void *);
extern void func_800CD1D4(void);
extern u8 D_800CD704[];
extern u8 D_800CD744[];
register s32 s0 __asm__("$16");
register s32 s1 __asm__("$17");
register s32 s2 __asm__("$18");
register s32 s3 __asm__("$19");
s1 = (s32)a0;
s2 = *(s32 *)(s1 + 0x4C);
s0 = (s32)((void *(*)(void))func_80146578)();
s3 = (s32)&D_800CD704;
*(s32 *)(s1 + 0x20) = s0;
if (s0 != 0) {
func_8001CD50(s0, s3);
*(s32 *)(s0 + 0x34) = (s32)&D_800CD744;
*(s32 *)(s0 + 4) |= 0x50000000;
*(u16 *)(s0 + 0x1C) = 0;
func_80149374(s2, s1 + 4);
*(u16 *)(s0 + 0x10) = *(u16 *)(s2 + 0x100);
*(u16 *)(s0 + 0x14) = *(u16 *)(s2 + 0x104);
*(u16 *)(s0 + 0x12) = *(u16 *)(*(s32 *)(s2 + 0x20) + 0x12);
func_80146E90((s32 *)s1, 0x10);
*(u16 *)(s1 + 0x60) = 0;
*(u16 *)(s1 + 0x62) = 0;
func_800CD1F4((void *)s1, (void *)s3);
func_800CD258((void *)s1, (void *)s3);
func_800CD27C(s1);
func_80146CA0((void *)s1);
} else {
((void (*)(void *))func_800CD1D4)((void *)s1);
}
}
INCLUDE_ASM("asm/md_MAIN_043/nonmatchings/md_MAIN_043", func_800CD054);
@@ -128,7 +242,31 @@ void func_800CD27C(s32 a0) {
}
INCLUDE_ASM("asm/md_MAIN_043/nonmatchings/md_MAIN_043", func_800CD31C);
extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3);
extern s32 func_8014C278(s32 a0, s32 a1, s32 a2);
extern void func_80015978(s32 a0, s32 *a1);
extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3);
extern u8 D_801202A0[];
void func_800CD31C(s32 arg0) {
u8 sp10[8];
u8 *p = D_801202A0;
if (p < D_801202A0 + 0x6480) {
u8 *end = p + 0x6480;
do {
if (func_8014C308(arg0, (s32)p, 0x22, 0)) {
if (func_8014C278(arg0, (s32)p, 0x80)) {
func_80015978((s32)(p + 4), (s32 *)sp10);
*(u16 *)(sp10 + 6) = 0;
func_8014C3A4((void *)arg0, (s32)p, 0x22, (s32 *)sp10);
}
}
p += 0x10C;
} while (p < end);
}
}
+44 -1
View File
@@ -5765,7 +5765,50 @@ void func_8017C0DC(void) {
}
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_801789AC", func_8017C120);
void func_8017C120(void) {
extern s32 D_80185AD4;
extern u8 D_80185AE4[];
extern s16 D_801857EC;
extern s16 D_801857E8;
extern s16 D_801857F4;
extern u16 D_80115118;
extern s16 D_8011512C;
extern s32 D_80182638;
extern s32 D_801825A0;
extern s16 D_80115126;
extern s32 D_80115130;
extern s32 D_80115134;
extern u8 D_80115138[];
extern s32 D_801826E4[];
s16 i;
s32 *p;
D_80185AD4 = 0;
for (i = 0; i < 8; i++) {
D_80185AE4[i] = 0xFF;
}
D_801857E8 = 0;
D_801857F4 = 0;
D_80115118 = 0;
if (D_801857EC == 0) {
D_8011512C = 0;
D_80182638 = D_801825A0;
} else {
D_8011512C = 9;
D_80182638 = 0x1A;
}
p = &D_80115130;
*p = 0;
D_80115134 = D_801826E4[D_80115126];
for (i = 0; i < 6; i++) {
s16 *q = (s16 *)p + 20;
D_80115138[i] = *(u16 *)(D_80115134 + i * 32);
q[i] = *(u16 *)(D_80115134 + i * 32 + 2);
}
}
/* func_8017C24C @ 0x8017C24C -- ov_MAIN_012 (7 ins).
*
+13 -1
View File
@@ -3242,7 +3242,19 @@ s32 func_80181380(void) {
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8018057C", func_8018144C);
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8018057C", func_80181600);
void func_80181600(void)
{
extern s16 func_801816FC(s32);
if (func_801816FC(0xD) >= 3 && func_801816FC(0x12) >= 3 && func_801816FC(0x1B) >= 3) {
u32 dist;
dist = func_80029504();
if (dist < 0x28A) {
func_80029514(0x28A);
}
}
}
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8018057C", func_80181688);
+85 -4
View File
@@ -4754,7 +4754,40 @@ void func_8017DE4C(void) {
}
INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8017AE2C", func_8017DE74);
extern void func_8012A018(s32 a0, s32 a1);
extern void func_8012A094(s32 a0);
extern void func_8017E008(void *a0);
extern Blk8 D_80126940;
extern Blk8 D_801274E8;
extern u8 D_80126948[];
extern s32 D_80126954;
extern s32 D_8012695C;
extern s16 D_80126968;
extern s16 D_8012696A;
extern s16 D_8012696C;
extern s16 D_80126976;
extern s16 D_80126978;
extern s16 D_8012697A;
void func_8017DE74(void) {
register s32 *s0;
D_80126954 = 0x190;
D_8012695C = 0x258;
D_80126968 = 0x9F;
D_8012696A = 0x600;
D_8012696C = 0;
D_80126976 = 0;
D_80126978 = -0x50;
D_8012697A = 0;
func_8012A018((s32)func_8017E008, 0);
D_801274E8 = D_80126940;
s0 = (s32 *)D_80126948;
func_8012A094((s32)s0);
func_8017E008(s0);
}
INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8017AE2C", func_8017DF40);
@@ -4950,7 +4983,34 @@ void func_8017EE40(s32 *a0)
}
INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8017AE2C", func_8017EE8C);
extern void func_8017EDDC(void);
extern u16 D_80188B60[];
extern u16 D_80188B62[];
extern u16 D_80188B64[];
extern s32 func_801788B8(s32 a0, s32 a1);
void func_8017EE8C(s32 arg0) {
s32 a1;
__asm__ __volatile__("" : "=r"(a1) : "0"(arg0));
if (*(s16 *)(a1 + 0xFC) != 0) {
s32 idx;
idx = *(s16 *)(a1 + 0x70) * 4;
*(u16 *)(a1 + 6) -= *(u16 *)(&D_80188B60[0] + idx);
idx = *(s16 *)(a1 + 0x70) * 4;
*(u16 *)(a1 + 0xA) -= *(u16 *)(&D_80188B62[0] + idx);
idx = *(s16 *)(a1 + 0x70) * 4;
*(u16 *)(a1 + 0xE) -= *(u16 *)(&D_80188B64[0] + idx);
*(u16 *)(a1 + 0xFC) -= 1;
*(u16 *)(a1 + 0x52) ^= 3;
} else {
*(s16 *)(a1 + 2) = 1;
*(s16 *)(a1 + 0xFC) = 0;
*(s16 *)(a1 + 0x52) = 0;
func_801788B8(a1, (s32)func_8017EDDC);
}
}
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
@@ -5210,7 +5270,17 @@ void func_8017F508(void *a0) {
INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8017AE2C", func_8017F544);
INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8017AE2C", func_8017F5B8);
extern s32 func_80178970();
extern void func_80178D18();
extern void func_8017F29C();
void func_8017F5B8(s32 a0) {
if (((s32 (*)(s32))func_80178970)(a0) != 0) {
((void (*)(s32))func_80178D18)(a0);
func_8017F29C(a0);
}
}
void func_8017F5F8(void) {
}
@@ -5257,7 +5327,18 @@ void func_8017F704(s32 arg0)
}
INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8017AE2C", func_8017F7FC);
extern int func_80178970(void);
extern void func_80178D18(void);
extern s16 D_801B3010;
void func_8017F7FC(s32 arg0) {
if ((*(s16 *)(arg0 + 0x70) == 0) && (*(u16 *)(arg0 + 0x34) == 0) &&
(func_80178970() != 0) && (D_801B3010 == 0)) {
((void (*)(s32))func_80178D18)(arg0);
*(u16 *)(arg0 + 0x34) += 1;
}
}
extern s32 func_80029504(void);
+30 -2
View File
@@ -4554,7 +4554,26 @@ void func_8017F23C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8017BEBC", func_8017F2A4);
// @class: plumbing
// scan 0x60 entity records (stride 0x10C) at D_801202A0; flag the one whose u16
// id matches arg0 by setting 0x80000000 in the word at +4 of its +0x20 pointer
void func_8017F2A4(s32 arg0) {
extern u8 D_801202A0[];
u8 *rec;
s32 ptr;
rec = D_801202A0;
if (rec < D_801202A0 + 0x6480) {
do {
if (*(u16 *)rec == (arg0 & 0xFFFF)) {
ptr = *(s32 *)(rec + 0x20);
*(s32 *)(ptr + 4) |= 0x80000000;
}
rec += 0x10C;
} while (rec < D_801202A0 + 0x6480);
}
}
INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8017BEBC", func_8017F308);
@@ -4981,7 +5000,16 @@ INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8017BEBC", func_801800D
INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8017BEBC", func_80180148);
INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8017BEBC", func_801801D4);
extern void (*D_80193AA4[10])(struct Entry_8016E95C *);
void func_801801D4(s32 arg0, s32 arg1) {
u16 *src;
if (arg0 != 0) {
src = (u16 *)&D_80193AA4[arg1];
*(u16 *)(arg0 + 0x28) = src[0];
*(u16 *)(arg0 + 0x2A) = src[1];
}
}
INCLUDE_ASM("asm/ov_SC03_096/nonmatchings/ov_SC03_096_jr_8017BEBC", func_80180208);
+35 -1
View File
@@ -4042,7 +4042,41 @@ s32 func_80184F30(s32 a0, s16 a1) {
INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80182B9C", func_80184FB0);
INCLUDE_ASM("asm/ov_SC03_097/nonmatchings/ov_SC03_097_jr_80182B9C", func_80185054);
extern void func_801292C8(u8 *a0);
void func_80185054(s32 a0) {
u32 q;
u32 w;
s32 s1;
s32 t;
s1 = *(s32 *)(a0 + 0x20);
if (*(u16 *)(a0 + 2) == 0) {
w = func_8004787C(*(s32 *)(a0 + 0x1C) << 6);
*(s16 *)(s1 + 0x18) = (w * 3 + (w * 3 >> 31)) >> 1;
*(s16 *)(s1 + 0x1A) = (w * 3 + (w * 3 >> 31)) >> 1;
*(s32 *)(a0 + 0x1C) += 1;
if (*(s32 *)(a0 + 0x1C) < 0x10) {
return;
}
*(u16 *)(a0 + 2) += 1;
*(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) * 2 - 1;
} else {
t = (s16)func_8004787C(*(s32 *)(a0 + 0x1C) << 5);
q = *(s32 *)(a0 + 0x2C) * t;
*(s16 *)(s1 + 0x18) = ((u32)(t * 3) + ((u32)(t * 3) >> 31)) >> 1;
*(s16 *)(s1 + 0x1A) = ((u32)(t * 3) + ((u32)(t * 3) >> 31)) >> 1;
*(u8 *)(s1 + 0x24) = q >> 12;
*(u8 *)(s1 + 0x25) = q >> 12;
*(u8 *)(s1 + 0x26) = q >> 12;
*(s32 *)(a0 + 0x1C) -= 1;
if (*(s32 *)(a0 + 0x1C) != 0) {
return;
}
func_801292C8((u8 *)a0);
}
}
extern s32 func_80180E14(void);
void func_8018515C(void) {
+72 -4
View File
@@ -3656,7 +3656,26 @@ INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8017EC58", func_80180B8
INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8017EC58", func_80180D4C);
INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8017EC58", func_80180FB4);
extern void (*D_80188B10[8])(int *);
void func_80180FB4(s32 param_1) {
u16 *s0;
u16 *p;
s0 = (u16 *)param_1;
D_80188B10[s0[1]]((int *)param_1);
if (*(s16 *)((s16 *)s0 + 0x85) == 0) {
p = *(u16 **)(s0 + 0x66);
p[4] = s0[3];
p[5] = s0[5];
p[6] = s0[7];
p[4] += 8;
p[5] += 0x88;
p[6] += 8;
}
}
extern void (*D_80188B60[])(void);
@@ -3749,7 +3768,14 @@ void func_801814D0(int param_1)
}
INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8017EC58", func_8018151C);
extern s32 func_8012AD50(void *a0);
void func_8018151C(u8 *a0) {
*(u16 *)(a0 + 0xFC) = 1;
*(u16 *)(a0 + 0x72) |= 0x1000;
((void (*)(void))func_8012AD50)();
}
extern void func_80181574(s32 a0, s32 a1, s32 a2);
void func_8018154C(void * arg0) {
@@ -5071,7 +5097,25 @@ void func_80183624(s32 a0)
}
INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8017EC58", func_80183710);
extern s32 func_8004787C(s32 a0);
extern void func_8012E688(s32, s32, s32);
void func_80183710(s32 a0)
{
s32 val;
*(u16 *)(a0 + 0xFC) += 0x20;
*(s16 *)(a0 + 0xA) = *(u16 *)(a0 + 0x100);
val = func_8004787C(*(s16 *)(a0 + 0xFC));
*(s32 *)(a0 + 0x8) -= val << 10;
if (*(s16 *)(a0 + 0xFC) >= 0x400) {
*(s16 *)(a0 + 2) = 5;
*(s16 *)(a0 + 0xFE) = 4;
func_8012E688(a0, 0x98F, 0);
}
}
extern s32 D_801B1C70;
extern s32 D_801B1C78;
@@ -5176,7 +5220,31 @@ void func_80183B40(s32 param_1) {
}
INCLUDE_ASM("asm/ov_SC03_111/nonmatchings/ov_SC03_111_jr_8017EC58", func_80183BC0);
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
extern s32 rand(void);
void func_80183BC0(void *a0)
{
extern s32 func_8012BE54(s32 a0);
s32 s0 = (s32)a0;
s32 v0;
s32 v1;
s32 s1;
v0 = func_8012BE54(s0);
if (v0 <= 0x23FFFF) {
v0 = *(s32 *)(s0 + 0x1C) - 1;
*(s32 *)(s0 + 0x1C) = v0;
if (v0 == 0) {
s1 = func_8012C658(0x1EA, 0xF, s0);
*(s32 *)(s0 + 0x1C) = (rand() & 0x1F) + 0x2D;
if ((*(s16 *)(s0 + 0x70) == 0x18) && (s1 != 0)) {
*(u16 *)(*(s32 *)(s1 + 0x20) + 0x12) = 0x400;
}
}
}
}
extern int func_8012C658(int arg0, int arg1, int arg2);
+153 -7
View File
@@ -5049,7 +5049,30 @@ void func_8017F5A0(s32 a0) {
INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8017BEBC", func_8017F5E0);
INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8017BEBC", func_8017F644);
extern s32 D_801274D8;
extern s32 D_801274DC;
extern s16 D_80126CAC;
extern s32 func_800132BC(s32 a0, s32 a1);
s32 func_8017F644(s32 param_1)
{
s32 iVar1;
register s32 uVar2 __asm__("$2");
if (*(u16 *) (param_1 + 6) == 0x31 || *(u16 *) (param_1 + 6) == 0x32) {
return 1;
}
if (*(u16 *) (param_1 + 6) == 0x33 || *(u16 *) (param_1 + 6) == 0x27B) {
return 1;
}
iVar1 = func_800132BC((s32)&D_80126CAC, param_1);
uVar2 = 0;
if (D_801274D8 < iVar1) {
uVar2 = (iVar1 < D_801274DC);
}
return uVar2;
}
extern void (*D_8018B930[])(void);
@@ -6211,7 +6234,28 @@ s32 func_80180C68(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8017BEBC", func_80180DD8);
s32 func_80180DD8(void) {
extern u8 D_801202A0[];
u8 *p;
u16 count;
s32 i;
count = 0;
p = D_801202A0;
for (i = 0; i < 0x60; i++) {
switch (*(u16 *)p) {
case 0x1DC:
case 0x1FC:
case 0x210:
case 0x219:
count++;
break;
}
p += 0x10C;
}
return count;
}
extern u8 D_801202A0[];
void func_80180E48(void) {
@@ -7553,7 +7597,15 @@ void func_801831B4(void *a0) {
}
INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8017BEBC", func_801831F0);
void func_801831F0(void *a0)
{
extern void func_8002AC00(s32 arg0);
extern void func_80131E00(struct S80131E00 *a0, s32 a1);
func_8002AC00(0x16);
func_80131E00(a0, 0x11);
}
INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8017BEBC", func_80183228);
@@ -7588,7 +7640,17 @@ void func_801832D8(s32 *a0) {
}
INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8017BEBC", func_801832E4);
void func_801832E4(s32 a0) {
s32 ret;
ret = func_8012B8E4(a0, 8);
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + ret;
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) & 0xFFF;
if ((u32)(ret + 0x1F) < 0x3F) {
*(s16 *)(a0 + 2) = 3;
}
}
extern void func_8012B23C(s32 a0);
@@ -8368,7 +8430,29 @@ void func_80184338(s32 a0)
}
INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8017BEBC", func_80184458);
extern void func_800599B8(u16 *a0);
extern void MoveImage(void *a0, s32 a1, s32 a2);
extern s32 rand(void);
extern s8 D_801B1370[];
extern s16 D_801B1270;
void func_80184458(s32 a0) {
s32 timer = *(s32 *)(a0 + 0x1C);
if (timer != 0) {
timer = timer - 1;
*(s32 *)(a0 + 0x1C) = timer;
} else {
s32 frame = (*(u16 *)(a0 + 0xFC) + 1) & 7;
*(u16 *)(a0 + 0xFC) = frame;
if (frame == 0) {
*(s32 *)(a0 + 0x1C) = (rand() & 0x1F) + 0xA;
((void (*)(s32, s32))func_800599B8)((s32)D_801B1370, (s32)&D_801B1270);
} else {
MoveImage(&D_801B1370[frame * 8], 0x2F0, 0x120);
}
}
}
#include "common.h"
@@ -8443,7 +8527,29 @@ void func_80184634(s32 a0) {
INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8017BEBC", func_801846E4);
INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8017BEBC", func_8018472C);
#include "common.h"
extern void func_8012CBA4(s32 a0);
extern s32 func_8012BCCC(s32 a0);
extern s32 func_80185914(s32 a0);
extern s32 D_80126B68;
extern s32 D_80126B70;
void func_8018472C(s32 a0) {
if (*(s32 *)(a0 + 0x14) == 0) {
*(s32 *)(a0 + 0x14) = 0x100000;
}
func_8012CBA4(a0);
if (func_8012BCCC(a0) > 0x24000) {
*(s16 *)(a0 + 2) = 3;
} else if (func_80185914(a0) != 1 && (D_80126B68 != 0 || D_80126B70 != 0)) {
*(s16 *)(a0 + 2) = 5;
}
}
extern M2C_UNK D_801BE484;
extern void func_8012A828(s32, s32);
@@ -10368,7 +10474,47 @@ void func_80187714(s32 a0)
}
INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8017BEBC", func_80187854);
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001C810(s32 a0, s32 a1);
extern void func_801870D4(s32 param_1);
extern void func_801870A0(s32 param_1);
extern void func_80143994(s32 a0, s32 a1);
extern s32 D_801BEE54;
extern u8 D_801BEFBC[];
void func_80187854(void *a0) {
s32 v0;
s32 v1;
v0 = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)((s32)a0 + 0x20) = v0;
if (v0 == 0) {
func_8012CAE4(a0);
return;
}
func_8001C810(v0, (s32)&D_801BEFBC);
v1 = *(s32 *)((s32)a0 + 0x20);
*(u16 *)(v1 + 0x2C) |= 0x10;
v1 = *(s32 *)((s32)a0 + 0x20);
*(u32 *)(v1 + 4) |= 0x8040;
*(u16 *)((s32)a0 + 0x5C) = 0xCC00;
*(u8 *)((s32)a0 + 0x75) = 2;
*(s32 *)((s32)a0 + 0x58) = (s32)&D_801BEE54 | 0x20000000;
if (*(s16 *)((s32)a0 + 0x70) != 0) {
func_801870D4((s32)a0);
return;
}
func_801870A0((s32)a0);
*(s32 *)((s32)a0 + 0xD0) = ((s32 (*)(s32, s32))func_80143994)((s32)a0, 0x3000);
}
INCLUDE_ASM("asm/ov_SC04_005/nonmatchings/ov_SC04_005_jr_8017BEBC", func_80187928);
+46 -3
View File
@@ -5467,7 +5467,7 @@ s32 func_80183010(s32 *a0) {
extern void func_80186C40(s32 *a0);
extern void func_80186C40();
extern void func_8002D4C8(s32 a0, s32 a1);
void func_8018301C(s32 *a0)
@@ -7958,7 +7958,30 @@ void func_80186C1C(void) {
}
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80186C40);
#include "common.h"
void func_80186C40(void) {
extern s32 aFC4C[] __asm__("D_801EFC4C");
extern u8 D_8019473C[];
extern void func_8018B060(s32 a0);
extern void func_8012AD44(s32 *a0, s16 a1);
s32 ent;
s32 i;
for (i = 0; i < 0x15; i++) {
ent = aFC4C[i];
if (ent == 0) {
continue;
}
*(u16 *)(ent + 0x86) |= 0x10;
if (D_8019473C[*(s16 *)(ent + 0x70)] != 0) {
func_8018B060(ent);
}
func_8012AD44((s32 *)ent, 2);
}
}
#include "common.h"
@@ -10352,7 +10375,27 @@ void func_8018AA34(void *a0) {
}
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_8018AA70);
#include "common.h"
extern void func_8004914C(void *a0);
extern void func_800491AC(void *a0);
void func_8018AA70(void *param_1)
{
s16 sp10[3];
func_8004914C((void *)(*(s32 *)((s32)param_1 + 0x20) + 0x34));
func_800491AC((void *)(*(s32 *)((s32)param_1 + 0x20) + 0x34));
sp10[0] = -0x28;
sp10[1] = 0x20;
sp10[2] = -0x50;
func_8018AAE4(param_1, sp10);
sp10[0] = 0x28;
func_8018AAE4(param_1, sp10);
}
#include "common.h"
+16 -1
View File
@@ -4838,7 +4838,22 @@ extern s32 func_8012AD50(void *a0);
}
INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017FD9C);
extern void func_8012C1B8(void);
extern void func_8018227C(void*, void*);
extern s32 func_8012AD50(void *a0);
extern s32 D_80199608;
void func_8017FD9C(void *a0) {
s32 ret;
ret = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)((s32)a0 + 0x20) = ret;
if (ret != 0) {
func_8018227C(a0, &D_80199608);
func_8012AD50(a0);
}
}
#include "common.h"
+160 -5
View File
@@ -3295,7 +3295,35 @@ void func_8017D0C8(void) {
}
INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8017BEBC", func_8017D0F0);
extern void func_8012A018(s32 a, s32 b);
extern void func_8012A094(s32 a0);
extern void func_8017D220(void *a0);
void func_8017D0F0(void) {
extern u8 D_80126948[];
extern s32 D_80126954;
extern s32 D_8012695C;
extern s16 D_80126968;
extern s16 D_8012696A;
extern s16 D_8012696C;
extern s16 D_80126976;
extern s16 D_80126978;
extern s16 D_8012697A;
D_80126954 = 0x190;
D_8012695C = 0x384;
D_8012696A = 0x800;
D_80126968 = 0;
D_8012696C = 0;
D_80126976 = 0;
D_80126978 = -0x90;
D_8012697A = 0;
func_8012A018((s32)func_8017D220, 0);
func_8012A094((s32)D_80126948);
func_8017D220(D_80126948);
}
extern void func_8012A018(s32 a, s32 b);
extern void func_8012A094(s32 a0);
@@ -3443,7 +3471,58 @@ int func_8017D534(int param_1)
}
INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8017BEBC", func_8017D564);
extern s32 func_8012E778(int param_1, int param_2);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_8017D564(void *a0) {
s32 p;
s32 q;
s32 r;
if (*(u8 *)(a0 + 0x74) == 0) {
if (*(s16 *)(a0 + 0xFC) != 0) {
*(s16 *)(a0 + 0xFC) = *(s16 *)(a0 + 0xFC) - 1;
return;
}
p = *(s32 *)(a0 + 0x6C);
*(u16 *)(p + 0xE) += 6;
r = *(s32 *)(a0 + 0x6C);
if (*(s16 *)(r + 0xE) >= 0x201) {
*(u16 *)(r + 0xE) = 0x200;
} else {
goto start_check;
}
} else {
*(s16 *)(a0 + 0xFC) = 0x19;
q = *(s32 *)(a0 + 0x6C);
*(u16 *)(q + 0xE) -= 0x20;
r = *(s32 *)(a0 + 0x6C);
if (*(s16 *)(r + 0xE) < 0x40) {
*(u16 *)(r + 0xE) = 0x40;
} else {
goto start_check;
}
}
stop_block:
if (*(s16 *)(a0 + 0x84) == 0) {
return;
}
func_8002D4C8(0x977, 0);
func_8002D4C8(4, 0x976);
*(u16 *)(a0 + 0x84) = 0;
return;
start_check:
if (*(s16 *)(a0 + 0x84) != 0) {
return;
}
if (func_8012E778(r, 0xAA0190) == 1) {
func_8002D4C8(0x976, 0);
*(u16 *)(a0 + 0x84) = 1;
}
}
extern void (*D_80182738[])(void);
@@ -3463,7 +3542,25 @@ void func_8017D6C4(void *a0) {
INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8017BEBC", func_8017D700);
INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8017BEBC", func_8017D784);
extern s32 func_8012C354(s32 a0, s32 a1);
extern void func_8012A828(s32 *a0, s32 a1);
extern void func_8001D0E8(s32 arg0, s32 arg1, s32 arg2);
extern s32 func_8012C588(s32 a0, s32 a1);
void func_8017D784(void *a0) {
extern void (*D_80182704[])(void);
extern u8 D_8017EEF8[];
if (func_8012C354((s32)a0, (s32)D_80182704) != 0) {
*(u8 *)((s32)a0 + 0xC0) = 1;
func_8012A828((s32 *)a0, (s32)D_8017EEF8);
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1;
func_8001D0E8(*(s32 *)((s32)a0 + 0x20), 0x400, 0x400);
*(s32 *)((s32)a0 + 0x6C) = func_8012C588(0x29C, (s32)a0);
*(u8 *)((s32)a0 + 0x75) = 8;
}
}
INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8017BEBC", func_8017D804);
@@ -3897,7 +3994,27 @@ void func_8017E4F8(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8017BEBC", func_8017E534);
void func_8017E534(void *a0) {
extern u8 D_80195AA0;
extern u8 D_8017EEF8[];
extern s32 func_8012C354(s32 a0, s32 a1);
extern void func_8012A828(s32 *a0, s32 a1);
if (func_8012C354((s32)a0, (s32)&D_80195AA0) != 0) {
*(u8 *)((s32)a0 + 0xC0) = 1;
*(s16 *)((s32)a0 + 0xAE) = -1;
func_8012A828((s32 *)a0, (s32)D_8017EEF8);
*(u16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1;
*(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) = *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) | 0x10;
*(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x18) = 0xE00;
*(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x1A) = 0xE00;
*(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x1C) = 0xE00;
*(u16 *)((s32)a0 + 0xFC) = 0x300;
*(u8 *)((s32)a0 + 0x75) = 8;
}
}
INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8017BEBC", func_8017E5DC);
@@ -4008,7 +4125,45 @@ void func_8017E930(void *arg0) {
}
INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8017BEBC", func_8017EA10);
extern u8 D_801202A0[];
extern s32 D_8019AA90;
extern s32 func_80013328(s32 a0, s32 a1);
extern void func_80015978(s32 a0, s32 *a1);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8012F2E8(s32 a0, s32 a1, s32 a2);
void func_8017EA10(void *arg0) {
u8 *p;
s32 i;
s32 best;
s32 id;
s16 t;
s16 buf[4];
best = 0x7FFFFFFF;
i = 0;
p = D_801202A0;
D_8019AA90 = 0;
while (i < 0x60) {
id = 0x26E;
if (*(u16 *)p == id) {
t = (s16)func_80013328((s32)arg0 + 4, (s32)p + 4);
if (t < best) {
best = t;
D_8019AA90 = (s32)p;
}
}
id = 0;
i++;
p += 0x10C;
}
*(u16 *)((s32)arg0 + 0x208) = 0;
func_80015978((s32)arg0 + 4, (s32 *)buf);
func_8012F2E8(D_8019AA90, (s32)buf, (s32)arg0 + 0x20C);
*(s32 *)((s32)arg0 + 0x204) = D_8019AA90;
func_8002D4C8(0x8B0, 0);
}
INCLUDE_ASM("asm/ov_SC06_013/nonmatchings/ov_SC06_013_jr_8017BEBC", func_8017EAEC);
+98 -4
View File
@@ -4824,7 +4824,28 @@ void func_80185DAC(s32 target, u16 *cur, s32 step)
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_80185E30);
extern void func_801437D8(s32 a0, s32 a1, s32 a2, s32 a3);
extern u8 D_801BEF14[];
void func_80185E30(s32 param_1)
{
struct {
u16 f0;
u16 f2;
u16 f4;
u16 f6;
} local;
local.f0 = *(u16 *)(param_1 + 0x6);
local.f2 = *(u16 *)(param_1 + 0xA) - 0x60;
local.f4 = *(u16 *)(param_1 + 0xE);
local.f6 = 0x3800;
func_801437D8(param_1 + 0x100, (s32)&local, (s32)D_801BEF14, 0);
if ((*(u16 *)(param_1 + 0x100) & 3) == 0) {
func_8002D4C8(0xA9F, 0);
}
}
extern s32 func_8012B8A4(s16 *a0);
extern void func_80185F4C(s32 a0, s32 a1, s32 a2, s32 a3);
@@ -5162,7 +5183,37 @@ INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_8018694
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_80186A88);
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_80186AD0);
#include "common.h"
extern s32 func_8012C194(void);
extern void func_8001CD9C(s32 a0, void *a1);
extern Blk4_80185D4C D_801D0D80;
extern void func_8012AD44(s32 *a0, s16 a1);
void func_80186AD0(s32 param_1)
{
s32 s0;
s32 a;
s0 = func_8012C194();
a = s0;
if (s0 != 0) {
*(s32 *)(param_1 + 0xCC) = s0;
func_8001CD9C(a, &D_801D0D80);
*(u16 *)(s0 + 8) = *(u16 *)(param_1 + 6);
*(u16 *)(s0 + 0xA) = *(u16 *)(param_1 + 0xA);
*(u16 *)(s0 + 0xC) = *(u16 *)(param_1 + 0xE);
*(s32 *)(s0 + 4) |= 0x50000000;
*(u16 *)(s0 + 0x1A) = 0x80;
*(u16 *)(s0 + 0x18) = 0x80;
*(u16 *)(s0 + 0x2C) = 0xC006;
}
*(s32 *)(param_1 + 0x1C) = 8;
func_8012AD44((s32 *)param_1, 2);
}
extern void func_8002D4C8(s32 arg0, s32 arg1);
@@ -5469,7 +5520,35 @@ void func_80187368(s32 param_1) {
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_801874E8);
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_8018750C);
typedef struct { u8 d[8]; } __attribute__((packed, aligned(1))) B8_8018750C;
typedef struct { u8 d[4]; } __attribute__((packed, aligned(1))) B4_8018750C;
void func_8018750C(u8 *param_1, B4_8018750C param_2) {
extern Blip_8018F694 D_801D0B80[];
u8 *p;
u8 *q;
u8 v;
int i;
p = (u8 *)D_801D0B80;
for (i = 0; i < 32; i++) {
q = p + 6;
if (*(s16 *)(q + 8) == 0) {
*(B8_8018750C *)(void *)(q + 2) = *(B8_8018750C *)param_1;
*(B4_8018750C *)(void *)p = *(B4_8018750C *)(void *)&param_2;
v = p[0] >> 3;
q[-2] = v ? v : 1;
v = q[-5] >> 3;
q[-1] = v ? v : 1;
v = q[-4] >> 3;
q[0] = v ? v : 1;
return;
}
p += 16;
}
}
#define gte_ldv0(r0) __asm__ volatile ( \
"lwc2 $0, 0( %0 );" \
@@ -5775,7 +5854,22 @@ void func_80187B88(s32 param_1)
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_80187C1C);
extern s32 func_8012BEE8(s32 a0);
extern void func_8012C218(void *a0);
extern void func_8012AD80(s32 a0);
void func_80187C1C(s32 param_1) {
if (func_8012BEE8(param_1) != 0) {
func_8012C218((void *)param_1);
} else {
func_8012AD80(param_1);
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) =
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) + *(u16 *)(param_1 + 0x106);
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) =
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) + *(u16 *)(param_1 + 0x108);
}
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_80187C94);
+30 -1
View File
@@ -3703,7 +3703,36 @@ void func_8017DAA4(void) {
}
INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8017BEBC", func_8017DACC);
void func_8017DACC(void) {
extern u8 D_80126948[];
extern s32 D_80126954;
extern s32 D_8012695C;
extern s16 D_80126968;
extern s16 D_8012696A;
extern s16 D_8012696C;
extern s16 D_80126976;
extern s16 D_80126978;
extern s16 D_8012697A;
extern s32 D_801AABA0;
extern void func_8012A018(s32 a, s32 b);
extern void func_8012A094(s32 a0);
extern void func_8017DC40(void *a0);
D_80126954 = 0x190;
D_8012695C = 0x4B0;
D_80126968 = 0x71;
D_8012696A = 0x800;
D_801AABA0 = 0;
D_8012696C = 0;
D_80126976 = 0;
D_80126978 = -0x40;
D_8012697A = 0;
func_8012A018((s32)func_8017DC40, 0);
func_8012A094((s32)D_80126948);
func_8017DC40(D_80126948);
}
extern void func_8012A018(s32 a, s32 b);
extern void func_8012A094(s32 a0);
+54 -1
View File
@@ -3602,7 +3602,60 @@ __asm__(".text\n.align 2\n.globl func_8017DC80\n.ent\tfunc_8017DC80\n"
".set\treorder\n.end\tfunc_8017DC80\n");
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_8017E1E8);
extern s32 D_8019B7B8;
extern void func_8017E37C(u8*, u8*, u8*, u8*);
void func_8017E1E8(s32 arg0, s32 arg1, s32 arg2)
{
register s32 zr __asm__("$0");
register s32 off __asm__("$4");
register s32 cnt __asm__("$5");
s32 ent = arg0;
s32 p1 = arg1;
s32 p2 = arg2;
s32 slot;
s32 cur;
if (*(u8 *)ent == 1) {
cnt = 0;
off = 0;
do {
cur = off + zr;
if (*(u8 *)((s32)&D_8019B7B8 + cur) == 0) {
slot = (s32)&D_8019B7B8 + off;
goto found;
}
cnt = cnt + 1;
off = cur + 0x38;
} while (cnt < 0xC0);
slot = 0;
found:
if (slot != 0) {
((void (*)(s32, s32, s32, s32))func_8017E37C)(slot, ent, p1, p2);
*(u16 *)(ent + 4) = *(u16 *)p1;
*(u16 *)(ent + 6) = *(u16 *)(p1 + 2);
*(u16 *)(ent + 8) = *(u16 *)(p1 + 4);
if ((*(u16 *)(ent + 0xA) & 0x1000) == 0 && p2 != 0) {
*(u16 *)(ent + 0xC) = *(u16 *)p2;
*(u16 *)(ent + 0xE) = *(u16 *)(p2 + 2);
*(u16 *)(ent + 0x10) = *(u16 *)(p2 + 4);
}
*(s32 *)(ent + 0x34) = slot;
} else {
if (*(s32 *)(ent + 0x34) != 0) {
*(u16 *)(*(s32 *)(ent + 0x34) + 4) = *(u16 *)p1;
*(u16 *)(*(s32 *)(ent + 0x34) + 6) = *(u16 *)(p1 + 2);
*(u16 *)(*(s32 *)(ent + 0x34) + 8) = *(u16 *)(p1 + 4);
if ((*(u16 *)(ent + 0xA) & 0x1000) == 0 && p2 != 0) {
*(u16 *)(*(s32 *)(ent + 0x34) + 0xC) = *(u16 *)p2;
*(u16 *)(*(s32 *)(ent + 0x34) + 0xE) = *(u16 *)(p2 + 2);
*(u16 *)(*(s32 *)(ent + 0x34) + 0x10) = *(u16 *)(p2 + 4);
}
}
}
}
}
void func_8017E37C(u8 *dst, u8 *src1, u8 *src2, u8 *src3)
{
+32 -1
View File
@@ -1337,7 +1337,38 @@ s32 func_800D0D7C(s32 arg0, s32 arg1) {
}
INCLUDE_ASM("asm/resident/nonmatchings/resident", func_800D0E30);
s16 func_800D0E30(u8 *p) {
extern u8 D_80078EB0;
extern u8 D_80078EB1;
register s32 zr __asm__("$0");
u8 dummy[16];
u32 hi;
u32 lo;
register u32 b __asm__("$5");
register u32 t2 __asm__("$2");
register u32 t3 __asm__("$3");
register u32 h __asm__("$3");
hi = (u8)(p[1] - D_80078EB1);
lo = (u8)(p[0] - D_80078EB0);
p = (u8 *)((hi << 8) | lo);
b = (u32)p + zr;
if ((b & 0xFF) >= 0x3C) {
t3 = (b + 0x3C) & 0xFF;
t2 = ((u32)p & 0xFF00) - 0x100;
b = t2 | t3;
}
t2 = b & 0xFFFF;
h = t2 >> 8;
if (h >= 0x18) {
t2 = (h + 0x18) << 8;
t3 = b & 0xFF;
b = t2 | t3;
}
return (s16)b;
}
// func_800D0EC4 — scan func_800291B4(i) over i in [0x2F, 0x3A]; return first i whose
// (result & 0xFF) == 0, else 0.