feat(decomp): ox wave bq overlays — 81 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 15:09:11 -06:00
parent 3e9ef768b4
commit 1ae1012a9e
26 changed files with 6125 additions and 1510 deletions
+2 -1
View File
@@ -2852,7 +2852,7 @@ ov_SC03_121_ELF := $(ov_SC03_121_OUT).elf
ov_SC03_121_MAPFILE := $(ov_SC03_121_OUT).map
ov_SC03_121_LD_SCRIPT := $(ov_SC03_121_OUT).ld
ov_SC03_121_SPLAT_YAML := config/splat.ov_SC03_121.yaml
ov_SC03_121_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_121.o,ov_SC03_121_jr_8012ACE0.o,tail2.data.o,ov_SC03_121_jr_80135888.o,tail3.data.o,ov_SC03_121_jr_80135A4C.o,tail4.data.o,ov_SC03_121_jr_80135D20.o,tail5.data.o,ov_SC03_121_jr_801380E0.o,ov_SC03_121_o0c.o,tail6.data.o,ov_SC03_121_jr_8013F350.o,tail7.data.o,ov_SC03_121_jr_8013FFD8.o,tail8.data.o,ov_SC03_121_jr_80140608.o,tail9.data.o,ov_SC03_121_jr_8015444C.o,ov_SC03_121_jr_80154C24.o,ov_SC03_121_jr_801588CC.o,ov_SC03_121_jr_80159C84.o,tail10.data.o,ov_SC03_121_jr_8015A3C8.o,tail11.data.o,ov_SC03_121_jr_8015AE2C.o,tail12.data.o,ov_SC03_121_jr_8015C32C.o,tail13.data.o,ov_SC03_121_jr_8016AB6C.o,tail14.data.o,ov_SC03_121_jr_80171B4C.o,ov_SC03_121_jr_801734BC.o,tail15.data.o,ov_SC03_121_jr_801789AC.o,ov_SC03_121_jr_80178D40.o,tail16.data.o,ov_SC03_121_jr_8017A4AC.o,tail17.data.o,ov_SC03_121_jr_8017AE2C.o,ov_SC03_121_jr_8017BEBC.o,tail18.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
ov_SC03_121_JTBL_INTERLEAVE := --order tail.data.o,ov_SC03_121.o,ov_SC03_121_jr_8012ACE0.o,tail2.data.o,ov_SC03_121_jr_80135888.o,tail3.data.o,ov_SC03_121_jr_80135A4C.o,tail4.data.o,ov_SC03_121_jr_80135D20.o,tail5.data.o,ov_SC03_121_jr_801380E0.o,ov_SC03_121_o0c.o,tail6.data.o,ov_SC03_121_jr_8013F350.o,tail7.data.o,ov_SC03_121_jr_8013FFD8.o,tail8.data.o,ov_SC03_121_jr_80140608.o,tail9.data.o,ov_SC03_121_jr_8015444C.o,ov_SC03_121_jr_80154C24.o,ov_SC03_121_jr_801588CC.o,ov_SC03_121_jr_80159C84.o,tail10.data.o,ov_SC03_121_jr_8015A3C8.o,tail11.data.o,ov_SC03_121_jr_8015AE2C.o,tail12.data.o,ov_SC03_121_jr_8015C32C.o,tail13.data.o,ov_SC03_121_jr_8016AB6C.o,tail14.data.o,ov_SC03_121_jr_80171B4C.o,ov_SC03_121_jr_801734BC.o,tail15.data.o,ov_SC03_121_jr_801789AC.o,ov_SC03_121_jr_80178D40.o,tail16.data.o,ov_SC03_121_jr_8017A4AC.o,tail17.data.o,ov_SC03_121_jr_8017AE2C.o,ov_SC03_121_jr_8017BEBC.o,tail18.data.o,ov_SC03_121_jr_8017E1D0.o,tail19.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC03_121/ov_SC03_121.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC03_121/ov_SC03_121_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
build/src/ov_SC03_121/ov_SC03_121_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
@@ -3009,6 +3009,7 @@ build/src/ov_SC04_002/ov_SC04_002_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
build/src/ov_SC04_002/ov_SC04_002_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC04_002/ov_SC04_002_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC04_002/ov_SC04_002_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
build/src/ov_SC04_002/ov_SC04_002_jr_8017BEBC.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC04_002/ov_SC04_002_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
ov_SC04_002_CHECK_SHA := config/check.ov_SC04_002.sha
ov_SC04_002_SYMBOLS := config/symbols.ov_SC04_002.txt
+3
View File
@@ -121,6 +121,7 @@ segments:
- [0x52354, c, ov_SC03_121_jr_8017A4AC]
- [0x52cd4, c, ov_SC03_121_jr_8017AE2C]
- [0x53d64, c, ov_SC03_121_jr_8017BEBC]
- [0x56078, c, ov_SC03_121_jr_8017E1D0]
- [0x59fe0, data, tail]
- [0x84680, .rodata, ov_SC03_121] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x8475c, .rodata, ov_SC03_121_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
@@ -164,6 +165,8 @@ segments:
- [0x857a0, .rodata, ov_SC03_121_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x857b4, .rodata, ov_SC03_121_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x857d4, data, tail18]
- [0x85804, .rodata, ov_SC03_121_jr_8017E1D0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x85818, data, tail19]
- [0x86E54, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x86E57] # EOF marker = the 0.4.dec byte length
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
+1 -1
View File
@@ -163,7 +163,7 @@ segments:
- [0x97894, data, tail17]
- [0x97898, .rodata, ov_SC04_002_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x978ac, .rodata, ov_SC04_002_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x978cc, data, tail18]
- [0x978e0, data, tail18]
- [0x995DC, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x995DF] # EOF marker = the 0.4.dec byte length
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
+62 -3
View File
@@ -5679,7 +5679,22 @@ void func_80186B08(s32 param_1)
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_80186BB8);
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_80186C0C);
void func_80186C0C(void *a0) {
typedef struct { u8 pad[0x5C]; u16 f5C; } F5C_S;
extern F5C_S *D_801E43CC[];
extern s8 D_80195ABC[];
s32 i;
s32 ent;
s32 c;
for (i = 0; (c = D_80195ABC[i]) >= 0; i++) {
ent = (s32)D_801E43CC[c];
if (*(s32 *)(ent + 0xDC) == 0) {
*(u16 *)(ent + 0xAE) = 0;
}
}
}
typedef struct {
u8 pad[0x5C];
@@ -6724,7 +6739,35 @@ void func_801884C8(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_8018850C);
#include "common.h"
extern void func_8013240C(s32 a0, s32 a1, u32 a2);
extern void func_80183FCC();
extern void func_8012AD44(s32 *a0, s16 a1);
extern void func_80132784(s32 a0, s32 a1, u32 a2);
extern s32 D_801E44E0;
extern u32 D_801E44EC;
extern void (*D_80196338[])(void);
void func_8018850C(s32 *s0) {
s32 *v1;
v1 = (s32 *)*(s32 *)((u8 *)s0 + 0x20);
*(u16 *)((u8 *)v1 + 0x2C) |= 1;
((void (*)(s32))func_8013240C)((s32)&D_801E44E0);
if (D_801E44EC & 0x4000) {
v1 = (s32 *)*(s32 *)((u8 *)s0 + 0x64);
*(u32 *)((u8 *)v1 + 0xE8) |= 2;
func_80183FCC((s32)s0);
*(u8 *)((u8 *)s0 + 0xC1) = 0;
*(u16 *)((u8 *)s0 + 0x5E) = 0;
func_8012AD44(s0, 2);
*(s32 *)((u8 *)s0 + 0x58) = (s32)&D_80196338 | 0x40000000;
func_80132784((s32)s0, *(s32 *)((u8 *)s0 + 0x64), 0x15);
}
}
#include "common.h"
@@ -10223,7 +10266,23 @@ void func_8018DDFC(void *a0) {
}
INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_8018DE5C);
extern s32 D_801270C8;
extern void func_801439C0(u8 *a0);
extern void func_8012C218(void *a0);
void func_8018DE5C(void *a0) {
void *p;
if (D_801270C8 > 0x15) {
p = *(void **)((s32)a0 + 0xD0);
if (p != NULL) {
*(s16 *)((s32)p + 0) = 0;
}
func_801439C0((u8 *)*(s32 *)((s32)a0 + 0xCC));
func_8012C218((void *)a0);
}
}
void func_8018DEB8(s16 param_1) {
struct {
+17 -1
View File
@@ -9228,7 +9228,23 @@ void func_80186734(void *a0) {
}
INCLUDE_ASM("asm/ov_SC02_011/nonmatchings/ov_SC02_011_jr_8017AE2C", func_80186740);
s32 func_80186740(void)
{
typedef struct { unsigned char b[4]; } __attribute__((packed, aligned(1))) Block4;
extern Block4 D_801EB524;
extern unsigned char D_801EB525;
extern unsigned char D_801EB526;
unsigned char *p = (unsigned char *)&D_801EB524;
if (*p < 0xF8U) {
*p += 4;
D_801EB525 += 4;
D_801EB526 += 8;
}
}
extern void func_8002D4C8(s32 arg0, s32 arg1);
+62 -1
View File
@@ -9194,7 +9194,68 @@ void func_801856A0(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8017AE2C", func_8018584C);
#define SRM_8018584C(r0) __asm__ volatile ( \
"lw $12, 0( %0 );" \
"lw $13, 4( %0 );" \
"ctc2 $12, $0;" \
"ctc2 $13, $1;" \
"lw $12, 8( %0 );" \
"lw $13, 12( %0 );" \
"lw $14, 16( %0 );" \
"ctc2 $12, $2;" \
"ctc2 $13, $3;" \
"ctc2 $14, $4" \
: \
: "r"( r0 ) \
: "$12", "$13", "$14" )
#define STM_8018584C(r0) __asm__ volatile ( \
"lw $12, 20( %0 );" \
"lw $13, 24( %0 );" \
"ctc2 $12, $5;" \
"lw $14, 28( %0 );" \
"ctc2 $13, $6;" \
"ctc2 $14, $7" \
: \
: "r"( r0 ) \
: "$12", "$13", "$14" )
/* DEF-SIDE ALIAS (§37/§124, §136f#2): TU declares `extern s32 func_8018584C(s32)`
* (TU:8796) and both callers discard the result; the real definition is
* effectively VOID (nothing carried out in $v0 — §42d#1 inverse rule). */
void aF8018584C(s32 a0) __asm__("func_8018584C");
void aF8018584C(s32 a0)
{
extern u8 D_801C5A48[];
extern u8 D_801C5A50[];
s32 out0[2]; /* sp+0x10 */
s32 out1[2]; /* sp+0x18 */
s32 flag; /* sp+0x20 */
s32 *mtx;
s32 t;
mtx = *(s32 **)(a0 + 0x20) + 13;
SRM_8018584C(mtx);
STM_8018584C(mtx);
RotTransSV(D_801C5A48, out0, &flag);
RotTransSV(D_801C5A50, out1, &flag);
func_8018594C(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12),
(s32)out0,
*(s16 *)(a0 + 0xDC));
func_8018594C(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12),
(s32)out1,
*(s16 *)(a0 + 0xDC));
t = *(u16 *)(a0 + 0xDC) + 1;
*(u16 *)(a0 + 0xDC) = t;
if ((s16)t >= 3) {
*(u16 *)(a0 + 0xDC) = 2;
}
}
extern u32 D_801C5988[];
extern u8 *func_801290DC(s32 a0, u8 *a1);
+36 -1
View File
@@ -8821,7 +8821,42 @@ void func_80185948(s16 *a0) {
}
INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_8017AE2C", func_80185A24);
extern void func_8012CBA4(s32 a0);
extern void func_8012ADE4(u8 *a0);
extern void func_80185D3C(void *a0, s32 a1);
s32 func_80185A24(s32 arg0) {
s32 ret;
s32 raw;
s32 flags;
s32 h;
ret = 0;
raw = ((s32 (*)(s32))func_8012CBA4)(arg0);
flags = raw;
__asm__ __volatile__("" : "=r"(flags) : "0"(flags));
if ((raw & 0x6000) != 0x2000) {
func_8012ADE4((u8 *)arg0);
if (*(s32 *)(arg0 + 0x1C) > 8) {
*(s32 *)(arg0 + 0x1C) = *(s32 *)(arg0 + 0x1C) - 8;
}
}
h = (s16)flags;
if (((h & 0x8000) != 0) || ((flags & 0x6000) != 0x2000)) {
if (*(s16 *)(arg0 + 0x106) == 0) {
*(s16 *)(arg0 + 0x106) = (h < 0) ? -0x100 : 0x100;
}
if (*(s32 *)(arg0 + 0x1C) > 4) {
*(s32 *)(arg0 + 0x1C) = *(s32 *)(arg0 + 0x1C) - 4;
}
ret = 1;
*(u16 *)(arg0 + 0x108) = *(u16 *)(arg0 + 0x108) + 1;
} else {
*(u16 *)(arg0 + 0x106) = 0;
}
return (s16)(ret | ((s32 (*)(void *, s32))func_80185D3C)((void *)arg0, 0));
}
#include "common.h"
+175 -7
View File
@@ -3292,7 +3292,19 @@ void func_8017D980(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017D9BC);
extern int func_8001AAA0(void);
extern void func_8017E2C8(void);
s32 func_8017D9BC(s32 a0) {
if (((s32 (*)(s32))func_8001AAA0)(0x64) == 0) {
return 0;
}
func_8017E2C8();
*(s32 *)(a0 + 0x28) = 0x80;
*(u8 *)(a0 + 0x15) += 1;
return 0;
}
extern void func_800D1E28(void);
@@ -3370,7 +3382,33 @@ void func_8017DB84(s32 *a0) {
}
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017DC38);
extern int func_800D0F8C(int a0);
extern void func_80171A04(s32 *a0);
extern void func_80171A10(s32 *a0);
void func_8017DC38(s32 *a0) {
s32 ent = a0;
u8 id;
switch (*(u8 *)(ent + 0x218) + 1) {
case 1:
id = 0x5B;
break;
case 4:
id = 0x5C;
break;
case 8:
id = 0x5D;
break;
}
if (func_800D0F8C(id) != 0) {
func_80171A04(ent);
} else {
func_80171A10(ent);
}
}
void func_8017DCDC(s32 arg0)
{
@@ -3399,7 +3437,44 @@ void func_8017DD5C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017DD98);
extern s32 D_8019BE48;
extern s32 D_8019BE8C;
extern s32 D_8019BED0;
extern void func_80029124(s32, s32);
extern void func_800D0F4C(s32);
extern s32 func_8013767C(s32);
extern s32 func_80171990(u8 *);
void func_8017DD98(s32 a0) {
register s32 *ptr __asm__("$16");
register s32 id __asm__("$17");
s32 ev;
s32 v1;
v1 = *(u8 *)(a0 + 0x218) + 1;
switch (v1) {
case 1:
ev = 0xC1;
ptr = &D_8019BE48;
id = 0x5B;
break;
case 4:
ev = 0xC2;
ptr = &D_8019BE8C;
id = 0x5C;
break;
case 8:
ev = 0xC3;
id = 0x5D;
ptr = &D_8019BED0;
break;
}
func_80029124(ev, 1);
func_800D0F4C(id & 0xFF);
*(s32 *)(a0 + 0x198) = func_8013767C(ptr);
func_80171990((u8 *)a0);
}
extern s32 func_801399F0(s32 a0);
extern void func_80139914(s32 a0);
@@ -3786,7 +3861,39 @@ INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017F0A
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017F140);
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017F198);
void func_8017F198(s32 a0) {
extern s32 *D_80126B78;
extern u16 D_80184E90[];
extern s32 func_80178970(void);
extern void func_80178D18(void);
extern void func_80029124(s32, s32);
extern void func_8012C218();
extern s16 func_80174774(void);
extern void func_801439C0(u8 *);
extern void func_8017ED40(s32);
if (func_80178970() != 0) {
((void (*)(s32))func_80178D18)(a0);
if (*(s16 *)(a0 + 0x10A) == 2) {
func_80029124(D_80184E90[*(s16 *)(a0 + 0x70)], 1);
func_8012C218(a0);
} else {
func_8017ED40(a0);
}
} else {
if (*(s16 *)(a0 + 0x10A) != 0) {
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) =
*(u16 *)((s8 *)D_80126B78 + 0x12) + 0x400;
if (((s32 (*)(void))func_80174774)() != 0) {
*(s32 *)(*(s32 *)(a0 + 0x20) + 4) |= 0x80000000;
if (*(s32 *)(a0 + 0xCC) != 0) {
func_801439C0((u8 *)*(s32 *)(a0 + 0xCC));
}
}
}
}
}
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017F288);
@@ -3980,9 +4087,47 @@ void func_8017FE4C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017FE88);
extern s32 func_8012C354(s32 a0, s32 a1);
extern s32 func_80029504(void);
extern void func_8012C218(void *a0);
extern s32 func_80143970(s32 a0);
extern void func_8012A828(s32 a0, void *a1);
extern void func_8012B23C(s32 a0);
extern void (*D_80184F4C[])(void *);
extern s32 D_801A45A8;
void func_8017FE88(s32 arg0)
{
if (func_8012C354(arg0, (s32)D_80184F4C) == 0) {
return;
}
if ((u32)func_80029504() >= 0x3D4) {
func_8012C218((void *)arg0);
return;
}
*(u8 *)((s32)arg0 + 0xC0) = 1;
*(s32 *)((s32)arg0 + 0xB4) = -1;
func_80143970(arg0);
func_8012A828(arg0, &D_801A45A8);
(*(u16 *)((s32)arg0 + 0x2))++;
func_8012B23C(arg0);
*(s32 *)((s32)arg0 + 0x1C) = 0x1E;
*(s32 *)((s32)arg0 + 0xD4) = (s32)arg0;
}
extern s32 func_80178B18(s32 param_1, s32 param_2);
extern s16 D_80184FB0;
void func_8017FF28(s32 a0) {
if (--*(s32 *)(a0 + 0x1C) == 0) {
*(u16 *)(a0 + 2) += 1;
func_80178B18(a0, (s32)&D_80184FB0);
}
}
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_8017FF28);
@@ -4269,7 +4414,30 @@ s32 func_801803E8(u32 a0v)
}
INCLUDE_ASM("asm/ov_SC03_013/nonmatchings/ov_SC03_013_jr_8017C730", func_80180494);
extern u16 D_800B99D8;
extern void func_80180518(s32 a0);
void func_80180494(void *a0)
{
s32 mode;
s32 v;
if (*(u16 *)((s32)a0 + 2) == 0) {
func_80180518((s32)a0);
return;
}
mode = D_800B99D8;
if (mode & 4) {
v = ((mode & 3) * 48) + 0x3F;
} else {
v = ~((mode & 3) * 48);
}
{
extern u8 D_801AD358[1];
D_801AD358[0] = (u8)v;
}
}
typedef struct { u8 c[4]; } Blk4_80180518;
+76 -4
View File
@@ -4265,7 +4265,30 @@ DEFINE_func_80188470() /* dedup: shared engine-core @0x80188470 (src/shared) */
DEFINE_func_80188478() /* dedup: shared engine-core @0x80188478 (src/shared) */
INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_8018858C);
extern s32 func_80184028();
extern u16 D_80126B66;
extern void func_8002D4C8(s32 a0, s32 a1);
void func_8018858C(s32 a0) {
s32 v0 = *(s16 *)(a0 + 0x84);
if (v0 != 0) {
v0 = func_80184028();
if (v0 == 0x18) {
*(s16 *)(a0 + 0x84) = 0;
}
} else {
s32 a1;
v0 = func_80184028();
if (v0 == 0xF) {
*(s16 *)(a0 + 0x84) = 1;
a1 = -(s16)D_80126B66 >> 3;
if (a1 < 0) a1 = 0;
if (a1 > 0x7F) a1 = 0x7F;
func_8002D4C8(0xBAB, (u16)(a1 | 0x1000));
}
}
}
extern void (*D_801918B0[])(void);
@@ -4628,7 +4651,29 @@ extern s32 func_80189110(void);
INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_801897C4);
INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_80189824);
extern u8 D_801EAC94;
extern u8 D_801EAC95;
extern u8 D_801EAC96;
void func_80189824(void *arg0) {
s16 *p;
u8 *q;
p = *(s16 **)((s32)arg0 + 0x20);
if (*(s16 *)((s32)p + 0x18) > 0x800) {
*(s16 *)((s32)p + 0x18) = *(s16 *)((s32)p + 0x18) - 0x200;
}
if (*(s16 *)((s32)p + 0x1A) > 0x800) {
*(s16 *)((s32)p + 0x1A) = *(s16 *)((s32)p + 0x1A) - 0x200;
}
q = &D_801EAC94;
if (*q >= 0xC1) {
*q -= 4;
D_801EAC95 -= 8;
D_801EAC96 -= 8;
}
}
#include "common.h"
@@ -4690,7 +4735,23 @@ void func_801899F4(int param_1)
}
INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_80189A60);
extern SV4 D_80191BEC;
extern s32 func_80029504(void);
extern s32 func_80029178(s32 arg);
extern void func_80029124(s32, s32);
extern s32 func_801899AC(void *a0, s32 *p);
void func_80189A60(void *a0) {
if (func_80029504() == 0x2DA) {
if ((func_80029178(0x11F) & 0xFF) == 0) {
func_80029124(0x11F, 1);
*(s32 *)((s32)a0 + 0xDC) = func_801899AC(a0, (s32 *)&D_80191BEC);
}
}
}
INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_80189AC4);
@@ -5106,7 +5167,18 @@ s32 aF8018A224(param_1)
}
INCLUDE_ASM("asm/ov_SC03_014/nonmatchings/ov_SC03_014_jr_801848E4", func_8018A31C);
typedef struct { s16 x; u16 y; u16 z; s16 w; } Rec8_8018A31C;
void func_8018A31C(s32 a0) {
extern Rec8_8018A31C D_801E3990[];
s32 i = 0;
if (D_801E3990[0].x != 0) {
do {
func_8012C658(0x10D, i, a0);
i++;
} while (D_801E3990[i].x != 0);
}
}
/* func_8018A390 — allocates a GTE-projection slot, seeds a random spread
* vector from a per-index table, rotates it by the model's Y angle, applies
+95 -3
View File
@@ -7890,7 +7890,37 @@ INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_8018923
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_801892E0);
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80189380);
extern void func_800183E0(s32 a0);
extern s32 func_8012C588(s32 a0, s32 a1);
extern s32 D_80190780[];
void func_80189380(s32 arg0)
{
u16 var;
s16 cmp;
s32 a0;
var = *(u16 *)(arg0 + 0xFC);
if ((s16)var < 13) {
func_800183E0(D_80190780[(s16)var >> 1]);
cmp = *(s16 *)(arg0 + 0xFC);
if (cmp == 5) {
if (*(s16 *)(*(s32 *)(arg0 + 0x64) + 0xFC) == 0) {
a0 = func_8012C588(*(s16 *)(arg0 + 0xFE), arg0);
if (a0 != 0) {
*(s32 *)(a0 + 0x64) = *(s32 *)(arg0 + 0x64);
*(s32 *)(a0 + 4) = *(s32 *)(*(s32 *)(arg0 + 0x64) + 4);
*(s32 *)(a0 + 8) = *(s32 *)(*(s32 *)(arg0 + 0x64) + 8) - 0x40000;
*(s32 *)(a0 + 0xC) = *(s32 *)(*(s32 *)(arg0 + 0x64) + 0xC);
*(s16 *)(*(s32 *)(arg0 + 0x64) + 0xFC) = 8;
}
}
}
} else {
*(s16 *)(arg0 + 2) = 2;
}
}
void func_8018947C(s32 arg0) {
extern u8 D_8019079C[];
@@ -8049,7 +8079,37 @@ void func_80189D8C(s32 arg0)
}
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_80189E28);
void func_80189E28(s32 arg0)
{
extern void func_800183E0(s32);
extern u8 D_801E0B3C[];
extern u8 D_801E0B5C[];
extern u8 D_80078E78[];
u8 *base;
s32 a;
s32 b;
s32 cond;
base = D_80078E78;
if (*(u16 *)(arg0 + 0xFC) & 0xF) {
func_800183E0(D_801E0B5C);
} else {
func_800183E0(D_801E0B3C);
}
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;
}
}
void func_80189EDC(s32 arg0) {
s16 var;
@@ -8965,7 +9025,39 @@ void func_8018B5F4(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC03_028/nonmatchings/ov_SC03_028_jr_8017DF98", func_8018B698);
extern void func_8014C010(s32 a0, s32 a1);
extern u16 D_800B99DA;
extern void func_8013C9C4(void *a0);
extern s32 D_80190E98;
void func_8018B698(s32 *s0) {
s32 pad[8]; /* dead: forces target's 0x38 frame */
func_80149020(s0);
func_80147A84((s32)s0);
func_801473EC(s0);
func_80148038((s32)s0, 0x18000);
func_80147460((s32)s0);
if ((D_800B99DA & 1) == 0) {
func_8014C010((s32)s0, 2);
}
if (func_801535F4(s0) == 4) {
func_8013C9C4(&D_80190E98);
} else if (func_80146E98((s32)s0) == 0) {
goto clamp;
}
func_801477E8(s0, 0x40000);
func_80146CA0(s0);
return;
clamp:
if (*(s16 *)((u8 *)s0 + 0xE) >= 0x240) {
return;
}
*(s16 *)((u8 *)s0 + 0xE) = 0x240;
}
#include "common.h"
+88 -4
View File
@@ -4229,7 +4229,20 @@ void func_801814B0(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017DC70", func_801814EC);
extern u8 func_8014BF6C(void);
extern s32 func_8012AD50(void *a0);
void func_801814EC(void *a0) {
s32 s0;
s0 = ((s32 (*)(void))func_8014BF6C)();
while ((s0 & 0xFF) != 0) {
func_8012C658(0x103, (s0 & 0xFF) - 1, (s32)a0);
s0 = s0 - 1;
}
func_8012AD50(a0);
}
void func_80181554(void) {
}
@@ -4559,7 +4572,39 @@ void func_80182050(u8 *a0, u8 *a1) {
}
INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017DC70", func_801820E4);
#include "common.h"
extern u8 D_8018BBAC[];
extern s32 D_80126B58;
extern void func_80015978(s32 a0, s32 *a1);
extern s32 func_80013294(void *a0, void *a1);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_801820E4(u8 *arg0)
{
s32 sp10[2];
u8 *p;
s32 base;
s16 snd;
p = D_8018BBAC + *(s16 *)(arg0 + 0xFC) * 8;
base = (s32)&D_80126B58;
if (*(s16 *)(p + 6) != 0) {
func_80015978(base + 4, sp10);
snd = func_80013294(sp10, p);
if (snd < 0xC00) {
snd = (0xC00 - snd) * 127 / 0xC00;
if (snd < 0) {
snd = 0;
}
if (snd >= 0x80) {
snd = 0x7F;
}
func_8002D4C8(*(u16 *)(p + 6), (u16)snd | 0x1000);
}
}
}
extern void (*D_8018BC04[])(void);
@@ -4959,7 +5004,22 @@ void func_80182AF4(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017DC70", func_80182B34);
extern void func_8012BD14(s32 a0);
extern s32 func_80178BF8();
extern void func_80172710(void);
s32 aF80182B34(void *a0) __asm__("func_80182B34");
s32 aF80182B34(void *a0)
{
if (((s32 (*)(s32))func_8012BD14)(*(s32 *)((s32)a0 + 0x64)) > 0x1000) {
return 0;
}
*(s16 *)(*(s32 *)((s32)a0 + 0x64) + 0x2) = 2;
func_80178BF8();
return (s32)func_80172710;
}
extern void (*D_801C4250[])(void);
@@ -7485,7 +7545,31 @@ void func_801866A4(void) {
}
INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017DC70", func_801866CC);
extern void func_80186F9C(s32 a0, s32 a1, s32 a2);
extern void func_8012B14C(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, void *a1);
extern s32 D_801C9234;
extern u8 D_801C93E0[];
extern u8 D_801C93EC[];
extern u8 D_801C9268[];
void func_801866CC(s32 param_1) {
s32 s0 = param_1;
s32 v1;
*(u8 *)(s0 + 0xC2) = 0;
*(u8 *)(s0 + 0xC3) = 0;
*(u16 *)(s0 + 0x98) = 0;
func_80186F9C(s0, (s32)&D_801C9234, 0);
v1 = *(u16 *)(s0 + 0x5E);
if (v1 == 9 || v1 == 0x1C) {
func_8012B14C(s0, (s32)D_801C93E0);
} else {
func_8012B14C(s0, (s32)D_801C93EC);
}
func_8012A828(s0, (void *)D_801C9268);
}
#include "common.h"
+127 -3
View File
@@ -3813,7 +3813,73 @@ void func_8017EC5C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_8017EC98);
#include "common.h"
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001CA1C(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, void *a1);
extern void func_8017F0C8(s32 a0, s32 a1);
extern s32 func_8012B77C(s32 out, s32 from, s32 to);
extern void func_80049CAC(s32 a0, s32 a1);
extern void func_800484EC(s32 a0, s32 a1, s32 a2);
extern s32 D_80126B64;
extern u8 D_8018E064[];
extern u8 D_8018E0C4[];
extern u8 D_8018E10C[];
extern u8 D_8018E11C[];
void func_8017EC98(void *a0) {
s32 sp10[3];
s16 sp20[3];
s32 sp28[3];
s32 sp38[8];
s32 sp58;
s32 obj;
obj = ((s32 (*)(void))func_8012C1B8)();
if (obj == 0) {
func_8012CAE4((void *)a0);
return;
}
*(s32 *)(a0 + 0x20) = obj;
func_8001CA1C(obj, (s32)D_8018E064);
func_8012A828((s32)a0, D_8018E0C4);
*(s16 *)(obj + 0x18) = (*(s16 *)(a0 + 0xFC) < 0) ? 0x3000 : -0x3000;
*(s16 *)(obj + 0x1A) = *(s32 *)(a0 + 0xDC);
*(s32 *)(obj + 0x4) |= 0x50000000;
*(u16 *)(obj + 0x2C) |= 0x10;
*(u16 *)(a0 + 0x5C) = 0x8000;
*(s16 *)(a0 + 0xAE) = -1;
if (*(u16 *)(a0 + 0x70) & 1) {
func_8017F0C8((s32)a0, 0xFFF40000);
*(u16 *)(a0 + 0x34) += 1;
} else {
sp10[0] = *(s32 *)(a0 + 0x4);
sp10[1] = 0xFEFE0000;
sp10[2] = D_80126B64;
func_8012B77C((s32)&sp58, (s32)(a0 + 4), (s32)sp10);
sp20[2] = 0;
sp28[1] = 0;
sp28[0] = 0;
sp28[2] = -0x8000;
sp20[0] = sp58;
sp20[1] = sp58 >> 16;
func_80049CAC((s32)sp20, (s32)sp38);
func_800484EC((s32)sp38, (s32)sp28, (s32)(a0 + 0x44));
}
if (*(s16 *)(a0 + 0xFC) < 0) {
*(s32 *)(a0 + 0x58) = (((s32)D_8018E10C | 0x40000000) | 0x20000000);
} else {
*(s32 *)(a0 + 0x58) = (((s32)D_8018E11C | 0x40000000) | 0x20000000);
}
*(u16 *)(a0 + 0x2) += 1;
}
#include "common.h"
@@ -4926,7 +4992,7 @@ extern void func_80185218(void *arg0);
* target .s call-site register setup (decl_prior had no "tu" row to adopt). */
extern s32 func_80185680(void *a0, void *a1);
extern void func_80185810(s32 a0);
extern s32 func_80185480(void *a0, s32 a1);
extern s32 func_80185480();
extern s32 func_80047D3C(s32 a0);
typedef struct { s16 vx, vy, vz, pad; } SVEC_801BA5A8;
@@ -5455,7 +5521,65 @@ s32 func_8018526C(s32 a0, s32 a1, s32 a2, s32 a3) {
INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_80185380);
INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_80185480);
typedef struct { s16 x, y, z, w; } V4_80185480;
typedef struct { s16 m[3][3]; s32 t[3]; } Mtx32_80185480;
extern void func_80185FB4(s32, s32, s32);
extern void func_8012F14C(s32, s32, s32);
extern s32 func_80135888(s32, s32, s32, s32);
extern void func_8012F568(s32, s32, s32, s32, s32, s32);
extern s32 D_80126B58;
extern u8 D_801152A8[];
s32 func_80185480(void *a0, void *a1)
{
V4_80185480 va;
V4_80185480 vb;
V4_80185480 c;
V4_80185480 d;
Mtx32_80185480 mtx;
u8 *s4p;
u8 *b58;
s32 w0;
s32 w1;
s32 sum;
s32 i;
s4p = (u8 *)a0 + 0x20;
((void (*)(s32, void *, void *))func_80185FB4)(*(s32 *)(*(s32 *)((s32)a0 + 0x40) + 0x20),
*(s32 *)((s32)a0 + 0x20), &mtx);
b58 = (u8 *)&D_80126B58;
w0 = *(s32 *)((s32)a0 + 0x10) << 1;
w1 = *(s32 *)((s32)a0 + 0x18) << 1;
va.x = 0;
vb.x = (*(s16 *)(s4p + 0x14) + *((s16 *)&w0 + 1)) >> 1;
va.z = 0;
vb.z = (*(s16 *)(s4p + 0x18) + *((s16 *)&w1 + 1)) >> 1;
sum = *(u16 *)(s4p + 0x16) + *(u16 *)(s4p + 0x1E) + 0x30;
vb.y = sum;
va.y = sum;
i = 0;
do {
func_8012F14C((s32)&mtx, (s32)&va, (s32)&c);
func_8012F14C((s32)&mtx, (s32)&vb, (s32)&d);
if (func_80135888(*(s32 *)(b58 + 0x20), *(s32 *)(b58 + 0x38),
(s32)&c, (s32)&d) == 0) {
va = vb;
vb.x = *(u16 *)(s4p + 0x14) + *((u16 *)&w0 + 1);
vb.z = *(u16 *)(s4p + 0x18) + *((u16 *)&w1 + 1);
i++;
} else {
func_8012F568(1, 0x4201, 0, (s32)a1, (s32)&d, (s32)D_801152A8);
return 1;
}
} while (i < 2);
return 0;
}
extern s32 ratan2(s32 a0, s32 a1);
+19 -1
View File
@@ -4755,7 +4755,25 @@ s32 func_80184214(s32 a0, s32 a1, s16 a2, s16 a3, s32 a4) {
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8017FB84", func_801842DC);
INCLUDE_ASM("asm/ov_SC03_118/nonmatchings/ov_SC03_118_jr_8017FB84", func_80184334);
extern s32 D_801D4358;
extern s32 D_801D435C;
extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2);
void func_80184334(int param_1) {
struct W80184334 {
s32 pad[15];
s32 f3C, f40, f44, f48, f4C, f50;
};
struct W80184334 *p = (struct W80184334 *)param_1;
p->f48 = (short)func_80012C6C((int)*(short *)&p->f48, (int)*(short *)D_801D4358, 0x20);
p->f4C = (short)func_80012C6C((int)*(short *)&p->f4C, (int)*(short *)(D_801D4358 + 2), 0x20);
p->f50 = (short)func_80012C6C((int)*(short *)&p->f50, (int)*(short *)(D_801D4358 + 4), 0x20);
p->f3C = (short)func_80012C6C((int)*(short *)&p->f3C, (int)*(short *)D_801D435C, 0x20);
p->f40 = (short)func_80012C6C((int)*(short *)&p->f40, (int)*(short *)(D_801D435C + 2), 0x20);
p->f44 = (short)func_80012C6C((int)*(short *)&p->f44, (int)*(short *)(D_801D435C + 4), 0x20);
}
extern void (*D_8018EC14[])(void);
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+146 -10
View File
@@ -6491,7 +6491,22 @@ void func_8018167C(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_80181794);
#include "common.h"
extern void (*D_80198EE8[])();
extern void func_8002D4C8(s32 a0, s32 a1);
extern s32 func_801659CC(void);
void func_80181794(int param_1) {
D_80198EE8[*(u16 *)(param_1 + 2)]();
if (param_1 != 0 && *(s16 *)(param_1 + 0x70) == 3) {
if (func_801659CC() != 0) {
*(s16 *)(param_1 + 0x70) = 0;
func_8002D4C8(0xB6B, 0);
}
}
}
extern void func_8012A828(s32 a0, void *a1);
@@ -6869,7 +6884,7 @@ s32 func_80181FE0(void *arg0)
#include "common.h"
extern void func_80181F40(void *a0);
extern s32 func_80182618(void *a0, void *a1);
extern s32 func_80182618();
extern void func_8012A8B0(u8 *a0, s32 a1);
extern void func_8012AD44(s32 *a0, s16 a1);
extern void func_8012B23C(s32 a0);
@@ -7114,7 +7129,39 @@ zeroret:
}
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_80182618);
extern void func_8012B2CC(s32 a0);
extern void func_8012B178(s32 a0, s32 a1);
extern void func_8012CBA4(s32);
extern s32 func_801826E8(s32 a0);
extern void func_8012ADE4(u8 *a0);
typedef struct { s32 f0, f1, f2; } S_80182618;
s32 func_80182618(s32 a0, s32 *a1) {
S_80182618 tmp;
s32 cba4;
tmp.f0 = *(s32 *)(a0 + 0x10);
tmp.f1 = *(s32 *)(a0 + 0x14);
tmp.f2 = *(s32 *)(a0 + 0x18);
func_8012B2CC(a0);
func_8012B178(a0, 0xFFF10000);
cba4 = ((s32 (*)(s32))func_8012CBA4)(a0);
*(s32 *)(a0 + 0x10) = tmp.f0;
*(s32 *)(a0 + 0x14) = tmp.f1;
*(s32 *)(a0 + 0x18) = tmp.f2;
*a1 = func_801826E8(a0);
func_8012ADE4((u8 *)a0);
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x2C) &= ~1;
if (*a1 != 0) {
return 0;
}
if (cba4 == 0x2000) {
return 1;
}
return 0;
}
#include "common.h"
@@ -7568,7 +7615,7 @@ void func_80182EA0(void *arg0) {
extern s32 func_8012BEE8(s32 a0);
extern s32 func_80182618(void *a0, void *a1);
extern s32 func_80182618();
extern s32 func_80181FE0();
extern void func_80182BA4(s32 a0, s32 a1);
@@ -7585,7 +7632,7 @@ void func_80182FBC(s32 a0) {
extern s32 func_8012BEE8(s32 a0);
extern s32 func_80182808(s32 a0);
extern s32 func_80182618(void *a0, void *a1);
extern s32 func_80182618();
void func_80183008(s32 param_1) {
s16 ret;
@@ -7745,7 +7792,7 @@ void func_801832C4(s32 a0) {
#include "common.h"
extern s32 func_80182618(void *a0, void *a1);
extern s32 func_80182618();
extern void func_8012A8B0(u8 *a0, s32 a1);
extern void func_8012B23C(s32 a0);
extern void func_8012AD44(s32 *a0, s16 a1);
@@ -7941,7 +7988,37 @@ INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_8018382
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_80183904);
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_8018395C);
extern void RotMatrixY(s32 angle, void *mtx);
extern void ApplyMatrixSV(void *m, void *vin, void *vout);
extern s32 func_8012B8A4(s16 *arg);
extern void func_8012F568(s32 a, s32 b, s32 c, s32 d, s32 e, s32 f);
extern u8 D_801152A8[];
extern Mtx8 D_800AE620;
void func_8018395C(s32 arg0)
{
s32 scale;
s16 rot;
s16 out[3];
s16 in[3];
Mtx8 m;
m = D_800AE620;
scale = *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) * 9 >> 9;
in[1] = 0;
in[0] = 0;
in[2] = -scale;
rot = func_8012B8A4((s16 *)arg0);
RotMatrixY(rot, &m);
ApplyMatrixSV(&m, in, out);
out[0] += *(u16 *)(arg0 + 6);
out[1] += *(u16 *)(arg0 + 0xA) - scale;
out[2] += *(u16 *)(arg0 + 0xE);
func_8012F568(1, 0x4002, 0, 0x14, (s32)out, (s32)D_801152A8);
}
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_80183A88);
@@ -9420,7 +9497,16 @@ void func_80185DA8(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_80185F98);
extern void func_8012A828(s32 a0, void *a1);
extern void func_8012B23C(s32 a0);
extern u8 D_801BE288[];
void func_80185F98(s32 arg0) {
*(s16 *)(arg0 + 2) = 0x14;
func_8012A828(arg0, D_801BE288);
func_8012B23C(arg0);
}
extern void func_8012CBCC(s32 a0);
extern void func_8012A828(s32 a0, void *a1);
@@ -9453,7 +9539,16 @@ void func_8018603C(void *arg0) {
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_80186078);
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_801860F8);
void func_801860F8(void *a0) {
if (*(u32 *)((char *)a0 + 0xC4) & 4) {
*(short *)((char *)a0 + 2) = 0x13;
} else {
*(short *)((char *)a0 + 2) = 1;
}
*(short *)((char *)a0 + 0x5C) = *(unsigned short *)(*(int *)((char *)a0 + 0x78) + 2);
*(int *)((char *)a0 + 0xE0) = 0;
}
extern void func_8002A04C(s32 a0);
extern void func_8012C098(void);
@@ -9657,7 +9752,48 @@ void func_801863A4(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_80186544);
extern void func_8012A828(s32 a0, void *a1);
extern void func_8012B200(u8 *a0);
s32 func_80186544(s32 a0) {
extern s32 D_8011F730;
extern u8 D_801BDD38[];
extern s32 D_801BDBB0;
extern s32 D_801BDC18;
extern s16 D_801BDCD0;
s32 ret;
ret = 1;
switch (D_8011F730) {
case 1:
func_8012B200((u8 *)a0);
func_8012A828(a0, &D_801BDD38);
*(u16 *)(a0 + 0x2) = 8;
*(u16 *)(a0 + 0x34) = 0;
break;
case 2:
*(u16 *)(a0 + 0x2) = 0xB;
break;
case 3:
func_8012A828(a0, &D_801BDBB0);
*(u16 *)(a0 + 0x2) = 0xE;
break;
case 4:
func_8012A828(a0, &D_801BDC18);
*(u16 *)(a0 + 0x2) = 0x10;
break;
case 5:
*(u16 *)(a0 + 0x2) = 0x12;
func_8012A828(a0, &D_801BDCD0);
break;
default:
ret = 0;
break;
}
return ret;
}
INCLUDE_ASM("asm/ov_SC04_002/nonmatchings/ov_SC04_002_jr_8017BEBC", func_80186638);
+37 -2
View File
@@ -9018,7 +9018,14 @@ void func_801886C4(s32 *a0) {
}
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_80188764);
extern void func_8012AD44(s32 *a0, s16 a1);
void func_80188764(s32 param_1) {
*(s16 *)(param_1 + 0xAE) = -5;
*(s32 *)(param_1 + 0x1C) = 0x100;
func_8012AD44((s32 *)param_1, 3);
}
extern void (*D_80194840[])(void);
@@ -14512,7 +14519,35 @@ extern s32 func_8012AD50(void *a0);
}
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_8018FD38);
extern u8 D_801EBE44[];
extern u16 D_80126B66;
extern void func_80190264(s32 a0, s32 a1);
extern void func_8018FE20(s32 a0, void *a1, void *a2, s32 a3);
extern void func_8012C098(void *a0);
void func_8018FD38(s32 arg0) {
register s32 s2 __asm__("$18") = arg0;
u8 *s0;
u8 *s1;
s0 = &D_801EBE44[0];
func_80190264(s2, *(s16 *)(s2 + 0xFE));
s1 = s0 + 8;
func_8018FE20(s2, s0, s1, *(s16 *)(s2 + 0xFC));
s0 += 0x10;
*(u16 *)(s2 + 0xFE) += 0xC;
func_80190264(s2, *(s16 *)(s2 + 0x100));
func_8018FE20(s2, s0, s0 + 8, *(s16 *)(s2 + 0xFC));
*(u16 *)(s2 + 0x100) += 0xC;
func_80190264(s2, *(s16 *)(s2 + 0x102));
func_8018FE20(s2, s1 + 0x18, s1 + 0x20, *(s16 *)(s2 + 0xFC));
*(u16 *)(s2 + 0x102) += 0xC;
if (*(s16 *)&D_80126B66 >= 0x901) {
func_8012C098((void *)s2);
}
}
INCLUDE_ASM("asm/ov_SC04_011/nonmatchings/ov_SC04_011_jr_8017D494", func_8018FE20);
+102 -3
View File
@@ -3333,7 +3333,50 @@ void func_8017D0EC(s32 *a0) {
INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8017BEBC", func_8017D118);
INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8017BEBC", func_8017D588);
void func_8017D588(void *a0) {
extern s32 func_800149E0(s32);
extern s32 func_800CF8B4();
extern s32 func_80029178(s32 arg);
extern s32 func_8017B368();
extern void func_80029124(s32, s32);
extern s32 func_8012A828(void *a0, void *a1);
extern s32 func_801789AC(s32 arg0);
extern void func_80178D18();
extern u8 D_8018492C;
extern u8 D_80183C54;
extern u8 D_80183EAC;
extern u8 D_8018458C;
if (!((func_800149E0(0) & 0x840) && func_800CF8B4())) {
if (func_80029178(0x125) & 0xFF) {
((s32 (*)(s32, s32))func_8017B368)((s32)a0, (s32)&D_8018492C);
}
if (func_80029178(0x126) & 0xFF) {
func_80029124(0x126, 0);
((void (*)(s32, s32))func_8012A828)(M2C_FIELD(a0, s32 *, 0xCC), &D_80183C54);
}
if (func_80029178(0x131) & 0xFF) {
func_80029124(0x131, 0);
((void (*)(s32, s32))func_8012A828)(M2C_FIELD(a0, s32 *, 0xCC), &D_80183EAC);
}
if (func_80029178(0x127) & 0xFF) {
*(short *)(*(int *)((char *)a0 + 0xd4) + 0x10a) = -0x7300;
} else {
*(short *)(*(int *)((char *)a0 + 0xd4) + 0x10a) = -0x7100;
}
if (func_80029178(0x133) & 0xFF) {
func_80029124(0x133, 0);
((void (*)(s32, s32))func_8012A828)(M2C_FIELD(a0, s32 *, 0xD4), &D_8018458C);
}
if (func_801789AC((s32)a0)) {
((void (*)(void *))func_80178D18)(a0);
} else {
return;
}
}
*(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 2) + 1;
}
INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8017BEBC", func_8017D6D8);
@@ -3394,7 +3437,45 @@ INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8017BEBC", func_8017E6E
INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8017BEBC", func_8017E960);
INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8017BEBC", func_8017EA74);
extern u8 D_801ABB40[];
extern u8 D_801ABB44[];
extern void func_80016714(void *a0, s32 a1);
extern s32 D_801A6B40;
void func_8017EA74(void) {
s32 p; /* s0 */
s32 i; /* s1 */
s32 end; /* s2 */
s32 one; /* s3 */
s32 tbl;
s32 v;
s32 lim;
one = 1;
p = (s32)D_801ABB40;
i = 0;
end = p + 0x5F0;
do {
if (*(s32 *)p != 0) {
tbl = *(s32 *)(D_801ABB44 + i);
v = *(u16 *)tbl;
if (v == one) {
func_80016714((void *)tbl, 0x84);
} else if (tbl != 0) {
func_80016714((void *)tbl, 0x38);
}
*(s32 *)p = 0;
}
p += 0x4C;
i += 0x4C;
} while (p < end);
lim = 0x4FB0;
do {
*(s32 *)((s32)((u8 *)&D_801A6B40) + lim) = 0;
lim -= 0x50;
} while (lim >= 0);
}
extern s32 func_8012A828(void *a0, void *a1);
@@ -3517,7 +3598,25 @@ void func_8017EDC4(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8017BEBC", func_8017EE20);
extern s32 func_8012C51C(void *arg0, s32 arg1);
void func_8017EE20(s32 arg0) {
St_8017EDC4 st;
st.f3 = 0x337;
st.f4 = 7;
st.f0 = 0x120;
st.f5 = 0;
st.f6 = 0;
st.f7 = 0;
st.f8 = 0;
st.f1 = -0x202;
st.f2 = 0;
func_8012C51C(&st, arg0);
}
INCLUDE_ASM("asm/ov_SC04_016/nonmatchings/ov_SC04_016_jr_8017BEBC", func_8017EE78);
+93 -4
View File
@@ -4888,7 +4888,24 @@ extern s32 func_8012AD50(void *a0);
}
INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017FF30);
extern void func_8012C1B8(void);
extern void func_80182240();
extern void func_8017FF80(void *a0);
extern s32 func_8012AD50(void *a0);
extern s32 D_8019C678;
void func_8017FF30(s32 param_1) {
s32 var_v0;
var_v0 = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)(param_1 + 0x20) = var_v0;
if (var_v0 != 0) {
func_80182240((void *)param_1, &D_8019C678);
func_8017FF80((void *)param_1);
func_8012AD50((void *)param_1);
}
}
INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8017FF80);
@@ -5446,7 +5463,39 @@ INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_801812F
INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_80181380);
INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_801813D4);
void func_801813D4(s32 a0)
{
extern s32 func_801823B8(void*, s32, void*);
extern s32 func_80182334(void);
extern void func_8012C098(void);
s32 s1 = a0;
s32 s0;
s32 pad[1];
u16 u0;
u0 = *(u16 *)((s32)s1 + 0x6);
u0 = (u16)(u0 - 0x50);
*(u16 *)((s32)s1 + 0x6) = u0;
if ((s16)u0 < *(s16 *)((s32)s1 + 0x88)) {
if (*(s16 *)((s32)s1 + 0xFE) == 0) {
*(s16 *)((s32)s1 + 0xFE) += 1;
func_8002D4C8(0x892, 0);
}
*(u16 *)((s32)s1 + 0x6) = *(u16 *)((s32)s1 + 0x88);
}
s0 = ((s32 (*)(s32, s32, s32))func_801823B8)(s1, 1, 0) |
((s32 (*)(s32, s32, s32))func_801823B8)(s1, 1, -1);
s0 |= ((s32 (*)(s32, s32, s32))func_801823B8)(s1, 1, -2);
if (s0 != 0) {
func_8012C658(0x209, 6, s1);
*(s32 *)(*(s32 *)((s32)s1 + 0x20) + 4) |= 0x80000000;
}
if (((s32 (*)(s32))func_80182334)(s1) == 0) {
((void (*)(s32))func_8012C098)(s1);
}
}
extern s32 func_80013328(s32 a0, s32 a1);
@@ -5479,9 +5528,49 @@ extern s32 func_8012AD50(void *a0);
}
INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_801815A0);
extern s32 func_800291B4(s32 arg);
extern void func_8012C098(void);
extern void func_8012C1B8(void);
extern s32 func_8012AD50(void *a0);
extern void func_8018227C(void*, void*);
extern u8 D_8019A248[];
void func_801815A0(s32 arg0) {
s32 ret;
if ((func_800291B4(0xE1) & 0xFF) >= 8u) {
((void (*)(s32))func_8012C098)(arg0);
return;
}
ret = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)((s32)arg0 + 0x20) = ret;
if (ret == 0) {
return;
}
func_8018227C((void *)arg0, D_8019A248);
*(u16 *)((s32)arg0 + 0x88) = *(u16 *)((s32)arg0 + 6);
*(u16 *)((s32)arg0 + 6) = *(u16 *)((s32)arg0 + 6) - 0x100;
func_8012AD50((void *)arg0);
}
extern void func_8002D4C8(s32 a0, s32 a1);
extern s32 func_80182334(void);
extern s32 func_80182478();
extern s32 func_8012AD50(void *a0);
void func_80181628(void *arg0) {
void *sp0;
sp0 = arg0;
func_80182334();
if (func_80182478() + 0x28 == *(s32 *)((s32)sp0 + 0xDC)) {
*(s16 *)((s32)sp0 + 0xFE) = 0;
func_8002D4C8(0x88F, 0);
func_8012AD50(sp0);
}
}
INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_80181628);
INCLUDE_ASM("asm/ov_SC05_008/nonmatchings/ov_SC05_008_jr_8017AE2C", func_8018167C);
+25 -1
View File
@@ -4205,7 +4205,31 @@ void func_8018645C(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_80181CDC", func_801864E4);
void func_801864E4(int a0) {
int t;
int r;
int sel;
int start;
t = *(u16 *)(a0 + 0xFC) + 0x20;
*(u16 *)(a0 + 0xFC) = t;
*(int *)(a0 + 4) = *(int *)(a0 + 0x10) + (func_80047948((s16)t) << 13);
*(int *)(a0 + 8) = *(int *)(a0 + 0x14) - (func_8004787C(*(s16 *)(a0 + 0xFC)) << 13);
if (*(s16 *)(a0 + 0xFC) >= 0x400) {
sel = (rand() & 1) ? -0x255555 : -0x1D5555;
__asm__("" : "=r"(sel) : "0"(sel));
start = sel;
for (; start <= 0x3AAAA9; start += 0x1AAAAA) {
r = func_8012C658(0x29E, 1, a0);
if (r != 0) {
*(int *)(r + 0x10) = start;
}
}
func_8012C218(a0);
}
}
extern void func_8012CBCC(s32 a0);
extern void func_8012C218(void *a0);
+223 -9
View File
@@ -3588,7 +3588,24 @@ void func_8017F254(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_8017F2BC);
extern s32 func_8012E544(s32 arg);
void func_8017F2BC() {
s32 v1;
v1 = func_8012E544(0x19C);
if (v1 != 0) {
*(s16 *)(v1 + 0xFC) = 0;
}
v1 = func_8012E544(0x29A);
if (v1 != 0) {
*(s16 *)(v1 + 6) = -0x180;
*(s16 *)(v1 + 10) = -0x380;
*(s16 *)(v1 + 14) = 0x6A0;
}
}
extern void (*D_8018A8DC[])(void);
@@ -3970,7 +3987,38 @@ void func_8017FC74(void) {
}
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_8017FD94);
extern void func_8012A018(s32 a, s32 b);
extern void func_8012A094(s32 a0);
extern void func_8017FF9C(u8*);
void func_8017FD94(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 = 0x12C;
D_8012695C = 0x384;
D_80126968 = 0x71;
D_8012696A = 0x800;
D_80126976 = -0x30;
D_8012696C = 0;
D_80126978 = 0x80;
D_8012697A = 0;
func_8012A018((s32)func_8017FF9C, 1);
func_8012A094((s32)D_80126948);
((void (*)(void *))func_8017FF9C)(D_80126948);
func_8012A094((s32)D_80126948);
((void (*)(void *))func_8017FF9C)(D_80126948);
}
void func_8017FE44(void)
{
@@ -4342,7 +4390,33 @@ void func_801809B8(s32 arg0, s32 arg1, s32 arg2)
}
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_80180ACC);
extern void func_80180BE0();
extern void func_80049CAC(s32 a0, s32 a1);
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
void func_80180ACC(s32 arg0, s32 arg1, s32 arg2, s32 arg3)
{
struct St80180ACC { s16 a[3]; u16 b[3]; } st;
u16 v[3];
s16 out[6];
s32 r[4];
((void (*)(s32, s32, s32))func_80180BE0)(arg0, arg1, (s32)&st);
v[0] = st.b[0];
v[1] = st.b[1];
v[2] = st.b[2];
((void (*)(s32, s32))func_80049CAC)((s32)v, (s32)out);
r[1] = st.a[0];
r[2] = st.a[1];
r[3] = st.a[2];
((void (*)(s32, s32, s32))func_8012F14C)((s32)out, arg2, arg3);
if (*(u16 *)(*(s32 *)(arg0 + 0x20) + 0x2C) & 0x10) {
*(s16 *)((s32)arg3 + 0) = *(s16 *)((s32)arg3 + 0) * *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x18) >> 12;
*(s16 *)((s32)arg3 + 2) = *(s16 *)((s32)arg3 + 2) * *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x1A) >> 12;
*(s16 *)((s32)arg3 + 4) = *(s16 *)((s32)arg3 + 4) * *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x1C) >> 12;
}
}
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_80180BE0);
@@ -4447,7 +4521,20 @@ void func_80181474(s32 *a0) {
void func_80181518(void) {
}
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_80181520);
extern void func_8012E88C(s32);
extern void func_8012A828(void);
extern void func_8012E8E0(s32, s32);
extern short D_801CC330;
extern s32 D_8018AA24;
s32 func_80181520(void *arg0) {
s32 s0 = (s32)arg0;
*(u16 *)(s0 + 2) = 2;
func_8012E88C(s0);
((void (*)(s32 *, s32))func_8012A828)((s32 *)arg0, (s32)&D_801CC330);
func_8012E8E0((s32)arg0, (s32)&D_8018AA24);
}
extern void (*D_8018AB24[])(void);
@@ -4733,7 +4820,44 @@ s32 func_80181B80(void *a0)
}
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_80181BF4);
void func_80181BF4(void *arg0)
{
extern s32 func_8012CB64(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4);
extern int func_80178970(void);
extern void func_80178D18(void);
extern void func_80029514(s32);
extern s32 func_80178B18(s32 param_1, s32 param_2);
extern u16 D_80126B5E;
extern u16 D_80126B62;
extern u16 D_80126B66;
extern u8 D_8018AB74;
s32 state;
struct {
u16 f0;
u16 f1;
u16 f2;
} pos;
state = *(u16 *)((s32)arg0 + 0x34);
if (state != 1) {
if (state < 2 && state == 0) {
pos.f0 = D_80126B5E;
pos.f1 = D_80126B62;
pos.f2 = D_80126B66;
if (func_8012CB64((s32)&pos, -0x380, -0x180, 0x40D, 0x60D) != 0) {
*(u16 *)((s32)arg0 + 0x34) += 1;
func_80178B18((s32)arg0, (s32)&D_8018AB74);
}
}
} else {
if (((s32 (*)(s32))func_80178970)((s32)arg0) != 0) {
((void (*)(s32))func_80178D18)((s32)arg0);
func_80029514(0x47E);
func_801819B0(arg0);
}
}
}
void func_80181CC4(void *arg0) {
extern void func_80178CBC(s32, s32);
@@ -4781,7 +4905,37 @@ s32 func_80181D88(void)
}
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_80181DCC);
void func_80181DCC(void *arg0)
{
extern s32 func_80178B18(s32 param_1, s32 param_2);
extern int func_80178970(void);
extern void func_80178D18(void);
extern void func_8017FB8C(void);
extern void func_80129CF8();
extern void func_8012C218(void *arg0);
extern s32 D_8018ACBC;
switch (*(u16 *)((s32)arg0 + 0x34)) {
case 0:
break;
case 1:
func_80178B18((s32)arg0, (s32)&D_8018ACBC);
*(u16 *)((s32)arg0 + 0x34) = *(u16 *)((s32)arg0 + 0x34) + 1;
break;
case 2:
if (((s32 (*)(s32))func_80178970)((s32)arg0) != 0) {
((void (*)(s32))func_80178D18)((s32)arg0);
func_8017FB8C();
func_80129CF8();
func_8012C218(*(void **)((s32)arg0 + 0xD4));
func_8012C218(arg0);
}
break;
}
}
extern s32 func_80029504(void);
extern u8 D_80078EAE;
@@ -4862,7 +5016,17 @@ extern void func_8018469C(void *a0, s32 a1);
}
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_80182048);
extern void func_8012E8E0(s32 a0, s32 a1);
extern void func_8012E8A8(u8 *a0);
void func_80182048(void *arg0) {
extern short D_8018AD84;
*(short *)((char *)arg0 + 0x2) = 2;
*(short *)((char *)arg0 + 0x34) = 0;
func_8012E8A8((u8 *)arg0);
func_8012E8E0((s32)arg0, (s32)&D_8018AD84);
}
extern void func_8012E8E0(s32, s32);
extern void func_8012E88C(s32);
@@ -4907,7 +5071,30 @@ void func_80182304(void *arg0) {
}
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_80182384);
void func_80182384(void *arg0) {
extern void func_80178CBC(s32 arg0, s32 arg1);
extern int func_80178970(void);
extern void func_80178D18(void);
extern void func_8018469C(void *a0, s32 a1);
extern short D_8018AD84;
extern short D_8018AE34;
switch (*(u16 *)((s32)arg0 + 0x34)) {
case 0:
func_80178CBC((s32)arg0, (s32)&D_8018AE34);
*(u16 *)((s32)arg0 + 0x34) = *(u16 *)((s32)arg0 + 0x34) + 1;
break;
case 1:
if (((s32 (*)(s32))func_80178970)((s32)arg0) != 0) {
((void (*)(s32))func_80178D18)((s32)arg0);
*(s16 *)((s32)arg0 + 0x2) = 1;
*(s16 *)((s32)arg0 + 0x34) = 0;
((void (*)(s32, s32))func_8018469C)((s32)arg0, (s32)&D_8018AD84);
}
break;
}
}
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_80182420);
@@ -5882,7 +6069,34 @@ void func_80183EC8(void *arg0) {
}
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_8017D604", func_80183F28);
extern s32 func_8012BD14(s32 a0);
extern s32 func_80178BF8();
extern void func_80172710(void);
s32 func_80183F28_body(void *a0) __asm__("func_80183F28");
s32 func_80183F28_body(void *a0)
{
if (*(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0x2) != 2) {
return 0;
}
if (func_8012BD14((s32)a0) >= 0x4000) {
return 0;
}
{
s32 p;
u16 st2;
p = *(s32 *)((s32)a0 + 0x64);
st2 = *(u16 *)((s32)p + 0x2);
st2++;
*(u16 *)((s32)p + 0x2) = st2;
}
func_80178BF8();
return (s32)func_80172710;
}
/* func_80183F9C — guarded dispatch: ask ((s32 (*)(s32, s32))func_80184590)(9, 0x12); if it answers
+58 -3
View File
@@ -3341,7 +3341,18 @@ void func_8017BF20(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_8017BF58);
extern void func_801827F4(void);
extern void func_80171A1C(u8 *a0);
extern s32 func_80174650(s32 a0);
void func_8017BF58(void *a0) {
if (((s32 (*)(void *))func_801827F4)(a0) == 0) {
return;
}
func_80171A1C(a0);
func_80174650(a0);
}
DEFINE_func_8017BF98() /* dedup: shared engine-core @0x8017BF98 (src/shared) */
@@ -6959,7 +6970,35 @@ void func_801815E8(void) {
}
INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_801816AC);
void func_801816AC(void) {
extern struct { u8 b[8]; } D_8018C0E0, D_801274E8;
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 u8 D_80126948[];
extern void func_8012A018(s32, s32);
extern void func_8012A094(s32);
extern void func_80181A78(void *);
D_801274E8 = D_8018C0E0;
D_80126954 = 0x190;
D_8012695C = 0x900;
D_80126968 = 0x140;
D_8012696A = 0xE00;
D_8012696C = 0;
D_80126976 = 0;
D_80126978 = 0;
D_8012697A = 0;
func_8012A018((s32)func_80181A78, 2);
func_8012A094((s32)D_80126948);
func_80181A78((void *)D_80126948);
}
typedef struct { u8 b[8]; } Blk8_80181774;
@@ -7056,7 +7095,23 @@ void func_80181AB4(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_80181BA4);
void func_80181BA4(s32 param_1)
{
typedef struct { u8 b[8]; } Blk8_80181774;
typedef struct { s16 m0, m1, m2, m3; } Sp10_80181BA4;
extern Blk8_80181774 D_801274E8;
extern s32 ratan2(s32 dx, s32 dy);
extern void func_80181CCC();
extern void func_80181F14();
Sp10_80181BA4 sp10;
register s32 ang __asm__("$16");
sp10 = *(Sp10_80181BA4 *)D_801274E8.b;
ang = ratan2(sp10.m0, sp10.m2) & 0xFFF;
func_80181CCC(param_1, (s32)&sp10, ang);
func_80181F14(param_1, (s32)&sp10, ang);
}
void func_80181C38(s32 param_1)
{
+94 -5
View File
@@ -3450,11 +3450,48 @@ void func_8017DC60(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8017C24C", func_8017DCC0);
s32 func_8017DCC0(s32 arg0)
{
s32 w;
switch (*(u16 *)(arg0 + 0x34)) {
case 0:
w = *(u16 *)(arg0 + 0xA) - 8;
*(u16 *)(arg0 + 0xA) = w;
if ((s16)w < -0x5F) {
*(u16 *)(arg0 + 0x34) = *(u16 *)(arg0 + 0x34) + 1;
func_8002D4C8(0xB02, 0);
}
break;
case 1:
w = *(u16 *)(arg0 + 0xFC) + 0x40;
*(u16 *)(arg0 + 0xFC) = w;
*(u16 *)(arg0 + 0xA) = -0x60 - (func_8004787C((s16)w) >> 5);
if (*(s16 *)(arg0 + 0xFC) < 0x400) {
break;
}
return 1;
}
return 0;
}
INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8017C24C", func_8017DD88);
INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8017C24C", func_8017DE08);
extern s16 D_80197090;
void func_8017DE08(s32 param_1) {
s32 v;
v = *(s32 *)(param_1 + 0x1C) - 1;
*(s32 *)(param_1 + 0x1C) = v;
if (v == 0) {
func_80178B18(param_1, (s32)&D_80197090);
*(u16 *)(param_1 + 2) = 2;
func_8002D4C8(0xB23, 0);
}
}
extern int func_80178970(void);
@@ -4750,7 +4787,30 @@ void func_8017FA90(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8017C24C", func_8017FACC);
extern void func_80016714(void *a0, s32 a1);
extern void func_8002A04C(s32 a0);
extern void func_8012C218(void *a0);
void func_8017FACC(s32 a0)
{
if (*(s16 *)(a0 + 0x70) != 0) {
*(u16 *)(a0 + 0x2) = 4;
*(u16 *)(a0 + 0x5C) = 0;
*(u16 *)(a0 + 0x5E) = 0;
*(u8 *)(a0 + 0xC1) = 0;
return;
}
if (*(s32 *)(a0 + 0xCC) != 0)
func_80016714(*(void **)(a0 + 0xCC), 0x84);
if (*(s32 *)(a0 + 0xD0) != 0)
func_80016714(*(void **)(a0 + 0xD0), 0x84);
func_8002A04C(a0);
func_8012C218((void *)a0);
}
extern void func_8002D4C8(s32 arg0, s32 arg1);
@@ -4781,7 +4841,20 @@ extern void func_8017ED60(void);
}
INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8017C24C", func_8017FBE8);
extern void func_80131E00(s32 a0, s32 a1);
extern void func_8017ED60(void);
void func_8017FBE8(s32 a0) {
if (*(s16 *)(a0 + 0x76) < 0) {
func_80131E00(a0, 6);
return;
}
*(u16 *)(a0 + 0x2) = 1;
*(u16 *)(a0 + 0x100) = 0x3C;
*(u16 *)(a0 + 0x34) = 0;
func_8017ED60();
}
extern int func_80143C74(short*, int);
@@ -8096,7 +8169,23 @@ void func_80185320(s32 p) {
INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8017C24C", func_80185400);
INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8017C24C", func_80185440);
extern u8 D_801B5164[];
extern void func_8012F214(s32, s32, s32);
extern s32 func_80189284(void *a0, s32 a1, s32 a2);
extern s32 func_8012BCCC(s32 a0);
extern s32 func_8012BEE8();
void func_80185440(s32 p) {
s32 buf10[2];
((void (*)(s32, void *, void *))func_8012F214)(p, D_801B5164, buf10);
if (func_80189284(buf10, *(s16 *)(*(s32 *)(p + 0x20) + 0x12), 0x380) != 0 &&
func_8012BCCC(p) < 0x64000) {
*(u16 *)(p + 2) = 0x1C;
} else if (func_8012BEE8(p) != 0) {
*(u16 *)(p + 2) = 0x18;
}
}
extern void func_8012A828(s32, void*);
+109 -3
View File
@@ -3528,7 +3528,43 @@ void func_8017DA9C(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_8017DAE0);
extern s32 func_80128DB4(s32, s32 *);
extern void func_80128D60(s32, s32 *, s32 *);
extern s32 func_8012BEE8(s32 a0);
extern s32 D_801E1120[];
extern s32 D_80193418;
extern s32 D_801933F8;
extern s32 D_80193338;
void func_8017DAE0(s32 param_1)
{
s32 *p;
switch (*(u16 *)(param_1 + 0x34)) {
case 0:
func_80128D60(0, D_801E1120, &D_80193418);
*(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1;
*(s32 *)(param_1 + 0x1C) = 0x3C;
/* fall through */
case 1:
p = D_801E1120;
func_80128DB4(0, p);
if (func_8012BEE8(param_1) != 0) {
func_80128D60(0, p, &D_801933F8);
*(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1;
}
return;
case 2:
if (func_80128DB4(0, D_801E1120) == 1) {
func_80128D60(0, D_801E1120, &D_80193338);
*(u16 *)(param_1 + 0x2) = 5;
*(u16 *)(param_1 + 0x34) = 0;
*(u16 *)(param_1 + 0xAE) = 0;
}
return;
}
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_8017DBFC);
@@ -3714,7 +3750,20 @@ void func_8017FA1C(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_8017FB28);
extern s32 func_8012D624(void *a0, s32 a1, s32 a2);
extern s32 func_8012BEE8(s32 a0);
extern void func_8012C218(s32 a0);
extern u16 D_80126B96;
void func_8017FB28(s32 param_1) {
if (func_8012D624((void *)param_1, 0x40, 0x78) == 1) {
D_80126B96 = 0x4001;
}
if (func_8012BEE8(param_1) != 0) {
func_8012C218(param_1);
}
}
void func_8017FB84(s32 self) {
s32 obj;
@@ -3937,7 +3986,64 @@ INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_8018036
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_80180594);
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_80180724);
extern s32 func_8012C588(s32 a0, s32 a1);
void func_80180724(s32 arg0) {
register s32 s1 __asm__("$17") = arg0;
register s32 s2 __asm__("$18");
register s32 s0 __asm__("$16");
register s32 v0 __asm__("$2");
register s32 v1 __asm__("$3");
register s32 zr __asm__("$0");
s2 = *(u16 *)(s1 + 0x34);
switch (s2) {
case 0:
v0 = func_8012BE54(s1 + zr);
if (v0 <= 0x64000) {
*(u16 *)(s1 + 0x34) = 1;
}
break;
case 1:
s0 = func_8012C588(0x263, s1);
if (s0 != 0) {
*(s32 *)(s1 + 0xCC) = s0;
*(u16 *)(s1 + 0xFC) = *(u16 *)(s0 + 0x36);
*(u16 *)(s0 + 0xFC) = 0x60;
*(u16 *)(s1 + 0x34) = 2;
*(s32 *)(s0 + 0xDC) = s2;
}
break;
case 2:
s0 = *(s32 *)(s1 + 0xCC);
if (*(s16 *)(s1 + 0xFC) == *(s16 *)(s0 + 0x36)) {
v0 = *(u16 *)(s1 + 0xA);
v1 = 0x19;
*(u16 *)(s0 + 0xFC) = v1;
*(u16 *)(s0 + 0xA) = v0 - 0x20;
}
v1 = *(s16 *)(s1 + 6);
v0 = *(s16 *)(*(s32 *)(s1 + 0x64) + 6);
if ((u32)(v0 - v1 - 1) < 0x7F) {
v0 = -0x14;
*(u16 *)(s0 + 0x16) = v0;
v0 = -7;
*(u16 *)(s0 + 0x1A) = v0;
*(u16 *)(s1 + 0x34) = 3;
}
break;
case 3:
s0 = *(s32 *)(s1 + 0xCC);
if (*(s16 *)(s1 + 0xFC) == *(s16 *)(s0 + 0x36)) {
func_8012CBCC(s0);
if (*(s16 *)(s0 + 0xFC) == 0) {
*(u16 *)(s1 + 0x34) = 4;
}
}
break;
}
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_80180894);
+120 -2
View File
@@ -6087,7 +6087,114 @@ INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80184FF
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80185214);
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_801852E4);
typedef struct { s16 vx, vy, vz, pad; } SV;
extern void func_8012C218(void *a0);
extern void func_8012F214(s32 a0, s32 a1, s32 a2);
extern void RotMatrixY(s32 r, void *m);
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
extern void func_800176F0(void *a0);
extern Blk20 D_800AE620;
extern u8 D_800AF648;
#define gte_ldv0(r0) __asm__ volatile ("lwc2 $0, 0( %0 );" "lwc2 $1, 4( %0 )" : : "r"(r0))
#define gte_rtps() __asm__ volatile ("nop;nop;rtps")
#define gte_stsxy(r0) __asm__ volatile ("swc2 $14, 0( %0 )" : : "r"(r0) : "memory")
#define gte_stflg(r0) __asm__ volatile ("cfc2 $12, $31;" "nop;" "sw $12, 0( %0 )" : : "r"(r0) : "$12", "memory")
#define gte_stszotz(r0) __asm__ volatile ("mfc2 $12, $19;" "nop;" "sra $12, $12, 2;" "sw $12, 0( %0 )" : : "r"(r0) : "$12", "memory")
#define gte_SetRotMatrix(r0) __asm__ volatile ( \
"lw $12, 0( %0 );" \
"lw $13, 4( %0 );" \
"ctc2 $12, $0;" \
"ctc2 $13, $1;" \
"lw $12, 8( %0 );" \
"lw $13, 12( %0 );" \
"lw $14, 16( %0 );" \
"ctc2 $12, $2;" \
"ctc2 $13, $3;" \
"ctc2 $14, $4" \
: : "r"(r0) : "$12", "$13", "$14" )
#define gte_SetTransMatrix(r0) __asm__ volatile ( \
"lw $12, 20( %0 );" \
"lw $13, 24( %0 );" \
"ctc2 $12, $5;" \
"lw $14, 28( %0 );" \
"ctc2 $13, $6;" \
"ctc2 $14, $7" \
: : "r"(r0) : "$12", "$13", "$14" )
void func_801852E4(s32 arg0)
{
struct B { SV v[4]; u32 w[6]; } b;
SV *vp;
MTX m;
s32 otz[4];
u32 flag;
s32 i;
s32 t;
s32 h;
if (*(s16 *)(*(s32 *)(arg0 + 0x64) + 0x36) != *(s16 *)(arg0 + 0x100)) {
func_8012C218((void *)arg0);
return;
}
*(s32 *)(arg0 + 8) = *(s32 *)(*(s32 *)(arg0 + 0x64) + 8) + 0xFF000000;
(*(s32 *)(arg0 + 0xE0)) -= 0x40;
if (*(s32 *)(arg0 + 0xE0) < -0x200) {
*(s32 *)(arg0 + 0xE0) = -0x200;
}
b.v[0].vx = -0x10;
b.v[1].vx = 0x10;
b.v[1].vz = -0x140;
b.v[0].vz = -0x140;
b.v[2].vz = *(s32 *)(arg0 + 0xE0);
b.v[3].vz = *(s32 *)(arg0 + 0xE0);
b.v[3].vy = 0;
b.v[2].vy = 0;
b.v[3].vx = 0;
b.v[2].vx = 0;
b.v[1].vy = 0;
b.v[0].vy = 0;
func_8012F214(arg0, (s32)&b.v[0], (s32)&b.v[0]);
func_8012F214(arg0, (s32)&b.v[1], (s32)&b.v[1]);
m = (*(MTX *)&D_800AE620);
RotMatrixY(*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12) + *(s16 *)(arg0 + 0xFE), &m);
func_8012F14C((s32)&m, (s32)&b.v[2], (s32)&b.v[2]);
m = (*(MTX *)&D_800AE620);
RotMatrixY(*(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12) - *(s16 *)(arg0 + 0xFE), &m);
func_8012F14C((s32)&m, (s32)&b.v[3], (s32)&b.v[3]);
*(u16 *)&b.v[2].vx += *(u16 *)&b.v[0].vx;
*(u16 *)&b.v[2].vy += *(u16 *)&b.v[0].vy;
*(u16 *)&b.v[2].vz += *(u16 *)&b.v[0].vz;
*(u16 *)&b.v[3].vx += *(u16 *)&b.v[1].vx;
*(u16 *)&b.v[3].vy += *(u16 *)&b.v[1].vy;
*(u16 *)&b.v[3].vz += *(u16 *)&b.v[1].vz;
gte_SetRotMatrix(&D_800AF648);
gte_SetTransMatrix(&D_800AF648);
for (i = 0, vp = b.v; i < 4; i++, vp++) {
gte_ldv0(vp);
gte_rtps();
gte_stsxy(vp);
gte_stflg(&flag);
gte_stszotz(&otz[i]);
if (flag & ~0x1000u) {
return;
}
}
t = otz[2];
if (otz[3] < t) t = otz[3];
h = otz[0];
if (otz[1] < h) h = otz[1];
if (t < h) h = t;
*(u16 *)&b.v[0].vz = h;
b.w[0] = 0xC0C0C0;
b.w[1] = 0xC0C0C0;
b.w[2] = 0;
b.w[3] = 0;
b.w[4] = 0x50000000;
func_800176F0((void *)b.v);
}
extern void (*D_80190A20[])(void);
@@ -7870,7 +7977,18 @@ extern s16 D_801DFFDC;
}
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80188568);
extern s32 *D_80126B78;
extern u8 D_80126B5C;
extern s32 func_8012BB3C(s32 a0, s32 a1, u32 a2, s32 a3);
s32 func_80188568(s32 arg0) {
s32 r;
r = func_8012BB3C((s32)&D_80126B5C, *(s32 *)(arg0 + 0xD4) + 4,
((s16 *)D_80126B78)[9], 8);
((s16 *)D_80126B78)[9] += r;
return (s16)r == 0;
}
void func_801885C0(s32 *a0, s32 *a1)
{
+50 -1
View File
@@ -8994,7 +8994,56 @@ void func_8018D15C(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_8018D264);
void func_8018D264(s32 arg0) {
s32 v;
s32 d;
u16 w;
v = func_8012B864(arg0);
d = (v + *(s16 *)(arg0 + 0x100)) - *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12);
if (d > 0x800) {
s32 t = *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12) + 0x1000;
d = v - t;
}
if (d < -0x800) {
s32 t = *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12) - 0x1000;
d = v - t;
}
if (d > 0) {
if (d > 0x20) {
d = 0x20;
}
*(u16 *)(arg0 + 0xFE) = w = *(u16 *)(arg0 + 0xFE) + d;
if ((s16)w >= 0x201) {
*(u16 *)(arg0 + 0xFE) = 0x200;
}
} else if (d < 0) {
if (d < -0x20) {
d = -0x20;
}
*(u16 *)(arg0 + 0xFE) = w = *(u16 *)(arg0 + 0xFE) + d;
if ((s16)w < -0x200) {
*(s16 *)(arg0 + 0xFE) = -0x200;
}
} else {
*(s16 *)(arg0 + 0x100) = (rand() & 0x7FF) - 0x400;
}
d = *(s16 *)(*(s32 *)(arg0 + 0x64) + 0xFC) - *(s16 *)(arg0 + 0xFC);
if (d > 0) {
if (d > 8) {
d = 8;
}
*(s16 *)(arg0 + 0xFC) = *(s16 *)(arg0 + 0xFC) + d;
} else if (d < 0) {
if (d < -8) {
d = -8;
}
*(s16 *)(arg0 + 0xFC) = *(s16 *)(arg0 + 0xFC) + d;
}
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_8018D3A4);