mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-05 08:57:59 -04:00
feat(decomp): x1 wave gate — 21 binaries, clean-R22 verified 213/213
The x1 parallel_gate merged 23 files then ABORTED on 'check-all: 211 passed, 2 failed' (ov_SC03_124, ov_SC03_001), correctly leaving the merge in the tree for inspection (R42). That red was a STALE INCREMENTAL ARTIFACT, not a bad draft: after reverting the two named binaries' files, a bare 'make check-all' still reported the same 211/213, but rebuilding ov_SC03_124 from a cleaned build dir produced 0b3991853c39d8c3d8d12e145e3312dd333f2189 — exactly config/check.ov_SC03_124.sha. The authoritative sweep (make clean && make extract-all && make check-all) then returned 213 passed, 0 failed of 213. Lesson re-earned (R22's own rationale): a bare check-all is an incremental read and must never be used to diagnose a red fleet — it nearly cost 21 byte-verified banks. The two reverted drafts (func_8018009C, func_80182BB8) go back to the drafting queue.
This commit is contained in:
@@ -91,7 +91,58 @@ void func_800CAFE8(void *arg0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_MAIN_033/nonmatchings/md_MAIN_033", func_800CB058);
|
||||
void func_800CB058(s32 arg0)
|
||||
{
|
||||
extern u8 D_800CB8B0[];
|
||||
extern s32 D_800CB984;
|
||||
extern u8 D_800CB988[];
|
||||
extern void func_80146578(void);
|
||||
extern void func_800CB384(void);
|
||||
extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3);
|
||||
extern void func_80149374(s32 a0, s32 a1);
|
||||
extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3);
|
||||
extern void func_80146E90(s32 *a0, s32 a1);
|
||||
extern void func_80146CA0(void *a0);
|
||||
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
|
||||
extern void func_80147324(s32 a0);
|
||||
register s32 s1a __asm__("$17");
|
||||
register s32 s2a __asm__("$18");
|
||||
register s32 s0a __asm__("$16");
|
||||
register s32 maska __asm__("$6");
|
||||
register s32 fptr __asm__("$6");
|
||||
register s32 q __asm__("$5");
|
||||
register s32 p __asm__("$4");
|
||||
s32 v0w;
|
||||
s32 cnt;
|
||||
|
||||
s1a = arg0;
|
||||
s2a = *(s32 *)(s1a + 0x4C);
|
||||
s0a = ((s32 (*)(void))func_80146578)();
|
||||
*(s32 *)(s1a + 0x20) = s0a;
|
||||
if (s0a == 0) goto fail;
|
||||
func_8001CB6C((u8 *)s0a, (s32)D_800CB8B0, 0x1A0, 0x100);
|
||||
maska = 0x50001000;
|
||||
p = s2a;
|
||||
q = (s32)(s1a + 4);
|
||||
v0w = *(u32 *)(s0a + 4);
|
||||
*(u8 *)(s0a + 0x27) = 0x19;
|
||||
*(u32 *)(s0a + 4) = (v0w | maska) & ~0x40;
|
||||
fptr = *(s32 *)(p + 0x20);
|
||||
cnt = D_800CB984++;
|
||||
*(s16 *)(s0a + 0x12) = *(s16 *)(fptr + 0x12);
|
||||
*(s16 *)(s0a + 0x10) = 0x400;
|
||||
*(s32 *)(s0a + 0x34) = (s32)D_800CB988 + ((cnt & 7) * 32);
|
||||
func_80149374(p, q);
|
||||
func_80146DE8(s1a, 0, 0, -0x100000);
|
||||
func_80146E90(s1a, 0x3C);
|
||||
func_80146CA0(s1a);
|
||||
func_80146A6C(0x4A, s1a, *(s16 *)(s1a + 6), *(s16 *)(s1a + 0xA), *(s16 *)(s1a + 0xE), 0, 0);
|
||||
func_80147324(0x8EF);
|
||||
return;
|
||||
fail:
|
||||
((void (*)(s32))func_800CB384)(s1a);
|
||||
}
|
||||
|
||||
|
||||
void func_800CB190(void *arg0) {
|
||||
extern void func_80147324(s32);
|
||||
|
||||
@@ -181,7 +181,7 @@ void func_800CCFA8(s32 param_1)
|
||||
extern void func_80146578(void);
|
||||
extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern void func_80146CA0(void *a0);
|
||||
extern void func_800CD204(void);
|
||||
extern void func_800CD204();
|
||||
extern void func_800CD1A8(void);
|
||||
|
||||
extern u8 D_800CD66C;
|
||||
@@ -211,7 +211,7 @@ void func_800CD010(s32 param_1)
|
||||
}
|
||||
|
||||
|
||||
extern void func_800CD204(void);
|
||||
extern void func_800CD204();
|
||||
extern s32 func_80163408(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern void func_80163328();
|
||||
extern s32 func_801632F0();
|
||||
@@ -258,7 +258,47 @@ void func_800CD1A8(void) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/md_MAIN_045/nonmatchings/md_MAIN_045", func_800CD204);
|
||||
extern s16 func_8012A758(void);
|
||||
extern s32 func_80013694(s16 a0, void *a1, void *a2);
|
||||
extern void func_800139C8(s32 a0, void *a1, void *a2);
|
||||
extern void func_80015954(void *a0, s32 a1);
|
||||
extern s32 func_8004787C(s32 a0);
|
||||
extern s32 func_80047948(s32 a0);
|
||||
extern u8 D_800CD6BC[];
|
||||
|
||||
void func_800CD204(s32 arg0) {
|
||||
u16 sp10[3];
|
||||
s32 y;
|
||||
s32 x;
|
||||
s32 w;
|
||||
s32 t;
|
||||
s32 v1;
|
||||
s16 ang;
|
||||
|
||||
y = *(s32 *)(arg0 + 0x4C);
|
||||
x = *(s32 *)(arg0 + 0x20);
|
||||
ang = func_8012A758();
|
||||
func_80013694(*(s16 *)(x + 0x10), D_800CD6BC, sp10);
|
||||
func_800139C8((s16)(ang + 0x400), sp10, sp10);
|
||||
w = *(s32 *)(y + 0x20);
|
||||
sp10[0] = sp10[0] + *(s32 *)(w + 0x48);
|
||||
t = sp10[1] - 0x20;
|
||||
sp10[1] = t + *(s32 *)(w + 0x4C);
|
||||
sp10[2] = sp10[2] + *(s32 *)(w + 0x50);
|
||||
v1 = func_80047948(*(s16 *)(arg0 + 0x60));
|
||||
if (v1 < 0) {
|
||||
v1 += 0x1FF;
|
||||
}
|
||||
sp10[0] = sp10[0] + (v1 >> 9);
|
||||
v1 = func_8004787C(*(s16 *)(arg0 + 0x60));
|
||||
if (v1 < 0) {
|
||||
v1 += 0xFF;
|
||||
}
|
||||
sp10[1] = sp10[1] + (v1 >> 8);
|
||||
*(u16 *)(arg0 + 0x60) = (*(u16 *)(arg0 + 0x60) + 0x38) & 0xFFF;
|
||||
func_80015954(sp10, arg0 + 4);
|
||||
}
|
||||
|
||||
|
||||
extern s32 func_80161A00(s32 a0);
|
||||
extern void (*D_800CD6C4[])(void);
|
||||
|
||||
@@ -3442,7 +3442,55 @@ INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8017BEBC", func_8017E1A
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8017BEBC", func_8017E210);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_000/nonmatchings/ov_SC01_000_jr_8017BEBC", func_8017E3A0);
|
||||
void func_8017E3A0(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4, s32 arg5)
|
||||
{
|
||||
extern u8 *D_800A5E60;
|
||||
extern u8 D_800AF630[];
|
||||
extern u8 D_800AA608[];
|
||||
|
||||
u8 *prim;
|
||||
u8 *fl;
|
||||
u32 *q;
|
||||
u32 *addrw;
|
||||
u32 v1;
|
||||
u32 val;
|
||||
u32 mlo, mhi;
|
||||
volatile s32 pad;
|
||||
|
||||
prim = D_800A5E60;
|
||||
fl = D_800AF630;
|
||||
prim[3] = 4;
|
||||
prim[7] = 0x50;
|
||||
if (arg5 == 0) {
|
||||
prim[0xC] = 0xFF;
|
||||
prim[0xE] = 0;
|
||||
prim[0xD] = 0;
|
||||
prim[4] = arg4;
|
||||
prim[6] = 0;
|
||||
} else {
|
||||
prim[0xE] = 0xFF;
|
||||
prim[0xD] = 0;
|
||||
prim[0xC] = 0;
|
||||
prim[6] = arg4;
|
||||
prim[4] = 0;
|
||||
}
|
||||
prim[5] = 0;
|
||||
__asm__ __volatile__("");
|
||||
mlo = 0xFFFFFF;
|
||||
((u16 *)prim)[5] = a1;
|
||||
mhi = 0xFF000000;
|
||||
((u16 *)prim)[4] = a0;
|
||||
((u16 *)prim)[8] = a2;
|
||||
((u16 *)prim)[9] = a3;
|
||||
*(u32 *)prim = (*(u32 *)prim & mhi) | (*(u32 *)&D_800AA608[*(u16 *)(fl + 0xA3D2) << 14] & mlo);
|
||||
q = (u32 *)D_800AA608;
|
||||
addrw = (u32 *)((s32)q + (*(u16 *)(fl + 0xA3D2) << 14));
|
||||
v1 = (u32)prim & mlo;
|
||||
val = *addrw;
|
||||
D_800A5E60 = (prim += 20);
|
||||
*addrw = (val & mhi) | v1;
|
||||
}
|
||||
|
||||
|
||||
void func_8017E4A0(void)
|
||||
{
|
||||
|
||||
@@ -4022,7 +4022,46 @@ void func_8017FE78(s32 a0)
|
||||
void func_8017FED0(void) {
|
||||
}
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8017E590", func_8017FED8);
|
||||
extern s16 D_801F32D8;
|
||||
extern u8 D_801202A0[];
|
||||
|
||||
s32 func_8017FED8(s32 a0) {
|
||||
s16 i;
|
||||
u8 *e;
|
||||
u8 *p;
|
||||
s16 cur;
|
||||
|
||||
if (--*(s16 *)(a0 + 0x102) == -1) {
|
||||
i = 0;
|
||||
e = D_801202A0;
|
||||
for (;;) {
|
||||
p = e + 0x102;
|
||||
__asm__ __volatile__("" :: "r"(p));
|
||||
if (*(u16 *)(e + 0) != 0x1AB) goto next;
|
||||
if (*(s16 *)(p - 0x92) != 0x2B) goto next;
|
||||
cur = D_801F32D8;
|
||||
if (*(s16 *)(p - 0x6) != cur - 1) goto next;
|
||||
if (*(s32 *)(p - 0x36)) {
|
||||
*(s16 *)(a0 + 0x102) = 0;
|
||||
return 0;
|
||||
}
|
||||
D_801F32D8 = cur - 1;
|
||||
*(s16 *)p = 1;
|
||||
if (D_801F32D8 & 1) {
|
||||
*(s16 *)(a0 + 0x102) = 9;
|
||||
} else {
|
||||
*(s16 *)(a0 + 0x102) = 4;
|
||||
}
|
||||
break;
|
||||
next:
|
||||
++i;
|
||||
e += 0x10C;
|
||||
if ((s16)i >= 0x60) break;
|
||||
}
|
||||
}
|
||||
return D_801F32D8 < 2;
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8017E590", func_8017FFD0);
|
||||
|
||||
|
||||
@@ -4221,7 +4221,50 @@ void func_8017D9C4(void *a0)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_004/nonmatchings/ov_SC02_004_jr_8017AE2C", func_8017DA30);
|
||||
extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern void func_80128EA8();
|
||||
extern s32 rand(void);
|
||||
extern u8 D_800D387C[];
|
||||
extern u8 D_800D3888[];
|
||||
extern u8 D_801817A4[];
|
||||
extern u8 D_801817B0[];
|
||||
|
||||
void func_8017DA30(s32 a0) {
|
||||
register s32 ent __asm__("$16");
|
||||
s32 sub;
|
||||
s32 hw;
|
||||
u32 r;
|
||||
|
||||
ent = a0;
|
||||
sub = *(s32 *)((u8 *)ent + 0x20);
|
||||
if (*(s16 *)((u8 *)ent + 0x2E) != 0) {
|
||||
func_8001CC3C(sub, (s32)D_800D387C, 0, 0);
|
||||
*(u8 *)((u8 *)sub + 0x27) = 0x9C;
|
||||
*(u16 *)((u8 *)sub + 0x1A) = 0x4000;
|
||||
*(u16 *)((u8 *)sub + 0x18) = 0x4000;
|
||||
*(s32 *)((u8 *)sub + 4) |= 0x50000040;
|
||||
func_80128EA8(sub, (s32)((u8 *)ent + 0x24), (s32)D_800D3888);
|
||||
hw = 0x2C;
|
||||
} else {
|
||||
register s32 q __asm__("$4");
|
||||
register s32 p __asm__("$5");
|
||||
register s32 e __asm__("$6");
|
||||
func_8001CC3C(sub, (s32)D_801817A4, 0, 0);
|
||||
q = sub;
|
||||
p = (s32)((u8 *)ent + 0x24);
|
||||
e = (s32)D_801817B0;
|
||||
__asm__ __volatile__("" : "=r"(q), "=r"(p), "=r"(e) : "0"(q), "1"(p), "2"(e));
|
||||
*(u8 *)((u8 *)q + 0x27) = 0x33;
|
||||
func_80128EA8(q, p, e);
|
||||
hw = 0x1C;
|
||||
}
|
||||
*(u16 *)((u8 *)ent + 0x1A) = hw;
|
||||
r = rand();
|
||||
*(s16 *)((u8 *)ent + 0x12) = (r & 0x3F) - 0x20;
|
||||
*(u16 *)((u8 *)ent + 0x16) = 0x20 - ((r >> 4) & 0x3F);
|
||||
*(u16 *)((u8 *)ent + 2) += 1;
|
||||
}
|
||||
|
||||
|
||||
void func_8017DB2C(s32 a0) {
|
||||
s32 ret;
|
||||
|
||||
@@ -5793,7 +5793,48 @@ s16 param_3;
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_80186424);
|
||||
extern u8 D_80126B5C;
|
||||
extern s32 D_80126B60;
|
||||
extern u16 D_80126B62;
|
||||
extern s32 D_80126B64;
|
||||
extern u16 D_80126B66;
|
||||
extern s32 *D_80126B78;
|
||||
extern void func_8012F0BC(s32 *a0, s32 *a1, s32 *a2);
|
||||
extern void func_8012F1A4(s32 *a0, s32 a1, s32 *a2);
|
||||
extern void func_80132784(s32 a0, s32 a1, u32 a2);
|
||||
|
||||
void func_80186424(s32 arg0)
|
||||
{
|
||||
if (*(u8 *)(arg0 + 0x74) != 0) {
|
||||
extern s32 gVecX __asm__("D_80126B5C");
|
||||
s32 in[4];
|
||||
s32 out[4];
|
||||
s32 tmp[4];
|
||||
u16 h;
|
||||
|
||||
in[0] = gVecX;
|
||||
in[1] = D_80126B60;
|
||||
in[2] = D_80126B64;
|
||||
func_8012F0BC((s32 *)(*(s32 *)(arg0 + 0x20) + 0x34), in, tmp);
|
||||
func_80132784(arg0, *(s32 *)(arg0 + 0x64), *(u16 *)(arg0 + 0xFC));
|
||||
func_8012F1A4((s32 *)(*(s32 *)(arg0 + 0x20) + 0x34), (s32)tmp, out);
|
||||
gVecX = out[0];
|
||||
D_80126B60 = out[1];
|
||||
D_80126B64 = out[2];
|
||||
h = *((u16 *)&gVecX + 1);
|
||||
*(u16 *)((s32)D_80126B78 + 8) = h;
|
||||
*(s32 *)((s32)D_80126B78 + 0x48) = (s32)(s16)h;
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
*(u16 *)((s32)D_80126B78 + 0xA) = D_80126B62;
|
||||
*(s32 *)((s32)D_80126B78 + 0x4C) = (s32)(s16)D_80126B62;
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
*(u16 *)((s32)D_80126B78 + 0xC) = D_80126B66;
|
||||
*(s32 *)((s32)D_80126B78 + 0x50) = (s32)(s16)D_80126B66;
|
||||
} else {
|
||||
func_80132784(arg0, *(s32 *)(arg0 + 0x64), *(u16 *)(arg0 + 0xFC));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
@@ -5895,7 +5936,52 @@ void func_80186600(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_8018675C);
|
||||
extern u16 D_801E4BBC;
|
||||
extern u16 D_801E43B4;
|
||||
extern s32 D_801270C8;
|
||||
extern u8 D_80195AC4[];
|
||||
extern s16 D_80195ACE;
|
||||
|
||||
|
||||
extern D_80195AF4_t D_80195AF4[];
|
||||
|
||||
s32 func_8018675C(void *a0)
|
||||
{
|
||||
s32 flags = *(s32 *)((u8 *)a0 + 0xE8);
|
||||
|
||||
if (flags & 0x800) {
|
||||
s16 t = *(s16 *)((u8 *)a0 + 0xE0);
|
||||
if (t >= 0) {
|
||||
if (*(s16 *)((u8 *)a0 + 6) < *(s16 *)((u8 *)D_80195AF4 + t * 8)) {
|
||||
u16 old = D_801E43B4;
|
||||
s32 f6 = *(s16 *)((u8 *)D_80195AF4 + t * 8 + 6);
|
||||
D_801E43B4 = old + 1;
|
||||
D_801270C8 = f6;
|
||||
*(s16 *)((u8 *)a0 + 0xE0) = -1;
|
||||
}
|
||||
}
|
||||
if (*(s32 *)((u8 *)a0 + 0x10) >= 0) {
|
||||
return 0;
|
||||
}
|
||||
if (*(s16 *)((u8 *)a0 + 6) < D_80195ACE) {
|
||||
*(s16 *)((u8 *)a0 + 0xFE) = 0;
|
||||
*(s32 *)((u8 *)a0 + 0xE8) |= 8;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
} else {
|
||||
if (*(s32 *)((u8 *)a0 + 0x18) > 0) {
|
||||
s32 phase = D_801E4BBC;
|
||||
if (*(s16 *)((u8 *)D_80195AC4 + phase * 4) < *(s16 *)((u8 *)a0 + 0xE)) {
|
||||
*(s32 *)((u8 *)a0 + 0xE8) = flags | ((phase == 2) ? 0x400 : 8);
|
||||
*(s16 *)((u8 *)a0 + 0xFE) = 0;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
extern u16 D_801E4BBC;
|
||||
extern s32 D_80195AD0[];
|
||||
@@ -8267,7 +8353,7 @@ void func_8018A3B4(void *a0) {
|
||||
* which is gcc's emit_block_move for align < 4. */
|
||||
|
||||
extern Blob8_8018A47C D_801E2F28;
|
||||
extern void func_8018A6A0(s32 a0, Blob8_8018A47C *a1);
|
||||
extern void func_8018A6A0();
|
||||
|
||||
void func_8018A47C(s32 a0) {
|
||||
Blob8_8018A47C tmp;
|
||||
@@ -8350,7 +8436,7 @@ void func_8018A4C4(s32 a0)
|
||||
/* 8-byte, alignment-1 blob: the target copies it with lwl/lwr + swl/swr,
|
||||
* which is gcc's emit_block_move for align < 4. */
|
||||
|
||||
extern void func_8018A6A0(s32 a0, Blob8_8018A47C *a1);
|
||||
extern void func_8018A6A0();
|
||||
|
||||
void func_8018A658(s32 a0) {
|
||||
|
||||
@@ -8362,7 +8448,77 @@ void func_8018A658(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_8018A6A0);
|
||||
void func_8018A6A0(s32 a0, u16 *a1)
|
||||
{
|
||||
u8 *s0 = (u8 *)a0;
|
||||
u16 *s1 = a1;
|
||||
u16 vec0[4];
|
||||
register u16 counter __asm__("$2");
|
||||
s32 res[3];
|
||||
s32 flags;
|
||||
u8 *puVar;
|
||||
|
||||
func_8012B2CC(a0);
|
||||
|
||||
__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"
|
||||
"lw $12, 20(%0)\n"
|
||||
"lw $13, 24(%0)\n"
|
||||
"ctc2 $12, $5\n"
|
||||
"lw $14, 28(%0)\n"
|
||||
"ctc2 $13, $6\n"
|
||||
"ctc2 $14, $7\n"
|
||||
: : "r"((u8 *)*(s32 *)(s0 + 0x20) + 0x34) : "$12", "$13", "$14");
|
||||
|
||||
vec0[2] = 0;
|
||||
vec0[0] = 0;
|
||||
vec0[1] = counter = *s1;
|
||||
|
||||
goto test;
|
||||
body:
|
||||
puVar = func_8012913C(0xC);
|
||||
if (puVar != 0) {
|
||||
__asm__ __volatile__(
|
||||
"lwc2 $0, 0(%0)\n"
|
||||
"lwc2 $1, 4(%0)\n"
|
||||
"nop\n"
|
||||
"nop\n"
|
||||
"mvmva 1, 0, 0, 0, 0\n"
|
||||
: : "r"(vec0) : "memory");
|
||||
__asm__ __volatile__(
|
||||
"swc2 $25, 0(%0)\n"
|
||||
"swc2 $26, 4(%0)\n"
|
||||
"swc2 $27, 8(%0)\n"
|
||||
: : "r"(res) : "memory");
|
||||
__asm__ __volatile__(
|
||||
"cfc2 $12, $31\n"
|
||||
"nop\n"
|
||||
"sw $12, 0(%0)\n"
|
||||
: : "r"(&flags) : "$12", "memory");
|
||||
*(u16 *)(puVar + 6) = (u16)res[0];
|
||||
*(u16 *)(puVar + 0xA) = (u16)res[1];
|
||||
*(u16 *)(puVar + 0xE) = (u16)(res[2] - 8);
|
||||
}
|
||||
{
|
||||
register u16 tmp __asm__("$3");
|
||||
counter = vec0[1];
|
||||
tmp = *(u16 *)(s1 + 2);
|
||||
counter += tmp;
|
||||
vec0[1] = counter;
|
||||
}
|
||||
test:
|
||||
if ((s16)counter < *(s16 *)(s1 + 1)) goto body;
|
||||
}
|
||||
|
||||
|
||||
void func_8018A7D0(void) {
|
||||
}
|
||||
|
||||
@@ -3335,7 +3335,7 @@ extern Blk16_8018A1D8 D_801E2F18;
|
||||
extern u8 *func_8018A30C(s32 a0, s32 a1);
|
||||
extern u8 * func_8018A30C(s32 a0, s32 a1);
|
||||
extern Blob8_8018A47C D_801E2F28;
|
||||
extern void func_8018A6A0(s32 a0, Blob8_8018A47C *a1);
|
||||
extern void func_8018A6A0();
|
||||
extern Blob8_8018A4C4 D_801E2F30;
|
||||
extern Blk16_8018A4C4 D_801E2F38;
|
||||
extern void func_8018A4C4(s32 a0);
|
||||
@@ -3912,7 +3912,54 @@ void func_8018F230(void *param_1)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_8018EA04", func_8018F2C4);
|
||||
extern s32 D_801270CC;
|
||||
extern s32 D_801270C8;
|
||||
extern u8 D_80196C34[];
|
||||
extern void func_8012C218(void *a0);
|
||||
extern s32 func_80185D6C();
|
||||
|
||||
void func_8018F2C4(s32 a0)
|
||||
{
|
||||
s32 var_s1;
|
||||
s32 *p8;
|
||||
|
||||
var_s1 = 0;
|
||||
if (*(u16 *)(*(s32 *)&D_801270CC) != 0x3D) {
|
||||
func_8012C218((void *)a0);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((*(u8 *)(*(s32 *)&D_801270CC + 0xC1) - 3U) < 2) {
|
||||
*(u16 *)(a0 + 0x5C) = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
p8 = &D_801270C8;
|
||||
if (*p8 == 0x1B) {
|
||||
*(s32 *)(a0 + 0x58) = (s32)D_80196C34;
|
||||
*(u16 *)(a0 + 0x5C) = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (func_80185D6C() != 0) {
|
||||
var_s1 = 0x80;
|
||||
}
|
||||
*(u16 *)(a0 + 0x5C) = 0x800;
|
||||
if (*p8 < 0x1B) {
|
||||
if (*(s16 *)(a0 + 0xE) < *(s16 *)(*(s32 *)&D_801270CC + 0xE)) {
|
||||
*(u16 *)(a0 + 0xDC) = *(s16 *)(*(s32 *)&D_801270CC + 0xE);
|
||||
}
|
||||
*(u16 *)(a0 + 6) = *(u16 *)(a0 + 0xDE);
|
||||
*(u16 *)(a0 + 0xE) = *(u16 *)(a0 + 0xDC) + var_s1;
|
||||
} else {
|
||||
if (*(s16 *)(*(s32 *)&D_801270CC + 6) < *(s16 *)(a0 + 6)) {
|
||||
*(u16 *)(a0 + 0xDE) = *(s16 *)(*(s32 *)&D_801270CC + 6);
|
||||
}
|
||||
*(u16 *)(a0 + 6) = *(u16 *)(a0 + 0xDE) - var_s1;
|
||||
*(u16 *)(a0 + 0xE) = *(u16 *)(a0 + 0xDC);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern void func_8013C414(void *a0, void *a1);
|
||||
extern s32 D_8019AA5C;
|
||||
|
||||
@@ -6176,7 +6176,39 @@ void func_8017F05C(void) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_8017AE2C", func_8017F07C);
|
||||
void func_8017F07C(void) {
|
||||
extern s32 D_801C9A5C;
|
||||
extern s32 D_801C9968;
|
||||
extern s32 D_801C996C;
|
||||
extern s32 D_801C9970;
|
||||
extern s32 D_801C9974;
|
||||
extern u8 D_801A041C[];
|
||||
extern s32 D_80187858[];
|
||||
extern void func_8017F1B8(void *a0, s32 a1);
|
||||
|
||||
switch (D_801C9A5C) {
|
||||
case 0:
|
||||
D_801C9968 = 1;
|
||||
D_801C996C = 0;
|
||||
D_801C9970 = 1;
|
||||
D_801C9974 = 1;
|
||||
D_801C9A5C = 1;
|
||||
break;
|
||||
case 1:
|
||||
if (--D_801C9968 == 0) {
|
||||
D_801C9968 = 2;
|
||||
func_8017F1B8(D_801A041C, D_801C996C * 6);
|
||||
D_801C996C = (D_801C996C + 1) & 7;
|
||||
}
|
||||
if (--D_801C9970 == 0) {
|
||||
D_801C9970 = 8;
|
||||
func_800183E0(D_80187858[D_801C9974]);
|
||||
D_801C9974 = (D_801C9974 + 1) & 0xF;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void func_8017F1B8(void *a0, s32 a1)
|
||||
|
||||
@@ -3813,7 +3813,50 @@ s32 func_8017DBD0(u32 a0v)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC02_039/nonmatchings/ov_SC02_039_jr_8017BEBC", func_8017DC7C);
|
||||
#include "common.h"
|
||||
|
||||
extern u16 D_80126CAC;
|
||||
extern u16 D_8019B568[];
|
||||
extern void func_8002D59C(s32 a0, u16 a1, s32 a2);
|
||||
|
||||
void func_8017DC7C(s32 a0)
|
||||
{
|
||||
s16 t;
|
||||
s16 temp;
|
||||
s16 vol;
|
||||
|
||||
t = *(u16 *)(a0 + 6) - D_80126CAC;
|
||||
if (t < 0) {
|
||||
t = -t;
|
||||
}
|
||||
|
||||
if (t >= 0x801) {
|
||||
*(s32 *)(*(s32 *)(a0 + 0x20) + 4) |= 0x80000000;
|
||||
} else {
|
||||
*(s32 *)(*(s32 *)(a0 + 0x20) + 4) &= 0x7FFFFFFF;
|
||||
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x14) += D_8019B568[*(s16 *)(a0 + 0x70)];
|
||||
}
|
||||
|
||||
temp = t - 0x140;
|
||||
if (temp < 0) {
|
||||
vol = 0x7F;
|
||||
} else if (temp >= 0x200) {
|
||||
vol = 0;
|
||||
} else {
|
||||
vol = 0x7F - (temp >> 2);
|
||||
}
|
||||
|
||||
if (vol == 0) {
|
||||
if (*(s16 *)(a0 + 0x84) != 0) {
|
||||
func_8002D59C(4, 0x6DD, *(u16 *)(a0 + 0x70));
|
||||
*(s16 *)(a0 + 0x84) = 0;
|
||||
}
|
||||
} else {
|
||||
func_8002D59C(0x6DD, (vol | 0x1000) & 0xFFFF, *(u16 *)(a0 + 0x70));
|
||||
*(s16 *)(a0 + 0x84) = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// @class: struct
|
||||
|
||||
@@ -7831,7 +7831,71 @@ void func_80182F10(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8017AE2C", func_80182F4C);
|
||||
extern u8 D_801AD31C[];
|
||||
|
||||
s32 func_80182F4C(s32 a0, s16 a1)
|
||||
{
|
||||
register u8 *base __asm__("$8");
|
||||
s16 val;
|
||||
register u16 c0 __asm__("$11");
|
||||
register u16 c1 __asm__("$7");
|
||||
u16 outerIdx;
|
||||
u16 innerIdx;
|
||||
u16 diff;
|
||||
s32 prod;
|
||||
u16 temp2;
|
||||
u16 idx2;
|
||||
u16 *tbl;
|
||||
register s32 p1 __asm__("$4");
|
||||
s32 p2;
|
||||
s32 p3;
|
||||
u16 dx;
|
||||
u16 n;
|
||||
u16 sample;
|
||||
s32 addr;
|
||||
s16 cur;
|
||||
u16 v;
|
||||
|
||||
base = D_801AD31C;
|
||||
c0 = 0xF800;
|
||||
val = (s16)a0;
|
||||
|
||||
do {
|
||||
c1 = 0xFA00;
|
||||
outerIdx = (c0 + 0x8000) >> 7 & 0x1FF;
|
||||
do {
|
||||
innerIdx = (c1 + 0x8000) >> 7 & 0x1FF;
|
||||
diff = innerIdx - *(u16 *)(base + 2);
|
||||
prod = diff * *(u16 *)(base + 4);
|
||||
p1 = *(s32 *)(base + 0x14);
|
||||
p2 = *(s32 *)(base + 0x18);
|
||||
p3 = *(s32 *)(base + 0x1C);
|
||||
temp2 = outerIdx - *(u16 *)(base + 0);
|
||||
tbl = *(u16 **)(base + 0x8);
|
||||
idx2 = (prod + temp2) * 2;
|
||||
dx = tbl[idx2];
|
||||
n = tbl[idx2 + 1];
|
||||
p1 += dx;
|
||||
while (n--) {
|
||||
sample = *(u16 *)p1;
|
||||
if (!(sample & 0x8000)) {
|
||||
addr = p2 + sample * 18;
|
||||
} else {
|
||||
v = sample & 0x7FFF;
|
||||
addr = p3 + v * 22;
|
||||
}
|
||||
cur = *(s16 *)addr;
|
||||
if (cur == val) {
|
||||
*(s16 *)addr = a1;
|
||||
}
|
||||
p1 += 2;
|
||||
}
|
||||
c1 += 0x80;
|
||||
} while (c1 <= 0xFDFF);
|
||||
c0 += 0x80;
|
||||
} while (c0 <= 0xFBFF);
|
||||
}
|
||||
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
||||
@@ -5038,7 +5038,63 @@ void func_8018162C(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_024/nonmatchings/ov_SC03_024_jr_8017DF84", func_80181668);
|
||||
extern s32 D_8018B0BC;
|
||||
extern u8 D_800D387C[];
|
||||
extern u8 D_800D3888[];
|
||||
|
||||
void func_80181668(s32 param_1)
|
||||
{
|
||||
s32 p;
|
||||
register s32 r1 __asm__("$16");
|
||||
register s32 r2 __asm__("$17");
|
||||
s32 r3;
|
||||
s32 r4;
|
||||
s16 v;
|
||||
s32 buf[3];
|
||||
s32 *pAddr;
|
||||
|
||||
p = *(s32 *)(param_1 + 0x20);
|
||||
*(u8 **)(p + 0x20) = D_800D387C;
|
||||
*(u8 *)(p + 0x27) = 0x9c;
|
||||
*(u16 *)(p + 0x1a) = 0x4000;
|
||||
*(u16 *)(p + 0x18) = 0x4000;
|
||||
*(u8 *)(p + 0x24) = 0x40;
|
||||
*(u8 *)(p + 0x25) = 0x30;
|
||||
*(u8 *)(p + 0x26) = 0x30;
|
||||
*(u32 *)(p + 4) = *(u32 *)(p + 4) | 0x50000000;
|
||||
|
||||
func_80128EA8(*(s32 *)(param_1 + 0x20), param_1 + 0x24, (s32)D_800D3888);
|
||||
|
||||
r1 = rand();
|
||||
r2 = rand();
|
||||
r3 = rand();
|
||||
v = (r1 & 3) * 1024;
|
||||
v += (r2 & 3) * 250;
|
||||
v += (r3 & 3) * 68;
|
||||
|
||||
r4 = rand();
|
||||
pAddr = &D_8018B0BC;
|
||||
*pAddr = 0xFFFC0000 - ((r4 & 0xF) << 14);
|
||||
|
||||
func_8001382C(v, (void *)((s32)pAddr - 8), buf);
|
||||
|
||||
{
|
||||
s32 b0, b1, b2;
|
||||
s32 cnt;
|
||||
|
||||
b0 = buf[0];
|
||||
cnt = *(u16 *)(param_1 + 2);
|
||||
*(s32 *)(param_1 + 0x10) = b0;
|
||||
b1 = buf[1];
|
||||
cnt = cnt + 1;
|
||||
*(s32 *)(param_1 + 0x14) = b1;
|
||||
b2 = buf[2];
|
||||
*(s32 *)(param_1 + 0x1c) = 0x1e;
|
||||
*(u16 *)(param_1 + 2) = cnt;
|
||||
*(s32 *)(param_1 + 0x18) = b2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extern void func_8012931C(struct vec *a0);
|
||||
extern s32 func_80128ED8(s32 param_1, s32 *param_2);
|
||||
|
||||
@@ -4712,7 +4712,33 @@ void func_80182CA4(s32 param_1) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017FF7C", func_80182D70);
|
||||
#include "common.h"
|
||||
|
||||
typedef struct { s32 w[8]; } Blk20_80182D70;
|
||||
|
||||
extern s32 func_8004787C(s32 a0);
|
||||
extern s32 func_80047948(s32 a0);
|
||||
extern void RotMatrixY(s32 a0, void *a1);
|
||||
extern void func_800484EC(s32 a0, s32 a1, s32 a2);
|
||||
|
||||
void func_80182D70(s32 arg) {
|
||||
register void *s1 __asm__("$17") = (void *)arg;
|
||||
extern Blk20_80182D70 aD800AE620_80182D70 __asm__("D_800AE620");
|
||||
Blk20_80182D70 m;
|
||||
s32 vec[3];
|
||||
s32 out[3];
|
||||
|
||||
vec[0] = *(s16 *)(s1 + 0xE0) * func_80047948(*(s32 *)(s1 + 0x1C) << 7);
|
||||
vec[1] = *(s16 *)(s1 + 0xE0) * func_8004787C(*(s32 *)(s1 + 0x1C) << 7);
|
||||
vec[2] = 0;
|
||||
m = aD800AE620_80182D70;
|
||||
RotMatrixY(*(s16 *)(s1 + 0xFC), &m);
|
||||
func_800484EC((s32)&m, (s32)vec, (s32)out);
|
||||
*(s16 *)(s1 + 0x6) = *(u16 *)(s1 + 0x88) + (out[0] >> 12);
|
||||
*(s16 *)(s1 + 0xA) = *(u16 *)(s1 + 0x8A) + (out[1] >> 12);
|
||||
*(s16 *)(s1 + 0xE) = *(u16 *)(s1 + 0x8C) + (out[2] >> 12);
|
||||
}
|
||||
|
||||
|
||||
extern s32 D_801C48F0[];
|
||||
extern s32 func_8012C044(s32 a0);
|
||||
|
||||
@@ -4558,7 +4558,69 @@ void func_80181AA0(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_090/nonmatchings/ov_SC03_090_jr_8017CA80", func_80181B50);
|
||||
#include "common.h"
|
||||
|
||||
|
||||
|
||||
extern u16 func_80148800(s32 *a0);
|
||||
extern void func_80181D30(s32 param_1, s16 *param_2);
|
||||
extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
|
||||
void func_80181B50(s32 a0) {
|
||||
|
||||
extern s32 D_80126B58;
|
||||
extern s16 D_8018F780[];
|
||||
extern Blk8_80126940_8017D6D0_80181C80 D_80126940;
|
||||
Blk8_80126940_8017D6D0_80181C80 sp10;
|
||||
u8 t;
|
||||
s16 v1;
|
||||
register s16 c __asm__("$4"); /* clamp store value — target stores every bound from $a0 */
|
||||
|
||||
if (func_80148800(&D_80126B58) & 3) {
|
||||
t = (*(u8 *)(a0 + 5) + 1) & 1;
|
||||
*(u8 *)(a0 + 5) = t;
|
||||
*(s32 *)(a0 + 0x14) = D_8018F780[t];
|
||||
}
|
||||
sp10 = D_80126940;
|
||||
|
||||
v1 = sp10.v[0];
|
||||
if (v1 < -0x43F) {
|
||||
if (v1 < -0x4FF) {
|
||||
*(s16 *)(a0 + 0x2E) = 0;
|
||||
} else {
|
||||
*(s16 *)(a0 + 0x2E) = -0x500 - v1;
|
||||
}
|
||||
} else {
|
||||
*(s16 *)(a0 + 0x2E) = 0;
|
||||
}
|
||||
|
||||
*(s16 *)(a0 + 0x28) = (s16)func_80012F74(*(s16 *)(a0 + 0x28), *(s16 *)(a0 + 0x2E), 4, 1);
|
||||
|
||||
{
|
||||
s16 lo = -0x580;
|
||||
if (sp10.v[0] < lo) {
|
||||
c = -0x580;
|
||||
sp10.v[0] = c;
|
||||
}
|
||||
}
|
||||
{
|
||||
s16 lim = -0x380;
|
||||
if (lim < sp10.v[0]) {
|
||||
c = -0x380;
|
||||
sp10.v[0] = c;
|
||||
}
|
||||
}
|
||||
{
|
||||
s16 lo2 = 0xC0;
|
||||
if (sp10.v[2] < lo2) {
|
||||
c = 0xC0;
|
||||
sp10.v[2] = c;
|
||||
}
|
||||
}
|
||||
|
||||
func_80181D30(a0, sp10.v);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* 8 bytes, align 2 -> lwl/lwr/swl/swr copy (cookbook §48-C2) */
|
||||
|
||||
@@ -2923,7 +2923,67 @@ void func_801826C8(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80182268", func_80182788);
|
||||
#include "/home/musashi/bfm-decomp/src/shared/engine_core.h"
|
||||
|
||||
extern u16 func_80148800(s32 *a0);
|
||||
extern void func_80182B48(s32 param_1, s16 *param_2);
|
||||
extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
|
||||
void func_80182788(s32 a0) {
|
||||
|
||||
extern s32 D_80126B58;
|
||||
extern s16 D_80190714[];
|
||||
extern Blk8_80126940_8017D6D0_80182A98 D_80126940;
|
||||
Blk8_80126940_8017D6D0_80182A98 sp10;
|
||||
u8 t;
|
||||
s16 v1;
|
||||
register s16 c __asm__("$4");
|
||||
|
||||
if (func_80148800(&D_80126B58) & 3) {
|
||||
t = (*(u8 *)(a0 + 5) + 1) & 1;
|
||||
*(u8 *)(a0 + 5) = t;
|
||||
*(s32 *)(a0 + 0x14) = D_80190714[t];
|
||||
}
|
||||
sp10 = D_80126940;
|
||||
|
||||
v1 = sp10.v[0];
|
||||
if (v1 >= 0x700) {
|
||||
if (v1 < 0x7C0) {
|
||||
*(s16 *)(a0 + 0x2E) = 0x7C0 - v1;
|
||||
} else {
|
||||
*(s16 *)(a0 + 0x2E) = 0;
|
||||
}
|
||||
} else {
|
||||
*(s16 *)(a0 + 0x2E) = 0;
|
||||
}
|
||||
|
||||
*(s16 *)(a0 + 0x28) = (s16)func_80012F74(*(s16 *)(a0 + 0x28), *(s16 *)(a0 + 0x2E), 4, 1);
|
||||
|
||||
{
|
||||
s16 lo = 0x540;
|
||||
if (sp10.v[0] < lo) {
|
||||
c = lo;
|
||||
sp10.v[0] = c;
|
||||
}
|
||||
}
|
||||
{
|
||||
s16 lim = 0x800;
|
||||
if (lim < sp10.v[0]) {
|
||||
c = lim;
|
||||
sp10.v[0] = c;
|
||||
}
|
||||
}
|
||||
{
|
||||
s16 lo2 = -0x3C0;
|
||||
if (sp10.v[2] < lo2) {
|
||||
c = lo2;
|
||||
sp10.v[2] = c;
|
||||
}
|
||||
}
|
||||
|
||||
func_80182B48(a0, sp10.v);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* 8 bytes, align 2 -> lwl/lwr/swl/swr copy (cookbook §48-C2) */
|
||||
|
||||
@@ -3850,7 +3850,48 @@ void func_8017DD44(s32 a0)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8017BEBC", func_8017DDDC);
|
||||
|
||||
|
||||
extern s32 func_8012DEB8(s32 a0, s32 a1, s32 a2);
|
||||
|
||||
s32 func_8017DDDC(s32 a0, s32 a1) {
|
||||
V4_8017FAC0_8017D708 p2;
|
||||
V4_8017FAC0_8017D708 p1;
|
||||
register s32 rp1 __asm__("$17");
|
||||
s32 mid;
|
||||
|
||||
rp1 = (s32)&p1;
|
||||
|
||||
p2.x = p1.x = *(u16 *)(a1 + 4);
|
||||
p2.y = p1.y = *(u16 *)(a1 + 8) - 0x10;
|
||||
p2.z = *(u16 *)(a1 + 0xC);
|
||||
p1.z = *(u16 *)(a1 + 0xE);
|
||||
if (func_8012DEB8(a0, (s32)&p2, rp1) != 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
p2.x = p1.x = mid = (*(s16 *)(a1 + 4) + *(s16 *)(a1 + 6)) >> 1;
|
||||
if (func_8012DEB8(a0, (s32)&p2, rp1) != 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
p2.x = p1.x = (u32)(*(s16 *)(a1 + 4) + mid) >> 1;
|
||||
if (func_8012DEB8(a0, (s32)&p2, rp1) != 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
p2.x = p1.x = (u32)(*(s16 *)(a1 + 6) + mid) >> 1;
|
||||
if (func_8012DEB8(a0, (s32)&p2, rp1) != 0) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
p2.x = p1.x = *(u16 *)(a1 + 6);
|
||||
if (func_8012DEB8(a0, (s32)&p2, rp1) != 0) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
extern void func_8012C1B8(void);
|
||||
extern void func_8012CAE4(void *a0);
|
||||
@@ -4052,7 +4093,51 @@ void func_8017E27C(void *a0)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8017BEBC", func_8017E3F8);
|
||||
typedef struct { s32 w[8]; } Blk20_8017E3F8;
|
||||
|
||||
void func_8017E3F8(void *a0)
|
||||
{
|
||||
extern Blk20_8017E3F8 D_800AE620;
|
||||
extern s32 D_801847E0;
|
||||
extern void RotMatrixY(s32 a0, void *a1);
|
||||
extern void func_8004914C(void *a0);
|
||||
extern void func_800491AC(void *a0);
|
||||
extern void RotTransSV(void *a0, void *a1, void *a2);
|
||||
extern void func_8012E32C(void);
|
||||
extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3);
|
||||
|
||||
s32 s0 = (s32)a0;
|
||||
s16 v[4];
|
||||
Blk20_8017E3F8 mtx = D_800AE620;
|
||||
s32 flag;
|
||||
s32 sxy;
|
||||
s32 z;
|
||||
s32 ent;
|
||||
u16 t;
|
||||
s32 f;
|
||||
|
||||
mtx.w[5] = *(s16 *)(s0 + 0x6);
|
||||
mtx.w[6] = *(s16 *)(s0 + 0xA);
|
||||
mtx.w[7] = *(s16 *)(s0 + 0xE);
|
||||
|
||||
ent = *(s32 *)(s0 + 0x20);
|
||||
RotMatrixY(*(s16 *)(ent + 0x12), &mtx);
|
||||
func_8004914C(&mtx);
|
||||
func_800491AC(&mtx);
|
||||
|
||||
RotTransSV(&D_801847E0, v, &flag);
|
||||
func_8012E32C();
|
||||
|
||||
*(s32 *)(s0 + 0xE0) = RotTransPers((s32)v, (s32)&sxy, &z, &flag);
|
||||
|
||||
t = *(u16 *)&sxy;
|
||||
f = flag;
|
||||
*(s16 *)(s0 + 0x100) = t;
|
||||
if (f < 0) {
|
||||
*(s16 *)(s0 + 0x100) = -0x3E7;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
typedef struct { s32 flag; u16 xy[2]; s32 sp1c; } Out_8017E910_8017E508;
|
||||
typedef struct { s16 a, b, c, d; } SV4_8017E910_8017E508;
|
||||
|
||||
@@ -7453,7 +7453,37 @@ s32 a2;
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8017AE2C", func_80181EE8);
|
||||
typedef struct { s32 w[8]; } Blk20_80181EE8;
|
||||
typedef struct { s16 vx, vy, vz, pad; } Svec_80181EE8;
|
||||
|
||||
extern Blk20_80181EE8 D_800AE620;
|
||||
extern s32 func_8012B8A4(s16 *a0);
|
||||
extern void RotMatrixY(s32 a0, void *a1);
|
||||
extern void ApplyMatrixSV(void *a0, void *a1, void *a2);
|
||||
extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5);
|
||||
extern u8 D_801152A8[];
|
||||
|
||||
void func_80181EE8(s32 param_1)
|
||||
{
|
||||
Svec_80181EE8 out;
|
||||
Svec_80181EE8 sv;
|
||||
Blk20_80181EE8 m;
|
||||
s16 r;
|
||||
s32 t;
|
||||
|
||||
m = D_800AE620;
|
||||
t = (*(s16 *)(*(u32 *)(param_1 + 0x20) + 0x18) * 9) >> 9;
|
||||
sv.vx = sv.vy = 0;
|
||||
sv.vz = -t;
|
||||
r = func_8012B8A4((s16 *)param_1);
|
||||
RotMatrixY(r, &m);
|
||||
ApplyMatrixSV(&m, &sv, &out);
|
||||
out.vx += *(u16 *)(param_1 + 6);
|
||||
out.vy += *(u16 *)(param_1 + 0xA) - t;
|
||||
out.vz += *(u16 *)(param_1 + 0xE);
|
||||
func_8012F568(1, 0x4002, 0, 0x14, (s32)&out, (s32)D_801152A8);
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_004/nonmatchings/ov_SC04_004_jr_8017AE2C", func_80182014);
|
||||
|
||||
@@ -7566,7 +7596,7 @@ extern void func_8012C218(void *a0);
|
||||
extern void func_801439C0(void*);
|
||||
extern void func_801821E0();
|
||||
extern s32 func_80181D1C(s32 a0);
|
||||
extern void func_80181EE8(void*);
|
||||
extern void func_80181EE8();
|
||||
|
||||
void func_801823F4(s32 param_1) {
|
||||
s32 flag;
|
||||
@@ -7606,7 +7636,7 @@ void func_801824A8(void) {
|
||||
extern void func_8012CBF4(s32);
|
||||
extern s32 func_80181D1C(s32);
|
||||
extern s32 func_80181DAC(s32);
|
||||
extern void func_80181EE8(void *);
|
||||
extern void func_80181EE8();
|
||||
extern void func_80182170(s32, s32);
|
||||
extern void func_801439C0(void *);
|
||||
extern void func_8012C218(void *);
|
||||
|
||||
@@ -4755,7 +4755,43 @@ void func_8017E394(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8017AE2C", func_8017E628);
|
||||
extern void (*D_8018EE98[])(void);
|
||||
extern void func_8012C218(void *a0);
|
||||
extern s32 func_80143C74(s32 a0, s32 a1);
|
||||
extern s32 rand(void);
|
||||
|
||||
void func_8017E628(s32 a0)
|
||||
{
|
||||
s32 s0;
|
||||
s32 v0;
|
||||
s32 v1;
|
||||
|
||||
s0 = a0;
|
||||
D_8018EE98[*(u16 *)(s0 + 0x2)]();
|
||||
if (*(s16 *)(s0 + 0x102) != 0) {
|
||||
v0 = *(s32 *)(s0 + 0x20);
|
||||
*(u16 *)(v0 + 0x18) -= 0x80;
|
||||
v1 = *(s32 *)(s0 + 0x20);
|
||||
if (*(s16 *)(v1 + 0x18) < 0x100) {
|
||||
func_8012C218((void *)s0);
|
||||
} else {
|
||||
*(u16 *)(v1 + 0x1A) -= 0x80;
|
||||
v1 = *(s32 *)(s0 + 0x20);
|
||||
*(u16 *)(v1 + 0x1C) -= 0x80;
|
||||
if (--*(s16 *)(s0 + 0x102) == 0) {
|
||||
*(s16 *)(s0 + 0x102) = 3;
|
||||
s0 = func_80143C74(s0, 0);
|
||||
if (s0 != 0) {
|
||||
*(s16 *)(s0 + 0x16) = -8;
|
||||
*(u16 *)(s0 + 0xA) -= 0x20;
|
||||
*(s16 *)(s0 + 0x12) = (rand() & 7) - 4;
|
||||
*(s16 *)(s0 + 0x1A) = (rand() & 7) - 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void func_8017E754(s32 arg0) {
|
||||
|
||||
@@ -3456,7 +3456,49 @@ void func_8017D6D8(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8017BEBC", func_8017D924);
|
||||
extern void func_800D20C0();
|
||||
extern unsigned char D_801A6B00;
|
||||
extern unsigned char D_801A6B01;
|
||||
extern unsigned char D_801A6B02;
|
||||
|
||||
void func_8017D924(s32 arg0) {
|
||||
short sp10[3];
|
||||
short sp18[3];
|
||||
s32 temp;
|
||||
register s32 color __asm__("$2");
|
||||
u16 cnt;
|
||||
|
||||
sp10[0] = -0x100;
|
||||
sp10[1] = -0x252;
|
||||
sp10[2] = 0x60;
|
||||
func_800D20C0(sp10, sp18, 5);
|
||||
*(u16 *)(arg0 + 6) = sp10[0];
|
||||
*(u16 *)(arg0 + 0xA) = sp10[1];
|
||||
*(u16 *)(arg0 + 0xE) = sp10[2];
|
||||
temp = *(s32 *)(arg0 + 0x1C);
|
||||
if (temp < 0x20) {
|
||||
color = temp * 2 - 0x80;
|
||||
} else {
|
||||
color = (0x20 - temp) * 2 - 0x40;
|
||||
}
|
||||
D_801A6B01 = color;
|
||||
D_801A6B00 = D_801A6B02 = (u8)color >> 2;
|
||||
*(s32 *)(arg0 + 0x1C) += 1;
|
||||
if (*(s32 *)(arg0 + 0x1C) >= 0x40) {
|
||||
*(s32 *)(arg0 + 0x1C) = 0;
|
||||
}
|
||||
if (*(s16 *)(arg0 + 0xFC) != 0) {
|
||||
D_801A6B02 = 0xE0;
|
||||
D_801A6B00 = 0xE0;
|
||||
D_801A6B01 = 0xFF;
|
||||
*(u16 *)(*(s32 *)(arg0 + 0x20) + 0x18) = 0x1800;
|
||||
*(u16 *)(*(s32 *)(arg0 + 0x20) + 0x1A) = 0x2000;
|
||||
cnt = *(u16 *)(arg0 + 2);
|
||||
*(s32 *)(arg0 + 0x1C) = 0x20;
|
||||
*(u16 *)(arg0 + 2) = cnt + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8017BEBC", func_8017DA50);
|
||||
|
||||
|
||||
@@ -3981,7 +3981,46 @@ void func_80182CE0(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_801816DC", func_80182D1C);
|
||||
void func_80182D1C(void *a0)
|
||||
{
|
||||
extern u32 D_8019FF00;
|
||||
void *s3 = a0;
|
||||
void *s2;
|
||||
u32 p;
|
||||
u32 q;
|
||||
s32 y;
|
||||
s32 r1;
|
||||
u16 h;
|
||||
|
||||
s2 = *(void **)((s32)s3 + 0x20);
|
||||
func_80182F44(s3);
|
||||
p = D_8019FF00;
|
||||
if (p != 0) {
|
||||
h = *(u16 *)((s32)s2 + 0x12) + 0x800;
|
||||
q = *(u32 *)((s32)p + 0x20);
|
||||
y = h & 0xFFF;
|
||||
if (*(u16 *)((s32)q + 0x12) & 0x400) {
|
||||
r1 = func_80012A60(y, 0x400);
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
__asm__ __volatile__("" ::: "memory");
|
||||
if (!((s16)r1 > (s16)func_80012A60(y, 0xC00))) {
|
||||
*(s16 *)((s32)s2 + 0x12) = 0x400;
|
||||
} else {
|
||||
*(s16 *)((s32)s2 + 0x12) = 0xC00;
|
||||
}
|
||||
} else {
|
||||
r1 = func_80012A60(y, 0);
|
||||
if (!((s16)r1 > (s16)func_80012A60(y, 0x800))) {
|
||||
*(s16 *)((s32)s2 + 0x12) = 0;
|
||||
goto done;
|
||||
}
|
||||
*(s16 *)((s32)s2 + 0x12) = 0x800;
|
||||
}
|
||||
}
|
||||
done:
|
||||
func_80171990((u8 *)s3);
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern s32 func_80183020();
|
||||
|
||||
@@ -4921,7 +4921,46 @@ void func_8017FE9C(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8017FEEC);
|
||||
extern s32 func_8012C1B8(void);
|
||||
extern void func_8012CAE4(void *a0);
|
||||
extern void func_8001C2C4(s32 a0);
|
||||
extern u16 D_801865D8;
|
||||
extern u16 D_801865DA;
|
||||
extern u16 D_801865DC;
|
||||
extern u16 D_801865DE;
|
||||
extern void D_801866C8;
|
||||
extern s16 D_80186728;
|
||||
extern s32 func_8012AD50(void *a0);
|
||||
|
||||
void func_8017FEEC(void *a0)
|
||||
{
|
||||
s32 ret;
|
||||
s32 t;
|
||||
|
||||
ret = func_8012C1B8();
|
||||
*(s32 *)((u8 *)a0 + 0x20) = ret;
|
||||
if (ret == 0) {
|
||||
func_8012CAE4(a0);
|
||||
return;
|
||||
}
|
||||
|
||||
func_8001C2C4(ret);
|
||||
|
||||
*(s16 *)((u8 *)a0 + 0xFE) = *(u16 *)((u8 *)&D_801865D8 + (*(s16 *)((u8 *)a0 + 0x70) << 3)) & 0xFF00;
|
||||
t = *(u16 *)((u8 *)&D_801865D8 + (*(s16 *)((u8 *)a0 + 0x70) << 3)) & 0x7;
|
||||
*(u16 *)((u8 *)a0 + 0x5C) = 0x8C00;
|
||||
*(s16 *)((u8 *)a0 + 0x6) = 0;
|
||||
*(s16 *)((u8 *)a0 + 0x102) = t;
|
||||
*(s32 *)((u8 *)a0 + 0x58) = ((s32)((u8 *)&D_801866C8 + (t << 4))) | 0x40000000;
|
||||
|
||||
*(s16 *)((u8 *)a0 + 0xA) = *(u16 *)((u8 *)&D_801865DA + (*(s16 *)((u8 *)a0 + 0x70) << 3));
|
||||
*(s16 *)((u8 *)a0 + 0xE) = *(u16 *)((u8 *)&D_801865DC + (*(s16 *)((u8 *)a0 + 0x70) << 3));
|
||||
*(s16 *)(*(s32 *)((u8 *)a0 + 0x20) + 0x10) = *(u16 *)((u8 *)&D_801865DE + (*(s16 *)((u8 *)a0 + 0x70) << 3)) & 0xFF0;
|
||||
*(s16 *)((u8 *)a0 + 0x104) = 0;
|
||||
*(s32 *)((u8 *)a0 + 0x1C) = *(s16 *)((u8 *)&D_80186728 + (*(s16 *)((u8 *)a0 + 0x70) << 1));
|
||||
func_8012AD50(a0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8018000C);
|
||||
|
||||
@@ -4311,7 +4311,33 @@ void func_8017DAE8(void *a0, void *a1)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8017BEBC", func_8017DC20);
|
||||
extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2);
|
||||
extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2);
|
||||
|
||||
void func_8017DC20(void *param_1, void *param_2, void *param_3) {
|
||||
s32 pad[12];
|
||||
s32 p1 = (s32)param_1;
|
||||
s32 p2 = (s32)param_2;
|
||||
s32 p3 = (s32)param_3;
|
||||
|
||||
*(s32 *)(p1 + 0x8) = (s16)func_80012C6C((s32)*(s16 *)(p1 + 0x8), (s32)*(s16 *)(p1 + 0xC), 4);
|
||||
*(s32 *)(p1 + 0x10) = (s16)func_80012C6C((s32)*(s16 *)(p1 + 0x10), (s32)*(s16 *)(p1 + 0x14), 4);
|
||||
*(s16 *)(p1 + 0x18) = func_80012ABC((s32)*(s16 *)(p1 + 0x18), (s32)*(s16 *)(p1 + 0x20), 4);
|
||||
*(s16 *)(p1 + 0x1A) = func_80012ABC((s32)*(s16 *)(p1 + 0x1A), (s32)*(s16 *)(p1 + 0x22), 4);
|
||||
*(s16 *)(p1 + 0x1C) = func_80012ABC((s32)*(s16 *)(p1 + 0x1C), (s32)*(s16 *)(p1 + 0x24), 4);
|
||||
*(s16 *)(p1 + 0x28) = func_80012C6C((s32)*(s16 *)(p1 + 0x28), (s32)*(s16 *)(p1 + 0x2E), 0x10);
|
||||
*(s16 *)(p1 + 0x2A) = func_80012C6C((s32)*(s16 *)(p1 + 0x2A), (s32)*(s16 *)(p1 + 0x30), 0x10);
|
||||
*(s16 *)(p1 + 0x2C) = func_80012C6C((s32)*(s16 *)(p1 + 0x2C), (s32)*(s16 *)(p1 + 0x32), 0x10);
|
||||
|
||||
*(s32 *)(p1 + 0x48) = (s32)*(s16 *)(p1 + 0x28) + (s32)*(s16 *)(p3 + 0);
|
||||
*(s32 *)(p1 + 0x4C) = (s32)*(s16 *)(p1 + 0x2A) + (s32)*(s16 *)(p3 + 2);
|
||||
*(s32 *)(p1 + 0x50) = (s32)*(s16 *)(p1 + 0x2C) + (s32)*(s16 *)(p3 + 4);
|
||||
|
||||
*(s32 *)(p1 + 0x3C) = (s32)*(s16 *)(p2 + 0);
|
||||
*(s32 *)(p1 + 0x40) = (s32)*(s16 *)(p2 + 2);
|
||||
*(s32 *)(p1 + 0x44) = (s32)*(s16 *)(p2 + 4);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user