feat(decomp): ox wave dr overlays — 28 banked

Committed before the main batch: gate_main reverts on failure and would take these with it.
This commit is contained in:
Drew T
2026-08-25 13:55:25 -06:00
parent a5eecbbec7
commit 2fea549c53
27 changed files with 746 additions and 4911 deletions
+2 -1
View File
@@ -4404,7 +4404,7 @@ ov_SC06_022_ELF := $(ov_SC06_022_OUT).elf
ov_SC06_022_MAPFILE := $(ov_SC06_022_OUT).map
ov_SC06_022_LD_SCRIPT := $(ov_SC06_022_OUT).ld
ov_SC06_022_SPLAT_YAML := config/splat.ov_SC06_022.yaml
ov_SC06_022_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_022.o,ov_SC06_022_jr_8012ACE0.o,tail2.data.o,ov_SC06_022_jr_80135888.o,tail3.data.o,ov_SC06_022_jr_80135A4C.o,tail4.data.o,ov_SC06_022_jr_80135D20.o,tail5.data.o,ov_SC06_022_jr_801380E0.o,ov_SC06_022_o0c.o,tail6.data.o,ov_SC06_022_jr_8013F350.o,tail7.data.o,ov_SC06_022_jr_8013FFD8.o,tail8.data.o,ov_SC06_022_jr_80140608.o,tail9.data.o,ov_SC06_022_jr_8015444C.o,ov_SC06_022_jr_80154C24.o,ov_SC06_022_jr_801588CC.o,ov_SC06_022_jr_80159C84.o,tail10.data.o,ov_SC06_022_jr_8015A3C8.o,tail11.data.o,ov_SC06_022_jr_8015AE2C.o,tail12.data.o,ov_SC06_022_jr_8015C32C.o,tail13.data.o,ov_SC06_022_jr_8016AB6C.o,tail14.data.o,ov_SC06_022_jr_80171B4C.o,ov_SC06_022_jr_801734BC.o,tail15.data.o,ov_SC06_022_jr_801789AC.o,ov_SC06_022_jr_80178D40.o,tail16.data.o,ov_SC06_022_jr_8017A4AC.o,tail17.data.o,ov_SC06_022_jr_8017AE2C.o,ov_SC06_022_jr_8017BEBC.o,tail18.data.o,ov_SC06_022_jr_80180CD0.o,ov_SC06_022_jr_80182D08.o,ov_SC06_022_jr_80184304.o,ov_SC06_022_jr_80184A28.o,tail19.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
ov_SC06_022_JTBL_INTERLEAVE := --order tail.data.o,ov_SC06_022.o,ov_SC06_022_jr_8012ACE0.o,tail2.data.o,ov_SC06_022_jr_80135888.o,tail3.data.o,ov_SC06_022_jr_80135A4C.o,tail4.data.o,ov_SC06_022_jr_80135D20.o,tail5.data.o,ov_SC06_022_jr_801380E0.o,ov_SC06_022_o0c.o,tail6.data.o,ov_SC06_022_jr_8013F350.o,tail7.data.o,ov_SC06_022_jr_8013FFD8.o,tail8.data.o,ov_SC06_022_jr_80140608.o,tail9.data.o,ov_SC06_022_jr_8015444C.o,ov_SC06_022_jr_80154C24.o,ov_SC06_022_jr_801588CC.o,ov_SC06_022_jr_80159C84.o,tail10.data.o,ov_SC06_022_jr_8015A3C8.o,tail11.data.o,ov_SC06_022_jr_8015AE2C.o,tail12.data.o,ov_SC06_022_jr_8015C32C.o,tail13.data.o,ov_SC06_022_jr_8016AB6C.o,tail14.data.o,ov_SC06_022_jr_80171B4C.o,ov_SC06_022_jr_801734BC.o,tail15.data.o,ov_SC06_022_jr_801789AC.o,ov_SC06_022_jr_80178D40.o,tail16.data.o,ov_SC06_022_jr_8017A4AC.o,tail17.data.o,ov_SC06_022_jr_8017AE2C.o,ov_SC06_022_jr_8017BEBC.o,tail18.data.o,ov_SC06_022_jr_80180CD0.o,tail19.data.o,ov_SC06_022_jr_80182D08.o,ov_SC06_022_jr_80184304.o,ov_SC06_022_jr_80184A28.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC06_022/ov_SC06_022.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC06_022/ov_SC06_022_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
build/src/ov_SC06_022/ov_SC06_022_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
@@ -4419,6 +4419,7 @@ build/src/ov_SC06_022/ov_SC06_022_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (
build/src/ov_SC06_022/ov_SC06_022_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
build/src/ov_SC06_022/ov_SC06_022_jr_80180CD0.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC06_022/ov_SC06_022_jr_80182D08.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
build/src/ov_SC06_022/ov_SC06_022_jr_80184A28.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
build/src/ov_SC06_022/ov_SC06_022_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
ov_SC06_022_CHECK_SHA := config/check.ov_SC06_022.sha
ov_SC06_022_SYMBOLS := config/symbols.ov_SC06_022.txt
+2 -1
View File
@@ -169,10 +169,11 @@ segments:
- [0xb8960, .rodata, ov_SC06_022_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb8980, data, tail18]
- [0xb8998, .rodata, ov_SC06_022_jr_80180CD0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb89b4, data, tail19]
- [0xb89d4, .rodata, ov_SC06_022_jr_80182D08] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb8ab4, .rodata, ov_SC06_022_jr_80184304] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb8acc, .rodata, ov_SC06_022_jr_80184A28] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xb8ae0, data, tail19]
- [0xb8ae0, data, tail20]
- [0xBA114, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0xBA117] # 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:
- [0xa6534, data, tail17]
- [0xa6538, .rodata, ov_SC07_000_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xa654c, .rodata, ov_SC07_000_jr_8017BEBC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0xa65a0, data, tail18]
- [0xa6588, data, tail18]
- [0xA8B8C, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0xA8B8F] # 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
+20 -1
View File
@@ -2603,7 +2603,26 @@ void func_801A4A78(s32 arg0) {
INCLUDE_ASM("asm/md_SC07_003/nonmatchings/md_SC07_003", func_801A4CF4);
INCLUDE_ASM("asm/md_SC07_003/nonmatchings/md_SC07_003", func_801A4D58);
typedef struct { s16 m[3][3]; s32 t[3]; } Mtx32_801A4D58;
extern void RotMatrixY(s32 a0, void *a1);
extern void func_800484EC(s32 a0, s32 a1, s32 a2);
void func_801A4D58(s32 a0, s32 a1)
{
extern u8 D_800AE620[];
Mtx32_801A4D58 m;
s32 vel[3];
m = *(Mtx32_801A4D58 *)&D_800AE620;
vel[1] = 0;
vel[0] = 0;
vel[2] = a1;
RotMatrixY(*(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x14), &m);
func_800484EC((s32)&m, (s32)&vel[0], a0 + 0x10);
}
#include "common.h"
+30 -1
View File
@@ -4187,7 +4187,36 @@ void func_8017DB48(void *a0) {
}
INCLUDE_ASM("asm/ov_SC02_015/nonmatchings/ov_SC02_015_jr_8017AE2C", func_8017DB60);
extern void func_8017DC24(s32);
extern void func_8012931C(void *a0, s32 a1);
extern u8 *func_801290DC(s32 a0, u8 *a1);
extern s32 D_80181D90;
void func_8017DB60(void *a0) {
register s8 *s0 __asm__("$16");
s32 t;
u8 *p;
s32 x;
s0 = (s8 *)a0;
((void (*)(void))func_8017DC24)();
*(s32 *)(s0 + 0x10) = *(volatile s32 *)(s0 + 0x10);
t = *(volatile s32 *)(s0 + 0x18);
*(s32 *)(s0 + 0x18) = t;
*(s32 *)(s0 + 0x14) = *(s32 *)(s0 + 0x14) + 0xC000;
func_8012931C(s0, t);
if (*(s16 *)(s0 + 0x2E) < *(s16 *)(s0 + 0xA)) {
*(s16 *)(s0 + 0xA) = *(s16 *)(s0 + 0x2E);
func_80015978((s32)s0 + 4, &x);
p = func_801290DC(0x28, (u8 *)&x);
if (p != 0) {
*(u32 *)(p + 0x2C) = D_80181D90++ & 7;
}
func_8002D4C8(0x572, 0);
func_801292C8((u8 *)s0);
}
}
extern void func_80015978(s32 a0, s32 *a1);
extern s32 func_8012EF34(s32 a0, s32 a1);
+37 -1
View File
@@ -5011,7 +5011,43 @@ void func_80180830(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_011/nonmatchings/ov_SC03_011_jr_8017C730", func_8018094C);
extern s32 func_8018094C_bank(void) __asm__("func_8018094C");
s32 func_8018094C_bank(void)
{
extern void func_8012BD14(s32 a0);
extern s32 func_80178BF8();
extern void func_80172710(void);
register s32 a0v __asm__("$4");
register s32 s0 __asm__("$16") = a0v;
s32 ptr;
u16 st;
ptr = *(s32 *)((s32)s0 + 0x64);
st = *(u16 *)((s32)ptr + 0x2);
if (st != 4) {
return 0;
}
if (((s32 (*)(s32))func_8012BD14)(ptr) >= 0x4001) {
return 0;
}
{
register s32 p __asm__("$4");
u16 st2;
p = *(s32 *)((s32)s0 + 0x64);
st2 = *(u16 *)((s32)p + 0x34);
if (st2 == 0) {
*(u16 *)((s32)p + 0x34) = st2 + 1;
func_80178BF8();
return (s32)func_80172710;
}
}
return 0;
}
extern void func_8012E88C(u8 *a0);
extern s32 func_80178B18(s32 param_1, s32 param_2);
+182 -1
View File
@@ -3883,7 +3883,188 @@ INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017DC70", func_8018041
INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017DC70", func_80180444);
INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017DC70", func_801804A0);
extern void func_800291C8(s32, s32);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, void *a1);
extern s32 func_80143B6C(s32 a0, s32 a1);
extern s32 func_8012CBCC(s32 a0);
extern void func_80131C78(s32 a0);
extern s32 func_8012BC60();
extern s32 func_8012B6D4(s16 *a0, s16 *a1);
extern void func_8012B2CC(s32 a0);
extern void func_8012B1B4(s32 a0, s32 a1);
extern s32 func_8012B030(void *a0);
extern u8 D_801202A0[];
extern s32 D_801D9758;
extern s32 D_801D975C;
extern s32 D_801C00D0;
extern s32 D_801C0200;
extern s16 D_801C03F0;
extern s32 D_8018B8C0;
extern u16 D_8018B8E4;
extern u16 D_8018B8E6;
extern u16 D_8018B8E8;
void func_801804A0(s32 a0) {
register u16 *s2 __asm__("$18");
register s32 s3 __asm__("$19");
register s32 s4 __asm__("$20");
register u16 *s5 __asm__("$21");
s32 pad[4];
s32 D;
s32 t;
s32 r2;
s16 *ent;
switch (*(u8 *)(a0 + 0xC2)) {
case 0:
D_801D9758 = D = func_8012CBCC(a0);
if (D & 0x2000) {
if (D & 0x1000) {
*(s16 *)(a0 + 2) = 4;
*(u8 *)(a0 + 0xC1) = 0;
*(u16 *)(a0 + 0x5E) = 0;
*(s32 *)(a0 + 0x1C) = 0x30;
func_8012A828(a0, &D_801C00D0);
func_8002D4C8(0x531, 0);
func_8002D4C8(0x526, 0);
func_800291C8(0xA, 0x3025);
return;
}
func_80143B6C(a0, 1);
*(u8 *)(a0 + 0xC2) = 1;
*(s32 *)(a0 + 0x14) = 0xFFF30000;
*(s32 *)(a0 + 0x1C) = 0;
}
t = *(s32 *)(a0 + 0x1C) + 1;
*(s32 *)(a0 + 0x1C) = t;
if (t >= 0x78) {
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = 0;
*(s16 *)(a0 + 2) = 3;
*(s32 *)(a0 + 0x1C) = 2;
*(u16 *)(a0 + 0xFC) = 0x3C;
*(u16 *)(a0 + 6) = D_8018B8E4;
*(u16 *)(a0 + 0xA) = D_8018B8E6;
*(u16 *)(a0 + 0xE) = D_8018B8E8;
func_8012B030((void *)a0);
*(u16 *)(a0 + 0x5C) = 0x8A10;
if (*(s16 *)(a0 + 0x76) < 0x320) {
*(u16 *)(a0 + 0x76) = 0x384;
}
func_800291C8(0xA, 0x3025);
}
break;
case 1:
D_801D975C = *(s32 *)(a0 + 0x14);
D_801D9758 = D = func_8012CBCC(a0);
if (D & 0x2000) {
if (D & 0x1000) {
*(s16 *)(a0 + 2) = 4;
*(u8 *)(a0 + 0xC1) = 0;
*(u16 *)(a0 + 0x5E) = 0;
*(s32 *)(a0 + 0x1C) = 0x30;
func_8012A828(a0, &D_801C00D0);
func_8002D4C8(0x531, 0);
func_8002D4C8(0x526, 0);
func_800291C8(0xA, 0x3025);
return;
}
func_80143B6C(a0, 1);
{
s32 n;
n = D_801D975C;
*(u8 *)(a0 + 0xC2) = 2;
*(s32 *)(a0 + 0x1C) = 0;
*(s32 *)(a0 + 0x14) = -n;
}
}
t = *(s32 *)(a0 + 0x1C) + 1;
*(s32 *)(a0 + 0x1C) = t;
if (t >= 0x28) {
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = 0;
*(s16 *)(a0 + 2) = 3;
*(s32 *)(a0 + 0x1C) = 2;
*(u16 *)(a0 + 0xFC) = 0x3C;
*(u16 *)(a0 + 6) = D_8018B8E4;
*(u16 *)(a0 + 0xA) = D_8018B8E6;
*(u16 *)(a0 + 0xE) = D_8018B8E8;
func_8012B030((void *)a0);
*(u16 *)(a0 + 0x5C) = 0x8A10;
if (*(s16 *)(a0 + 0x76) < 0x320) {
*(u16 *)(a0 + 0x76) = 0x384;
}
func_800291C8(0xA, 0x3025);
}
break;
case 2:
*(s32 *)(a0 + 0x10) = *(s32 *)(a0 + 0x10) * 15 / 16;
*(s32 *)(a0 + 0x18) = *(s32 *)(a0 + 0x18) * 15 / 16;
D_801D9758 = D = func_8012CBCC(a0);
if (D & 0x2000) {
if (D & 0x1000) {
void *p;
*(s16 *)(a0 + 2) = 4;
*(u8 *)(a0 + 0xC1) = 0;
*(u16 *)(a0 + 0x5E) = 0;
*(s32 *)(a0 + 0x1C) = 0x30;
__asm__("" : "=r"(p) : "0"(&D_801C00D0));
func_8012A828(a0, p);
func_8002D4C8(0x531, 0);
func_8002D4C8(0x526, 0);
func_800291C8(0xA, 0x3025);
func_8012A828(a0, &D_801C00D0);
} else {
t = *(s32 *)(a0 + 0x1C) + 1;
*(s32 *)(a0 + 0x1C) = t;
if (t >= 0x11) {
func_80131C78(a0);
func_8012A828(a0, &D_801C0200);
s2 = (u16 *)D_801202A0;
s5 = s2 + 0x3240;
s4 = 0;
if (s2 != s5) {
s3 = a0 + 4;
do {
ent = (s16 *)(s2 + 2);
if (*s2 == 0xF2) {
if (func_8012BC60((void *)s3, (void *)ent) < 0x4000) {
s4 = 1;
*(s16 *)(a0 + 2) = 2;
r2 = func_8012B6D4((s16 *)s3, ent);
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = r2;
*(s32 *)(a0 + 0xCC) = (s32)s2;
func_8012A828(a0, &D_801C03F0);
func_8012B2CC(a0);
func_8012B1B4(a0, &D_8018B8C0);
*(s16 *)(a0 + 0x16) = -2;
}
}
s2 += 0x86;
} while (s2 != s5);
}
if (!s4) {
func_8012B030((void *)a0);
*(s16 *)(a0 + 2) = 1;
}
func_800291C8(0xA, 0x3025);
}
if ((*(s32 *)(a0 + 0x1C) & 3) == 3) {
func_80143B6C(a0, 1);
}
}
}
break;
}
t = *(u8 *)(a0 + 0x109) - 1;
*(u8 *)(a0 + 0x109) = t;
if ((t & 0xFF) == 0) {
func_800291C8(0xA, 0x3025);
}
}
void func_80180904(s32 arg0) {
register s32 base __asm__("$2");
+1 -120
View File
@@ -2914,126 +2914,7 @@ INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_801800F
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_80180270);
void func_8018035C(s32 param_1)
{
extern void func_80180C40(s32);
extern void func_80180D2C();
extern s32 func_8012CC64(s32 a0, void *a1);
extern s32 func_8012CC1C(s32 a0, void *a1);
extern void func_8012B23C(s32 a0);
extern void func_80131C78(s32 a0);
extern s32 func_80143B6C(s32 a0, s32 a1);
extern void func_80131E00(s32 a0, s32 a1);
extern s32 D_8019C004;
s32 iVar1;
if (*(s16 *)(param_1 + 0xa) >= 0x10) {
func_80180C40(param_1);
return;
}
switch (*(u16 *)(param_1 + 0x34)) {
case 0:
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) -= 0x100;
iVar1 = func_8012CC64(param_1, &D_8019C004);
if ((iVar1 & 0xff) == 0x1a) {
goto EXIT;
}
if ((iVar1 & 0x2000) != 0) {
*(u16 *)(param_1 + 0x34) += 1;
*(s32 *)(param_1 + 0x1c) = 0;
*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = 0;
goto TAIL;
}
if ((iVar1 & 0x4000) != 0) {
*(u16 *)(param_1 + 0x34) = 4;
*(s32 *)(param_1 + 0x1c) = 0;
*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = 0;
func_8012B23C(param_1);
goto TAIL;
}
*(s32 *)(param_1 + 0x1c) += 1;
if (*(s32 *)(param_1 + 0x1c) >= 0x3c) {
*(u16 *)(param_1 + 0x34) = 2;
}
goto TAIL;
case 1:
*(s32 *)(param_1 + 0x10) = *(s32 *)(param_1 + 0x10) * 15 / 16;
*(s32 *)(param_1 + 0x18) = *(s32 *)(param_1 + 0x18) * 15 / 16;
iVar1 = func_8012CC1C(param_1, &D_8019C004);
if ((iVar1 & 0xff) == 0x1a) {
goto EXIT;
}
if ((iVar1 & 0x6000) == 0) {
*(s32 *)(param_1 + 0x1c) = 0;
*(u16 *)(param_1 + 0x34) += 1;
func_8012B23C(param_1);
goto TAIL;
}
if ((*(u32 *)(param_1 + 0x1c) % 4) == 0) {
func_80143B6C(param_1, 1);
}
*(s32 *)(param_1 + 0x1c) += 1;
if (*(s32 *)(param_1 + 0x1c) < 0x10) {
goto TAIL;
}
func_80131C78(param_1);
goto TAIL;
case 2:
iVar1 = func_8012CC64(param_1, &D_8019C004);
if ((iVar1 & 0x2000) != 0) {
func_80143B6C(param_1, 1);
func_80131C78(param_1);
goto TAIL;
}
if ((iVar1 & 0x4000) == 0) {
goto L_E00;
}
*(u16 *)(param_1 + 0x34) = 4;
func_80143B6C(param_1, 1);
func_8012B23C(param_1);
goto TAIL;
case 3:
*(s32 *)(param_1 + 0x1c) += 1;
if (*(s32 *)(param_1 + 0x1c) < 0x10) {
goto TAIL;
}
func_80131C78(param_1);
goto TAIL;
case 4:
iVar1 = func_8012CC1C(param_1, &D_8019C004);
if ((iVar1 & 0xff) == 0x1a) {
EXIT:
func_80180C40(param_1);
return;
}
if ((iVar1 & 0x2000) == 0) {
goto C4_B;
}
func_80131C78(param_1);
goto TAIL;
C4_B:
if ((*(u32 *)(param_1 + 0x1c) % 4) == 0) {
func_80143B6C(param_1, 1);
}
L_E00:
*(s32 *)(param_1 + 0x1c) += 1;
if (*(s32 *)(param_1 + 0x1c) >= 0x3c) {
func_80131E00(param_1, 0xd);
}
}
TAIL:
((s32 (*)(s32))func_80180D2C)(param_1);
if (0x100000 < *(s32 *)(param_1 + 0x14)) {
*(s32 *)(param_1 + 0x14) = 0x100000;
}
}
INCLUDE_ASM("asm/ov_SC03_110/nonmatchings/ov_SC03_110_jr_8017FBC8", func_8018035C);
extern s32 D_8019BFAC;
extern void func_80180D2C();
+1 -115
View File
@@ -4114,121 +4114,7 @@ void func_8017E6A0(s32 param_1) {
}
extern void func_8013C9C4(void *a0);
extern s32 func_8012BEE8(s32 a0);
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
extern void func_8012A828(s32 a0, s32 a1);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8017EB34(s32);
extern void func_8017ECC4(s32 arg0, u16 arg1);
extern s32 func_8012C588(s32 a0, s32 a1);
extern void func_80029124(s32, s32);
extern void func_8002959C(void);
extern void func_80180C78(void);
extern s32 func_80178970(void);
extern void func_80178D18(void);
extern void func_8017E99C(s32 a0);
extern s16 D_8018503C;
extern u8 D_80185018;
extern u8 D_801884F4[];
void func_8017E6EC(void *arg0) {
register s32 t __asm__("$2");
s32 c;
s32 s0;
switch (*(u16 *)((s32)arg0 + 0x34)) {
case 0:
if ((*(u32 *)((s32)arg0 + 0x1C) & 7) == 0) {
func_8013C9C4(&D_8018503C);
}
if (func_8012BEE8((s32)arg0) != 0) {
*(u32 *)(*(s32 *)((s32)arg0 + 0x20) + 0x24) = 0;
s0 = 0;
do {
func_8012C658(0x1E0, s0, (s32)arg0);
s0 = s0 + 1;
} while (s0 < 0xB);
func_8012A828((s32)arg0, (s32)&D_801884F4);
func_8002D4C8(0x866, 0);
*(u16 *)((s32)arg0 + 0x34) = *(u16 *)((s32)arg0 + 0x34) + 1;
}
((void (*)(void *))func_8017EB34)(arg0);
break;
case 1:
if ((*(u16 *)((s32)arg0 + 0x72) & 0x4000) != 0) {
func_8002D4C8(0x866, 0);
}
c = *(s32 *)((s32)arg0 + 0x94);
if (c == 0x10) {
t = *(u16 *)((s32)arg0 + 0x106) + 1;
*(u16 *)((s32)arg0 + 0x106) = t;
if ((t << 16) >> 16 == 2) {
*(u16 *)((s32)arg0 + 0x98) = 0;
t = *(u16 *)((s32)arg0 + 0x34) + 1;
*(u16 *)((s32)arg0 + 0x34) = t;
func_8002D4C8(0x865, 0);
}
}
if ((*(u32 *)((s32)arg0 + 0x1C) & 7) == 0) {
func_8013C9C4(&D_8018503C);
}
t = *(u32 *)((s32)arg0 + 0x1C) + 1;
*(u32 *)((s32)arg0 + 0x1C) = t;
((void (*)(void *))func_8017EB34)(arg0);
break;
case 2:
func_8017ECC4((s32)arg0, 0);
((void (*)(void *))func_8017EB34)(arg0);
c = *(s16 *)((s32)arg0 + 0xFE);
if (c != 6) {
break;
}
t = *(u16 *)((s32)arg0 + 0x34);
*(s32 *)((s32)arg0 + 0x1C) = 0x10;
goto lab_e958;
case 3:
func_8017ECC4((s32)arg0, 0);
if (func_8012BEE8((s32)arg0)) {
*(u16 *)((s32)arg0 + 0x5C) = 0;
*(u16 *)((s32)arg0 + 0x108) = 1;
*(u16 *)((s32)arg0 + 0x10A) = 1;
func_8012C588(0x23A, (s32)arg0);
*(u16 *)((s32)arg0 + 0xE2) = 0;
func_8002D4C8(0x868, 0);
goto lab_e954;
}
break;
case 4:
func_8017ECC4((s32)arg0, 1);
if ((*(u32 *)((s32)arg0 + 0x1C) & 0xF) == 0) {
func_8013C9C4(&D_80185018);
}
t = *(u32 *)((s32)arg0 + 0x1C) + 1;
*(u32 *)((s32)arg0 + 0x1C) = t;
if (*(s16 *)((s32)arg0 + 0xE2) == 0) {
break;
}
func_80029124(0xBB, 1);
func_8002959C();
func_8002D4C8(4, 0x868);
func_80180C78();
lab_e954:
t = *(u16 *)((s32)arg0 + 0x34);
lab_e958:
t = t + 1;
*(u16 *)((s32)arg0 + 0x34) = t;
break;
case 5:
break;
}
if (((s32 (*)(void *))func_80178970)(arg0) != 0) {
((void (*)(void *))func_80178D18)(arg0);
func_8017E99C((s32)arg0);
}
}
INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_8017E6EC);
INCLUDE_ASM("asm/ov_SC03_117/nonmatchings/ov_SC03_117_jr_8017BEBC", func_8017E99C);
+36 -2
View File
@@ -3414,7 +3414,26 @@ s16 func_80185B78(void) {
}
INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80185498", func_80185B88);
void func_80185B88(s32 a0) {
extern void func_80185BD4(void);
extern u8 D_800B9A15;
extern unsigned char D_800B9A13;
extern u16 D_80115110;
extern unsigned short D_80115112;
extern s16 D_80115126;
extern void *D_8011DB24;
void *func_ptr;
D_800B9A15 = 1;
D_800B9A13 = 4;
D_80115110 = 3;
func_ptr = func_80185BD4;
D_80115112 = 0;
D_80115126 = (s16)a0;
D_8011DB24 = func_ptr;
}
extern void func_80029444(void);
@@ -3436,4 +3455,19 @@ void func_80185BD4(void) {
}
INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80185498", func_80185C44);
void func_80185C44(void) {
extern void func_800D24A0(s32 a0);
extern void func_80185C98(void);
extern u16 D_8011511A;
extern u16 D_80115112;
extern s32 D_80115130;
extern s32 D_801E2358;
func_800D24A0(3);
D_8011511A = 0;
func_80185C98();
D_80115130 = 0;
D_801E2358 = 0;
D_80115112++;
}
+1 -180
View File
@@ -5259,186 +5259,7 @@ void func_8017FEBC(s32 a0) {
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8012C218(void *a0);
extern void func_800233CC(void *a0, unsigned short a1);
extern void func_80029514(s32 a0);
extern void func_8001CD50(s32 a0, s32 a1);
extern void func_800D0F4C(s32 a0);
extern s32 func_80178970();
extern void func_80178D18();
extern u8 *func_8012913C(s32 a0);
extern u8 D_801A9CE8;
extern u8 D_801A9CE9;
extern u8 D_801A9CEA;
extern u8 D_801A9CEC;
extern u8 D_801A9D68;
extern u8 D_801A9D69;
extern u8 D_801A9D6A;
extern u8 D_801A9D6C;
extern u8 D_801A9D28;
extern u8 D_801A9D29;
extern u8 D_801A9D2A;
extern u8 D_801A9D2C;
void func_80180020(s32 arg) {
register u8 *s0 __asm__("$16");
register s32 s1 __asm__("$17");
register s32 v1 __asm__("$3");
register s32 t __asm__("$2");
register s32 ca0 __asm__("$4");
register s32 ca1 __asm__("$5");
volatile u8 pad[40];
s32 u34;
s1 = arg;
switch (*(s16 *)(s1 + 0x10A)) {
case 0:
goto tailjoin;
case 1:
v1 = (s32)func_8012913C(0x6D);
if (v1 == 0) {
goto tailjoin;
}
s0 = &D_801A9CE8;
*(s32 *)(s1 + 0xD0) = v1;
*(u16 *)(v1 + 6) = *(u16 *)(s1 + 6) + 0x80;
*(u16 *)(v1 + 0xA) = *(u16 *)(s1 + 0xA) - 0x38;
*(u16 *)(v1 + 0xE) = *(u16 *)(s1 + 0xE) - 0x28;
func_8001CD50(*(s32 *)(v1 + 0x20), (s32)s0);
D_801A9CE9 = 0;
D_801A9CEA = 0;
D_801A9CEC = 0;
D_801A9CE9 = 0;
D_801A9CEA = 0;
*s0 = 0xFF;
func_800233CC(s0, 0x40);
*(s16 *)(s1 + 0x10A) = 2;
*(s16 *)(s1 + 0xFC) = 0x20;
return;
case 2:
t = *(s16 *)(s1 + 0xFC);
v1 = t;
if (t != 0) {
goto decr;
}
v1 = (s32)func_8012913C(0x6D);
if (v1 == 0) {
goto tailjoin;
}
s0 = &D_801A9D68;
*(s32 *)(s1 + 0xD8) = v1;
*(u16 *)(v1 + 6) = *(u16 *)(s1 + 6) + 0x68;
*(u16 *)(v1 + 0xA) = *(u16 *)(s1 + 0xA) - 0x20;
*(u16 *)(v1 + 0xE) = *(u16 *)(s1 + 0xE) - 0x28;
func_8001CD50(*(s32 *)(v1 + 0x20), (s32)s0);
D_801A9D69 = 0;
D_801A9D6A = 0;
D_801A9D6C = 0;
*s0 = 0;
D_801A9D69 = 0;
D_801A9D6A = 0xFF;
func_800233CC(s0, 0x40);
*(s16 *)(s1 + 0x10A) = 3;
*(s16 *)(s1 + 0xFC) = 0x20;
return;
case 3:
t = *(s16 *)(s1 + 0xFC);
v1 = t;
if (t != 0) {
goto decr;
}
v1 = (s32)func_8012913C(0x6D);
if (v1 == 0) {
goto tailjoin;
}
s0 = &D_801A9D28;
*(s32 *)(s1 + 0xD4) = v1;
*(u16 *)(v1 + 6) = *(u16 *)(s1 + 6) + 0x9C;
*(u16 *)(v1 + 0xA) = *(u16 *)(s1 + 0xA) - 0x20;
*(u16 *)(v1 + 0xE) = *(u16 *)(s1 + 0xE) - 0x28;
func_8001CD50(*(s32 *)(v1 + 0x20), (s32)s0);
D_801A9D29 = 0;
D_801A9D2A = 0;
D_801A9D2C = 0;
*s0 = 0;
D_801A9D2A = 0;
D_801A9D29 = 0xFF;
func_800233CC(s0, 0x40);
*(s16 *)(s1 + 0x10A) = 4;
*(s16 *)(s1 + 0xFC) = 0x20;
return;
case 4:
t = *(s16 *)(s1 + 0xFC);
v1 = t;
if (t != 0) {
goto decr;
}
v1 = *(s32 *)(s1 + 0xD0);
*(u16 *)(v1 + 2) += 1;
v1 = *(s32 *)(s1 + 0xD4);
*(u16 *)(v1 + 2) += 1;
v1 = *(s32 *)(s1 + 0xD8);
*(u16 *)(v1 + 2) += 1;
*(s16 *)(s1 + 0x10A) = 5;
*(s16 *)(s1 + 0xFC) = 0x20;
return;
case 5:
t = *(s16 *)(s1 + 0xFC);
v1 = t;
if (t == 0) {
goto set6;
}
decr:
t = v1 - 1;
*(s16 *)(s1 + 0xFC) = t;
return;
set6:
t = 6;
*(s16 *)(s1 + 0x10A) = t;
ca0 = 0xC1F;
ca1 = 0;
goto c6call;
case 6:
*(u16 *)(s1 + 6) -= 2;
{
u8 *p = *(u8 **)(s1 + 0xCC);
*(u16 *)(s1 + 0xA) ^= 2;
*(u16 *)(p + 6) += 2;
*(u16 *)(p + 0xA) ^= 2;
if (*(s16 *)(s1 + 0x88) - *(s16 *)(s1 + 6) >= 0x81) {
*(s16 *)(s1 + 0x10A) = 0;
ca0 = 4;
ca1 = 0xC1F;
} else {
goto tailjoin;
}
}
c6call:
func_8002D4C8(ca0, ca1);
break;
}
tailjoin:
if (((s32 (*)(s32))func_80178970)(s1) == 0) {
return;
}
((void (*)(s32))func_80178D18)(s1);
u34 = *(u16 *)(s1 + 0x34);
*(s16 *)(s1 + 2) = 1;
if (u34 == 0) {
return;
}
func_80029514(0x30C);
func_8012C218((void *)*(s32 *)(s1 + 0xCC));
func_8012C218((void *)*(s32 *)(s1 + 0x6C));
func_8012C218((void *)s1);
func_800D0F4C(0x60);
func_800D0F4C(0x61);
func_800D0F4C(0x62);
}
INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8017BEBC", func_80180020);
INCLUDE_ASM("asm/ov_SC04_000/nonmatchings/ov_SC04_000_jr_8017BEBC", func_801803BC);
File diff suppressed because it is too large Load Diff
+1 -54
View File
@@ -6043,60 +6043,7 @@ DEFINE_func_8018178C() /* dedup: shared engine-core @0x8018178C (src/shared) */
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_801817B8);
#include "common.h"
extern s32 func_80185BE0(s32 a0);
extern s32 func_80184FA4(s32);
extern void func_80184ED4(s32, s32, s32, s32);
extern void func_80184CB8(s32*, s32);
extern u8 D_801B66C0[];
extern u8 D_801B6670[];
extern u8 D_801B662C[];
extern short D_80191B34;
void func_80181804(void *a0)
{
switch (*(u16 *)((s32)a0 + 0x34)) {
case 0:
if (func_80185BE0(0xD) == 0) {
return;
}
*(u16 *)((s32)a0 + 0x34) = 1;
func_80184ED4((s32)a0, (s32)D_801B66C0, 1, 0x80);
return;
case 1:
func_80185BE0(0xD);
if (func_80184FA4((s32)a0) == 0) {
return;
}
*(u16 *)((s32)a0 + 0x34) = 2;
func_80184ED4((s32)a0, (s32)D_801B6670, 1, 0x80);
return;
case 2:
if (func_80184FA4((s32)a0) == 0) {
return;
}
*(u16 *)((s32)a0 + 0x34) = 3;
*(s32 *)((s32)a0 + 0x1C) = 0x20;
return;
case 3:
if (func_80185BE0(3) == 0) {
return;
}
*(u16 *)((s32)a0 + 0x34) = 4;
func_80184ED4((s32)a0, (s32)D_801B662C, 1, 0x80);
return;
case 4:
func_80185BE0(3);
if (func_80184FA4((s32)a0) == 0) {
return;
}
*(u16 *)((s32)a0 + 0x2) = 1;
func_80184CB8((s32 *)a0, (s32)&D_80191B34);
return;
}
}
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80181804);
extern void (*D_80191BDC[])(void);
+34 -2
View File
@@ -4474,7 +4474,22 @@ void func_8018B6F4(void *a0) {
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B730);
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018B798);
extern s32 func_80184BAC(s32 arg0, s32 arg1);
extern u8 D_80078EBA;
void func_8018B798(void *a0) {
s32 v0;
*(s32 *)(*(s32 *)((s32)a0 + 0xCC) + 0xB0) = 2;
if (D_80078EBA == 3) {
v0 = 0;
} else {
v0 = func_80184BAC(7, 0x13) != 0;
}
if (v0 != 0) {
*(u16 *)((char *)a0 + 2) = 1;
}
}
DEFINE_func_8018B7FC() /* dedup: shared engine-core @0x8018B7FC (src/shared) */
@@ -4626,7 +4641,24 @@ extern void func_80178CBC(s32, s32);
}
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018BF64);
extern s32 func_80184BAC(s32 arg0, s32 arg1);
void func_8018BF64(void *arg0) {
register s32 *s0 asm("$16") = arg0;
s32 v0, v1;
*(s32 *)((u8 *)(*(s32 **)((u8 *)s0 + 0xCC)) + 0xB0) = 2;
v0 = func_80184BAC(6, 0x12);
if (v0 != 0) {
v1 = 1;
} else {
v0 = func_80184BAC(0x12, 0x15);
v1 = (v0 != 0) << 1;
}
if (v1 != 0) {
func_8018BDE0(s0);
}
}
extern s32 func_80184BAC(s32 arg0, s32 arg1);
+32 -1
View File
@@ -5157,7 +5157,38 @@ void func_8018025C(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC06_008/nonmatchings/ov_SC06_008_jr_8017C294", func_801802BC);
#include "common.h"
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern void func_8001C214(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, void *a1);
void func_801802BC(s32 param_1)
{
extern u8 D_8019E628[];
extern u8 D_80185B40[];
s32 v0;
v0 = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)(param_1 + 0x20) = v0;
if (v0 == 0) {
func_8012CAE4((void *)param_1);
} else {
func_8001C214(v0, (s32)D_8019E628);
func_8012A828(param_1, (void *)D_80185B40);
*(u16 *)(param_1 + 0x2) = 1;
*(s32 *)(param_1 + 0x1C) = 0x40;
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) =
*(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x10);
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) =
*(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x12);
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) =
*(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x14);
}
}
extern void func_8012AD80(s32 a0);
extern void func_8012B14C(s32 a0, s32 a1);
+1 -45
View File
@@ -3220,51 +3220,7 @@ void func_801815CC(s32 param_1) {
void func_8018165C(void) {
}
extern void func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2);
extern void func_80180CB0(s32 a0);
void func_80181664(s32 param_1)
{
s32 v1;
v1 = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)(param_1 + 0x20) = v1;
if (v1 == 0) {
((void (*)(s32))func_8012CAE4)(param_1);
return;
}
*(u16 *)v1 = 1;
*(u16 *)(*(s32 *)(param_1 + 0x20) + 2) = 9;
switch (*(s16 *)(param_1 + 0x70)) {
case 0:
*(s32 *)(param_1 + 0x6C) = func_8012C658(0x2F9, 2, *(s32 *)(param_1 + 0x64));
break;
case 1:
*(s32 *)(param_1 + 0x6C) = func_8012C658(0x2F9, 3, *(s32 *)(param_1 + 0x64));
break;
case 2:
case 3:
*(s32 *)(param_1 + 0x6C) =
func_8012C658(0x2F9, *(s16 *)(param_1 + 0x70) + 2, param_1);
break;
case 4:
case 5:
*(s32 *)(param_1 + 0xD0) = func_8012C658(0x2F9, 6, param_1);
/* fall through */
case 6:
default:
func_80180CB0(param_1);
break;
}
}
INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80180CD0", func_80181664);
INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80180CD0", func_80181744);
+55 -1
View File
@@ -4073,7 +4073,61 @@ s32 func_8017E8F8(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_8017EADC);
extern void func_8012EC04(s32 a0, s32 a1, s32 *a2);
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
extern void func_8012B77C(void *a0, s32 a1, void *a2);
extern void func_80049CAC(s32 a0, s32 a1);
extern s32 func_800133BC();
extern void func_800484EC(s32 a0, s32 a1, s32 a2);
extern void func_8012D3B4(s32 a0, s32 a1, s32 a2);
extern s32 D_801E1158;
extern u16 D_80193440[];
extern u16 D_80193468[];
extern u8 D_80126B5C;
extern s32 D_80126B64;
extern s32 D_80126B60;
void func_8017EADC(s32 a0) {
s16 m[16];
s16 s1[4];
s16 tmp2[3];
s16 tmp[3];
s32 s2[3];
s16 s3[6];
s16 outb[6];
s32 val;
func_8012EC04(a0, D_801E1158, (s32 *)m);
func_8012F14C((s32)m, (s32)&D_80193468, (s32)s1);
func_8012F14C((s32)m, (s32)&D_80193440, *(s32 *)(a0 + 0xD4) + 8);
s2[0] = *(s32 *)&D_80126B5C;
s2[1] = D_80126B60 + 0xFFD00000;
s2[2] = D_80126B64;
s3[1] = s1[0];
s3[3] = s1[1];
s3[5] = s1[2];
func_8012B77C(&val, (s32)s3, (s32)s2);
tmp[0] = val;
tmp[1] = val >> 16;
tmp[2] = 0;
func_80049CAC((s32)tmp, (s32)m);
*(s16 *)(a0 + 0x102) = func_800133BC((s32)s1, (s32)s2);
*(s32 *)&s3[2] = 0;
*(s32 *)&s3[0] = 0;
s3[5] = -*(u16 *)(a0 + 0x102);
s3[4] = 0;
func_800484EC((s32)m, (s32)s3, (s32)outb);
tmp2[0] = s1[0] + outb[1];
tmp2[1] = s1[1] + outb[3];
tmp2[2] = s1[2] + outb[5];
func_8012D3B4((s32)s1, (s32)tmp2, 0xFF);
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_8017BEBC", func_8017EC4C);
+1 -160
View File
@@ -5360,166 +5360,7 @@ void func_80182DB0(void *a0) {
}
extern void func_80183478();
extern void func_8002D4C8();
extern void func_8012F214();
extern void func_80183534();
extern s32 func_80013478(s32 a0, s32 a1);
extern s32 D_801DDB28;
extern s32 D_801DDB3C;
extern u16 D_800B99DA;
extern u8 D_80126B5C;
extern u8 D_80190858[];
extern u8 D_801908D8[];
extern s32 D_801DFE54[];
extern s32 D_801DFDD4[];
void func_80182ED8(s32 arg0) {
s32 val;
s16 top[4];
s16 bot[4];
s32 *q;
s32 ctr;
s32 *p;
u8 *p8;
s32 r;
s32 *w;
s32 t;
s32 dd4;
s32 pbase;
u16 vol;
switch (*(u16 *)(arg0 + 0x34)) {
case 0:
*(u16 *)(arg0 + 0x100) += 0x20;
if (*(s16 *)(arg0 + 0x100) >= 0x121) {
*(u16 *)(arg0 + 0x100) = 0x120;
*(u16 *)(arg0 + 0x34) = *(u16 *)(arg0 + 0x34) + 1;
func_80183478(arg0, 1);
}
break;
case 1:
if (*(s32 *)(arg0 + 0xE0) != 0) {
func_801834D8(arg0, 0);
*(u16 *)(arg0 + 0x34) = *(u16 *)(arg0 + 0x34) + 1;
}
if ((*(s16 *)(D_801DDB28 + 0x100) == 2) && ((D_800B99DA & 0x7F) == 0)) {
func_801834D8(arg0, 0);
*(u16 *)(arg0 + 0x34) = 4;
}
break;
case 2:
*(u16 *)(arg0 + 0xFE) += 0x20;
if (*(s16 *)(arg0 + 0xFE) >= 0x121) {
*(u16 *)(arg0 + 0xFE) = 0x120;
*(u16 *)(arg0 + 0x34) = *(u16 *)(arg0 + 0x34) + 1;
func_801834D8(arg0, 0);
func_801834D8(arg0, 1);
}
break;
case 3:
*(u16 *)(arg0 + 2) = 2;
if (*(s16 *)(arg0 + 0x70) == 3) {
func_8002D4C8(4, 0x9CF);
}
break;
case 4:
*(u16 *)(arg0 + 0xFE) += 0x20;
if (*(s16 *)(arg0 + 0xFE) >= 0x121) {
*(u16 *)(arg0 + 0xFE) = 0;
*(u16 *)(arg0 + 0x100) = 0;
*(u16 *)(arg0 + 0x34) = 0;
if (*(s32 *)(*(s32 *)(arg0 + 0x64) + 0x64) == D_801DDB3C) {
if (*(s32 *)(arg0 + 8) == 0) {
*(s16 *)(arg0 + 0xA) = 0x200;
} else {
*(s16 *)(arg0 + 0xA) = 0;
}
} else {
if (*(s32 *)(arg0 + 8) == 0) {
*(s16 *)(arg0 + 0xA) = -0x200;
} else {
*(s16 *)(arg0 + 0xA) = 0;
}
}
func_80183478(arg0, 0);
func_801834D8(arg0, 1);
}
break;
}
w = (s32 *)(arg0 + 0xE4);
ctr = 0;
t = *(s16 *)(arg0 + 0x70);
p8 = D_80190858 + (t << 5);
r = (s32)&D_801DFE54[t * 4];
dd4 = (s32)D_801DFDD4;
pbase = dd4 + 4;
p = (s32 *)(pbase + (t << 5));
q = (s32 *)(dd4 + (t << 5));
while (ctr < 4) {
func_8012F214(*(s32 *)(arg0 + 0x64), (s32)p8, (s32)top);
bot[0] = top[0];
bot[1] = top[1];
bot[2] = top[2];
top[1] += *(u16 *)(arg0 + 0xFE) + *(u16 *)(arg0 + 0xA);
bot[1] += *(u16 *)(arg0 + 0x100) + *(u16 *)(arg0 + 0xA);
if (*q != 0) {
*(s16 *)(*q + 8) = top[0];
*(s16 *)(*q + 10) = top[1];
*(s16 *)(*q + 12) = top[2];
}
if (*p != 0) {
*(s16 *)(*p + 8) = bot[0];
*(s16 *)(*p + 10) = bot[1];
*(s16 *)(*p + 12) = bot[2];
}
func_80183534(arg0, (s32)top, (s32)bot, (s32)w);
func_80183848(arg0, (s32)top, (s32)bot);
top[0] = (top[0] + bot[0]) >> 1;
top[1] = (top[1] + bot[1]) >> 1;
top[2] = (top[2] + bot[2]) >> 1;
*(s32 *)r = func_80013478((s32)&D_80126B5C, (s32)top);
r += 4;
ctr++;
p8 += 8;
p += 2;
q += 2;
w++;
}
func_8012F214(*(s32 *)(arg0 + 0x64),
(s32)(D_801908D8 + (*(s16 *)(arg0 + 0x70) << 3)), (s32)top);
bot[0] = top[0];
bot[1] = top[1];
bot[2] = top[2];
top[1] += *(u16 *)(arg0 + 0xFE) + *(u16 *)(arg0 + 0xA);
bot[1] += *(u16 *)(arg0 + 0x100) + *(u16 *)(arg0 + 0xA);
func_80183848(arg0, (s32)top, (s32)bot);
if ((*(u16 *)(arg0 + 0x34) != 3) && (*(s16 *)(arg0 + 0x70) == 3)) {
val = D_801DFE54[0];
for (ctr = 1; ctr < 0x10; ctr++) {
if (D_801DFE54[ctr] < val) {
val = D_801DFE54[ctr];
}
}
val -= 0x4000;
if (val <= 0) {
func_8002D4C8(0x9CF, 0x107F);
} else {
vol = 0x7F;
if (val <= 0xFFFFF) {
vol -= (val * 111) / 1048576;
} else {
vol = 0x10;
}
func_8002D4C8(0x9CF, vol | 0x1000);
}
}
}
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80182ED8);
INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_801833FC);
+1 -65
View File
@@ -4859,71 +4859,7 @@ void func_80181938(void *a0) {
}
extern u8 D_801202A0[];
extern void *D_80126CC8;
extern u8 D_801B72B4[];
extern u8 D_801B6914[];
extern void func_8001C214(s32 a0, s32 a1);
extern void func_80180D68(void);
void func_80181A80(void *a0) {
u16 state = *(u16 *)((s32)a0 + 0x34);
switch (state) {
case 4:
{
u8 *p = D_801202A0;
s32 i;
for (i = 0; i < 0x60; i++, p += 0x10C) {
if (*(u16 *)(p + 0) == 0x2E7 && *(u16 *)(p + 2) == 4) {
func_8001C214(*(s32 *)((s32)a0 + 0x20), (s32)D_801B72B4);
*(u16 *)((s32)a0 + 0x5C) = 0x8800;
*(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400;
*(s16 *)((s32)a0 + 0x34) = 3;
}
}
/* fall through */
}
case 0:
if (D_80126CC8 == a0) {
u16 t0 = *(u16 *)((s32)a0 + 0x88);
u16 t1 = *(u16 *)((s32)a0 + 0x8A);
u16 t2 = *(u16 *)((s32)a0 + 0x8C);
*(s16 *)((s32)a0 + 0x34) = 1;
*(s16 *)((s32)a0 + 0x5C) = 0;
*(u16 *)((s32)a0 + 0x6) = t0;
*(u16 *)((s32)a0 + 0xA) = t1;
*(u16 *)((s32)a0 + 0xE) = t2;
func_80180D68();
}
break;
case 1:
break;
case 2:
{
u8 *p = D_801202A0;
s32 i;
for (i = 0; i < 0x60; i++, p += 0x10C) {
if (*(u16 *)(p + 0) == 0x2E7 && *(u16 *)(p + 2) == 4) {
func_8001C214(*(s32 *)((s32)a0 + 0x20), (s32)D_801B6914);
*(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x4) |= 0x60000040;
*(u16 *)((s32)a0 + 0x5C) = 0x9000;
*(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400;
*(s16 *)((s32)a0 + 0x34) = 0;
}
}
break;
}
case 3:
break;
default:
break;
}
}
INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_80181A80);
extern void (*D_801B4DA8[])(void);
+1 -30
View File
@@ -9326,36 +9326,7 @@ void func_8018CD54(s32 a0) {
}
extern void func_8012C1B8(void);
extern void func_8012CAE4(s32 a0);
extern void func_8001C214(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, void *a1);
void func_8018CDB4(s32 param_1) {
extern s32 D_801CC5A8;
extern u8 D_80193650[];
s32 v0;
v0 = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)(param_1 + 0x20) = v0;
if (v0 == 0) {
func_8012CAE4(param_1);
} else {
func_8001C214(v0, (s32)&D_801CC5A8);
func_8012A828(param_1, D_80193650);
*(s16 *)(param_1 + 2) = 1;
*(s32 *)(param_1 + 0x1C) = 0x40;
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) =
*(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x10);
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) =
*(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x12);
*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) =
*(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x14);
}
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_8018CDB4);
extern u8 D_801CA8D4[];
extern u8 D_801CA8E0[];
+96 -1
View File
@@ -3548,7 +3548,102 @@ retry_state6:
}
INCLUDE_ASM("asm/ov_SC06_033/nonmatchings/ov_SC06_033_jr_8018C2D8", func_8018CD5C);
extern void func_8012B23C(void *);
extern void func_8012B1B4(void *, void *);
extern s32 rand(void);
extern void func_8004914C(void *a0);
extern void func_800491AC(void *a0);
extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3);
extern s32 func_8004787C(s32 a0);
extern s32 func_80047948(s32 a0);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_8018CD5C(s32 a0) {
extern u8 D_800AF648;
extern u8 D_801C834C;
struct {
s16 v[3]; /* sp+0x10 */
s16 pad; /* sp+0x16 */
u16 sxy[2]; /* sp+0x18 */
s32 z; /* sp+0x1C */
s32 flag; /* sp+0x20 */
} L;
if (*(s16 *)(a0 + 0xFC) != *(s16 *)(*(s32 *)(a0 + 0x64) + 0x36)) {
*(s16 *)(a0 + 2) = 5;
*(s16 *)(a0 + 0x34) = 0;
((void (*)(void))func_8012B23C)();
func_8012B1B4((void *)a0, &D_801C834C);
*(s16 *)(a0 + 0x16) = (rand() & 3) - 0x1B;
*(s16 *)(a0 + 0xA) = *(u16 *)(a0 + 0xA) - 0x38;
*(s16 *)(a0 + 0xFC) = (rand() & 0xFF) - 0x80;
*(s16 *)(a0 + 0xFE) = (rand() & 0xFF) - 0x80;
*(s16 *)(a0 + 0x100) = (rand() & 0xFF) - 0x80;
*(s32 *)(a0 + 0x1C) = 0x3C;
return;
}
switch (*(u16 *)(a0 + 0x34)) {
case 0:
if (*(s32 *)(a0 + 0x1C) != 0) {
*(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) - 1;
*(s16 *)(a0 + 0xA) = *(u16 *)(a0 + 0xA) - 4;
return;
}
*(s32 *)(a0 + 0x1C) = 0x14;
*(u16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1;
L.v[0] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x48);
L.v[1] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x4C);
L.v[2] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x50);
/* $a0-pinned scopes: rematerialise &D_800AF648 (lui/addiu) before EACH call */
{ register void *r4 __asm__("$4"); r4 = &D_800AF648; func_8004914C(r4); }
{ register void *r4 __asm__("$4"); r4 = &D_800AF648; func_800491AC(r4); }
RotTransPers((s32)L.v, (s32)L.sxy, &L.z, &L.flag);
if (L.flag >= 0 && (u32)((L.sxy[0] + 0x9F) & 0xFFFF) < 0x13F
&& (u32)((L.sxy[1] + 0x77) & 0xFFFF) < 0xEF) {
s32 sx; /* screen X, then REUSED as the pan field */
register s32 av __asm__("$5"); /* |X| */
s32 vol;
sx = (s16)L.sxy[0];
av = sx;
if (sx < 0) {
av = -sx;
}
vol = ((0xA0 - av) * 0x7F) / 0xA0;
/* sched1 otherwise hoists the PAN multiply ahead of this one */
__asm__("" : "=r"(vol) : "0"(vol));
sx = (sx + 0xA0) / 0x14;
if (sx == 0x10) {
sx = 0xF;
}
sx = sx << 8; /* in place, so reorg can steal it into the bne delay slot */
func_8002D4C8(0x9E5, (vol | (0x3000 | sx)) & 0xFFFF);
}
return;
case 1:
if (*(s32 *)(a0 + 0x1C) != 0) {
*(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) - 1;
*(s32 *)(a0 + 4) =
*(s32 *)(a0 + 4) - (func_8004787C(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12)) << 5);
*(s32 *)(a0 + 0xC) =
*(s32 *)(a0 + 0xC) - (func_80047948(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12)) << 5);
return;
}
*(u16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1;
return;
case 2:
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x10) = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x10) + 0x20;
if (*(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) != 0x380) {
return;
}
*(u16 *)(a0 + 0x34) = *(u16 *)(a0 + 0x34) + 1;
return;
}
}
typedef struct {
SVECTOR_8016E7C8 v[4]; /* 0x00 */
+1 -26
View File
@@ -5063,32 +5063,7 @@ void func_80180B54(void *a0) {
INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8017BEBC", func_80180B90);
void func_80180C2C(s32 param_1)
{
extern u16 D_801AAD8C;
extern u16 D_80126B5E;
extern u16 D_80126B62;
extern u16 D_80126B66;
extern u16 D_80126BE2;
extern u16 D_80126BE4;
extern u8 D_80126BE0[];
extern void func_8012E014(s32 a0);
u16 t;
if (D_801AAD8C == 3) {
t = D_801AAD8C + 1;
*(u16 *)((s32)param_1 + 0x34) = 0;
D_801AAD8C = t;
}
if (*(u8 *)((s32)param_1 + 0x74) != 0) {
func_8012E014(param_1);
*(u16 *)&D_80126BE0[0] = D_80126B5E;
D_80126BE2 = D_80126B62;
D_80126BE4 = D_80126B66;
}
}
INCLUDE_ASM("asm/ov_SC07_001/nonmatchings/ov_SC07_001_jr_8017BEBC", func_80180C2C);
extern s32 func_8012C1B8(void);
extern void func_8012CAE4(void *a0);
+1 -18
View File
@@ -5463,24 +5463,7 @@ void func_8018247C(void)
}
extern s32 func_80132EF4(s32 a0, s32 a1);
extern s32 rand(void);
void func_80182538(s32 param_1)
{
s32 p;
s32 t;
p = func_80132EF4(param_1, 0x72);
if (p != 0) {
t = *(u16 *)(p + 6) - 0x30 + rand() % 96;
*(u16 *)(p + 6) = t;
*(u16 *)(p + 0xA) = *(u16 *)(param_1 + 0x52) + (*(u16 *)(p + 0xA) + 0x80);
t = *(u16 *)(p + 0xE) - 0x30 + rand() % 96;
*(u16 *)(p + 0xE) = t;
}
}
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80182538);
extern void func_8012AD44(s32 *a0, s16 a1);
extern u16 D_8018A464[];
+1 -44
View File
@@ -2247,50 +2247,7 @@ DEFINE_func_801498C0() /* dedup: shared engine-core @0x801498c0 (src/shared) */
} /* dedup: shared engine-core @0x801498e0 (src/shared) */
extern void func_80015978(s32 a0, s32 *a1);
extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_80147364();
extern s32 func_800CCF28(s32 a0);
extern u16 *func_80146750(u16 *param_1);
extern s16 currentLocationId;
s32 func_80149954(s32 s0) {
extern u8 D_80126B5C;
extern void *D_8012707C;
s32 sp10[2];
s16 buf[10];
if (*(s32 *)(s0 + 0x44) & 0x404) {
return 0;
}
if ((*(u16 *)(s0 + 0xAA) & 0x90) == 0) {
if (currentLocationId == 0x308D) {
func_80015978((s32)&D_80126B5C, sp10);
((s32 (*)(s32, s32, s32))func_8012E5CC)((s32)sp10, 0x4, 0x8E0);
return 0;
}
func_8002D4C8(0x4, 0x8E0);
return 0;
}
if (*(u16 *)(s0 + 0xAC) & 0x90) {
if ((s32)D_8012707C == 0x8E0) {
D_8012707C = 0;
} else {
func_80147364(0x8E0, 0);
}
}
func_800CCF28(s0);
*(s16 *)((s32)buf + 0x0) = 0x12;
*(s32 *)((s32)buf + 0x8) = s0;
*(s16 *)((s32)buf + 0x2) = 0;
*(s16 *)((s32)buf + 0x4) = -0x1E;
*(s16 *)((s32)buf + 0x6) = 0;
*(s32 *)((s32)buf + 0xC) = 0;
*(s32 *)((s32)buf + 0x10) = 0;
func_80146750(buf);
return 1;
}
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_801457A4", func_80149954);
DEFINE_func_80149A64() /* dedup: shared engine-core @0x80149a64 (src/shared) */
+92 -2
View File
@@ -3792,7 +3792,55 @@ void func_8017CFA4(void) {
}
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017D040);
typedef struct {
s16 off00; s16 off02; s16 off04; s16 off06;
u16 off08; s16 off0A; u16 off0C;
u8 pad0E[0x12];
} Ent8018DE64;
extern s32 D_80126954;
extern s32 D_8012695C;
extern s16 D_80126968;
extern s16 D_8012696A;
extern s16 D_8012696C;
extern s16 D_80126976;
extern s16 D_80126978;
extern s16 D_8012697A;
extern s32 D_801269E4;
extern s16 D_801269E8;
extern u8 D_80126948[];
extern Ent8018DE64 D_8018DE64[];
extern s16 *D_801F6098;
extern void func_8012A018(s32 a, s32 b);
extern void func_8012A094(s32 a0);
void func_8017D0F4(void *a0);
void func_8017D040(s32 arg0) {
register s32 t __asm__("v0");
register s32 tc __asm__("a1");
Ent8018DE64 *ptr;
t = 0x190;
D_80126954 = t;
ptr = &D_8018DE64[arg0];
t = *(s16 *)((s32)ptr + 0xA);
D_8012695C = t;
t = *(u16 *)((s32)ptr + 0xC);
D_80126968 = t;
D_801F6098 = (s16 *)ptr;
tc = *(u16 *)((s32)ptr + 8);
D_8012696A = tc;
D_8012696C = 0;
D_80126976 = 0;
t = -0x20;
D_80126978 = t;
D_8012697A = 0;
func_8012A018((s32)func_8017D0F4, 1);
func_8012A094((s32)D_80126948);
D_801269E4 = 0;
D_801269E8 = 0;
}
@@ -4007,7 +4055,49 @@ void func_8017D868(void *a0) {
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017D8A4);
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8017BEBC", func_8017DA30);
extern s32 func_8004787C(s32 a0);
void func_8017DA30(s32 d, void *x, void *y, s32 t, s32 n, s32 w) {
s32 t0;
s32 v0;
t0 = t + ((func_8004787C(w) * (func_8004787C(t >> 1) >> 3)) >> 12);
if (n > 0) {
do {
*(s16 *)d = *(s16 *)x + ((((s16)*(s16 *)y - (s16)*(s16 *)x) * t) >> 12);
*(s16 *)(d + 2) = *(s16 *)((u8 *)x + 2) + ((((s16)*(s16 *)((u8 *)y + 2) - (s16)*(s16 *)((u8 *)x + 2)) * t0) >> 12);
*(s16 *)(d + 4) = *(s16 *)((u8 *)x + 4) + ((((s16)*(s16 *)((u8 *)y + 4) - (s16)*(s16 *)((u8 *)x + 4)) * t0) >> 12);
v0 = *(s16 *)((u8 *)y + 6) - *(s16 *)((u8 *)x + 6);
if (v0 >= 0x801) {
v0 -= 0x1000;
}
if (v0 < -0x800) {
v0 += 0x1000;
}
*(s16 *)(d + 6) = *(s16 *)((u8 *)x + 6) + ((v0 * t) >> 12);
v0 = *(s16 *)((u8 *)y + 8) - *(s16 *)((u8 *)x + 8);
if (v0 >= 0x801) {
v0 -= 0x1000;
}
if (v0 < -0x800) {
v0 += 0x1000;
}
*(s16 *)(d + 8) = *(s16 *)((u8 *)x + 8) + ((v0 * t) >> 12);
v0 = *(s16 *)((u8 *)y + 0xA) - *(s16 *)((u8 *)x + 0xA);
if (v0 >= 0x801) {
v0 -= 0x1000;
}
if (v0 < -0x800) {
v0 += 0x1000;
}
*(s16 *)(d + 0xA) = *(s16 *)((u8 *)x + 0xA) + ((v0 * t) >> 12);
d += 0xC;
x = (u8 *)x + 0xC;
y = (u8 *)y + 0xC;
} while (--n > 0);
}
}
/* func_8017DC1C @ ov_SC07_006 (subseg ov_SC07_006_jr_8017BEBC) — behemoth #8, 1,518 ins.
*
+9 -1
View File
@@ -4099,7 +4099,15 @@ void func_8017D6AC(int param_1)
}
INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8017BEBC", func_8017D6E4);
void func_8017D6E4(void *a0) {
extern void (*D_801820B4[])(void);
extern void func_800D1724(s32 a0);
extern void func_80171928(void *a0);
func_800D1724((s32)D_801820B4);
func_80171928(a0);
}
extern void func_8016EE40(s32 a0, s32 a1, s32 a2);
void func_8017D720(void) {
+107 -2
View File
@@ -1053,7 +1053,36 @@ void func_800D00E4(s32 arg0) {
#endif
INCLUDE_ASM("asm/resident/nonmatchings/resident", func_800D00E4);
INCLUDE_ASM("asm/resident/nonmatchings/resident", func_800D0214);
s32 func_800D0214(s32 arg0) {
extern s16 currentLocationId;
extern s32 D_800C7C60;
extern s32 *D_800C7C64;
extern s32 D_800A2E20;
extern s32 D_800D34AC[];
extern s16 D_800D34AE[];
extern CdFileLoc cdFileLocTable[];
extern s32 CdReadRequest(void *, void *, s32, s32);
register s32 mask __asm__("$3") = ~0xF000;
s32 idx = currentLocationId & mask;
s32 raw = D_800D34AC[idx];
s32 val = D_800D34AE[idx * 2];
s32 *p = &D_800C7C60;
s32 id;
__asm__("" ::: "memory");
D_800C7C64 = &D_800A2E20;
*p = val;
id = raw & 0xFFF;
if (id >= 0 && cdFileLocTable[id].word0 != 0) {
return CdReadRequest(&cdFileLocTable[id], arg0, 0, p);
}
return 1;
}
extern s32 (*D_800D375C)(s32);
@@ -2625,7 +2654,83 @@ void func_800D2624(void) {
func_8002D4C8(0x15, 0);
}
INCLUDE_ASM("asm/resident/nonmatchings/resident", func_800D2650);
typedef struct {
u32 *ot; /* 0x00 */
u32 pad[4]; /* 0x04..0x13 */
} Env_800D2650; /* 0x14 stride */
typedef struct {
u32 addr : 24; /* 0x00 tag */
u32 len : 8;
} PTag_800D2650;
#define OT_800D2650 (D_800AE7BC[*(volatile u16 *)&D_800B9A02].ot)
#define getaddr_800D2650(t) (((PTag_800D2650 *)(t))->addr)
#define setaddr_800D2650(t, v) (((PTag_800D2650 *)(t))->addr = (u32)(v))
#define addPrim_800D2650(ot, p) (setaddr_800D2650(p, getaddr_800D2650(ot)), \
setaddr_800D2650(ot, p))
u32 *func_800D2650(u32 *param_1, u8 *param_2, short param_3, short param_4, int a5, u32 a6)
{
extern Env_800D2650 D_800AE7BC[];
extern short D_800B9A02;
register int cw __asm__("$2");
register u32 s_a6 __asm__("$8") = a6;
register u32 code __asm__("$14");
register int clut __asm__("$13");
register u8 bVar1 __asm__("$3");
short sVar2;
if (*param_2 < 0x80) {
cw = 0x64000000;
code = s_a6 | cw;
cw = a5 + 0x100;
clut = (cw << 6) | 0x16;
do {
sVar2 = *(short *)param_2;
switch (sVar2) {
case 0x1850:
case 0x1858:
*(short *)((u8 *)param_1 + 8) = param_3 + 4;
*(short *)((u8 *)param_1 + 0xA) = param_4 - 7;
break;
case 0x3870:
param_3 = param_3 + 7;
param_2 = param_2 + 2;
continue;
case 0x3871:
param_3 = param_3 + 4;
param_2 = param_2 + 2;
continue;
case 0x3872:
param_3 = param_3 + 2;
param_2 = param_2 + 2;
continue;
default:
*(short *)((u8 *)param_1 + 8) = param_3;
*(short *)((u8 *)param_1 + 0xA) = param_4;
param_3 = param_3 + 7;
break;
}
*param_1 = 0x04000000;
*(u32 *)((u8 *)param_1 + 4) = code;
((u8 *)param_1)[0xC] = *param_2;
param_2 = param_2 + 1;
sVar2 = 8;
bVar1 = *param_2;
param_2 = param_2 + 1;
*(short *)((u8 *)param_1 + 0xE) = clut;
((u8 *)param_1)[0xD] = bVar1;
*(short *)((u8 *)param_1 + 0x10) = sVar2;
*(short *)((u8 *)param_1 + 0x12) = sVar2;
addPrim_800D2650(&OT_800D2650[2], param_1);
param_1 = param_1 + 5;
} while (*param_2 < 0x80);
}
return param_1;
}
INCLUDE_ASM("asm/resident/nonmatchings/resident", func_800D27DC);