mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-28 14:59:48 -04:00
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:
@@ -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
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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[];
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user