feat(decomp): parallel gate — 21 fns across 21 binaries (10 workers)

md_MAIN_003    func_800D05B4
  md_MAIN_016    func_800CB158
  ov_SC01_009    func_8017F2A0
  ov_SC02_016    func_80182D54
  ov_SC01_080    func_80181918
  ov_SC03_001    func_80186A8C
  ov_SC03_029    func_80181600
  ov_SC03_101    func_80180864
  ov_SC03_091    func_801826C8
  ov_SC03_092    func_8017DF40
  ov_SC03_102    func_8018153C
  ov_SC03_103    func_8017E830
  ov_SC03_124    func_8018A3C8
  ov_SC03_105    func_801839A4
  ov_SC04_008    func_8017D8C4
  ov_SC04_012    func_8017DAE4
  ov_SC04_018    func_80180284
  ov_SC05_004    func_8017EF0C
  ov_SC06_025    func_801808AC
  ov_SC06_016    func_801813B0
  ov_SC07_002    func_801804D4
This commit is contained in:
Drew T
2026-08-30 11:15:07 -06:00
parent f0553e9ce5
commit 4c7550f97e
21 changed files with 735 additions and 22 deletions
+71 -1
View File
@@ -627,7 +627,77 @@ __asm__(".text\n.align 2\n.globl func_800D0440\n.ent\tfunc_800D0440\n"
".set\treorder\n.end\tfunc_800D0440\n");
INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D05B4);
/* func_800D05B4 - VERBATIM-ASM BANK (cookbook sec 265, file-scope form #1).
* -O0 body (addu $fp,$sp,$zero prologue) stranded inside md_MAIN_003's -O2 object
* (sec 261/6 -- nothing under src/md_ globs -O0 yet). Recovered C semantics for the
* eventual real decomp (register u8 *s0 = D_800AF630):
*
* func_8001C044();
* func_80015310();
* s0[0xA3E1] = 0;
* D_800EC890 = 0;
* D_800EC8A0 = 1;
* func_800183E0((s32)&D_800D4E6C);
* func_800183E0((s32)&D_800D52BC);
* D_800EC894 = 0;
* D_800EC88C = -1;
* *(u16 *)(s0 + 0xA3B8) = 0;
* func_800118AC();
*
* Siblings func_800D0440/func_800D06BC/func_800D09A0 (same TU) are the same shape
* banked the same way; frame/mask (48/0xC0010000,-16) matches the ra/fp/s0 save set
* used throughout this file's verbatim-asm blocks. No C externs shipped (link-time
* resolution).
*/
__asm__(".text\n.align 2\n.globl func_800D05B4\n.ent\tfunc_800D05B4\n"
"func_800D05B4:\n.frame $sp,48,$31\n.mask 0xC0010000,-16\n.fmask 0,0\n"
".set\tnoreorder\n"
"addiu $sp, $sp, -48\n"
"sw $ra, 40($sp)\n"
"sw $fp, 36($sp)\n"
"sw $s0, 32($sp)\n"
"addu $fp, $sp, $zero\n"
"lui $s0, %hi(D_800AF630)\n"
"addiu $s0, $s0, %lo(D_800AF630)\n"
"jal func_8001C044\n"
"nop\n"
"jal func_80015310\n"
"nop\n"
"lui $at, 1\n"
"addu $at, $s0, $at\n"
"sb $zero, -23583($at)\n"
"lui $at, %hi(D_800EC890)\n"
"sw $zero, %lo(D_800EC890)($at)\n"
"addiu $v0, $zero, 1\n"
"lui $at, %hi(D_800EC8A0)\n"
"sw $v0, %lo(D_800EC8A0)($at)\n"
"lui $a0, %hi(D_800D4E6C)\n"
"addiu $a0, $a0, %lo(D_800D4E6C)\n"
"jal func_800183E0\n"
"nop\n"
"lui $a0, %hi(D_800D52BC)\n"
"addiu $a0, $a0, %lo(D_800D52BC)\n"
"jal func_800183E0\n"
"nop\n"
"lui $at, %hi(D_800EC894)\n"
"sh $zero, %lo(D_800EC894)($at)\n"
"addiu $v0, $zero, -1\n"
"lui $at, %hi(D_800EC88C)\n"
"sw $v0, %lo(D_800EC88C)($at)\n"
"lui $at, 1\n"
"addu $at, $s0, $at\n"
"sh $zero, -23624($at)\n"
"jal func_800118AC\n"
"nop\n"
"addu $sp, $fp, $zero\n"
"lw $ra, 40($sp)\n"
"lw $fp, 36($sp)\n"
"lw $s0, 32($sp)\n"
"addiu $sp, $sp, 48\n"
"jr $ra\n"
"nop\n"
".set\treorder\n.end\tfunc_800D05B4\n");
INCLUDE_ASM("asm/md_MAIN_003/nonmatchings/md_MAIN_003", func_800D0664);
+32 -1
View File
@@ -74,7 +74,38 @@ void func_800CAF28(void *arg0) {
INCLUDE_ASM("asm/md_MAIN_016/nonmatchings/md_MAIN_016", func_800CAF84);
INCLUDE_ASM("asm/md_MAIN_016/nonmatchings/md_MAIN_016", func_800CB158);
extern void func_800CAF84();
void func_800CB158(s32 arg0) {
typedef struct { s32 w[4]; } Struct16;
s32 a0;
s32 v0;
s32 cnt;
a0 = *(s32 *)(arg0 + 0x34);
if ((*(s32 *)(arg0 + 0x2C) & 0x8000) == 0) {
cnt = *(s32 *)(arg0 + 0x1C);
*(s32 *)(arg0 + 0x1C) = cnt + 1;
if (cnt < 8) {
*(u16 *)(arg0 + 0x28) += 0x120;
} else {
*(s32 *)(arg0 + 0x1C) = 0;
*(u16 *)(arg0 + 0x2) = 4;
}
v0 = *(s32 *)(a0 + 0x20);
*(Struct16 *)(arg0 + 0x38) = *(Struct16 *)(v0 + 0x34);
*(Struct16 *)(arg0 + 0x48) = *(Struct16 *)(v0 + 0x44);
func_800CAF84(arg0);
} else {
*(u16 *)(arg0 + 0x2) += 1;
}
}
INCLUDE_ASM("asm/md_MAIN_016/nonmatchings/md_MAIN_016", func_800CB228);
+37 -1
View File
@@ -3422,7 +3422,43 @@ ret0:
}
INCLUDE_ASM("asm/ov_SC01_009/nonmatchings/ov_SC01_009_jr_8017E590", func_8017F2A0);
extern void func_8012AD80(s32 a0);
extern void func_8012B1B4(s32 a0, s32 a1);
extern void func_8012B200(u8 *a0);
extern void func_8012B2CC(s32 a0);
s32 func_8017F2A0(a0)
s32 a0;
{
s32 cmd;
s32 v;
cmd = *(s32 *)(a0 + 0xCC);
if (cmd == 0) {
return 0;
}
if (*(s32 *)(a0 + 0x1C) == 0) {
v = *(s16 *)cmd;
cmd += 2;
if (v == 0) {
func_8012B200((u8 *)a0);
*(s32 *)(a0 + 0xCC) = 0;
return 0;
}
*(s32 *)(a0 + 0x1C) = v;
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) = *(u16 *)cmd;
cmd += 2;
*(u16 *)(a0 + 0xE6) = *(u16 *)cmd;
cmd += 2;
func_8012B2CC(a0);
*(s32 *)(a0 + 0xCC) = cmd;
}
*(s32 *)(a0 + 0x1C) -= 1;
func_8012B1B4(a0, a0 + 0xDC);
func_8012AD80(a0);
return 1;
}
extern void (*D_801E9A18[])(void);
+23 -1
View File
@@ -6173,7 +6173,29 @@ void func_801817CC(s32 *a0) {
INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_80181854);
INCLUDE_ASM("asm/ov_SC01_080/nonmatchings/ov_SC01_080_jr_8017AE2C", func_80181918);
extern s32 rand(void);
extern u16 D_80126B6A;
extern u16 D_80126B72;
extern u16 D_80126B5E;
extern u16 D_80126B62;
extern u16 D_80126B66;
void func_80181918(s32 arg0) {
s32 pad[12];
u16 t;
register u16 cnt __asm__("$6");
t = rand();
*(u16 *)(arg0 + 6) = D_80126B5E + D_80126B6A * 32 + (t & 0x1FF) - 0xFF;
*(u16 *)(arg0 + 0xA) = D_80126B62 - 0x120;
cnt = *(u16 *)(arg0 + 2);
*(u16 *)(arg0 + 0xE) = D_80126B66 + D_80126B72 * 32 + (t >> 7) - 0xFF;
*(s32 *)(arg0 + 0x14) += 0x50000;
*(u16 *)(arg0 + 2) = cnt + 1;
*(s32 *)(arg0 + 0x1C) = 0x60;
*(s32 *)(arg0 + 0x30) = 0x88;
}
extern void func_800D20C0(void *a0, void *a1, s32 a2);
extern void func_800D23D0(void *a0);
+40 -1
View File
@@ -4100,7 +4100,46 @@ void func_801829D8(int a, s16 *b, SVECTOR_8017E6D8 *c, SVECTOR_8017E6D8 *d,
INCLUDE_ASM("asm/ov_SC02_016/nonmatchings/ov_SC02_016_jr_801810C8", func_80182D54);
extern void func_8012A418(void);
extern void func_8012A598(void);
extern void func_8012A018(s32 a, s32 b);
extern void func_80182E34(void *a0);
extern s32 D_80126954;
extern s32 D_8012695C;
extern Blk8 D_80126968;
extern s16 D_80126976;
extern s16 D_80126978;
extern s16 D_8012697A;
extern s32 D_801269E4;
void func_80182D54(void *a0)
{
u8 *s1;
u8 *s0;
s1 = (u8 *)a0;
s0 = *(u8 **)(s1 + 0xDC);
func_8012A418();
func_8012A598();
D_80126954 = *(s32 *)(s0 + 0);
D_8012695C = *(s32 *)(s0 + 4);
D_80126968 = *(Blk8 *)(s0 + 8);
D_80126976 = *(s16 *)(s0 + 0x10);
D_80126978 = *(s16 *)(s0 + 0x12);
D_8012697A = *(s16 *)(s0 + 0x14);
func_8012A018((s32)func_80182E34, 0);
D_801269E4 = *(s32 *)(s1 + 0xDC);
}
extern void func_8012A4BC(void);
void func_80182E14(void) {
+28 -1
View File
@@ -3423,7 +3423,34 @@ void func_80186A7C(void) {
void func_80186A84(void) {
}
INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8018631C", func_80186A8C);
void func_80186A8C(void *arg0) {
extern s32 D_80192A6C;
extern s32 D_80192A64;
extern s32 D_801C3C90;
extern s32 D_801EB318;
extern void func_80186C54(void);
if (func_8018727C(arg0, &D_80192A6C) != 0) {
s32 v0;
s32 v1 = func_80029504();
if (v1 < 0x1E) {
v0 = 1;
} else if (v1 < 0x46) {
v0 = 4;
} else {
func_8012CAE4(arg0);
return;
}
*(s16 *)((char *)arg0 + 2) = v0;
__asm__ __volatile__("" ::: "memory");
func_8012E8E0((s32)arg0, (s32)&D_80192A64);
func_80187750((s32)arg0);
func_8012A828((s32)arg0, (s32)&D_801C3C90);
func_8001C97C(&D_801EB318);
*(s16 *)(*(s32 *)((char *)arg0 + 0x68) + 0xC) = 0x7FFF;
*(s32 *)((char *)arg0 + 0xD4) = func_801788B8((s32)arg0, (s32)func_80186C54);
}
}
extern void func_8012C218(void *a0);
+42 -1
View File
@@ -3687,7 +3687,48 @@ void func_80181598(void *a0)
}
INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017FF7C", func_80181600);
#include "common.h"
extern u8 func_8014BF6C(void);
extern void func_8012B23C(s32 a0);
extern void func_8002D4C8(s32 a0, s32 a1);
extern void func_8012BF4C(s32 *a0, s32 a1);
extern s32 func_8012AD50(void *a0);
extern void func_80181708(void *a0);
extern void func_801817D8(u8 *a0, u8 *a1);
extern u16 D_800B99DA;
/* Packed struct to trigger lwl/lwr unaligned block copy (same idiom as the
* banked twin ov_SC02_011:func_8018754C's BlockData). */
typedef struct {
u32 w0;
u32 w1;
} __attribute__((packed, aligned(1))) Block8_80181600;
extern Block8_80181600 D_801D80B0;
void func_80181600(void *a0)
{
u8 result;
Block8_80181600 buffer;
buffer = D_801D80B0;
result = func_8014BF6C();
if (!(*(s16 *)((u8 *)a0 + 0x70) < (result & 0xFF))) {
func_8012B23C((s32)a0);
func_8002D4C8(0x580, 0);
func_8012BF4C((s32 *)a0, 0x10);
func_8012AD50(a0);
} else {
func_80181708(a0);
if ((D_800B99DA & 0x3) == 0) {
func_801817D8((u8 *)a0, (u8 *)&buffer);
}
}
}
extern void func_8012AD80(s32 a0);
extern s32 func_8012BEE8(s32 a0);
+31 -1
View File
@@ -2891,7 +2891,37 @@ void func_8018268C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80182268", func_801826C8);
#include "common.h"
extern u16 func_80148800(s32 *a0);
extern void func_80182B48(s32 param_1, s16 *param_2);
void func_801826C8(s32 a0) {
typedef struct { s16 v[4]; } Blk8_80126940_8017D6D0_801826C8;
extern s32 D_80126B58;
extern s16 D_80190710[];
extern Blk8_80126940_8017D6D0_801826C8 D_80126940;
Blk8_80126940_8017D6D0_801826C8 sp10;
u8 t;
if (func_80148800(&D_80126B58) & 3) {
t = (*(u8 *)(a0 + 5) + 1) & 1;
*(u8 *)(a0 + 5) = t;
*(s32 *)(a0 + 0x14) = D_80190710[t];
}
sp10 = D_80126940;
sp10.v[0] = 0x340;
{
s16 lim = -0x740;
if (sp10.v[2] < lim) {
sp10.v[2] = lim;
}
}
func_80182B48(a0, sp10.v);
}
INCLUDE_ASM("asm/ov_SC03_091/nonmatchings/ov_SC03_091_jr_80182268", func_80182788);
+35 -1
View File
@@ -4789,7 +4789,41 @@ void func_8017DE74(void) {
}
INCLUDE_ASM("asm/ov_SC03_092/nonmatchings/ov_SC03_092_jr_8017AE2C", func_8017DF40);
#include "common.h"
extern void func_8012A018(s32 a0, s32 a1);
extern void func_8017E008(void *a0);
extern Blk8 D_80126940;
extern Blk8 D_801274E8;
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 u8 D_80127504;
void func_8017DF40(void) {
D_80126954 = 0x190;
D_8012695C = 0x258;
D_80126968 = 0x9F;
D_8012696A = 0x600;
D_8012696C = 0;
D_80126976 = 0;
D_80126978 = -0x50;
D_8012697A = 0;
func_8012A018((s32)func_8017E008, 0);
D_801274E8 = D_80126940;
func_8017E008(D_80126948);
D_80127504 = 0x30;
}
extern void (*D_801889B4[])(void);
+33 -1
View File
@@ -5106,7 +5106,39 @@ void func_80180814(int param_1)
}
INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8017CA80", func_80180864);
extern void func_80181E3C(void);
extern void func_80181F00(s32 arg0, s32 arg1, s32 arg2);
extern void func_8012B2CC(s32 a0);
extern void func_80181F30(s32 a0);
extern s32 func_80178B18(s32, s32);
extern void func_8012AD44(s32 *a0, s16 a1);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_80180864(void *arg0) {
extern Blk4_80181EDC_80180400 D_8019C978;
extern u8 D_8019DCF8;
extern s32 D_8019A9B8;
Rec_8018A6A4_80181E60 sp10;
*(u8 *)((s32)arg0 + 0xC1) = 0;
*(s16 *)((s32)arg0 + 0x5E) = 0;
*(s16 *)((s32)arg0 + 0x5C) = 0x800;
*(Blk4_80181EDC_80180400 *)&D_8019DCF8 = *(Blk4_80181EDC_80180400 *)&D_8019C978;
func_80181E3C();
func_80181F00((s32)&sp10, 0x1000, 0);
func_8012B2CC((s32)arg0);
func_80181F30((s32)arg0 + 0x4);
*(s16 *)((s32)arg0 + 0xFC) = 0;
*(s32 *)((s32)arg0 + 0x1C) = 0x40;
func_80178B18((s32)arg0, (s32)&D_8019A9B8);
func_8012AD44((s32 *)arg0, 2);
func_8002D4C8(0x700, 0);
}
extern void func_8012B2CC(s32 a0);
extern void func_80181F30(s32 a0);
+26 -1
View File
@@ -4469,7 +4469,32 @@ void func_80181500(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8017BEBC", func_8018153C);
void func_8018153C(void *a0)
{
extern s32 func_8012C194(void);
extern void func_8001CEC0(s32 a0, s32 a1);
extern void func_80015978(s32 a0, s32 *a1);
extern void func_801815D4(void *a0);
extern s32 func_8012AD50(void *a0);
extern s32 D_80189CB8[];
s32 v2;
s32 s0;
v2 = D_80189CB8[*(s16 *)((u8 *)a0 + 0x70)];
s0 = func_8012C194();
if (s0 != 0) {
*(s32 *)((u8 *)a0 + 0x20) = s0;
func_8001CEC0(s0, v2);
*(s16 *)(s0 + 0x2E) = 0;
*(s16 *)(s0 + 0x30) = 0;
*(s16 *)(s0 + 0x2C) = 1;
func_80015978((s32)((u8 *)a0 + 4), (s32 *)((u8 *)a0 + 0xFC));
func_801815D4(a0);
func_8012AD50(a0);
}
}
INCLUDE_ASM("asm/ov_SC03_102/nonmatchings/ov_SC03_102_jr_8017BEBC", func_801815D4);
+28 -1
View File
@@ -4011,7 +4011,34 @@ void func_8017E80C(void *a0) {
}
INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8017C294", func_8017E830);
extern void func_8017E8F4(void *a0, s32 a1);
extern void func_800183E0(s32 a0);
extern u8 D_80199260[];
extern s32 D_8018806C[];
void func_8017E830(void *a0)
{
s16 v0;
v0 = *(u16 *)((char *)a0 + 0xDC);
v0--;
*(u16 *)((char *)a0 + 0xDC) = v0;
if (v0 == 0) {
*(u16 *)((char *)a0 + 0xDC) = 2;
func_8017E8F4(D_80199260, *(s16 *)((char *)a0 + 0xDE) * 6);
*(u16 *)((char *)a0 + 0xDE) = (*(u16 *)((char *)a0 + 0xDE) + 1) & 7;
}
v0 = *(u16 *)((char *)a0 + 0xE0);
v0--;
*(u16 *)((char *)a0 + 0xE0) = v0;
if (v0 == 0) {
*(u16 *)((char *)a0 + 0xE0) = 8;
func_800183E0(D_8018806C[*(s16 *)((char *)a0 + 0xE2)]);
*(u16 *)((char *)a0 + 0xE2) = (*(u16 *)((char *)a0 + 0xE2) + 1) & 0xF;
}
}
void func_8017E8F4(void *a0, s32 a1)
+27 -1
View File
@@ -5030,7 +5030,33 @@ s32 func_8018388C(void *a0, s32 a1) {
}
INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_8017C8D0", func_801839A4);
extern void func_8012F14C(s32 a0, s32 a1, s32 a2);
extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3);
extern void func_8012F568(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5);
extern s32 *D_80126B78;
extern s32 D_8018E8AC;
extern u8 D_801152A8[];
s32 func_801839A4(s32 param_1, s32 param_2)
{
SVECTOR out1;
SVECTOR out2;
s32 iVar1;
func_8012F14C((s32)D_80126B78 + 0x34, (s32)&D_8018E8AC, (s32)&out1);
func_8012F14C((s32)D_80126B78 + 0x34, (s32)&D_8018E8AC + 8, (s32)&out2);
iVar1 = func_80135888(*(s32 *)(param_1 + 0x20), *(s32 *)(param_1 + 0x58),
(s32)&out1, (s32)&out2);
if (iVar1 != 0) {
func_8012F568(1, 0x4201, *(s16 *)(*(s32 *)(param_1 + 0x20) + 0x12),
param_2, (s32)&out2, (s32)D_801152A8);
return 1;
}
return 0;
}
s32 func_80183A64(s32 *a0, s32 a1, s32 a2) {
s32 v1 = a0[0x4 / 4];
+28 -1
View File
@@ -4400,7 +4400,34 @@ void func_8018A250(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_80188544", func_8018A3C8);
extern s16 D_80126B62;
extern s32 D_801DE434;
extern s32 D_801DE444;
extern void (*D_801DE4DC[])(s32);
void func_8018A3C8(s32 arg0) {
register s32 v0 __asm__("$2");
register s32 v1 __asm__("$3");
if (*(s16 *)(arg0 + 0xFC) != 0) {
*(s16 *)(arg0 + 0xFC) -= 1;
*(s32 *)(*(s32 *)(arg0 + 0x20) + 4) ^= 0x80000000;
}
v0 = *(s16 *)(arg0 + 0xA) - 0x30;
v1 = D_80126B62 < v0;
v0 = (s32)&D_801DE434;
if (v1) {
v0 = (s32)&D_801DE444;
}
v1 = 0x40000000;
v0 |= v1;
v1 = 0x20000000;
v0 |= v1;
*(s32 *)(arg0 + 0x58) = v0;
__asm__ __volatile__("" ::: "memory");
D_801DE4DC[*(u16 *)(arg0 + 0x2)](arg0);
}
extern void func_8012E8E0(s32 a0, s32 a1);
+29 -1
View File
@@ -4143,7 +4143,35 @@ void func_8017D77C(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC04_008/nonmatchings/ov_SC04_008_jr_8017AE2C", func_8017D8C4);
void func_8017D8C4(s32 a0) {
extern u8 D_80126B5C;
extern s32 D_80193340;
extern s8 D_80191EF0;
s16 buf[4];
s32 i;
s32 id;
u8 *obj;
id = -1;
func_80015978((s32)&D_80126B5C, (s32 *)buf);
buf[1] = *(u16 *)(a0 + 0xA);
for (i = 0; i < D_80193340 && id == -1; i++) {
if (*(u8 *)(&D_80191EF0 + i) == 0) {
id = i;
}
}
if (id != -1) {
obj = func_801290DC(0x61, (u8 *)buf);
if (obj != 0) {
*(&D_80191EF0 + id) = 1;
*(s32 *)(obj + 0x34) = id;
}
}
}
extern void (*D_80182564[])(void);
+36 -1
View File
@@ -4270,7 +4270,42 @@ void func_8017D99C(s32 a0) {
}
INCLUDE_ASM("asm/ov_SC04_012/nonmatchings/ov_SC04_012_jr_8017AE2C", func_8017DAE4);
extern void func_80015978(s32 a0, s32 *a1);
extern u8 *func_801290DC(s32 a0, u8 *a1);
void func_8017DAE4(s32 a0) {
extern u8 D_80126B5C;
extern s32 D_801930C0;
extern s8 D_80191C70;
s16 buf[4];
s32 i;
s32 j;
s32 slot;
u8 *obj;
slot = -1;
func_80015978((s32)&D_80126B5C, (s32 *)buf);
buf[1] = *(u16 *)(a0 + 0xA);
for (j = 0, i = 0; j < D_801930C0; j++, i++) {
if (slot != -1) {
break;
}
if (*((u8 *)&D_80191C70 + i) == 0) {
slot = i;
}
}
if (slot != -1) {
obj = func_801290DC(0x61, (u8 *)buf);
if (obj != 0) {
*(&D_80191C70 + slot) = 1;
*(s32 *)(obj + 0x34) = slot;
}
}
}
extern void (*D_801822B8[])(void);
+42 -2
View File
@@ -6050,7 +6050,7 @@ DEFINE_func_80180190() /* dedup: shared engine-core @0x80180190 (src/shared) */
extern s32 func_80029504(void);
extern s32 func_801788B8(s32 arg0, s32 arg1);
extern s32 func_80180284(void);
extern s32 func_80180284();
extern short D_8019181C;
extern void func_8001C214(s32, s32);
extern void func_8012C1B8(void);
@@ -6084,7 +6084,47 @@ void *arg0;
}
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80180284);
extern s32 func_800133E4(s16 *a0, s16 *a1);
extern s32 func_80178BF8();
extern void func_80172710(void);
extern s32 D_80126B58;
extern s32 D_80126B9C;
extern u16 D_80126B5E;
extern u16 D_80126B66;
s32 func_80180284(void *a0)
{
extern s16 D_8019181C;
s16 *p;
s32 r;
if (*(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0x2) != 1) {
return 0;
}
p = (s16 *)&D_80126B58;
if ((D_80126B9C & 0x8000000) == 0) {
r = 0;
goto chain_fail;
}
p += 2;
if (func_800133E4((s16 *)&D_8019181C, p) >= 0x6401) {
r = 0;
goto chain_fail;
}
if (*(s16 *)&D_80126B5E >= 0x281) {
r = 0;
goto chain_fail;
}
r = *(s16 *)&D_80126B66 >= -0x380;
chain_fail:
if (r) {
*(u16 *)(*(s32 *)((s32)a0 + 0x64) + 0x2) = 2;
func_80178BF8();
return (s32)func_80172710;
}
return 0;
}
#include "common.h"
+36 -1
View File
@@ -4771,7 +4771,42 @@ void func_8017EEBC(void *a0)
}
INCLUDE_ASM("asm/ov_SC05_004/nonmatchings/ov_SC05_004_jr_8017BEBC", func_8017EF0C);
extern void func_8017EBA0(void *a0);
extern void func_8002D4C8(s32 a0, s32 a1);
void func_8017EF0C(s32 a0)
{
register s32 v0 __asm__("$2");
register s32 v1 __asm__("$3");
s32 pad;
if (func_8012BEE8() != 0) {
*(u16 *)(a0 + 0xFC) = *(u16 *)(a0 + 0xFC) + 4;
if ((s16)*(u16 *)(a0 + 0xFC) >= 0x11) {
func_8017EBA0((void *)a0);
}
} else {
v0 = *(s16 *)(a0 + 0xFC);
if (v0 != 0) {
v1 = v0;
__asm__ volatile("" : "=r"(v0) : "0"(v0), "m"(pad));
if (v0 < 3) {
v0 = *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12);
v0 = (v0 + 2) & 0x3FF;
if (v0 < 4) {
*(s16 *)(a0 + 0xFC) = 0;
}
} else {
v0 = v1 - 2;
*(s16 *)(a0 + 0xFC) = v0;
}
}
if (*(s32 *)(a0 + 0x1C) == 1) {
func_8002D4C8(0x720, 0);
}
}
}
void func_8017EFD4(s32 *a0) {
+48 -1
View File
@@ -5718,7 +5718,54 @@ void func_80181290(void *a0)
}
INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8017C8D0", func_801813B0);
extern void *D_801937DC;
extern s16 D_8019FD70[];
extern s32 D_8019FEF8;
extern u8 D_8019FB68[];
typedef struct { u8 c[8]; } Blk8_801813B0;
void func_801813B0(s32 param_1) {
u8 *dst;
u8 *src;
s16 *idx;
s32 i;
s32 v;
dst = D_8019FB68;
D_8019FEF8 = 0;
src = *(u8 **)((u8 *)D_801937DC + 0xC);
idx = D_8019FD70;
for (i = 0; i < 65; i++) {
*(Blk8_801813B0 *)(dst + i * 8) = *(Blk8_801813B0 *)(src + i * 8);
v = *(s16 *)((u8 *)src + i * 8 + 2);
__asm__("" : "=r"(v) : "0"(v));
__asm__("" : "=r"(v) : "0"(v));
__asm__("" : "=r"(v) : "0"(v));
__asm__("" : "=r"(v) : "0"(v));
__asm__("" : "=r"(v) : "0"(v));
__asm__("" : "=r"(v) : "0"(v));
__asm__("" : "=r"(v) : "0"(v));
__asm__("" : "=r"(v) : "0"(v));
__asm__("" : "=r"(v) : "0"(v));
__asm__("" : "=r"(v) : "0"(v));
__asm__("" : "=r"(v) : "0"(v));
__asm__("" : "=r"(v) : "0"(v));
if (v == -150) {
idx[i] = 4;
} else if (v == -139) {
idx[i] = 3;
} else if (v == -106) {
idx[i] = 2;
} else if (v == -57) {
idx[i] = 1;
} else {
idx[i] = 0;
}
}
}
#include "common.h"
+34 -1
View File
@@ -3862,7 +3862,40 @@ s32 func_80180808() {
}
INCLUDE_ASM("asm/ov_SC06_025/nonmatchings/ov_SC06_025_jr_8017EEC4", func_801808AC);
void func_801808AC(void *arg0)
{
/* Declarations kept BLOCK-scope on purpose, matching this TU's house style
* (see the comment above func_80180300 in the same file): a file-scope
* prototype for func_8012A828 here would become visible to func_80181C74,
* which deliberately calls `func_8012A828()` with no arguments behind a
* no-prototype decl -- a file-scope prototype turns that into a hard
* "too few arguments" error and fails the whole-binary gate even though
* this function's own body is byte-identical. */
extern void func_8012E8E0(s32 a0, s32 a1);
extern void func_8012A828(s32 a0, void *a1);
extern s32 func_80137614(s32 a0, s32 a1, s32 a2);
extern void func_80029124(s32 a0, s32 a1);
extern void func_801746A4(void);
extern u8 D_801889F8[];
extern u8 D_801A1FDC[];
extern void (*D_80189BE4[])(void);
extern s32 D_801270C8;
extern s32 D_801B1B54;
extern s16 D_801B1714;
*(u16 *)((s32)arg0 + 2) = 5;
*(u16 *)((s32)arg0 + 0x34) = 0;
func_8012E8E0((s32)arg0, (s32)&D_801889F8);
func_8012A828((s32)arg0, &D_801A1FDC);
*(s32 *)((s32)arg0 + 0x1C) = 0;
D_801270C8 = 2;
D_801B1B54 = func_80137614((s32)D_80189BE4, 0, 0xC0);
func_80029124(0x120, 0);
func_801746A4();
D_801B1714++;
}
void func_80180950(void *arg0) {
+29 -1
View File
@@ -4930,7 +4930,35 @@ void func_80180090(s32 a0)
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80180248);
INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_801804D4);
typedef struct { u16 w[4]; } __attribute__((aligned(2))) DBlock_8019F04C;
extern s16 D_8019F048;
extern s16 D_8019F04A;
extern s16 D_8019F04C;
extern s16 D_8019F054;
extern s16 D_8019F056;
extern s16 D_8019F058;
extern s32 D_8019F03C;
extern s32 D_8019F05C;
extern s32 *D_8019F040;
extern s32 D_8018A31C[];
extern s32 func_8018059C(s32 arg0);
void func_801804D4(void *a0, s32 a1) {
D_8019F048 = *(s32 *)((s32)a0 + 8);
D_8019F04A = *(s32 *)((s32)a0 + 0x10);
*(DBlock_8019F04C *)(void *)&D_8019F04C = *(DBlock_8019F04C *)(void *)((s32)a0 + 0x18);
D_8019F054 = *(u16 *)((s32)a0 + 0x28);
D_8019F056 = *(u16 *)((s32)a0 + 0x2A);
D_8019F03C = 0;
D_8019F05C = 0;
D_8019F058 = *(u16 *)((s32)a0 + 0x2C);
D_8019F040 = (s32 *)((u8 *)D_8018A31C + a1 * 0x18);
if (*D_8019F040 == 1) {
func_8018059C((s32)a0);
}
}
extern s32 *D_8019F040;
extern s32 D_8019F03C;