feat(decomp): integration-resolver pass — 99 banked of 171 staged (zero model tokens)

Drafts the ledgers already recorded as byte-correct (closeness 0 / reloc shape MATCH), re-judged against today's tree by rtu_match + reloc_identity, staged, and gated on the whole-binary SHA. Ledger: .run/resolver/verdicts.jsonl
This commit is contained in:
Drew T
2026-08-26 03:15:16 -06:00
parent 3b42747491
commit 1f278e2050
29 changed files with 2147 additions and 101 deletions
+2 -2
View File
@@ -2450,7 +2450,7 @@ build/src/ov_SC03_108/ov_SC03_108_jr_80154C24.o: JTBL_PADS := 0,0 # §8e pads (
build/src/ov_SC03_108/ov_SC03_108_jr_801588CC.o: JTBL_PADS := 0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x28,+0x48
build/src/ov_SC03_108/ov_SC03_108_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC03_108/ov_SC03_108_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.o: JTBL_PADS := 0 # §8e pads — 1 table(s), byte-proven by jtbl_pads_fix
build/src/ov_SC03_108/ov_SC03_108_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC03_108/ov_SC03_108_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
build/src/ov_SC03_108/ov_SC03_108_jr_8017F83C.o: JTBL_PADS := 0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18,+0xe0
build/src/ov_SC03_108/ov_SC03_108_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
@@ -4171,7 +4171,7 @@ build/src/ov_SC06_011/ov_SC06_011_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
build/src/ov_SC06_011/ov_SC06_011_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC06_011/ov_SC06_011_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC06_011/ov_SC06_011_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
build/src/ov_SC06_011/ov_SC06_011_jr_8017BEBC.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC06_011/ov_SC06_011_jr_8017BEBC.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x3c
build/src/ov_SC06_011/ov_SC06_011_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
ov_SC06_011_CHECK_SHA := config/check.ov_SC06_011.sha
ov_SC06_011_SYMBOLS := config/symbols.ov_SC06_011.txt
+6 -1
View File
@@ -5118,7 +5118,12 @@ DEFINE_func_8014CB9C() /* dedup: shared engine-core @0x8014cb9c (src/shared) */
DEFINE_func_8014CBD8() /* dedup: shared engine-core @0x8014cbd8 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8013F350", func_8014CBE8);
extern u16 D_80126CC4;
void func_8014CBE8(void) {
D_80126CC4 = 0;
}
DEFINE_func_8014CBF8() /* dedup: shared engine-core @0x8014cbf8 (src/shared) */
+14 -2
View File
@@ -3897,7 +3897,13 @@ DEFINE_func_8015D480() /* dedup: shared engine-core @0x8015d480 (src/shared) */
DEFINE_func_8015D4B4() /* dedup: shared engine-core @0x8015d4b4 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8015A3C8", func_8015D4E8);
extern void (*D_80180C54[])(void);
s32 func_8015D4E8(void *a0)
{
D_80180C54[*(u16 *)((s32)a0 + 0x2)]();
}
DEFINE_func_8015D524() /* dedup: shared engine-core @0x8015d524 (src/shared) */
@@ -4244,7 +4250,13 @@ DEFINE_func_8015E150() /* dedup: shared engine-core @0x8015e150 (src/shared) */
DEFINE_func_8015E184() /* dedup: shared engine-core @0x8015e184 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8015A3C8", func_8015E1B8);
extern void (*D_80180CD4[])(void);
func_8015E1B8(a0)
{
D_80180CD4[*(u16 *)((s32)a0 + 0x2)]();
}
DEFINE_func_8015E1F4() /* dedup: shared engine-core @0x8015e1f4 (src/shared) */
+91 -14
View File
@@ -3356,7 +3356,12 @@ DEFINE_func_80172760() /* dedup: shared engine-core @0x80172760 (src/shared) */
DEFINE_func_80172780() /* dedup: shared engine-core @0x80172780 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_801727D0);
s32 func_801727D0(void *a0)
{
extern void (*D_80181900[])(void);
D_80181900[*(u8 *)((s32)a0 + 0x214)]();
}
DEFINE_func_8017280C() /* dedup: shared engine-core @0x8017280c (src/shared) */
@@ -3370,7 +3375,12 @@ void func_8017288C(void) {
DEFINE_func_80172894() /* dedup: shared engine-core @0x80172894 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_801728E4);
s32 func_801728E4(void *a0) {
extern void (*D_8018190C[])(void);
D_8018190C[*(u8 *)((s32)a0 + 0x214)]();
}
DEFINE_func_80172920() /* dedup: shared engine-core @0x80172920 (src/shared) */
@@ -3384,7 +3394,12 @@ void func_801729A8(void) {
DEFINE_func_801729B0() /* dedup: shared engine-core @0x801729b0 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_801729F0);
s32 func_801729F0(void *a0) {
extern void (*D_80181918[])();
D_80181918[*(u8 *)((s32)a0 + 0x214)]();
}
DEFINE_func_80172A2C() /* dedup: shared engine-core @0x80172a2c (src/shared) */
@@ -3401,7 +3416,12 @@ void func_80172B0C(void) {
DEFINE_func_80172B14() /* dedup: shared engine-core @0x80172b14 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_80172B44);
s32 func_80172B44(void *a0) {
extern void (*D_80181928[])(void);
D_80181928[*(u8 *)((s32)a0 + 0x214)]();
}
DEFINE_func_80172B80() /* dedup: shared engine-core @0x80172b80 (src/shared) */
@@ -3436,7 +3456,12 @@ void func_80172D60(void) {
DEFINE_func_80172D68() /* dedup: shared engine-core @0x80172d68 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_80172DAC);
s32 func_80172DAC(void *a0) {
extern u8 D_80181940[];
((void (**)())D_80181940)[*(u8 *)((s32)a0 + 0x214)]();
}
DEFINE_func_80172DE8() /* dedup: shared engine-core @0x80172de8 (src/shared) */
@@ -3471,7 +3496,12 @@ DEFINE_func_80172FEC() /* dedup: shared engine-core @0x80172fec (src/shared) */
DEFINE_func_8017303C() /* dedup: shared engine-core @0x8017303c (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_80173078);
s32 func_80173078(void *a0)
{
extern void (*D_8018194C[])(void);
D_8018194C[*(u8 *)((s32)a0 + 0x214)]();
}
DEFINE_func_801730B4() /* dedup: shared engine-core @0x801730b4 (src/shared) */
@@ -3485,7 +3515,16 @@ void func_8017316C(void) {
DEFINE_func_80173174() /* dedup: shared engine-core @0x80173174 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_8017319C);
extern void func_80174684(void *);
extern s32 func_8017319C();
extern void (*D_80181958[])(void);
s32 func_8017319C(void *a0)
{
D_80181958[*(u8 *)((s32)a0 + 0x214)]();
}
DEFINE_func_801731D8() /* dedup: shared engine-core @0x801731d8 (src/shared) */
@@ -3596,7 +3635,11 @@ void func_801736A8(void) {
DEFINE_func_801736B0() /* dedup: shared engine-core @0x801736b0 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_801736FC);
s32 func_801736FC(void *a0) {
extern s32 D_80181978;
((s32 (*)(void *))(*(&D_80181978 + *(u8 *)((s32)a0 + 0x214))))(a0);
}
DEFINE_func_80173738() /* dedup: shared engine-core @0x80173738 (src/shared) */
@@ -3610,7 +3653,13 @@ void func_801737B0(void) {
DEFINE_func_801737B8() /* dedup: shared engine-core @0x801737b8 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_801737E8);
extern u8 D_80181984[];
s32 func_801737E8(void *a0)
{
((void (**)(void *))D_80181984)[*(u8 *)((s32)a0 + 0x214)](a0);
}
DEFINE_func_80173824() /* dedup: shared engine-core @0x80173824 (src/shared) */
@@ -3624,7 +3673,12 @@ void func_801738D4(void) {
DEFINE_func_801738DC() /* dedup: shared engine-core @0x801738dc (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_8017390C);
s32 func_8017390C(void *a0) {
extern void (*D_80181990[])(void);
D_80181990[*(u8 *)((s32)a0 + 0x214)]();
}
DEFINE_func_80173948() /* dedup: shared engine-core @0x80173948 (src/shared) */
@@ -3690,7 +3744,12 @@ void func_80174274(void) {
DEFINE_func_8017427C() /* dedup: shared engine-core @0x8017427c (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_801742A4);
extern void (*aD_801819C0[])(void) __asm__("D_801819C0");
s32 func_801742A4(void *a0) {
aD_801819C0[*(u8 *)((s32)a0 + 0x214)]();
}
DEFINE_func_801742E0() /* dedup: shared engine-core @0x801742e0 (src/shared) */
@@ -3704,7 +3763,13 @@ void func_80174354(void) {
DEFINE_func_8017435C() /* dedup: shared engine-core @0x8017435c (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_80174384);
s32 func_80174384(void* a0)
{
extern void (*D_801819CC[])(void);
D_801819CC[*(u8 *)((s32)a0 + 0x214)]();
}
DEFINE_func_801743C0() /* dedup: shared engine-core @0x801743c0 (src/shared) */
@@ -3718,7 +3783,13 @@ void func_80174430(void) {
DEFINE_func_80174438() /* dedup: shared engine-core @0x80174438 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_80174474);
extern void (*D_801819D8[])(void);
s32 func_80174474(void* a0)
{
D_801819D8[*(u8 *)((s32)a0 + 0x214)]();
}
DEFINE_func_801744B0() /* dedup: shared engine-core @0x801744b0 (src/shared) */
@@ -3783,7 +3854,13 @@ DEFINE_func_80174784() /* dedup: shared engine-core @0x80174784 (src/shared) */
DEFINE_func_801747AC() /* dedup: shared engine-core @0x801747ac (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_80171B4C", func_801747CC);
s32 func_801747CC(void* a0)
{
extern void (*D_801819E4[])(void);
D_801819E4[*(u8 *)((s32)a0 + 0x214)]();
}
DEFINE_func_80174808() /* dedup: shared engine-core @0x80174808 (src/shared) */
+24 -1
View File
@@ -3923,5 +3923,28 @@ s32 func_8017CBC8(s32 ot, u8 *s, s16 c) {
}
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8017CA18", func_8017CEB8);
s32 func_8017CEB8(s32 a0, s16 a1, s16 a2, s16 a3, s32* p)
{
extern u8 D_80115158[];
s32 t0 = 0;
*p = 0x808080;
a2 = D_80115158[(s16)a2 * 2];
if (a1 < 5) {
if (a1 > 0) {
if ((s16)a3 < a2) {
t0 = *(s32 *)(a0 + a3 * 4);
}
} else if (a1 != 0) {
if ((s16)a3 < a2) {
t0 = *(s32 *)(a0 + a3 * 4);
}
}
} else if (a1 != 5) {
if ((s16)a3 < a2) {
t0 = *(s32 *)(a0 + a3 * 4);
}
}
return t0;
}
+54 -4
View File
@@ -4378,7 +4378,14 @@ s32 *func_8017DD28(s32 *out) {
}
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8017CF3C", func_8017DF18);
extern void func_80016714(void *a0, s32 a1);
extern s8 D_801857F8;
void func_8017DF18(void)
{
func_80016714(&D_801857F8, 0x2DC);
}
#include "common.h"
@@ -4438,11 +4445,54 @@ void func_8017DF40(s32 arg0) {
}
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8017CF3C", func_8017E22C);
void func_8017E22C(s32 a0) {
extern void func_80016714(void *a0, s32 a1);
extern char D_80185B00;
func_80016714(&D_80185B00, 8);
}
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8017CF3C", func_8017E254);
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012_jr_8017CF3C", func_8017E298);
s32 func_8017E254(void)
{
extern s16 D_80185B00;
extern s16 D_80185B02;
extern void (*D_801827D8[])(void);
D_801827D8[D_80185B00]();
return ((u32)D_80185B02) >> 31;
}
extern s16 D_80185B08;
extern s32 func_80029504(void);
extern u16 D_80185B00;
extern void func_8017C008(s32, s16);
void func_8017E298() {
extern s16 D_80185B08;
extern u16 D_80185B00;
extern s32 func_80029504(void);
extern void func_8017C008(s32, s16);
s32 v;
u16 *p;
v = func_80029504();
if ((u32)(v - 5) >= 0x4B5) {
if (v != 0x6A4) {
D_80185B08 = 1;
} else {
D_80185B08 = 2;
}
} else {
D_80185B08 = 0;
}
func_8017C008(1, D_80185B08);
p = &D_80185B00;
(*p)++;
}
void func_8017E324(void) {
+132 -4
View File
@@ -3178,7 +3178,20 @@ void func_8017C340(s32 arg0)
}
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017C340", func_8017D220);
extern s32 D_80126B58;
extern s32 func_80029504(void);
extern void func_8014BD98(s32 a0, u16 a1);
extern void func_8014BB0C(void);
extern void func_8014BE78(void);
void func_8017D220(void) {
if (func_80029504() < 10) {
func_8014BD98((s32)&D_80126B58, 100);
func_8014BB0C();
func_8014BE78();
}
}
extern void (*D_80185EAC[])(void);
@@ -3340,7 +3353,39 @@ void func_8017D5FC(void) {
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017C340", func_8017D624);
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017C340", func_8017D6E4);
void func_8017D6E4(void) {
extern void func_8012A018(s32 a, s32 b);
extern void func_8012A094(s32 a0);
extern void func_8017D7A4(void *a0);
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;
extern s32 D_801274E8;
extern s16 D_801274EA;
extern s16 D_801274EC;
D_80126954 = 400;
D_8012695C = 400;
D_8012696A = 0x850;
D_80126968 = 0;
D_8012696C = 0;
D_80126976 = 0;
D_80126978 = -0x82;
D_8012697A = -0x180;
func_8012A018((s32)func_8017D7A4, 0);
(*(s16 *)&D_801274E8) = 0xD;
D_801274EA = -0x82;
D_801274EC = 0x8A;
func_8017D7A4(D_80126948);
func_8012A094((s32)D_80126948);
}
extern void (*D_80185EF8[])(void);
@@ -3399,7 +3444,27 @@ s16 func_8017DA9C(void) {
DEFINE_func_8017DAAC() /* dedup: shared engine-core @0x8017DAAC (src/shared) */
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017C340", func_8017DB00);
void func_8017DB00(void *a0) {
extern u8 D_800B9A15;
extern unsigned char D_800B9A13;
extern u16 D_80115110;
extern u16 D_80115112;
extern s16 D_80115126;
extern s16 D_801CD878;
extern void *D_8011DB24;
extern void func_8013E5E8(void);
void *func_ptr;
D_800B9A15 = 1;
D_80115112 = 7;
D_800B9A13 = 1;
func_ptr = func_8013E5E8;
D_80115110 = 0;
D_80115126 = (s16)a0;
D_801CD878 = 0;
D_8011DB24 = func_ptr;
}
extern void func_80029444(void);
extern void func_801754A8(void);
@@ -3702,7 +3767,70 @@ void func_8017DEFC(void) {
DEFINE_func_8017E0EC() /* dedup: shared engine-core @0x8017E0EC (src/shared) */
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017C340", func_8017E108);
void func_8017E108(void)
{
extern s32 D_801151D0;
extern s32 D_801151C8[];
extern s16 D_800B9A02;
extern u16 D_8011511A;
extern s16 D_80115126;
extern u8 D_80115138[];
extern u32 D_801CD9A8;
extern u32 D_801CD9AC;
extern s32 D_80115130;
extern u8 D_801BBA3C[];
extern u8 D_800B9A15;
extern u16 D_80115112;
extern s32 func_8017E3DC(void);
extern void func_8017E6BC(void);
extern s16 func_8014168C(s16 a0);
extern s32 func_8017ED5C(s32 a0, s32 a1);
extern void func_80139954(void);
extern s32 func_801376E8(s32 a0, s32 a1);
extern void func_80137B80(void);
extern void func_8002D4C8(s32 a0, s32 a1);
register s32 b __asm__("$6");
s32 r;
s16 c;
s32 p;
s32 *p30;
u16 *p12;
s32 frame_pad[2];
D_801151D0 = D_801151C8[*(u16 *)&D_800B9A02];
r = func_8017E3DC();
func_8017E6BC();
c = func_8014168C(*(s16 *)&D_8011511A);
b = D_80115138[D_8011511A];
if (D_80115126 != 4) {
if (D_801CD9A8 != 0) {
p = D_801CD9A8;
} else {
p = func_8017ED5C(b, c);
}
if (p != 0) {
p30 = &D_80115130;
if (p != *p30) {
*p30 = p;
func_80139954();
D_801CD9AC = func_801376E8(p, (s32)D_801BBA3C);
}
}
func_80137B80();
}
if ((s16)r < 0) {
func_80139954();
D_800B9A15 = 0;
if ((s16)r == -1) {
func_8002D4C8(0x474, 0);
}
p12 = &D_80115112;
*p12 += 2;
}
}
void func_8017E258(void) {
extern short D_800B9A02;
+94 -6
View File
@@ -3348,7 +3348,22 @@ extern s32 func_8017DAAC(s32 a0, s32 a1);
}
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_80180614);
s32 func_80180614(s32 a0) {
if (*(s16 *)(a0 + 0x10A) != 0) {
u16 next = *(u16 *)(a0 + 0x106) - 0x10;
*(s16 *)(a0 + 0x106) = next;
*(s16 *)(a0 + 0x108) = next;
if ((s16)next < 0) {
*(s16 *)(a0 + 0x106) = 0;
*(s16 *)(a0 + 0x108) = 0;
}
*(u16 *)(a0 + 0x10A) = *(u16 *)(a0 + 0x10A) - 3;
return 0;
}
*(s16 *)(*(s32 *)(a0 + 0xD4) + 0xFC) = 1;
return 1;
}
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_80180674);
@@ -3369,7 +3384,23 @@ DEFINE_func_80180800() /* dedup: shared engine-core @0x80180800 (src/shared) */
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_80180808);
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_80180908);
extern s32 func_8016F1AC(void);
extern s32 func_80178B18(s32 param_1, s32 param_2);
extern u8 D_801BBC4C[];
void func_80180908(a0)
s32 a0;
{
if (*(s32 *)(a0 + 0x1C) != 0) {
*(s32 *)(a0 + 0x1C) -= 1;
} else {
if (func_8016F1AC() == 0) {
func_80178B18(a0, &D_801BBC4C);
*(u16 *)(a0 + 2) += 1;
}
}
}
extern void func_8017FBCC(void);
extern void func_8017FD50(s32 a0);
@@ -3396,7 +3427,19 @@ void func_80180974(s32 a0)
}
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_801809F4);
extern u8 D_80185E38[];
extern void func_800D1724(s32 a0);
void func_801809F4(s32 *a0) {
s32 v1;
v1 = a0[7] - 1;
a0[7] = v1;
if (v1 != -1) {
return;
}
func_800D1724((s32)D_80185E38);
}
DEFINE_func_80180A30() /* dedup: shared engine-core @0x80180A30 (src/shared) */
@@ -3404,7 +3447,14 @@ INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_80180A3
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_80180AD0);
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_80180AE8);
void func_80180AE8(param_1)
s32 param_1;
{
*(u16 *)(*(s32 *)(param_1 + 0xd0) + 0x2) += 1;
}
DEFINE_func_80180B04() /* dedup: shared engine-core @0x80180B04 (src/shared) */
@@ -3559,7 +3609,21 @@ void func_80180FB0(s32 param_1)
}
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_80180FFC);
extern s32 func_80180BDC(s32 a0);
extern u8 D_801BC5F8[];
extern void func_8012A828(s32 a0, void *a1);
void func_80180FFC(s32 a0) {
s32 v0;
v0 = func_80180BDC(a0);
if ((v0 << 16) != 0) {
return;
}
func_8012A828(a0, &D_801BC5F8);
*(s32 *)(a0 + 0x1c) = 0x28;
*(u16 *)(a0 + 2) += 1;
}
extern u8 D_801BC680[];
extern void func_8012A828(s32 a0, void *a1);
@@ -3633,7 +3697,31 @@ extern void func_8012A828(s32 a0, void *a1);
}
INCLUDE_ASM("asm/ov_SC01_005/nonmatchings/ov_SC01_005_jr_8017ED5C", func_80181228);
extern void *D_801BC798[];
extern void func_8012A828(s32 a0, void *a1);
void func_80181228(a0)
s32 a0;
{
s16 temp;
if (*(s16 *)(a0 + 0xFC) == 0) {
return;
}
temp = *(s16 *)(a0 + 0xFE);
if (temp == 0) {
*(s16 *)(a0 + 0xFE) = 8;
return;
}
temp = temp - 1;
*(s16 *)(a0 + 0xFE) = temp;
if ((temp << 16) != 0) {
return;
}
func_8012A828(a0, D_801BC798[*(s16 *)(a0 + 0xFC)]);
*(s16 *)(a0 + 0xFC) = 0;
}
#include "common.h"
+12 -1
View File
@@ -3434,7 +3434,18 @@ void func_8017C2A4(void *a0) {
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017AE2C", func_8017C2F4);
extern void func_80154150(s32 a0, s32 a1);
extern void func_80171A1C(u8 *a0);
void func_8017C2F4(a0)
void *a0;
{
if (*(u16 *)((s32)a0 + 0xB8) == 0x8000) {
func_80154150((s32)a0, 0x25);
func_80171A1C((u8 *)a0);
}
}
DEFINE_func_8017C338() /* dedup: shared engine-core @0x8017C338 (src/shared) */
+132 -4
View File
@@ -3176,7 +3176,20 @@ void func_8017C340(s32 arg0)
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017C340", func_8017D220);
extern s32 D_80126B58;
extern s32 func_80029504(void);
extern void func_8014BD98(s32 a0, u16 a1);
extern void func_8014BB0C(void);
extern void func_8014BE78(void);
void func_8017D220(void) {
if (func_80029504() < 10) {
func_8014BD98((s32)&D_80126B58, 100);
func_8014BB0C();
func_8014BE78();
}
}
extern void (*D_80185EAC[])(void);
@@ -3338,7 +3351,39 @@ void func_8017D5FC(void) {
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017C340", func_8017D624);
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017C340", func_8017D6E4);
void func_8017D6E4(void) {
extern void func_8012A018(s32 a, s32 b);
extern void func_8012A094(s32 a0);
extern void func_8017D7A4(void *a0);
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;
extern s32 D_801274E8;
extern s16 D_801274EA;
extern s16 D_801274EC;
D_80126954 = 400;
D_8012695C = 400;
D_8012696A = 0x850;
D_80126968 = 0;
D_8012696C = 0;
D_80126976 = 0;
D_80126978 = -0x82;
D_8012697A = -0x180;
func_8012A018((s32)func_8017D7A4, 0);
(*(s16 *)&D_801274E8) = 0xD;
D_801274EA = -0x82;
D_801274EC = 0x8A;
func_8017D7A4(D_80126948);
func_8012A094((s32)D_80126948);
}
extern void (*D_80185EF8[])(void);
@@ -3370,7 +3415,27 @@ s16 func_8017DA9C(void) {
DEFINE_func_8017DAAC() /* dedup: shared engine-core @0x8017DAAC (src/shared) */
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017C340", func_8017DB00);
void func_8017DB00(void *a0) {
extern u8 D_800B9A15;
extern unsigned char D_800B9A13;
extern u16 D_80115110;
extern u16 D_80115112;
extern s16 D_80115126;
extern s16 D_801CD878;
extern void *D_8011DB24;
extern void func_8013E5E8(void);
void *func_ptr;
D_800B9A15 = 1;
D_80115112 = 7;
D_800B9A13 = 1;
func_ptr = func_8013E5E8;
D_80115110 = 0;
D_80115126 = (s16)a0;
D_801CD878 = 0;
D_8011DB24 = func_ptr;
}
extern void func_80029444(void);
@@ -3652,7 +3717,70 @@ void func_8017DEFC(void) {
DEFINE_func_8017E0EC() /* dedup: shared engine-core @0x8017E0EC (src/shared) */
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017C340", func_8017E108);
void func_8017E108(void)
{
extern s32 D_801151D0;
extern s32 D_801151C8[];
extern s16 D_800B9A02;
extern u16 D_8011511A;
extern s16 D_80115126;
extern u8 D_80115138[];
extern u32 D_801CD9A8;
extern u32 D_801CD9AC;
extern s32 D_80115130;
extern u8 D_801BBA3C[];
extern u8 D_800B9A15;
extern u16 D_80115112;
extern s32 func_8017E3DC(void);
extern void func_8017E6BC(void);
extern s16 func_8014168C(s16 a0);
extern s32 func_8017ED5C(s32 a0, s32 a1);
extern void func_80139954(void);
extern s32 func_801376E8(s32 a0, s32 a1);
extern void func_80137B80(void);
extern void func_8002D4C8(s32 a0, s32 a1);
register s32 b __asm__("$6");
s32 r;
s16 c;
s32 p;
s32 *p30;
u16 *p12;
s32 frame_pad[2];
D_801151D0 = D_801151C8[*(u16 *)&D_800B9A02];
r = func_8017E3DC();
func_8017E6BC();
c = func_8014168C(*(s16 *)&D_8011511A);
b = D_80115138[D_8011511A];
if (D_80115126 != 4) {
if (D_801CD9A8 != 0) {
p = D_801CD9A8;
} else {
p = func_8017ED5C(b, c);
}
if (p != 0) {
p30 = &D_80115130;
if (p != *p30) {
*p30 = p;
func_80139954();
D_801CD9AC = func_801376E8(p, (s32)D_801BBA3C);
}
}
func_80137B80();
}
if ((s16)r < 0) {
func_80139954();
D_800B9A15 = 0;
if ((s16)r == -1) {
func_8002D4C8(0x474, 0);
}
p12 = &D_80115112;
*p12 += 2;
}
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017C340", func_8017E258);
+465 -17
View File
@@ -3097,9 +3097,163 @@ INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017FD5
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8017FF74);
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180010);
extern s32 func_8016F1AC(void);
extern s32 func_80178B18(s32 param_1, s32 param_2);
extern u8 D_801BBE98[];
extern void func_80029124(s32, s32);
extern void func_80029514(s32);
extern void func_8017FD50(s32);
void func_80180010(param_1)
s32 param_1;
{
extern void func_8017FD50(s32);
extern s32 func_8016F1AC(void);
extern void func_80029514(s32);
extern void func_80029124(s32, s32);
extern s32 func_80178B18(s32 param_1, s32 param_2);
extern u8 D_801BBE98[];
func_8017FD50(param_1);
if (*(s32 *)(param_1 + 0x1C) != 0) {
(*(s32 *)(param_1 + 0x1C))--;
} else {
if (func_8016F1AC() == 0) {
func_80029514(10);
func_80029124(0x125, 0);
func_80029124(0x126, 0);
func_80029124(0x127, 0);
func_80029124(0x128, 0);
*(u16 *)(param_1 + 0xDE) = 0;
*(u16 *)(param_1 + 0xDC) = 0;
func_80178B18(param_1, (s32)D_801BBE98);
*(s32 *)(param_1 + 0x1C) = 0;
*(u16 *)(param_1 + 2) = *(u16 *)(param_1 + 2) + 1;
}
}
}
extern s32 *D_80126B78;
extern s32 D_80126B58;
extern u8 D_80185E80[];
extern void func_8017FD50(s32);
extern s32 func_800149E0(s32);
extern s32 func_800CF8B4();
extern void func_80029514(s32);
extern void func_80029124(s32, s32);
extern s32 func_80029178(s32);
extern void func_80172F9C(void);
extern void func_80171B10(void *a0);
extern void func_80172B14(s16);
extern void func_80172EFC(void);
extern void func_80182324(void);
extern s32 func_801789AC(s32);
extern void func_80178D18(void);
extern void func_801746A4(void);
extern void func_800D1724(s32 a0);
typedef struct { s16 a; s16 b; s16 c; } Trio;
void func_801800C0(s32 arg0)
{
register s32 s1v __asm__("$17");
s32 v0;
s16 var;
s16 var2;
u16 u0;
Trio sp; // unused
*(s32*)(arg0 + 0x1c) += 1;
var = *(s16*)(arg0 + 0x10a);
if (var != 0) {
var = var - 1;
*(s16*)(arg0 + 0x10a) = var;
if ((var * 0x10000 >> 16) < 0x40) {
var2 = *(s16*)(arg0 + 0x106);
if (var2 != 0) {
var2 = var2 - 8;
*(s16*)(arg0 + 0x106) = var2;
if (var2 * 0x10000 < 0) {
*(u16*)(arg0 + 0x106) = 0;
}
} else {
u0 = *(u16*)(arg0 + 0x108) - 8;
*(u16*)(arg0 + 0x108) = u0;
if ((s16)u0 < 0) {
*(u16*)(arg0 + 0x108) = 0;
}
}
}
func_8017FD50(arg0);
v0 = 1;
} else {
v0 = 0;
}
if (v0 == 0 && (func_800149E0(0) & 0x800) != 0 && func_800CF8B4() != 0) {
if (*(s32*)(arg0 + 0x1c) == 0x8e) {
*(u16*)(D_80126B78 + 4) = 0;
}
*(u16*)(arg0 + 2) += 2;
func_80029514(2);
((void (*)(u8*))func_800D1724)(D_80185E80);
return;
}
if (func_80029178(0x125) & 0xFF) {
func_80029124(0x125, 0);
func_80172F9C();
}
if (func_80029178(0x129) & 0xFF) {
func_80029124(0x129, 0);
func_80029124(0x126, 0);
sp.a = 0x20;
sp.b = 0;
sp.c = -0x80;
((void (*)(void*, void*))func_80171B10)(&D_80126B58, &sp);
}
if (!(func_80029178(0x126) & 0xFF)) goto block_126;
switch (*(s16*)(arg0 + 0xdc)) {
case 0:
s1v = 0xe00;
break;
case 1:
s1v = 0x180;
break;
case 2:
s1v = 0xfc0;
break;
case 3:
s1v = -1;
func_80029124(0x126, 0);
break;
}
if ((s16)s1v > 0) {
u0 = *(u16*)(arg0 + 0xde) + 1;
*(u16*)(arg0 + 0xde) = u0;
if ((u0 * 0x10000 >> 16) >= 0x10) {
*(u16*)(arg0 + 0xde) = 0;
*(u16*)(arg0 + 0xdc) += 1;
}
func_80172B14(s1v);
}
__asm__ __volatile__("" : : "r"(s1v));
block_126:
if (func_80029178(0x127) & 0xFF) {
func_80029124(0x127, 0);
func_80172EFC();
}
if (func_80029178(0x128) & 0xFF) {
func_80029124(0x128, 0);
func_80182324();
}
if (func_801789AC(arg0) != 0) {
((void (*)(s32))func_80178D18)(arg0);
func_801746A4();
*(s32*)(arg0 + 0x1c) = 0x10;
*(u16*)(arg0 + 2) += 1;
}
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_801800C0);
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_801803AC);
@@ -3143,7 +3297,22 @@ extern void func_8017DAAC(s32 arg0, s32 arg1);
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180614);
s32 func_80180614(s32 a0) {
if (*(s16 *)(a0 + 0x10A) != 0) {
u16 next = *(u16 *)(a0 + 0x106) - 0x10;
*(s16 *)(a0 + 0x106) = next;
*(s16 *)(a0 + 0x108) = next;
if ((s16)next < 0) {
*(s16 *)(a0 + 0x106) = 0;
*(s16 *)(a0 + 0x108) = 0;
}
*(u16 *)(a0 + 0x10A) = *(u16 *)(a0 + 0x10A) - 3;
return 0;
}
*(s16 *)(*(s32 *)(a0 + 0xD4) + 0xFC) = 1;
return 1;
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180674);
@@ -3180,9 +3349,49 @@ DEFINE_func_80180800() /* dedup: shared engine-core @0x80180800 (src/shared) */
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180808);
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180908);
extern s32 func_8016F1AC(void);
extern s32 func_80178B18(s32 param_1, s32 param_2);
extern u8 D_801BBC4C[];
void func_80180908(a0)
s32 a0;
{
if (*(s32 *)(a0 + 0x1C) != 0) {
*(s32 *)(a0 + 0x1C) -= 1;
} else {
if (func_8016F1AC() == 0) {
func_80178B18(a0, &D_801BBC4C);
*(u16 *)(a0 + 2) += 1;
}
}
}
extern s32 func_801789AC(s32 arg0);
extern void func_801746A4(void);
extern void func_80178D18(void);
extern void func_8017FBCC(void);
extern void func_8017FD50(s32);
void func_80180974(a0)
s32 a0;
{
s32 v0;
if (*(s16 *)(a0 + 0x100) == 0) {
func_8017FBCC();
} else {
func_8017FD50(a0);
}
v0 = func_801789AC(a0);
if (v0 != 0) {
((void (*)(s32))func_80178D18)(a0);
func_801746A4();
*(s32 *)(a0 + 0x1c) = 0x10;
*(u16 *)(a0 + 2) = *(u16 *)(a0 + 2) + 1;
}
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180974);
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_801809F4);
@@ -3196,7 +3405,14 @@ extern s32 D_801CDED4;
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180AE8);
void func_80180AE8(param_1)
s32 param_1;
{
*(u16 *)(*(s32 *)(param_1 + 0xd0) + 0x2) += 1;
}
DEFINE_func_80180B04() /* dedup: shared engine-core @0x80180B04 (src/shared) */
@@ -3240,15 +3456,63 @@ INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180BD
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180C98);
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180D10);
extern u8 D_801BC6C8[];
void func_80180D10(a0)
void *a0;
{
if (*(s32 *)((char *)a0 + 0x1c) != 0) {
*(s32 *)((char *)a0 + 0x1c) = *(s32 *)((char *)a0 + 0x1c) - 1;
} else {
*(void **)((char *)a0 + 0xcc) = D_801BC6C8;
*(u16 *)((char *)a0 + 2) = *(u16 *)((char *)a0 + 2) + 1;
}
}
DEFINE_func_80180D48() /* dedup: shared engine-core @0x80180D48 (src/shared) */
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180D9C);
extern void *D_801BC78C[];
extern void func_8012A828(s32 a0, void *a1);
void func_80180D9C(a0)
s32 a0;
{
s16 temp;
if (*(s16 *)(a0 + 0xFC) == 0) {
return;
}
temp = *(s16 *)(a0 + 0xFE);
if (temp == 0) {
*(s16 *)(a0 + 0xFE) = 8;
return;
}
temp = temp - 1;
*(s16 *)(a0 + 0xFE) = temp;
if ((temp << 16) != 0) {
return;
}
func_8012A828(a0, D_801BC78C[*(s16 *)(a0 + 0xFC)]);
*(s16 *)(a0 + 0xFC) = 0;
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180E24);
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180E9C);
extern u8 D_801BC718[];
void func_80180E9C(a0)
void *a0;
{
if (*(s32 *)((char *)a0 + 0x1c) != 0) {
*(s32 *)((char *)a0 + 0x1c) = *(s32 *)((char *)a0 + 0x1c) - 1;
} else {
*(void **)((char *)a0 + 0xcc) = D_801BC718;
*(u16 *)((char *)a0 + 2) = *(u16 *)((char *)a0 + 2) + 1;
}
}
extern s32 func_80180BDC(s32 a0);
extern u8 D_801BC5E0[];
@@ -3265,19 +3529,129 @@ extern void func_8012A828(s32 a0, void *a1);
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180F28);
extern void *D_801BC798[];
extern void func_8012A828(s32 a0, void *a1);
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180FB0);
void func_80180F28(a0)
s32 a0;
{
s16 temp;
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80180FFC);
if (*(s16 *)(a0 + 0xFC) == 0) {
return;
}
temp = *(s16 *)(a0 + 0xFE);
if (temp == 0) {
*(s16 *)(a0 + 0xFE) = 8;
return;
}
temp = temp - 1;
*(s16 *)(a0 + 0xFE) = temp;
if ((temp << 16) != 0) {
return;
}
func_8012A828(a0, D_801BC798[*(s16 *)(a0 + 0xFC)]);
*(s16 *)(a0 + 0xFC) = 0;
}
extern u8 D_801BC578[];
extern u8 D_801BC764[];
extern void func_8012A828(s32 a0, void *a1);
void func_80180FB0(param_1)
s32 param_1;
{
extern u8 D_801BC578[];
extern u8 D_801BC764[];
s32 v1;
func_8012A828(param_1, D_801BC578);
v1 = *(u16 *)(param_1 + 2);
*(s32 *)(param_1 + 0xCC) = (s32)D_801BC764;
*(s32 *)(param_1 + 0x1C) = 0;
*(u16 *)(param_1 + 2) = v1 + 1;
}
extern s32 func_80180BDC(s32 a0);
extern u8 D_801BC5F8[];
extern void func_8012A828(s32 a0, void *a1);
void func_80180FFC(s32 a0) {
s32 v0;
v0 = func_80180BDC(a0);
if ((v0 << 16) != 0) {
return;
}
func_8012A828(a0, &D_801BC5F8);
*(s32 *)(a0 + 0x1c) = 0x28;
*(u16 *)(a0 + 2) += 1;
}
extern u8 D_801BC680[];
extern void func_8012A828(s32 a0, void *a1);
void func_80181054(a0)
s32 a0;
{
s32 v0;
v0 = *(s32 *)(a0 + 0x1C) - 1;
*(s32 *)(a0 + 0x1C) = v0;
if (v0 == -1) {
func_8012A828(a0, &D_801BC680);
*(u16 *)(a0 + 2) += 1;
}
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80181054);
DEFINE_func_801810AC() /* dedup: shared engine-core @0x801810AC (src/shared) */
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80181100);
extern void *D_801BC798[];
extern void func_8012A828(s32 a0, void *a1);
void func_80181100(a0)
s32 a0;
{
s16 temp;
if (*(s16 *)(a0 + 0xFC) == 0) {
return;
}
temp = *(s16 *)(a0 + 0xFE);
if (temp == 0) {
*(s16 *)(a0 + 0xFE) = 8;
return;
}
temp = temp - 1;
*(s16 *)(a0 + 0xFE) = temp;
if ((temp << 16) != 0) {
return;
}
func_8012A828(a0, D_801BC798[*(s16 *)(a0 + 0xFC)]);
*(s16 *)(a0 + 0xFC) = 0;
}
extern u8 D_801BC578[];
extern u8 D_801BC778[];
extern void func_8012A828(s32 a0, void *a1);
void func_80181188(param_1)
s32 param_1;
{
extern u8 D_801BC578[];
extern u8 D_801BC778[];
s32 v1;
func_8012A828(param_1, D_801BC578);
v1 = *(u16 *)(param_1 + 2);
*(s32 *)(param_1 + 0xCC) = (s32)D_801BC778;
*(s32 *)(param_1 + 0x1C) = 0;
*(u16 *)(param_1 + 2) = v1 + 1;
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80181188);
extern s32 func_80180BDC(s32 a0);
extern u8 D_801BC5E0[];
@@ -3294,7 +3668,31 @@ extern void func_8012A828(s32 a0, void *a1);
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80181228);
extern void *D_801BC798[];
extern void func_8012A828(s32 a0, void *a1);
void func_80181228(a0)
s32 a0;
{
s16 temp;
if (*(s16 *)(a0 + 0xFC) == 0) {
return;
}
temp = *(s16 *)(a0 + 0xFE);
if (temp == 0) {
*(s16 *)(a0 + 0xFE) = 8;
return;
}
temp = temp - 1;
*(s16 *)(a0 + 0xFE) = temp;
if ((temp << 16) != 0) {
return;
}
func_8012A828(a0, D_801BC798[*(s16 *)(a0 + 0xFC)]);
*(s16 *)(a0 + 0xFC) = 0;
}
extern s32 func_8012C1B8(void);
@@ -3576,7 +3974,57 @@ void func_80182000(void *a0) {
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_8018203C);
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_801820F8);
typedef struct { u8 b[12]; } Blk12_820F8;
typedef struct { u8 b[8]; } Blk8_820F8;
extern s32 D_801C339C[];
extern s32 D_801C36F8[];
extern s32 D_801CDD30;
extern s32 D_801CDE20;
extern u8 D_801CD9C0[];
void func_801820F8(a0)
s32 a0;
{
s32 *dst = (s32 *)D_801CD9C0;
s32 k = *(s16 *)(a0 + 0x70);
s32 m = *(s16 *)(a0 + 0xFE);
s32 *src = (s32 *)D_801C339C[k];
s32 base = *(s32 *)(D_801C36F8[m] + k * 4);
Blk12_820F8 *pd12;
Blk8_820F8 *pd8;
u8 *t0;
u8 *t1;
s32 cond;
base += *(s32 *)(a0 + 0x94) * 8;
base = *(s32 *)base;
cond = base & 0x1000000;
if (cond == 0) {
pd12 = (Blk12_820F8 *)&D_801CDD30;
t0 = (u8 *)base;
} else {
pd8 = (Blk8_820F8 *)&D_801CDE20;
t1 = (u8 *)(base & 0xFEFFFFFF);
}
while (*src != 0) {
if (cond == 0) {
if ((u16)(*(u16 *)(t0 + 2) + 0x1FF) < 0x3FF) {
*dst++ = *src;
*pd12 = *(Blk12_820F8 *)t0;
pd12++;
}
} else {
*dst++ = *src;
*pd8 = *(Blk8_820F8 *)t1;
pd8++;
}
src++;
t0 += 12;
t1 += 8;
}
*dst = 0;
}
INCLUDE_ASM("asm/ov_SC01_006/nonmatchings/ov_SC01_006_jr_8017ED5C", func_80182240);
+7 -1
View File
@@ -3856,7 +3856,13 @@ void func_80174430(void) {
DEFINE_func_80174438() /* dedup: shared engine-core @0x80174438 (src/shared) */
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037_jr_80171B4C", func_80174474);
extern void (*D_80187264[])(void);
s32 func_80174474(void* a0)
{
D_80187264[*(u8 *)((s32)a0 + 0x214)]();
}
DEFINE_func_801744B0() /* dedup: shared engine-core @0x801744b0 (src/shared) */
+51 -2
View File
@@ -2904,7 +2904,17 @@ TAIL:
}
INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8017F83C", func_8017FBD8);
void func_8017FBD8(param_1)
s32 param_1;
{
*(s32 *)(param_1 + 0x48) = 0x4000;
*(s16 *)(param_1 + 2) = 7;
*(s32 *)(param_1 + 0x1C) = 0x50;
*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x14) = rand() % 0x1000;
}
INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8017F83C", func_8017FC3C);
@@ -3414,7 +3424,46 @@ void func_80180A84(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC03_108/nonmatchings/ov_SC03_108_jr_8017F83C", func_80180B7C);
extern s32 func_8004787C(s32 a0);
extern u16 D_800B99DA;
extern u8 D_8019E682;
extern u8 D_8019E6BC;
extern u8 D_8019E6BD;
extern u8 D_8019E6BE;
void func_80180B7C(arg0)
s32 arg0;
{
s32 r;
s32 x;
s32 col0;
s32 col1;
s32 col2;
u8 *p;
s32 i;
s32 off;
r = func_8004787C((((D_800B99DA << 3) - D_800B99DA) << 3) & 0x7F8);
x = (((((r << 1) + r) << 3) + r) << 2) >> 12;
col0 = x + 100;
col1 = x - 126;
col2 = ((((((r << 3) - r) << 3) - r) << 1) >> 12) + 100;
i = 0;
p = &D_8019E682;
off = 0;
do {
i++;
p[off - 2] = col0;
p[off - 1] = col1;
p[off] = col2;
off += 16;
} while (i < 3);
D_8019E6BC = col0 - 50;
D_8019E6BD = col1 - 50;
D_8019E6BE = col2 - 50;
*(s32 *)(arg0 + 0x1C) += 1;
}
+84 -4
View File
@@ -5350,7 +5350,27 @@ ret0:
}
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8017AE2C", func_8017F500);
extern short D_801B99A8;
extern u8 D_801E396C[];
extern void func_8012A828(s32*, s32);
extern void func_8012E88C(s32);
extern void func_80184C90(s32);
extern void func_80184ED4(s32, s32, s32, s32);
void func_8017F500(arg0)
void *arg0;
{
extern short D_801B99A8;
extern u8 D_801E396C[];
*(short *)((char *)arg0 + 0x2) = 5;
*(short *)((char *)arg0 + 0x34) = 0;
func_8012E88C((s32)arg0);
((void (*)(s32, s32))func_8012A828)((s32)arg0, (s32)&D_801B99A8);
func_80184C90((s32)arg0);
func_80184ED4((s32)arg0, (s32)D_801E396C, 0, 0x60);
}
void func_8017F564(void *a0) {
extern short D_80191578;
@@ -5921,7 +5941,15 @@ DEFINE_func_8018042C() /* dedup: shared engine-core @0x8018042C (src/shared) */
DEFINE_func_8018048C() /* dedup: shared engine-core @0x8018048C (src/shared) */
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8017AE2C", func_801804C8);
extern void func_80178CBC(s32, s32);
extern short D_8019195C;
void func_801804C8(s32 arg0) {
*(short *)((char *)arg0 + 0x2) = 0x5;
((void (*)(s32 *, s32))func_80178CBC)((s32 *)arg0, (s32)&D_8019195C);
*(short *)((char *)arg0 + 0x34) = 0;
}
extern s32 func_80184DD0(s32 a0);
@@ -5964,7 +5992,20 @@ void func_80180580(void *arg0) {
}
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8017AE2C", func_801805C0);
void func_801805C0(s32 arg0) {
extern void func_80185F54(void*, s32, s32);
extern s32 func_80185BE0(s32);
extern s32 func_80184FA4(void);
extern void func_801803BC(void*);
((void (*)(s32, s32, s32))func_80185F54)(arg0, 0xC, 1);
if (func_80185BE0(0xC) != 0) {
if (((s32 (*)(s32))func_80184FA4)(arg0) != 0) {
((void (*)(s32))func_801803BC)(arg0);
}
}
}
void func_80180618(void *arg0) {
extern short D_801B65C8;
@@ -6311,7 +6352,46 @@ s32 func_80180CC0(void *a0)
DEFINE_func_80180D38() /* dedup: shared engine-core @0x80180D38 (src/shared) */
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8017AE2C", func_80180E28);
void func_80180E28(s32 a0) {
s32 s2;
s32 code;
s32 a0val;
s32 dd;
s32 sel;
s2 = a0;
*(s32 *)(*(s32 *)(s2 + 0xCC) + 0xB0) = 2;
dd = func_80184DD0(a0);
sel = func_80029504();
if (dd == 2 && sel < 0x276) {
a0val = 0xA;
} else {
if (func_80184BAC(0xA, 0x10) != 0) {
code = 0;
goto ladder_done;
}
a0val = 0x10;
}
if (func_80184BAC(a0val, 0x16) != 0) {
code = 1;
} else {
code = 2;
}
ladder_done:
switch (code) {
case 0:
func_80180888((void *)a0);
break;
case 1:
func_801809DC((void *)a0);
break;
case 2:
break;
}
}
extern s32 func_80185BE0(s32 a0);
+180 -5
View File
@@ -3114,7 +3114,29 @@ void func_80181B34(void *arg0) {
}
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80181804", func_80181B74);
extern int func_80178970(void);
extern void func_80178D18(void);
void func_80181B74(void *a0) {
extern void func_8012E8E0(s32 a0, s32 a1);
extern void func_8012E88C(s32 a0);
extern void func_8012A828(s32 *a0, s32 a1);
extern void func_80184C90(s32 a0);
extern void func_80181998(void);
extern s32 D_80191B3C;
extern short D_801C0D40;
if (func_80178970() != 0) {
((void (*)(s32))func_80178D18)((s32)a0);
*(short *)((char *)a0 + 0x2) = 3;
func_8012E8E0((s32)a0, (s32)&D_80191B3C);
func_8012E88C((s32)a0);
func_8012A828((s32 *)a0, (s32)&D_801C0D40);
func_80184C90((s32)a0);
((void (*)(void))func_80181998)();
}
}
extern s32 func_80184FA4(void);
@@ -3418,7 +3440,78 @@ INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80181804", func_801821D
DEFINE_func_8018233C() /* dedup: shared engine-core @0x8018233C (src/shared) */
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80181804", func_80182378);
extern s32 func_80029504(void);
extern s32 func_8012E544(s32 a0);
extern short D_80191C10;
extern short D_80191CD8;
extern short D_80191D30;
extern short D_80191D88;
extern short D_80191E60;
extern short D_80191E88;
extern short D_801B9B50;
extern void func_8012A828(s32*, s32);
extern void func_8012E88C(s32);
extern void func_8012E8E0(s32 a0, s32 a1);
extern void func_80178CBC(s32 arg0, s32 arg1);
void func_80182378(a0)
void *a0;
{
extern short D_80191C10;
extern short D_801B9B50;
extern short D_80191E88;
extern short D_80191E60;
extern short D_80191CD8;
extern short D_80191D88;
extern short D_80191D30;
s32 v;
s32 arg;
*(short *)((char *)a0 + 0x2) = 9;
func_8012E8E0((s32)a0, (s32)&D_80191C10);
func_8012E88C((s32)a0);
func_8012A828((s32 *)a0, (s32)&D_801B9B50);
if (*(u16 *)a0 == 0x2A0) {
v = func_8012E544(0x2A3);
if (v == 0) {
goto zero;
}
goto chk;
} else {
v = func_8012E544(0x2A0);
if (v != 0) {
goto chk;
}
}
zero:
v = 0;
goto join;
chk:
v = (*(u16 *)(v + 2) == 3);
join:
if (v == 0) {
arg = (s32)&D_80191E88;
if (*(u16 *)a0 == 0x2A0) {
arg = (s32)&D_80191E60;
}
} else {
s32 t = func_80029504();
if (t < 0x2A8) {
arg = (s32)&D_80191CD8;
} else if (t < 0x2DA) {
arg = (s32)&D_80191D30;
} else {
arg = (s32)&D_80191D88;
}
}
func_80178CBC((s32 *)a0, arg);
}
extern void func_80178CBC(s32 a0, s32 a1);
@@ -3553,7 +3646,59 @@ s32 func_801825BC(void *a0)
}
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80181804", func_801826AC);
extern s32 func_80029504(void);
extern s32 func_80184BAC(s32 arg0, s32 arg1);
extern s32 func_80184DD0(s32 a0);
void func_801826AC(arg0)
void *arg0;
{
extern s32 func_80029504(void);
extern s32 func_80184BAC(s32 arg0, s32 arg1);
extern s32 func_80184DD0(s32 a0);
extern void func_80181F70(void *);
extern void func_801821A8(void *);
void *s2 = arg0;
s32 state;
s32 dd;
s32 sel;
s32 code;
s32 a0val;
state = 2;
*(s32 *)(*(s32 *)((char *)s2 + 0xCC) + 0xB0) = state;
dd = func_80184DD0((s32)arg0);
sel = func_80029504();
if (dd == state && sel < 0x276) {
a0val = 0xA;
} else {
if (func_80184BAC(0xA, 0x10) != 0) {
code = 0;
goto ladder_done;
}
a0val = 0x10;
}
if (func_80184BAC(a0val, 0x15) != 0) {
code = 1;
} else {
code = 2;
}
ladder_done:
switch (code) {
case 0:
func_80181F70(s2);
break;
case 1:
func_801821A8(s2);
break;
case 2:
break;
}
}
extern s32 func_80185BE0(s32 a0);
@@ -4199,7 +4344,16 @@ void func_8018375C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80181804", func_801837A8);
extern s32 func_80184FA4();
extern void func_801832A8();
void func_801837A8(void *a0) {
*(s32 *)(*(s32 *)((char *)a0 + 0xCC) + 0xB0) = 2;
if (((s32 (*)(s32))func_80184FA4)((s32)a0)) {
func_801832A8(a0);
}
}
extern s32 func_80184FA4(void);
extern s32 func_80185BE0(s32 arg0);
@@ -4221,7 +4375,28 @@ DEFINE_func_80183838() /* dedup: shared engine-core @0x80183838 (src/shared) */
DEFINE_func_80183890() /* dedup: shared engine-core @0x80183890 (src/shared) */
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80181804", func_801838E0);
extern int func_80178970(void);
extern void func_8012A828(s32 *a0, s32 a1);
extern void func_8012E88C(s32);
extern void func_80178D18(void);
void func_801838E0(arg0)
void *arg0;
{
extern int func_80178970(void);
extern void func_80178D18(void);
extern void func_8012E88C(s32);
extern void func_8012A828(s32 *a0, s32 a1);
extern short D_801B9AA8;
if (func_80178970() != 0) {
((void (*)(s32))func_80178D18)((s32)arg0);
*(s16 *)((s32)arg0 + 2) = 6;
func_8012E88C((s32)arg0);
func_8012A828((s32 *)arg0, (s32)&D_801B9AA8);
}
}
/* func_80183938 — state-entry init (family exemplar, reach x11).
+28 -1
View File
@@ -3245,7 +3245,34 @@ INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80183E6C", func_8018450
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80183E6C", func_80184560);
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80183E6C", func_801845B8);
extern s32 func_801847BC(void *a0, void *a1);
extern s32 func_80184BAC(s32 a0, s32 a1);
extern void func_80184CB8(s32 *a0, s32 a1);
extern s32 func_801788B8(s32 a0, s32 a1);
extern s32 func_8018465C(a0);
extern short D_8019224C;
extern short D_8019225C;
void func_801845B8(void *a0) {
s32 v1;
if (func_801847BC(a0, &D_8019225C) != 0) {
if (func_80184BAC(6, 7) != 0) {
*(s16 *)((char *)a0 + 0x2) = 5;
} else if (func_80184BAC(7, 0x10) != 0) {
*(s16 *)((char *)a0 + 0x2) = 6;
} else if (func_80184BAC(0x10, 0x14) != 0) {
*(s16 *)((char *)a0 + 0x2) = 0xC;
} else {
*(s16 *)((char *)a0 + 0x2) = 1;
}
func_80184CB8((s32 *)a0, (s32)&D_8019224C);
v1 = *(s32 *)((char *)a0 + 0x68);
*(s16 *)((char *)v1 + 0xC) = 0x7FFF;
func_801788B8((s32)a0, (s32)&func_8018465C);
}
}
extern s32 func_8012BD14(s32 a0);
extern s32 func_80178BF8();
+21 -1
View File
@@ -3398,7 +3398,27 @@ s16 func_80186450(void) {
}
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80185D70", func_80186460);
extern void func_801864AC(void);
extern u8 D_800B9A15;
extern u8 D_800B9A13;
extern u16 D_80115110;
extern u16 D_80115112;
extern s16 D_80115126;
extern void *D_8011DB24;
s32 func_80186460(s32 a0) {
void *func_ptr;
D_800B9A15 = 1;
D_800B9A13 = 4;
D_80115110 = 3;
func_ptr = func_801864AC;
D_80115112 = 0;
D_80115126 = (s16)a0;
D_8011DB24 = func_ptr;
return (s32)func_ptr;
}
extern void func_80029444(void);
+24 -1
View File
@@ -4810,7 +4810,30 @@ void func_8018BE38(void *a0) {
}
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_80188E1C", func_8018BE74);
extern s32 D_801E05E0[];
extern s32 D_801E05F4[];
extern s32 func_80029504(void);
extern s32 func_80184D00(void);
extern s32 func_80184DD0(s32);
void func_8018BE74(a0)
s32 a0;
{
extern s32 D_801E05E0[];
extern s32 D_801E05F4[];
s32 v1 = func_80029504();
if (v1 < 0xC8) {
s32 v0 = ((s32 (*)(void))func_80184D00)();
*(s32 *)(a0 + 0xE4) = D_801E05E0[v0];
} else {
s32 v0 = ((s32 (*)(void))func_80184DD0)();
*(s32 *)(a0 + 0xE4) = D_801E05F4[v0];
}
}
extern s32 func_8014CB1C(void);
s32 func_8018BEE8(void) {
+64 -1
View File
@@ -3272,7 +3272,70 @@ DEFINE_func_8018CDDC() /* dedup: shared engine-core @0x8018CDDC (src/shared) */
DEFINE_func_8018CDE4() /* dedup: shared engine-core @0x8018CDE4 (src/shared) */
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_8018CC40", func_8018CDEC);
extern void func_80029124(s32, s32);
extern s32 func_800291B4(s32 arg);
extern s32 func_800D0FE0(s32);
extern void func_800D0F0C(s32, s32);
extern s16 D_8010EDEC;
extern u8 D_8010EDF1;
extern s32 D_801E3D60;
extern u32 D_801E3D74;
extern s32 D_801E3EA4;
typedef struct {
s16 unk00; /* 0x00 */
s16 pad02; /* 0x02 */
s32 unk04; /* 0x04 */
s32 unk08; /* 0x08 */
s32 unk0C; /* 0x0C */
} Struct801E79D8;
extern Struct801E79D8 D_801E79D8;
void func_8018CDEC(void) {
s16 i;
D_801E79D8.unk00 = 0;
for (i = 0; i < 0xC; i++) {
s32 slot = i + 0x2F;
s32 id = func_800291B4(slot) & 0xFF;
if (id != 0) {
register s32 tmp __asm__("$2");
register s32 t __asm__("$5");
register s32 rb __asm__("$6");
s16 flags;
s32 m;
tmp = (id << 1) + id;
t = tmp << 2;
flags = *(s16 *)((u8 *)&D_8010EDEC + t);
if (flags < 0) {
rb = *(u8 *)((u8 *)&D_8010EDF1 + t);
m = rb & 0xFF;
if (flags & 0x4000) {
D_801E79D8.unk08 = (&D_801E3D60)[id];
D_801E79D8.unk0C = (&D_801E3D74)[id];
func_80029124(m, 1);
func_800D0FE0(slot);
D_801E79D8.unk00 = 2;
return;
} else {
register s32 sc __asm__("$4");
register s32 d __asm__("$2");
sc = slot;
__asm__("" : "=r"(sc) : "0"(sc));
d = rb - 0x14;
__asm__("" : "=r"(d) : "0"(d));
D_801E79D8.unk04 = (&D_801E3EA4)[d >> 1];
((void (*)(s32))func_800D0F0C)(sc);
D_801E79D8.unk00 = 1;
return;
}
}
}
}
}
+137 -6
View File
@@ -3880,7 +3880,17 @@ void func_8017CC44(void *a0)
}
INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_8017CCC4);
void func_8017CCC4(void *a0) {
s32 *a1 = *(s32 **)((s32)a0 + 0x20);
if (*(s32 *)((s32)a0 + 0x1C) & 1) {
*(s32 *)(a1 + 1) |= 0x80000000;
} else {
*(s32 *)(a1 + 1) &= 0x7FFFFFFF;
}
*(s16 *)((s32)a0 + 0x24) = 3;
*(s32 *)((s32)a0 + 0x1C) += 1;
}
extern void func_8017CE10(void *a0, s32 a1, s32 a2);
@@ -7459,7 +7469,34 @@ extern void func_8013C0F8(void *a0);
}
INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_801823BC);
extern s16 D_801AEB52[];
extern s32 D_801A158C;
extern s32 D_801AEB1C;
extern s32 D_801B20E0;
extern void func_80049CAC(s32 a0, s32 a1);
extern void func_8017EF68(s32 a0, s32 a1, s32 a2);
void func_801823BC(a0, a1)
s32 a0;
s32 a1;
{
extern void func_80049CAC(s32 a0, s32 a1);
extern void func_8017EF68(s32 a0, s32 a1, s32 a2);
extern s16 D_801AEB52[];
extern s32 D_801B20E0;
extern s32 D_801A158C;
extern s32 D_801AEB1C;
register s16 *q asm("$17");
q = D_801AEB52;
*q = a0;
func_80049CAC((s32)q - 2, (s32)q - 78);
__asm__("" : "=r"(q) : "0"(q));
D_801AEB1C = (s16)a1;
*(s32 *)((s32)q - 82) = 0;
func_8017EF68((s32)&D_801B20E0, (s32)&D_801A158C, (s32)q - 82);
}
extern void func_8013C0F8(void *a0);
extern s32 func_8017EF08(s32 a0);
@@ -8101,7 +8138,22 @@ void func_801837DC(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_8018381C);
/*
* func_8018381C — actor update gate.
* Runs the table swap + state entry only while the actor is idle (+0x102 == 0)
* and the global mode word is anything except 2/3 (sltiu range check).
*/
void func_8018381C(void *param_1)
{
extern s32 D_80126B58;
extern void (*D_8018C5A0[])(void);
if ((*(s16 *)((s32)param_1 + 0x102) == 0) && ((u32)(*(u16 *)&D_80126B58 - 2) >= 2)) {
func_80178B18((s32)param_1, (s32)D_8018C5A0);
func_8018291C((s32)param_1);
}
}
extern int func_80178970(void);
extern void func_80178D18(void);
@@ -8269,7 +8321,36 @@ void func_80183C9C(void *a0)
}
INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_80183DAC);
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_8002D4C8(s32 a0, s32 a1);
extern s32 func_8012AD50(void *a0);
extern u8 D_8018C804;
extern s32 D_8018C8C4;
void func_80183DAC(void *arg0)
{
register void *self __asm__("$16") = arg0;
s32 h;
h = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)((s32)self + 0x20) = h;
if (h == 0) {
func_8012CAE4(self);
} else {
func_8001CA1C(h, (s32)&D_8018C804);
func_8012A828((s32)self, &D_8018C8C4);
*(u16 *)(*(s32 *)((s32)self + 0x20) + 0x18) = 0x2800;
*(u16 *)(*(s32 *)((s32)self + 0x20) + 0x1A) = 0x2800;
*(u32 *)(*(s32 *)((s32)self + 0x20) + 4) |= 0x50000000;
func_8002D4C8(0x92B, 0);
func_8012AD50(self);
}
}
typedef struct { s32 w[8]; } Mat32L;
@@ -8675,7 +8756,41 @@ void func_80184870(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_801848A4);
int func_801848A4(int a0, void* a1)
{
s16 stack_buf[8];
register s16 *s0 __asm__("$16") = (s16 *)a1;
s16 v0;
s32 result;
s32 ret;
v0 = s0[2];
stack_buf[0] = v0;
v0 = s0[3];
stack_buf[4] = v0;
v0 = s0[5];
stack_buf[5] = v0;
stack_buf[1] = v0;
v0 = s0[6];
stack_buf[6] = v0;
stack_buf[2] = v0;
result = func_80184940((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);
if (result != 0) {
ret = 1;
} else {
v0 = s0[7];
stack_buf[6] = v0;
stack_buf[2] = v0;
result = func_80184940((s32)a0, (s32)&stack_buf[0], (s32)&stack_buf[4]);
ret = (result != 0);
}
return ret;
}
void func_80184940(s32 param_1, s32 param_2, s32 param_3)
{
@@ -9401,7 +9516,23 @@ void func_80185DA4(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_000/nonmatchings/ov_SC06_000_jr_8017AE2C", func_80185DE0);
void func_80185DE0(int param_1)
{
extern void func_8012C1B8(void);
extern void func_8001C810(s32 a0, s32 a1);
extern s32 func_8012AD50(void *a0);
extern u8 D_801AA1C8[];
int v0;
*(int *)(param_1 + 0x20) = v0 = ((int (*)(void))func_8012C1B8)();
if (v0 != 0) {
func_8001C810(v0, (s32)D_801AA1C8);
*(int *)(v0 + 4) |= 0x50000000;
((s32 (*)(void *))func_8012AD50)((void *)param_1);
}
}
void func_80185E44(void) {
}
+61 -3
View File
@@ -3832,9 +3832,54 @@ void func_801838F0(s32 arg0) {
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80181D34", func_80183940);
s32 func_80183940(s32 a0, s32 a1) {
extern s32 func_80132EF4(s32 a0, s32 a1);
extern s32 rand(void);
s32 s0;
s32 rr;
register s32 x1 __asm__("$3");
register s32 x2 __asm__("$4");
if (*(s16 *)(*(s32 *)(a0 + 0x20) + 0x18) >= 0x800) {
if (*(s16 *)(a0 + 0xE4) == 0) {
*(s16 *)(a0 + 0xE4) = *(u16 *)(a0 + 0xE6);
s0 = func_80132EF4(a0, 0x22);
if (s0 != 0) {
rr = rand();
x1 = *(u16 *)(s0 + 0x6);
x1 = x1 - 0x10;
*(u16 *)(s0 + 0x6) = x1 + (rr & 0x1F);
rr = rand();
*(s32 *)(s0 + 0x14) = -0x40000;
x2 = *(u16 *)(s0 + 0xE);
x2 = x2 - 0x10;
*(u16 *)(s0 + 0xE) = x2 + (rr & 0x1F);
*(s16 *)(s0 + 0x34) = a1;
*(u16 *)(*(s32 *)(s0 + 0x20) + 0x2C) = 0xC010;
*(u32 *)(*(s32 *)(s0 + 0x20) + 0x4) |= 0x40000000;
}
return 1;
}
*(s16 *)(a0 + 0xE4) = *(s16 *)(a0 + 0xE4) - 1;
}
return 0;
}
extern u16 D_80126B66;
extern void func_80181EF4(s32 arg0);
void func_80183A28(param_1)
int param_1;
{
if ((short)(*(u16 *)(param_1 + 0xE) - D_80126B66) < 0x140) {
void **fp = *(void **)(param_1 + 0xDC);
if (fp != 0 && *fp != 0)
(*(void (*)(void))*fp)();
func_80181EF4(param_1);
}
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80181D34", func_80183A28);
extern s32 func_8012BEE8(s32 a0);
extern void func_8001C924(s32 a0, void *a1);
@@ -4122,7 +4167,20 @@ void func_80183FDC(s32 param_1) {
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80181D34", func_801841F8);
extern s32 func_8012BEE8(s32 a0);
extern void func_80142414(s32 a0, s16 a1);
void func_801841F8(p)
s32 p;
{
if (*(s32 *)(p + 0x1C) == 0xF) {
func_80142414(p, -0x90);
}
if (func_8012BEE8(p) != 0) {
*(u16 *)(p + 2) = 2;
}
}
/* func_80184248 — a randomised state entry: seed the timer at 0x1C with
+11 -1
View File
@@ -3384,7 +3384,17 @@ void func_80185D38(s32 param_1)
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801851E0", func_80185EB0);
extern u8 D_801D3784[];
extern void func_8012A828(s32 a0, void *a1);
void func_80185EB0(s32 a0) {
*(u16 *)(a0 + 0x2) = 0x20;
func_8012A828(a0, (s32)&D_801D3784);
*(s32 *)(a0 + 0x1C) = 0;
*(s32 *)(a0 + 0xE4) = 0;
*(s32 *)(a0 + 0x48) = 0x4650;
}
+20 -1
View File
@@ -3086,6 +3086,25 @@ void func_80186E48(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_801867DC", func_80186E94);
extern s32 D_801BC408;
extern s32 D_801BC418;
extern void func_8012B14C(s32 a0, s32 a1);
extern void func_80131B14();
void func_80186E94(a0)
s32 *a0;
{
s32 s0 = a0;
*(u8 *)(s0 + 0xC2) = 0;
*(u8 *)(s0 + 0xC3) = 0;
*(s32 *)(s0 + 0x1C) = 0;
func_80131B14();
if ((*(u16 *)(s0 + 0x5E) == 9) || (*(u16 *)(s0 + 0x5E) == 0x1C)) {
func_8012B14C(s0, (s32)&D_801BC408);
} else {
func_8012B14C(s0, (s32)&D_801BC418);
}
}
+36 -1
View File
@@ -4623,7 +4623,42 @@ s32 func_801897F0(void *a0, s32 a1, s32 a2) {
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80186F00", func_80189888);
void func_80189888(a0, a1, a2, a3, a4, a5)
s32 a0;
void *a1;
s32 a2;
s32 a3;
u16 a4;
s32 a5;
{
extern s32 func_8012C51C(void *a0, s32 a1);
typedef struct {
u16 f10; /* 0x10 */
u16 f12; /* 0x12 */
u16 f14; /* 0x14 */
s16 f16; /* 0x16 */
s16 f18; /* 0x18 */
s16 f1a; /* 0x1A */
s16 f1c; /* 0x1C */
u16 f1e; /* 0x1E */
s32 f20; /* 0x20 */
} buf_80189888;
buf_80189888 sp;
u16 t;
sp.f10 = *(u16 *)a1;
sp.f12 = *(u16 *)(2 + (char *)a1);
t = *(u16 *)(4 + (char *)a1);
sp.f16 = a2;
sp.f18 = a3;
sp.f1a = 0;
sp.f1e = a4;
sp.f20 = a5;
sp.f1c = 0x7FFF;
sp.f14 = t;
func_8012C51C(&sp, a0);
}
INCLUDE_ASM("asm/ov_SC06_024/nonmatchings/ov_SC06_024_jr_80186F00", func_801898EC);
+19 -1
View File
@@ -3412,5 +3412,23 @@ INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8017AE2C", func_8017C0A
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8017AE2C", func_8017C120);
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8017AE2C", func_8017C1DC);
extern s32 func_80146E98(s32 a0);
extern void func_80146C3C();
void func_8017C1DC(param_1)
int param_1;
{
int addr;
addr = *(int *)(param_1 + 0x20);
if (*(unsigned int *)(param_1 + 0x1c) & 1) {
*(unsigned int *)(addr + 4) = *(unsigned int *)(addr + 4) | 0x80000000;
} else {
*(unsigned int *)(addr + 4) = *(unsigned int *)(addr + 4) & 0x7fffffff;
}
if (func_80146E98(param_1) != 0) {
((void (*)(s32))func_80146C3C)(param_1);
}
}
+130 -5
View File
@@ -3385,7 +3385,47 @@ int func_8017D77C(short *a0) {
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8017C24C", func_8017D810);
/* Handwritten GTE squared-distance check (§265 verbatim-asm lane, file-scope form).
* Recovered C semantics: dx=D_80126CAC-a0[3]; dz=D_80126CB0-a0[7];
* GTE SQR of {dx,0,dz}; return 0xC3FFF < (MAC1+MAC2+MAC3). */
__asm__(".text\n.align 2\n.globl func_8017D810\n.ent\tfunc_8017D810\n"
"func_8017D810:\n.frame $sp,16,$31\n.mask 0,0\n.fmask 0,0\n"
".set\tnoreorder\n"
"lui $2, %hi(D_80126CAC)\n"
"lh $2, %lo(D_80126CAC)($2)\n"
"lh $3, 6($4)\n"
"addiu $29, $29, -16\n"
"sw $0, 4($29)\n"
"subu $2, $2, $3\n"
"sw $2, 0($29)\n"
"lui $2, %hi(D_80126CB0)\n"
"lh $2, %lo(D_80126CB0)($2)\n"
"lh $3, 14($4)\n"
"nop\n"
"subu $2, $2, $3\n"
"sw $2, 8($29)\n"
"lwc2 $9, 0($29)\n"
"lwc2 $10, 4($29)\n"
"lwc2 $11, 8($29)\n"
"nop\n"
"nop\n"
"sqr 0\n"
"swc2 $25, 0($29)\n"
"swc2 $26, 4($29)\n"
"swc2 $27, 8($29)\n"
"lui $5, 12\n"
"ori $5, $5, 16383\n"
"lw $2, 0($29)\n"
"lw $3, 4($29)\n"
"lw $4, 8($29)\n"
"addu $2, $2, $3\n"
"addu $2, $2, $4\n"
"slt $2, $5, $2\n"
"addiu $29, $29, 16\n"
"jr $31\n"
"nop\n"
".set\treorder\n.end\tfunc_8017D810\n");
extern void (*D_80196DE0[])(void);
@@ -3417,7 +3457,53 @@ void func_8017D8D0(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8017C24C", func_8017D940);
extern void func_8017DABC();
void func_8017D940(int param_1)
{
int iVar2;
int iVar3;
int iVar4;
int iVar5;
int tmp;
int dcVal;
if (*(short *)(param_1 + 0xfe) == 0) {
iVar2 = func_8004787C((int)*(short *)(param_1 + 0x100));
if (iVar2 < 0) {
iVar2 = iVar2 + 0x7f;
}
iVar2 = iVar2 >> 7;
tmp = *(unsigned short *)(param_1 + 0x100) + *(unsigned short *)(param_1 + 0x102);
*(short *)(param_1 + 0x100) = (short)tmp;
iVar3 = func_80047948((short)tmp);
if (iVar3 < 0) {
iVar3 = iVar3 + 0x7f;
}
*(int *)(param_1 + 0xe4) = *(int *)(param_1 + 0xe4) + 4;
iVar3 = iVar3 >> 7;
if (*(int *)(param_1 + 0xe4) >= 0x40) {
*(int *)(param_1 + 0xe4) = 0;
}
dcVal = *(int *)(param_1 + 0xdc);
*(int *)(param_1 + 0xe0) = *(int *)(param_1 + 0xe0) + 0xb;
iVar4 = func_8004787C(*(int *)(param_1 + 0xe0)) * 0x30;
if (iVar4 < 0) {
iVar4 = iVar4 + 0xfff;
}
iVar5 = iVar4 >> 0xc;
if (*(int *)(param_1 + 0xe0) >= 0x800) {
*(unsigned short *)(param_1 + 2) = *(unsigned short *)(param_1 + 2) - 1;
return;
}
iVar5 = iVar5 << 0x10 | iVar5 << 8 | iVar5;
func_8017DABC(param_1, 0, (short)iVar2, (short)iVar3, dcVal, iVar5);
func_8017DABC(param_1, 1, (short)iVar2, (short)iVar3, dcVal, iVar5);
} else {
*(short *)(param_1 + 0xfe) = *(short *)(param_1 + 0xfe) - 1;
}
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8017C24C", func_8017DABC);
@@ -4384,7 +4470,19 @@ set_and_return:
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8017C24C", func_8017F0C0);
extern u8 D_801BE038[];
extern void func_8012A828(s32 a0, void *a1);
void func_8017F0C0(arg0)
void *arg0;
{
func_8012A828((s32)arg0, D_801BE038);
*(s16 *)((s32)arg0 + 0x2) = 0xB;
*(s32 *)((s32)arg0 + 0x10) *= 2;
*(s32 *)((s32)arg0 + 0x18) *= 2;
*(s16 *)((s32)arg0 + 0x34) = 0;
}
extern s32 func_80181ED4(s32 a0, s32 a1);
@@ -4679,7 +4777,26 @@ void func_8017F6E8(s32 p)
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8017C24C", func_8017F84C);
extern u8 D_801A63EC[];
extern u8 D_801BD9C0[];
extern void func_8012A828(s32 a0, void *a1);
void func_8017F84C(p)
s32 p;
{
extern u8 D_801A63EC[];
extern u8 D_801BD9C0[];
*(s16 *)(p + 2) = 0x14;
if (!(*(u32 *)(p + 0xE0) & 0x400)) {
*(s16 *)(p + 0x34) = 1;
func_8012A828(p, D_801BD9C0);
} else {
*(s16 *)(p + 0x34) = 0;
func_8012A828(p, D_801A63EC);
}
}
typedef struct {
SVECTOR_8016E7C8 v[4]; /* 0x00 */
@@ -5122,7 +5239,15 @@ void func_801800C4(s32 p) {
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_8017C24C", func_801801A4);
extern u8 D_801BD7E8[];
extern void func_8012A828(s32 a0, void *a1);
void func_801801A4(s32 a0) {
*(s16 *)(a0 + 0x2) = 0x1B;
func_8012A828(a0, (s32)&D_801BD7E8);
*(s32 *)(a0 + 0x1C) = 0x20;
}
extern void func_8012F214(s32, s32, s32);
extern s32 func_80184028(void *a0, s32 a1, s32 a2);
+79 -2
View File
@@ -2966,7 +2966,16 @@ void func_80181478(s32 *a0) {
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80181014", func_801814DC);
extern s32 D_801A67EC[];
extern void func_8012A828(s32 a0, void *a1);
void func_801814DC(param_1)
s32 param_1;
{
func_8012A828(param_1, (void *)D_801A67EC[*(u16 *)(param_1 + 0x70) & 0xF]);
*(s32 *)(param_1 + 0xE4) = 0;
}
extern s32 DUMMY_UNUSED;
@@ -3413,7 +3422,75 @@ store:
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80181014", func_801820C4);
extern u8 D_801202A0[];
extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1);
extern s32 func_8012B6D4(s16 *a0, s16 *a1);
extern void func_8012B0B4(unsigned int *p, int a1, int a2);
extern s32 func_8012CEB0(void *a0, void *a1, s32 a2);
extern void func_8012ADE4(u8 *a0);
extern void func_8012C098(void *param_1);
void func_801820C4(s32 a0) {
u8 *p;
s16 *self4;
unsigned int *sc;
s32 i;
s16 y;
s32 z;
s32 ang;
s16 v10[4];
s16 v18[4];
s32 sp20[2];
p = D_801202A0;
i = 0;
self4 = (s16 *)(a0 + 4);
sc = (unsigned int *)sp20;
do {
if ((u8 *)a0 != p) {
switch (*(u16 *)p) {
case 0x27A:
if (func_8012BC60((struct Vec *)self4, (struct Vec *)(p + 4)) < 0x6400) {
ang = func_8012B6D4(self4, (s16 *)(p + 4));
func_8012B0B4(sc, ang, 0xA1);
v18[0] = *(u16 *)(p + 6);
v18[1] = *(u16 *)(p + 0xA);
v18[2] = *(u16 *)(p + 0xE);
v18[0] += sp20[0];
v18[2] += sp20[0] >> 16;
v18[1] = *(u16 *)(a0 + 0xA);
v10[0] = *(u16 *)(a0 + 0x3A);
v10[1] = *(u16 *)(a0 + 0x3E);
v10[2] = *(u16 *)(a0 + 0x42);
if ((func_8012CEB0(v10, v18, 0) & 0x2000) == 0) {
func_8012ADE4((u8 *)a0);
return;
}
*(u16 *)(a0 + 6) = v18[0];
*(u16 *)(a0 + 0xA) = v18[1];
*(u16 *)(a0 + 0xE) = v18[2];
return;
}
break;
case 0x2F4:
y = *(s16 *)(p + 0xE);
z = *(s16 *)(a0 + 0xE);
if (y + 0x10 < z) {
func_8012C098((void *)a0);
return;
}
if (y - 0x60 < z) {
*(s16 *)(a0 + 0xE) = y - 0x60;
}
break;
}
}
i++;
p += 0x10C;
} while (i < 0x60);
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80181014", func_80182288);
+87 -4
View File
@@ -4666,7 +4666,18 @@ void func_80185670(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_801857B0);
extern void func_8012AD44(s32 *a0, s16 a1);
extern void func_8012B23C();
void func_801857B0(param_1)
s32 param_1;
{
func_8012B23C((void *)param_1);
*(s32 *)(param_1 + 0x14) = 0xFFD80000;
*(s32 *)(param_1 + 0x1C) = 0x10;
func_8012AD44((s32 *)param_1, 4);
}
extern void (*D_801BEEF8[])(void);
extern void func_801875D0(void);
@@ -5395,7 +5406,27 @@ void func_80186CF0(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_80186D90);
extern int func_8018853C(short *pos, int a1, int a2);
void func_80186D90(a0)
s32 a0;
{
short buf[4];
s32 p;
buf[0] = *(u16 *)(a0 + 0x6);
buf[1] = *(u16 *)(a0 + 0xA);
buf[2] = *(u16 *)(a0 + 0xE);
buf[3] = 0xC;
p = func_8018853C(buf, 0, 0x40C0C0);
if (p != 0) {
*(u16 *)(*(s32 *)(p + 0x20) + 0x2C) = 0xC006;
*(s32 *)(*(s32 *)(p + 0x20) + 0x4) |= 0x50000000;
*(s16 *)(*(s32 *)(p + 0x20) + 0x18) = 0xA00;
}
}
extern s32 func_80132EF4(s32 a0, s32 a1);
@@ -9083,7 +9114,31 @@ void func_8018C77C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_8018C7B8);
extern void func_80016714(void *a0, s32 a1);
extern void func_8002A04C(s32 a0);
extern void func_8012C218(void *a0);
void func_8018C7B8(a0)
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);
@@ -9326,7 +9381,35 @@ void func_8018CD54(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC06_032/nonmatchings/ov_SC06_032_jr_80182890", func_8018CDB4);
void func_8018CDB4(s32 param_1)
{
extern void func_8012C1B8(void);
extern void func_8012CAE4(s32);
extern void func_8001C214(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, void *a1);
extern u8 D_801CC5A8[];
extern u8 D_80193650[];
s32 v0;
v0 = ((s32 (*)(void))func_8012C1B8)();
*(s32 *)(param_1 + 0x20) = v0;
if (v0 == 0) {
((void (*)(void *))func_8012CAE4)((void *)param_1);
} else {
func_8001C214(v0, (s32)D_801CC5A8);
func_8012A828(param_1, (void *)D_80193650);
*(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 u8 D_801CA8D4[];
extern u8 D_801CA8E0[];
+82 -5
View File
@@ -3911,7 +3911,18 @@ s32 func_8017E1A8(s32 arg0) {
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8017E1BC);
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8017E20C);
extern u16 D_801863A0[];
extern void func_8017E7E8(void *a0);
void func_8017E20C(void *a0) {
func_800D0C48(1);
func_8017E7E8(a0);
*(s32 *)((s32)a0 + 0x1C) = 0x20;
func_80178B18((s32)a0, (s32)D_801863A0);
*(s16 *)((s32)a0 + 0x100) = 0;
func_8012AD44((s32 *)a0, 4);
}
extern s32 func_8012BEE8(s32 arg0);
extern void func_8012AD80(s32 arg0);
@@ -4004,7 +4015,20 @@ extern void func_8002D4C8(s32 arg0, s32 arg1);
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8017E448);
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8017E4B0);
void func_8017E4B0(s32 a0) {
extern void func_8012B200(u8 *a0);
extern s32 func_8012B8A4(s16 *a0);
*(s16 *)(a0 + 0x06) = 0x1B0;
*(s16 *)(a0 + 0x0A) = -0x600;
*(s16 *)(a0 + 0x0E) = 0x2C70;
func_8012B200((u8 *)a0);
*(s32 *)(a0 + 0x10) = 0xFFFE8000;
*(s32 *)(a0 + 0x18) = 0x38000;
*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = func_8012B8A4((s16 *)a0);
*(s16 *)(a0 + 0x34) = 3;
}
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8017E524);
@@ -4509,7 +4533,24 @@ void func_8017F3FC(s32 arg0)
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8017F464);
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8017F4F8);
extern u16 D_8018657C[];
extern u16 D_8018657E[];
void func_8017F4F8(a0)
s32 a0;
{
extern u16 D_8018657C[];
extern u16 D_8018657E[];
extern void MoveImage(void *a0, s32 a1, s32 a2);
s16 sp[4];
sp[0] = *(u16 *)((u8 *)D_8018657C + a0 * 4);
sp[1] = *(u16 *)((u8 *)D_8018657E + a0 * 4);
sp[2] = 0x8;
sp[3] = 0x20;
MoveImage(&sp[0], 0x2F4, 0x1a0);
}
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8017F554);
@@ -4914,7 +4955,20 @@ void func_80180AA4(void *a0) {
}
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_80180B3C);
void func_80180B3C(s32 a0)
{
extern s16 D_801D0B7C;
extern void func_8017F098(void);
extern s32 func_8012B8A4(s16 *a0);
extern void func_8017F464();
if ((*(u16 *)&D_801D0B7C) == 4) {
func_8017F098();
}
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = func_8012B8A4((s16 *)a0);
func_8017F464(a0);
}
extern void func_80142414(s32 a0, s16 a1);
extern void func_8017F0D0(s32 a0);
@@ -5255,7 +5309,30 @@ void func_801814B0(s32 param)
}
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_80181528);
extern s32 D_801ADE64[];
extern s32 D_801D0900[];
extern s32 D_801D0904[];
void func_80181528(void *a0) {
*(s32 *)((u8 *)a0 + 0x20) = func_8012C1B8();
if (*(s32 *)((u8 *)a0 + 0x20) == 0) {
func_8012CAE4(a0);
return;
}
*(s32 *)((s8 *)D_801D0900 + (*(s16 *)((u8 *)a0 + 0x70) << 3)) =
D_801ADE64[*(s16 *)((u8 *)a0 + 0x70)];
*(s32 *)((s8 *)D_801D0904 + (*(s16 *)((u8 *)a0 + 0x70) << 3)) = 0;
func_8001C214(*(s32 *)((u8 *)a0 + 0x20),
(s32)((s8 *)D_801D0900 + (*(s16 *)((u8 *)a0 + 0x70) << 3)));
*(u16 *)((u8 *)a0 + 0x106) = rand() & 0xF0;
*(u16 *)((u8 *)a0 + 0x108) = rand() & 0xF0;
func_8012B23C(a0);
*(s32 *)((u8 *)a0 + 0x1C) = 0x20;
func_8012AD50(a0);
}
extern s32 func_8012BEE8(s32 arg0);
extern void func_8012C218(void *arg0);