feat(decomp): ox wave bx overlays — 14 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 19:32:41 -06:00
parent eae679684a
commit affe6728be
17 changed files with 561 additions and 46 deletions
+100 -3
View File
@@ -628,7 +628,40 @@ INCLUDE_ASM("asm/nonmatchings/800", func_80014588);
INCLUDE_ASM("asm/nonmatchings/800", func_800145EC);
INCLUDE_ASM("asm/nonmatchings/800", func_800146B0);
void func_800146B0(s32 mode) {
extern void GsInitGraph2(s32 w, s32 h, s32 mode, s32 a3, s32 st);
extern void func_80053EEC(s32 a0, s32 a1, s32 a2, s32 a3);
extern void func_80059234(s32);
extern void func_80053218(void);
extern void func_80014774(void);
extern void func_800147B8(void);
extern u8 D_80062A3C[];
extern u8 D_80062A3E[];
extern u8 D_80062A40[];
extern u16 D_800AF7BC;
extern u16 D_800AF7BE;
extern u16 D_800AF7C0;
s32 off;
off = (mode & 0xFFFF) * 6;
D_800AF7BC = *(u16 *) (D_80062A3C + off);
D_800AF7BE = *(u16 *) (D_80062A3E + off);
D_800AF7C0 = *(u16 *) (D_80062A40 + off);
GsInitGraph2(D_800AF7BC, D_800AF7BE, D_800AF7C0 | 4, 0, 0);
if (D_800AF7BE == 0x1E0) {
func_80053EEC(0, 0, 0, 0);
} else {
func_80053EEC(0, D_800AF7BE, 0, 0);
}
func_80059234(1);
func_80053218();
func_80014774();
func_800147B8();
}
extern void func_80059888(void *a0, s32 a1, s32 a2, s32 a3);
@@ -2166,7 +2199,38 @@ void func_80016940(s32 a0) {
func_80016450(param, 0);
}
INCLUDE_ASM("asm/nonmatchings/800", func_80016978);
extern u8 D_800AF630[];
extern u8 D_80062BA0[];
extern s32 D_800B9A18;
extern u16 D_800AF7CE;
extern void func_80016450(s32 a0, s32 a1);
s32 func_80016978(s32 arg0) {
register u32 zr __asm__("$0");
register s32 v1 __asm__("$3");
s32 x = arg0 + zr;
u8 *s0 = D_800AF630;
s32 mask = arg0 & 3;
u32 raw;
u32 a0;
u32 v0;
if (mask == 0) {
v1 = D_80062BA0[D_800B9A18];
} else {
v1 = D_80062BA0[mask];
}
D_800AF7CE = D_800AF7CE + v1;
__asm__ __volatile__("" ::: "memory");
raw = *(u16 *)&s0[0x19E];
a0 = raw + zr;
if (a0 >= 0xFFU) {
a0 = 0xFF;
}
v0 = ((x & 0xFFFFU) < 4U) ? 0xFF - a0 : a0;
func_80016450(v0 & 0xFF, 0);
return *(u16 *)&s0[0x19E] >= 0xFF;
}
INCLUDE_ASM("asm/nonmatchings/800", func_80016A3C);
@@ -12277,7 +12341,40 @@ INCLUDE_ASM("asm/nonmatchings/800", func_8002E818);
INCLUDE_ASM("asm/nonmatchings/800", func_8002E8DC);
INCLUDE_ASM("asm/nonmatchings/800", func_8002E94C);
void func_8002E94C(s32 a0)
{
extern u16 D_800A4E8E;
extern u16 D_800A4E8C;
extern u8 D_800A4EE6;
extern u16 D_800A4EE4;
extern u16 D_800A4EE2;
extern u16 D_8006A9EC[];
extern void func_8002EAB0(void);
register u8 *a1 __asm__("$5");
u8 fl;
u8 clr;
u16 v;
if ((D_800A4E8E & 0x4) != 0 && D_800A4E8C == 0x3E && (D_800A4E8E & 0x10) != 0) {
func_8002EAB0();
}
a1 = &D_800A4EE6;
fl = *a1;
if (fl & 0x4) {
clr = fl & 0xFB;
*a1 = clr;
if (!(fl & 0x2)) {
if ((u16)a0 >= 5) {
a0 = 4;
}
D_800A4EE4 = 0x4000;
v = D_8006A9EC[(u16)a0];
*a1 = clr | 0x1;
D_800A4EE2 = v;
}
}
}
INCLUDE_ASM("asm/nonmatchings/800", func_8002EA10);
+66 -2
View File
@@ -182,7 +182,61 @@ INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D244);
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D33C);
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D410);
extern void* (*D_80072970)(void);
__asm__(
"\t.set\tnoreorder\n"
".set noreorder\n"
"\t.globl\tfunc_8005D410\n"
"func_8005D410:\n"
"lui $v0, %hi(D_80072970)\n"
"lw $v0, %lo(D_80072970)($v0)\n"
"addiu $sp, $sp, -32\n"
"sw $s0, 16($sp)\n"
"addu $s0, $a1, $zero\n"
"sw $s1, 20($sp)\n"
"sw $ra, 24($sp)\n"
"jalr $v0\n"
"addu $s1, $a2, $zero\n"
"bgez $s0, 1f\n"
"addu $v1, $v0, $zero\n"
"lbu $v0, 234($v1)\n"
"j 4f\n"
"nop\n"
"1:\n"
"lbu $v0, 234($v1)\n"
"nop\n"
"slt $v0, $s0, $v0\n"
"beq $v0, $zero, 3f\n"
"sll $v0, $s0, 3\n"
"lw $v1, 8($v1)\n"
"bgez $s1, 2f\n"
"addu $v1, $v1, $v0\n"
"lbu $v0, 0($v1)\n"
"j 4f\n"
"nop\n"
"2:\n"
"lbu $v0, 0($v1)\n"
"nop\n"
"slt $v0, $s1, $v0\n"
"beq $v0, $zero, 4f\n"
"addu $v0, $zero, $zero\n"
"lw $v0, 4($v1)\n"
"nop\n"
"addu $v0, $v0, $s1\n"
"lbu $v0, 0($v0)\n"
"j 4f\n"
"nop\n"
"3:\n"
"addu $v0, $zero, $zero\n"
"4:\n"
"lw $ra, 24($sp)\n"
"lw $s1, 20($sp)\n"
"lw $s0, 16($sp)\n"
"jr $ra\n"
"addiu $sp, $sp, 32\n"
".set reorder\n"
);
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005D4B8);
@@ -529,7 +583,17 @@ INCLUDE_ASM("asm/nonmatchings/800c3", func_8005F450);
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005F6CC);
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005F704);
extern u8 D_80078A48;
s32 func_8005F704(s32 arg0) {
s32 var_v0 = (s32)&D_80078A48;
if (arg0 & 0xF0) {
var_v0 += 0xF0;
}
return var_v0;
}
__asm__(".word 0x00000000\n");
INCLUDE_ASM("asm/nonmatchings/800c3", func_8005F728);
+1 -26
View File
@@ -72,32 +72,7 @@ void func_800CB510(void *arg0) {
INCLUDE_ASM("asm/md_MAIN_013/nonmatchings/md_MAIN_013", func_800CB56C);
void func_800CB6E4(void *arg0) {
extern s32 func_80146A6C(s32, void *, s32, s32, s32, s32, s32);
extern void func_80146C3C();
u8 *a0 = *(u8 **)((s32)arg0 + 0x34);
if (*(s32 *)((s32)arg0 + 0x30) == *(s16 *)(a0 + 0x36)) {
s16 var;
if (*(s32 *)(a0 + 0x58) < 0) {
u8 *p = (u8 *)(*(s32 *)(a0 + 0x58) & (s32)0x8FFFFFFF);
var = ((*(s16 *)(p + 8) + *(s16 *)(p + 0xA)) >> 1) - 0x10;
} else {
var = -0x30;
}
*(s32 *)((s32)arg0 + 0x4C) = *(s16 *)(a0 + 6);
*(s32 *)((s32)arg0 + 0x50) = *(s16 *)(a0 + 0xA) + (s16)var;
*(s32 *)((s32)arg0 + 0x54) = *(s16 *)(a0 + 0xE);
}
if (*(s32 *)((s32)arg0 + 0x1C) < 0x18 && *(u16 *)a0 != 0) {
if (*(s32 *)((s32)arg0 + 0x1C) < 0xE) {
func_80146A6C(0x15, arg0, 0, 0, 0, 0x8000, *(s32 *)((s32)arg0 + 0x1C));
}
*(s32 *)((s32)arg0 + 0x1C) = *(s32 *)((s32)arg0 + 0x1C) + 1;
} else {
func_80146C3C(arg0);
}
}
INCLUDE_ASM("asm/md_MAIN_013/nonmatchings/md_MAIN_013", func_800CB6E4);
extern s32 func_80128ED8(s32 param_1, s32 *param_2);
extern void func_80146C3C();
+36 -1
View File
@@ -208,7 +208,42 @@ void func_800CB2CC(s32 arg0) {
}
INCLUDE_ASM("asm/md_MAIN_027/nonmatchings/md_MAIN_027", func_800CB3E0);
extern void func_800CB82C(s32 a0, s32 a1);
extern s32 func_80146E98(s32 a0);
extern void func_80146D90(s32 a0);
extern void func_80146CA0(void *a0);
void func_800CB3E0(s32 a0) {
u8 *s0;
u16 w;
s0 = *(u8 **)(a0 + 0x20);
func_800CB82C(a0, *(s32 *)(a0 + 0x58));
*(u16 *)(a0 + 0xA) -= 1;
w = *(u16 *)(s0 + 0x18);
w += 0x100;
*(u16 *)(s0 + 0x18) = w;
if ((s16)w >= 0x1CCD) {
*(u16 *)(s0 + 0x18) = 0x1CCC;
}
w = *(u16 *)(s0 + 0x1A);
w += 0x100;
*(u16 *)(s0 + 0x1A) = w;
if ((s16)w >= 0x1CCD) {
*(u16 *)(s0 + 0x1A) = 0x1CCC;
}
if (func_80146E98(a0) != 0) {
*(u16 *)(s0 + 0x18) = 0x1CCC;
*(u16 *)(s0 + 0x1A) = 0x1CCC;
func_80146D90(a0);
func_80146CA0((void *)a0);
}
}
INCLUDE_ASM("asm/md_MAIN_027/nonmatchings/md_MAIN_027", func_800CB4A4);
+6 -1
View File
@@ -1187,7 +1187,12 @@ void func_801A4A18(s32 a0)
}
INCLUDE_ASM("asm/md_SC07_004/nonmatchings/md_SC07_004", func_801A4AAC);
extern void func_8012AD44(s32 *a0, s16 a1);
void func_801A4AAC(void *a0) {
func_8012AD44((s32 *)a0, 3);
}
INCLUDE_ASM("asm/md_SC07_004/nonmatchings/md_SC07_004", func_801A4ACC);
+13 -1
View File
@@ -3425,7 +3425,19 @@ INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_80180BD
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_80180C98);
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_80180D10);
#include "common.h"
extern u8 D_801BC6C8[];
void func_80180D10(void *a0) {
if (*(s32 *)((char *)a0 + 0x1c) != 0) {
*(s32 *)((char *)a0 + 0x1c) = *(s32 *)((char *)a0 + 0x1c) - 1;
} else {
*(void **)((char *)a0 + 0xcc) = D_801BC6C8;
*(u16 *)((char *)a0 + 2) = *(u16 *)((char *)a0 + 2) + 1;
}
}
#include "common.h"
+26 -1
View File
@@ -3281,7 +3281,32 @@ void func_8017F8D8(s32 *a0) {
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8017E590", func_8017F8E4);
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8017E590", func_8017F900);
extern s32 ratan2(s32 dx, s32 dy);
extern void func_80171B10(void *a0);
s32 func_8017F900(void *a0) {
extern s32 D_80126B58;
extern s32 D_801E97C4;
s16 pos[3];
s32 old;
if (*(s32 *)((char *)a0 + 0x1C) < 0x82) {
pos[0] = *(u16 *)(*(s32 *)((char *)a0 + 0xD4) + 6);
pos[1] = 0;
pos[2] = *(u16 *)(*(s32 *)((char *)a0 + 0xD4) + 0xE);
((void (*)(void *, void *))func_80171B10)(&D_80126B58, pos);
old = *(s32 *)((char *)a0 + 0x1C);
*(s32 *)((char *)a0 + 0x1C) = old + 1;
if (old >= 0x56) {
pos[0] = pos[0] - *(u16 *)((char *)a0 + 6);
pos[2] = pos[2] - *(u16 *)((char *)a0 + 0xE);
D_801E97C4 = -ratan2(pos[0], pos[2]);
}
return 1;
}
return 0;
}
extern void func_8001AAA0(s32 arg0);
extern s32 func_8001B710(void);
+36 -1
View File
@@ -3666,7 +3666,42 @@ void func_8017E97C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8017CF90", func_8017E9B8);
#include "common.h"
/* engine_types.h:497 `Blk8` VERBATIM -- the real TU reaches it via engine_core.h ->
* engine_types.h, so the bank driver strips this local copy; match_one's standalone
* compile cannot see that header, hence the restatement. */
extern void func_80015978(s32 a0, s32 *a1);
extern s32 func_80013294(void *a0, void *a1);
extern s32 func_8014C168(s32 *a0, s32 a1);
extern void func_8017EDF8();
extern Blk8 D_801274E8;
extern s32 D_80126B58;
void func_8017E9B8(void *a0) {
Blk8 buf1;
Blk8 buf2;
s32 *s0;
s32 cmp;
s32 res;
s0 = &D_80126B58;
func_80015978(func_8014C168(s0, 0x3D) + 4, &buf1);
func_80015978((s32)(s0 + 1), &buf2);
s0 = &buf2;
cmp = func_80013294(&buf1, s0);
if (cmp < 0x100) {
res = func_80013294(&buf1, s0) + 0x28A;
} else {
res = 0x38A;
}
*(s32 *)((u8 *)a0 + 0x14) = res;
D_801274E8 = buf1;
func_8017EDF8(a0);
}
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8017CF90", func_8017EA74);
+15 -1
View File
@@ -4265,7 +4265,21 @@ s32 func_80187414(void *a0) {
}
INCLUDE_ASM("asm/ov_SC02_028/nonmatchings/ov_SC02_028_jr_80184BD8", func_80187454);
extern void func_8002D59C(s32 a0, u16 a1, s32 a2);
extern void func_8012C218(void *a0);
/* §37/§124 def-side asm-label alias: the TU declares `extern void func_80187454(void);`
* (L4194) for the no-argument caller at L4205, while the byte-true definition takes a
* pointer in $a0 (sw $s0 / addu $s0,$a0,$zero prologue). Neither side can move, so the
* definition gets a private C identifier and binds the emitted symbol with a GNU asm
* label. Same class as banked func_8017EF54 (ov_SC06_008_jr_8017C294.c:4152). */
void aF80187454(void *arg0) __asm__("func_80187454");
void aF80187454(void *arg0) {
func_8002D59C(4, 0x64E, *(u16 *)((char *)arg0 + 0x104));
func_8012C218(arg0);
}
extern void func_8002D59C(s32 a0, u16 a1, s32 a2);
+10 -1
View File
@@ -7246,7 +7246,16 @@ s32 func_801832F4(void) {
}
INCLUDE_ASM("asm/ov_SC02_031/nonmatchings/ov_SC02_031_jr_8017AE2C", func_80183314);
extern void (*D_801893D4[])(void);
extern s32 func_80183B90(void);
void func_80183314(void *a0) {
D_801893D4[*(u16 *)((s32)a0 + 0x2)]();
if ((*(u16 *)((s32)a0 + 0x100) & 0x10) && func_80183B90() == 1) {
*(u16 *)((s32)a0 + 0x100) &= ~0x10;
}
}
extern s32 func_80183AC8(s32 a0, s32 a1, s16 a2, s16 a3, s32 a4);
+29 -1
View File
@@ -4011,7 +4011,35 @@ INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8017AE2C", func_8017DE9
INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8017AE2C", func_8017DEB0);
INCLUDE_ASM("asm/ov_SC03_012/nonmatchings/ov_SC03_012_jr_8017AE2C", func_8017DEF0);
extern void func_8017D6B4(void);
void func_8017DEF0(void *a0) {
s16 val16;
u16 val;
val = *(u16 *)((char *)a0 + 0xE4);
val--;
*(u16 *)((char *)a0 + 0xE4) = val;
val16 = (s16)val;
if (val16 == 0) {
func_8017D6B4();
}
val = *(u16 *)((char *)a0 + 0xE0);
val--;
*(u16 *)((char *)a0 + 0xE0) = val;
val16 = (s16)val;
if (val16 < 4) {
*(u16 *)((char *)a0 + 0xE2) = 0x10;
}
if (*(s16 *)((char *)a0 + 0xE0) < 2) {
*(u16 *)((char *)a0 + 0xE2) = 8;
}
*(u16 *)(*(s32 *)((char *)a0 + 0x20) + 0x10) = *(u16 *)(*(s32 *)((char *)a0 + 0x20) + 0x10) + *(u16 *)((char *)a0 + 0xE2);
if (*(s16 *)(*(s32 *)((char *)a0 + 0x20) + 0x10) >= 0x401) {
*(u16 *)((char *)a0 + 2) += 1;
}
}
void func_8017DFBC(void *a0) {
*(short *)(*(int *)((char *)a0 + 0x64) + 0xe0) = 2;
+31 -1
View File
@@ -8005,7 +8005,37 @@ void func_8018947C(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80189518);
void func_80189518(s32 arg0)
{
extern void func_800183E0(s32);
extern u8 D_801CFAFC[];
extern u8 D_801CFB1C[];
extern u8 D_80078E78[];
u8 *base;
s32 a;
s32 b;
s32 cond;
base = D_80078E78;
if (*(u16 *)(arg0 + 0xFC) & 0xF) {
func_800183E0(D_801CFB1C);
} else {
func_800183E0(D_801CFAFC);
}
a = *(s16 *)(arg0 + 0xDE);
if (a >= 0x564 && (b = *(s16 *)(base + 0x1A)) < 0x3D) {
cond = b + 0x5A0 < a;
} else {
cond = *(s16 *)(arg0 + 0xDE) > *(s16 *)(base + 0x1A);
}
if (cond == 0) {
*(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_801895CC);
+38 -2
View File
@@ -3792,7 +3792,7 @@ DEFINE_func_80181E58() /* dedup: shared engine-core @0x80181E58 (src/shared) */
extern int func_80178970(void);
extern s32 D_801D4300;
extern s32 func_8012BEE8(s32 a0);
extern s32 func_8018219C(s32 a0);
extern s32 func_8018219C();
extern s32 func_80183178(void);
extern void func_8013CABC(void);
extern void func_8018226C(s32 a0);
@@ -3843,7 +3843,43 @@ void func_8018201C(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8017FB84", func_8018219C);
extern u16 D_800B99D8;
extern s32 func_80132EF4(s32 a0, s32 a1);
s32 func_8018219C(s32 arg0)
{
s32 owner;
s32 i;
register s32 obj __asm__("$4");
register s32 d __asm__("$2");
u16 a;
u16 b;
owner = arg0;
i = 0;
do {
obj = func_80132EF4(owner, 0x22);
if (obj != 0) {
a = *(u16 *)(obj + 6) - 0x28;
*(u16 *)(obj + 6) = a;
b = *(u16 *)(obj + 0xA) - 0x20;
*(u16 *)(obj + 0xA) = b;
d = (i + (D_800B99D8 & 4) * 3) - 0x2A;
*(u16 *)(obj + 0xE) = *(u16 *)(obj + 0xE) + d;
d = (s16)d;
if (d >= 0) {
d = d << 7;
} else {
d = -(d << 7);
}
*(u16 *)(obj + 0x34) = d + 0x1000;
*(s32 *)(obj + 0x14) = 0xFFFE0000;
*(s32 *)(obj + 0x10) = 0xFFFD0000;
}
i += 0x18;
} while (i < 0x49);
}
INCLUDE_ASM("asm/ov_SC03_119/nonmatchings/ov_SC03_119_jr_8017FB84", func_8018226C);
+31 -1
View File
@@ -5487,7 +5487,37 @@ void func_80180F90(u8 *a0) {
}
INCLUDE_ASM("asm/ov_SC06_006/nonmatchings/ov_SC06_006_jr_8017BEBC", func_80180FE8);
s32 func_80180FE8(u8 *a0, u8 *a1, s32 a2) {
extern s32 D_801F89E0;
extern s16 D_801F8A10;
extern s16 D_801F8A12;
extern s16 D_801F8A14;
extern s32 D_801F8AEC;
register u8 *p __asm__("$5");
register s16 *pa __asm__("$6");
register u8 *self __asm__("$7");
s32 aec;
p = a1 + (s16)a2 * 14;
pa = &D_801F8A10;
__asm__ __volatile__("" : "=r"(pa) : "0"(pa));
self = a0;
if (*(s16 *)(p + 0xC) == 0x7FFF) {
(*(u16 *)(self + 0x38))--;
p -= 14;
}
*(s32 *)(self + 0x3C) = (*(s16 *)(p + 0) * D_801F89E0 >> 12) + pa[0];
*(s32 *)(self + 0x40) = (*(s16 *)(p + 2) * D_801F89E0 >> 12) + (&D_801F8A10)[1];
*(s32 *)(self + 0x44) = (*(s16 *)(p + 4) * D_801F89E0 >> 12) + (&D_801F8A10)[2];
*(s32 *)(self + 0x48) = (*(s16 *)(p + 6) * D_801F89E0 >> 12) + pa[0];
*(s32 *)(self + 0x4C) = (*(s16 *)(p + 8) * D_801F89E0 >> 12) + D_801F8A12;
*(s32 *)(self + 0x50) = (*(s16 *)(p + 0xA) * D_801F89E0 >> 12) + D_801F8A14;
aec = D_801F8AEC;
*(s32 *)(self + 0x54) = *(s16 *)(p + 0xC) << 5;
*(s32 *)(self + 0x08) = aec;
return 0;
}
s32 func_80181120(u8 *a0, s32 a1, u8 *a2, u8 *a3) {
a1 = (s16)a1;
+52 -1
View File
@@ -6067,7 +6067,58 @@ void func_80182E24(void *param)
}
INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8017C8D0", func_80182E64);
extern u8 D_801202A0[];
extern s32 func_80013328(s32 a0, s32 a1);
extern void func_800D1724(s32 a0);
extern void func_80171928(void *a0);
typedef struct {
u16 f_00;
u8 pad_02[0x5A];
u16 f_5C;
u8 pad_5E[0x7E];
s32 f_DC;
} Ent_80182E64;
void func_80182E64(void *arg0)
{
register Ent_80182E64 *found __asm__("$20");
s32 best;
s32 i;
s32 off;
s32 d;
Ent_80182E64 *p;
found = NULL;
best = 0x7FFFFFFF;
i = 0;
off = 0;
loop:
p = (Ent_80182E64 *)(D_801202A0 + off);
if (p->f_00 == 0) {
goto next;
}
if (!(p->f_5C & 0x80)) {
goto next;
}
d = (s16)func_80013328((s32)arg0 + 4, (s32)p + 4);
if (d >= best) {
goto next;
}
best = d;
found = p;
next:
i++;
if (i < 0x60) {
off += 0x10C;
goto loop;
}
if (found != NULL) {
func_800D1724(found->f_DC);
}
func_80171928(arg0);
}
extern s32 func_80013328(s32 a0, s32 a1);
extern void func_80015978(s32 a0, s32 *a1);
+32 -1
View File
@@ -8202,7 +8202,38 @@ extern void func_8012A018(s32 a, s32 b);
}
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80188988);
void func_80188988(int param_1) {
extern s32 D_801DFFE0;
extern s32 D_801DFFE4;
extern s32 D_801DFFE8;
extern s32 D_801DFFEC;
extern s32 func_80012CB8(s32 a0, s32 a1, s32 a2);
register s16 *psVar1 __asm__("$5");
s16 *psVar2;
s16 *psVar3;
s16 *psVar5;
s16 sVar4;
psVar1 = (s16 *)D_801DFFE0;
psVar2 = (s16 *)D_801DFFE4;
*(s32 *)(param_1 + 0x4C) = psVar1[1];
*(s32 *)(param_1 + 0x50) = psVar1[2];
*(s32 *)(param_1 + 0x40) = psVar2[1];
psVar3 = (s16 *)D_801DFFE8;
*(s32 *)(param_1 + 0x44) = psVar2[2];
sVar4 = func_80012CB8(*psVar3, *psVar1, 0x80);
((struct { s32 f; } *)(param_1 + 0x48))->f += sVar4;
sVar4 = func_80012CB8(*(s16 *)D_801DFFEC, *(s16 *)D_801DFFE4, 0x80);
psVar5 = (s16 *)D_801DFFE0;
*(s32 *)(param_1 + 0x3C) += sVar4;
if (psVar5[0] < *(s32 *)(param_1 + 0x48)) {
*(s32 *)(param_1 + 0x48) = psVar5[0];
}
if (*(s16 *)D_801DFFE4 < *(s32 *)(param_1 + 0x3C)) {
*(s32 *)(param_1 + 0x3C) = *(s16 *)D_801DFFE4;
}
}
extern u16 D_801913E4[];
extern u16 D_801913EC[];
+39 -1
View File
@@ -3345,7 +3345,45 @@ void func_8017DB58(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_8017DB94);
typedef struct {
s16 v[4];
} Blk8_80126940_8017DB94;
void func_8017DB94(s32 a0) {
extern s32 D_80126B58;
extern s16 D_80185924[];
extern Blk8_80126940_8017DB94 D_80126940;
Blk8_80126940_8017DB94 sp10;
u8 t;
s16 v0, v1;
if (func_80148800(&D_80126B58) & 3) {
t = (*(u8 *)(a0 + 5) + 1) & 1;
*(u8 *)(a0 + 5) = t;
*(s32 *)(a0 + 0x14) = D_80185924[t];
}
sp10 = D_80126940;
/* Clamp sp10.v[0] */
v1 = sp10.v[0];
if (v1 < -0xE0) {
sp10.v[0] = -0xE0;
} else if (v1 < 0xE1) {
/* v1 stays unchanged */
} else {
sp10.v[0] = 0xE0;
}
/* Clamp sp10.v[2] */
v0 = sp10.v[2];
if (v0 < -0xE0) {
sp10.v[2] = -0xE0;
}
func_8017DC70(a0, sp10.v);
}
// @class: schedule