diff --git a/config/splat.ov_SC06_022.yaml b/config/splat.ov_SC06_022.yaml index 4c933d0a29..927daa5101 100644 --- a/config/splat.ov_SC06_022.yaml +++ b/config/splat.ov_SC06_022.yaml @@ -173,7 +173,7 @@ segments: - [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, tail20] + - [0xb8b00, 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 diff --git a/config/splat.ov_SC06_030.yaml b/config/splat.ov_SC06_030.yaml index bc4bd5372b..e7c6378b45 100644 --- a/config/splat.ov_SC06_030.yaml +++ b/config/splat.ov_SC06_030.yaml @@ -121,6 +121,7 @@ segments: - [0x52354, c, ov_SC06_030_jr_8017A4AC] - [0x52cd4, c, ov_SC06_030_jr_8017AE2C] - [0x54778, c, ov_SC06_030_jr_8017C8D0] + - [0x57504, c, ov_SC06_030_jr_8017F65C] - [0x59cb4, data, tail] - [0x8f6ac, .rodata, ov_SC06_030] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) - [0x8f788, .rodata, ov_SC06_030_jr_8012ACE0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py) diff --git a/src/ov_SC02_021/ov_SC02_021_jr_8017C294.c b/src/ov_SC02_021/ov_SC02_021_jr_8017C294.c index 6eeb741f4d..e369538f66 100644 --- a/src/ov_SC02_021/ov_SC02_021_jr_8017C294.c +++ b/src/ov_SC02_021/ov_SC02_021_jr_8017C294.c @@ -3730,84 +3730,7 @@ void func_8017E940(s32 a0) { INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017C294", func_8017EA5C); -extern s32 func_80029178(s32); -extern s32 func_80029504(void); -extern s32 func_8012BD14(s32); -extern void func_8012C218(s32); -extern void func_8017ECFC(s16*); - -extern s32 D_80126B58; -extern s16 D_80126B5E; -extern s16 D_80126B62; -extern s16 D_80126B66; -extern s32 D_80126B9C; - -void func_8017EB00(s32 arg0) { - s32 ret; - s32 ret2; - s32 var; - s16* p; - p = (s16*) &D_80126B58; - ret = func_80029504(); - if (ret < 240) { - var = 0; - } else if (ret < 250) { - var = 1; - } else if (ret < 260) { - var = 2; - } else { - if (ret < 270) { - var = 3; - } else if (ret < 280) { - var = 4; - } else { - var = 5; - } - } - switch (var) { - case 0: - break; - case 1: - case 2: - if (D_80126B5E >= -31) { - D_80126B5E = -32; - } - if (D_80126B66 < 727) { - D_80126B66 = 727; - } - if (((D_80126B9C & 0x8000000) && D_80126B62 < -1343) == 0) { - return; - } - if (p[3] >= -159) { - func_8017ECFC((s16*) arg0); - } - break; - case 3: - case 4: - ret2 = func_8012BD14(arg0); - if (ret2 <= 147455) { - if (D_80126B5E < -160) { - D_80126B5E = -160; - } - if (D_80126B66 < 727) { - D_80126B66 = 727; - } - } - if (((D_80126B9C & 0x8000000) && D_80126B62 < -1343) == 0) { - return; - } - if (p[3] < -32) { - func_8017ECFC((s16*) arg0); - } - break; - case 5: - if ((func_80029178(250) & 0xFF) == 0) { - func_8012C218(arg0); - } - break; - } -} - +INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017C294", func_8017EB00); INCLUDE_ASM("asm/ov_SC02_021/nonmatchings/ov_SC02_021_jr_8017C294", func_8017ECFC); diff --git a/src/ov_SC03_001/.cdecl_func_801845B8.c b/src/ov_SC03_001/.cdecl_func_801845B8.c deleted file mode 100644 index 01e0b4e55b..0000000000 --- a/src/ov_SC03_001/.cdecl_func_801845B8.c +++ /dev/null @@ -1,9240 +0,0 @@ -#include "common.h" -#include "../shared/engine_core.h" - - -/* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== - * The file-scope decl environment from earlier code regions of this object — - * file-local types, col-0 decls, DEFINE_func macro externs, and each earlier - * definition's implied prototype (types first, then decls in original order). - * Decls emit no code => byte-neutral. See cookbook §8c. */ - /* 12-byte sub-table record (stride 0xC) */ - /* 0x20 bytes */ - /* 4 + 16*12 = 0xC4 stride */ - /* 0x08 */ - /* 0x20 */ -typedef struct { - SVECTOR_8016E7C8 v[4]; /* 0x00 */ - s32 f0, f1, f2, f3, f4, f5; /* 0x20..0x37 */ - u8 f6; /* 0x38 */ - u8 pad[7]; /* -> 0x40 */ -} Prim_8016E7C8; -typedef void (*Handler)(struct Entry_8016E95C *); -extern void func_801458E0(void); -extern s32 D_800AE6AC; -extern s32 D_800AE6B0; -extern u8 D_80078E50; -extern void func_800D185C(u8 *a0); -extern void func_801458E8(void); -extern s32 func_80029504(void); -extern void func_80145B24(void); -extern u8 D_8018FA44; -extern u8 D_8018F9B4; -extern u8 D_8018F990; -extern u8 D_8018F96C; -extern u8 D_8018FA20; -extern u8 D_8018F9FC; -extern u8 D_8018F9D8; -extern u8 D_8018F948; -extern void func_80145934(void); -extern u8 D_8018FAD4; -extern u8 D_8018FAB0; -extern u8 D_8018FA8C; -extern u8 D_8018FA68; -extern void func_80145A2C(void); -extern s32 func_800291DC(s32); -extern void func_800291C8(s32, s32); -extern void func_80162120(void); -extern void func_80029124(s32, s32); -extern s32 func_80165A50(s32); -extern void func_80029514(s32); -extern u8 D_800AF630[]; -extern u8 D_80078EC0; -extern s32 func_80028FBC(void); -extern s32 func_80029000(void); -extern s32 func_80028D9C(void); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80145BF8(void); -extern s32 func_800291B4(s32 arg); -extern void func_800291A0(s32, s32); -extern void func_80145C54(void); -extern s32 func_80145CEC(); -extern s32 func_80029178(s32 arg); -extern void func_80146014(s32 a0); -extern unsigned char D_8018EECC[]; -extern unsigned char D_8018EEFC[]; -extern unsigned char D_8018EF4C[]; -extern unsigned char D_8018EF7C[]; -extern unsigned char D_8018EFAC[]; -extern void func_80145EE8(s32 param_1); -extern void MoveImage(void *a0, s32 a1, s32 a2); -extern void func_80146074(void); -extern s32 func_80146128(void); -extern void func_80146360(void); -extern void func_801463A0(); -extern void func_8014607C(void); -extern s32 *D_80126B78; -extern u8 D_80078EC1; -extern s32 D_80078EC8; -extern s32 D_80126B9C; -extern s32 D_8011F730; -extern u16 D_801152B8; -extern u16 D_8012693A; -extern u8 D_80126BE0[]; -extern u8 D_801150F0[]; -extern void *memcpy(void *dst, const void *src, u32 n); -extern void func_80146FC4(s32 a0); -extern void func_80150A70(s32 a0); -extern void func_80147098(s32 *a0); -extern void func_8014A638(s32 arg0); -extern s32 func_80155458(s32 a0); -extern s32 func_80029104(void); -extern void func_80029344(void); -extern void func_8014ADE0(s32 a0); -extern void func_8014B350(s32 a0); -extern void func_8014B7A4(s16 *param_1); -extern s32 func_80161D58(s32 a0); -extern void func_80161A90(s32 a0); -extern void func_8014B504(u16 *a0); -extern void func_80149BEC(s32 a0); -extern void func_8014B5D0(s32 *a0); -extern void func_8014C99C(u8 *a0); -extern void func_8014B190(s32 s0); -extern void func_80148648(s32 a0, s32 a1); -extern s32 func_80149228(s32 a0); -extern void func_8014A59C(s32 a0); -extern void func_8016F14C(void *a0); -extern void func_80154418(void *a0); -extern void func_80154BE4(s32 a0); -extern void func_80165694(s32 arg0); -extern void func_801654A8(s32 a0); -extern void func_8014A680(s32 a0); -extern void func_8014A6A8(s32 a0); -extern void func_8014A71C(s32 a0); -extern void func_80172588(s32 *a0); -extern void func_801473DC(s32 *a0); -extern void func_80015978(s32 a0, s32 *a1); -extern void (*D_8018EFFC[])(void *); -extern u8 D_80126BA4; -extern s32 D_80127098; -extern s32 D_80127094; -extern s32 D_80127090; -extern void func_80146534(void); -extern void func_8001D074(s32 a0, s32 a1); -extern void func_80146554(void); -extern void func_80146578(void); -extern void func_8001CFDC(s32, s32); -extern void func_8014659C(void); -extern void func_8001D074(s32, s32); -extern void func_801465C0(void); -extern void func_801465E4(void); -extern void func_801466F0(s32 a0, s32 a1, s32 a2, s32 a3, s32 sp5, s32 sp6, s32 sp7, s32 sp8); -extern s32 D_8011F9D0; -extern s32 func_80146608(s32 a0, s32 a1, s32 a2, s32 a3, s16 arg9, s32 arg10, s32 arg11, s32 arg12, s32 arg13); -extern void func_801466B4(u16 a0, s32 a1, s32 a2, s32 a3, s32 arg5); -extern s32 D_8011F750; -extern s32 D_8011F754; -extern u8 * func_801468C8(s32 arg0, u8 arg1); -extern s32 D_8011D030; -extern s32 func_80146994(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_80146924(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg5); -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern s32 func_80146994(s32 arg0, s32 arg1, s32 arg2, s32 arg3); -extern s32 func_801469C8(int a0, void *a1, int a2, int a3, u16 arg5, int arg6, int arg7, int arg8); -extern s32 func_80146B9C(void *a0); -extern void func_80146AB4(s16 a0, s32 a1, s16 a2, s16 a3, u16 a4, s32 a5, s32 a6); -extern u16 D_8011DA28; -extern s32 func_80146B9C(void * arg0); -extern void func_80146C98(s32 *a0, s16 a1); -extern void func_80146CA0(void *a0); -extern void func_80146CB4(void *a0); -extern void func_80146CC8(s32 a0); -extern void func_80146D30(s32 a0); -extern void func_80146D80(s32 *a0); -extern void func_80146DE8(s32 *a0, s32 a1, s32 a2, s32 a3); -extern void func_80146D90(s32 a0); -extern void func_80146DB8(s32 *a0, s32 *a1); -extern void func_80146DF8(s32 *a0, s32 a1, s32 a2, s32 a3, s32 t0); -extern void func_80146E90(s32 *a0, s32 a1); -extern s32 func_80146E98(s32 a0); -extern void func_80015954(s32 a0, s32 a1); -extern void func_80149374(s32 a0, s32 a1); -extern void func_80146F58(s32 a0, s32 a1); -extern void func_80146EC0(s32 a0, s32 a1, s32 a2, s32 a3); -extern s16 func_8012A68C(void); -extern s16 func_8012A758(void); -extern void func_8004978C(s16 *a0, void *a1); -extern void ApplyMatrixSV(void *a0, void *a1, void *a2); -extern u8 D_80126DB0[]; -extern u16 D_80126DB6; -extern void func_8014704C(s32 *a0); -extern s32 func_80147054(void *a0); -extern void func_80147060(u8 * a0); -extern void func_8014706C(void *arg0); -extern void func_80147078(s32 *a0, s16 a1); -extern void func_80147084(s32 *a0); -extern void func_8014708C(void *arg0); -extern s32 func_801470A0(void *a0); -extern void func_801470AC(s32 *a0); -extern void func_801470B4(s32 arg0); -extern void func_801470C0(s32 a0); -extern void func_80147118(s32 a0); -extern s16 D_80126BB8; -extern s16 D_80126BBA; -extern s16 D_80126BBC; -extern void func_80147264(s32 a0); -extern void func_80147290(void); -extern void func_801472B4(void *a0); -extern s32 func_801472C8(struct S *a0); -extern void *D_8012707C; -extern void func_801472DC(void); -extern void func_801472F0(void *a0); -extern void func_80147364(u16, s32); -extern void func_80147300(u16 arg0); -extern void func_80147324(s32 arg0); -extern void func_801473EC(s32 *a0); -extern void func_80147460(s32 a0); -extern void func_80147514(); -extern void func_80147628(s32 a0); -extern void func_80147478(s32 a0); -extern void func_801474D8(s32 *a0); -extern void func_801474EC(s32 *a0); -extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); -extern s32 func_800129CC(s32 a0, s32 a1); -extern void func_80147514(s32 arg0); -extern void func_80013F3C(s32 a0); -extern void func_80012558(s32 a0, s32 a1); -extern void func_800126C4(s32 a0, s32 a1); -extern void func_800123F0(s32 a0, s32 a1); -extern void func_80147718(s32 a0); -extern void func_80147788(void *a0, s32 a1); -extern void func_801477A8(void *a0, s32 a1); -extern void func_801477C8(void *a0, s32 a1); -extern void func_801477E8(s32 *a0, s32 a1); -extern void func_80147814(s32 a0, s32 a1); -extern void func_80147928(int a0, int a1); -extern void func_8014799C(int a0, int a1); -extern void func_80147A10(int a0, int a1); -extern void func_80147860(int a0, int a1, int a2, int a3); -extern void func_80147948(s32 a0, s32 a1, s32 a2); -extern void func_801479BC(s32 a0, s32 a1, s32 a2); -extern void func_80147A30(s32 a0, s32 a1, s32 a2); -extern void func_801478B8(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147948(int a0, int a1, int a2); -extern void func_801479BC(int a0, int a1, int a2); -extern void func_80147A30(int a0, int a1, int a2); -extern void func_80147AD4(s32 arg0, s32 arg1, s32 arg2, s32 arg3); -extern void func_80147A84(s32 arg0); -extern void func_80147C30(s32 arg0, s32 arg1, s32 arg2, s32 arg3); -extern void func_80147AAC(s32 arg0); -extern void func_80147CC8(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); -extern void func_80147B5C(s32 a0, void *a1); -extern void func_80147AD4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern void func_80147B18(s32 a0); -extern void func_80147B5C(s32 arg0, void *arg1); -extern void func_80147C30(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147DC0(s32 a0, s32 a1); -extern void func_80147D38(s32 a0, s32 a1, s32 a2, s32 a3, void * a4); -extern void func_800484EC(s32 a0, s32 a1, s32 a2); -extern void func_80147E44(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80147F78(s32 arg0, s32 arg1, s32 arg2, s32 arg3); -extern void func_80147F50(s32 arg0); -extern void func_80148038(s32 a0, s32 a1); -extern s32 ratan2(s32 a0, s32 a1); -extern s32 csqrt(s32 a0); -extern s32 func_80012A60(s32 a0, s32 a1); -extern void func_80148094(int param_1, short *param_2, int *param_3); -extern void func_801485B8(s32 a0, s32 a1, s32 a2); -extern void func_801484B0(s32 a0, s32 a1); -extern s32 func_80154358(void *a0); -extern void func_801484E8(s32 a0, s32 a1); -extern void func_80148534(s32 a0, s32 a1); -extern void func_8014856C(s32 a0, s32 a1); -extern void func_801485B8(s32 arg0, s32 arg1, s32 arg2); -extern void func_80148634(void *a0); -extern u8 D_800B9A64; -extern s32 func_80014DC0(); -extern s32 func_80014D68(); -extern s32 func_80014D94(); -extern s32 func_80014CF8(); -extern void func_800120DC(); -extern s32 func_800CF8B4(); -extern u16 func_801487F4(s32 *a0); -extern u16 func_80148800(s32 *a0); -extern u8 func_8014880C(s32 *a0); -extern u16 func_80148818(s32 *a0); -extern s32 func_80047D3C(s32 a0); -extern s32 func_80148824(void *arg0); -extern s32 func_801488A8(u8 *a0); -extern s32 func_8014891C(s32 a0); -extern s32 func_80148980(u8 *a0); -extern s32 func_801489E8(s32 a0); -extern s32 func_80148A48(s32 a0); -extern int func_80148AFC(void *a0); -extern void func_80148AAC(u8 *a0); -extern s32 func_80148C18(void); -extern s32 func_80148C20(s32 a0, s16 a1); -extern s32 func_80148C34(s32 a0, s32 a1); -extern s32 func_80148C4C(s32 a0, s32 a1); -extern s32 func_80148C64(s32 a0, s32 a1); -extern s32 func_80148C7C(void); -extern s32 func_80148C84(s32 a0, s32 a1); -extern s32 func_80148C9C(s32 a0, s32 a1); -extern s32 func_80148CB4(s32 a0, s32 a1); -extern s32 func_80148CCC(s32 a0, s32 a1); -extern s32 func_80148CE4(void); -extern s32 func_80148CEC(void); -extern s32 func_80148CF4(s32 a0, s32 a1); -extern s32 func_80148D0C(s32 a0, s32 a1); -extern s32 func_80148D24(void *a0, int a1); -extern s32 func_80148D3C(void); -extern s32 func_80148F60(void); -extern s32 func_80148F68(s32 a0); -extern s32 func_80148F74(s32 a0); -extern s32 func_80148F80(s32 a0); -extern s32 func_80148F8C(s32 a0); -extern s32 func_80148F98(void); -extern s32 func_80148FA0(s32 a0); -extern s32 func_80148FAC(s32 a0); -extern s32 func_80148FB8(s32 a0); -extern s32 func_80148FC4(s32 a0); -extern s32 func_80148FD0(void); -extern s32 func_80148FD8(void); -extern s32 func_80148FE0(s32 a0); -extern s32 func_80148FEC(s32 a0); -extern s32 func_80148FF8(s32 a0); -extern s32 func_80149004(void); -extern void func_8014900C(s32 *a0); -extern void func_80149020(s32 *a0); -extern void func_80149034(s32 *a0); -extern void func_80149048(s32 *a0); -extern void func_8014905C(u8 *a0); -extern void func_801490E0(s32 *a0, s16 a1); -extern void func_801490E8(s32 *a0, s16 a1); -extern void func_801490F0(s32 *a0, s16 a1); -extern void func_80149078(s32 *a0, s32 a1, s32 a2, s32 a3); -extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); -extern void func_801490F8(s32 a0, s32 a1); -extern s32 func_801491C4(s32 a0); -extern s32 func_80149184(s32 a0); -extern s32 D_801151D4; -extern void func_80149204(s32 *a0); -extern void func_80149210(s32 a0, s32 a1); -extern s32 func_80149284(s32 *a0, s32 a1); -extern void func_80149350(s32 arg0); -extern void func_80149290(s32 a0); -extern void func_8012F14C(s32 a0, s32 a1, s32 a2); -extern void func_80149374(s32 arg0, s32 arg1); -extern void func_801493D0(s32 param_1, s32 param_2, s32 param_3); -extern void func_8012F038(int param_1, short *param_2, short *param_3); -extern void func_8014942C(s32 arg0); -extern void func_8012EF70(s32 a0, s32 a1); -extern void func_80149544(s32 arg0, s32 arg1, s32 arg2); -extern void func_8012EFB8(s32 a0); -extern void func_80149584(s32 arg0, s32 arg1, s32 arg2); -extern void func_8014964C(s32 param_1, s32 param_2); -extern s32 func_801496D4(void *a0); -extern void func_8015AD08(); -extern void func_80149704(void); -extern void func_8015ACC4(); -extern void func_80149724(void); -extern u8 D_80078EBF; -extern s32 func_80149744(struct S_80149744 *a0); -extern void func_8015F7A0(); -extern void func_80149788(void); -extern void func_801653B8(); -extern void func_80149864(void); -extern s16 currentLocationId; -extern s32 func_8016F1AC(void); -extern s32 func_80149884(void); -extern void func_80160B00(); -extern void func_801498C0(void); -extern s32 func_80149AA8(s32 *a0); -extern s32 func_80149B54(s32 *a0); -extern void func_80146750(void *a0); -extern s32 func_801498E0(s32 *a0); -extern void func_8012E5CC(s32 param_1, u16 param_2, u16 param_3); -extern void func_80147364(u16 a0, s32 a1); -extern s32 func_800CCF28(s32 a0); -extern u8 D_80126B5C; -extern s32 func_80149954(s32 s0); -extern s32 func_80149A64(s32 *a0); -extern void func_8015DAC4(s32 *a0); -extern void func_8015554C(s32 *a0); -extern void func_80149AD4(s32 *a0); -extern void func_80149B14(s32 *a0); -extern u8 func_8014BEF8(void); -extern s32 func_80149B54(s32 * arg0); -extern void func_8015DE24(s32 *a0); -extern void func_80157510(s32 *a0); -extern void func_80149BAC(s32 *a0); -extern s32 func_80029178(s32 a0); -extern s32 func_80149C08(s32 arg0); -extern void func_801577C8(); -extern void func_80149C94(void); -extern void func_80157D20(void); -extern void func_80149CB4(void); -extern s32 func_80149CD4(s32 a0); -extern u8 func_8014B5B8(s32 *a0); -extern s32 func_80149D10(s32 a0); -extern s32 func_80149E94(s32 a0); -extern s32 func_80149DD8(s32 a0); -extern s32 func_80149D9C(s32 a0); -extern s32 func_80149F2C(s32 a0, s32 a1); -extern s32 func_80149E94(s32 arg0); -extern void func_80149FA8(void); -extern s32 D_8018F0C4[]; -extern s32 func_80149FB0(s32 a0); -extern s32 func_80135260(s32 arg0, s32 arg1, s16 *arg2, s16 *arg3); -extern void func_8014A1B0(s32 a0, s32 a1); -extern s32 func_8014A048(s32 param_1); -extern u16 func_80156370(u16 a0); -extern void func_8014C4AC(s32 a0, s32 a1, s32 a2, s16 *a3, s32 a4); -extern void func_8015D4B4(); -extern void func_8014A218(void); -extern s32 func_8014C278(s32 a0, s32 a1, s32 a2); -extern s32 func_8014C2B0(void *a0, void *a1, s32 a2); -extern s32 func_8014A238(s32 arg0); -extern s32 func_8014A2E4(s32 a0); -extern void func_8014A380(s32 a0, s32 a1); -extern s16 D_801152B0; -extern s16 D_801152B4; -extern s32 func_8014A3E0(struct S_8014A3E0 *a0); -extern s32 func_8014A454(s32 a0); -extern s32 func_8014A4B4(void *a0); -extern void func_8015EDD4(); -extern void func_8014A4FC(void); -extern s32 func_8014A674(s32 *a0); -extern s32 func_8014A69C(s32 *a0); -extern s32 func_8014A6C4(s32 a0); -extern void func_8015E184(); -extern void func_8014A830(void); -extern s32 func_80029AF4(void); -extern s32 func_8014A850(s32 param_1); -extern void func_8014AA04(s32 a0); -extern void func_801599A4(void *a0); -extern void func_80159B3C(void *a0); -extern s32 func_80165A20(s32 a0); -extern void func_8014AB7C(); -extern void func_8014AC10(); -extern void func_8014AA28(void); -extern void func_8014AB5C(void); -extern void func_80162CCC(void); -extern void func_8014AB7C(s32 arg0); -extern void func_8014ABF0(void); -extern void func_80016714(void *a0, s32 a1); -extern void func_8014AC10(s32 arg0); -extern void func_8014ACC0(s32 a0, s32 a1); -extern void func_8014AD30(s32 a0, u16 *a1, s32 a2, s32 a3); -extern void func_8014ACE8(void *a0, s32 a1, s32 a2); -extern void func_80146AFC(void *a0); -extern void func_8014ADA8(s32 a0, s32 a1); -extern void func_8014AD7C(s32 a0); -extern s32 D_80078E8C; -extern void func_8014B034(s32 arg0); -extern void func_8014B00C(s32 arg0); -extern void func_8014B084(void); -extern s16 D_80078E90; -extern void func_8014B034(s32 a0); -extern u8 D_80078EBA; -extern void func_800D10EC(void); -extern void func_8002AC98(void); -extern s32 func_8014B154(s32 *a0); -extern void func_8014B12C(void); -extern void func_8014B2F8(void); -extern void func_8014B4C4(void); -extern void func_8014B160(s32 a0); -extern s32 func_8016F1C4(void); -extern s16 D_80078E96; -extern s16 D_80078EB8; -extern u16 D_80078EA6; -extern void func_8014B2A8(void); -extern void func_8014B310(void); -extern void func_8014B2D0(void); -extern s32 D_80078E94; -extern s32 D_80078ECC; -extern void func_8014B33C(void); -extern u8 D_80062BF4[]; -extern void func_8014BC80(s32 a0, s32 a1); -extern void func_80019064(void *a0); -extern s32 D_80078E98; -extern void func_80166244(); -extern void func_8014B4D4(void *a0); -extern s16 D_80078E9A; -extern u8 D_80126D1C; -extern s32 D_80126D74; -extern void func_8014B598(s32 a0, s32 a1); -extern void func_8014B5B0(s32 *a0); -extern void func_8014B5C4(s32 *a0, s32 a1, s32 a2); -extern void func_8014B5D8(s32 s1); -extern s32 D_80078E9C; -extern s32 D_80078ED0; -extern void func_8014B6F0(s32 a0, s32 a1); -extern void func_8014B768(s32 a0, s32 a1); -extern void func_8014B944(s32 a0, s32 a1, s32 a2); -extern s32 D_80078EA4; -extern u16 D_80078EB2; -extern s16 D_80078EB4; -extern void func_8014BB0C(void); -extern void func_8014BB24(s32 a0, s32 a1, s32 a2); -extern void func_8014BC0C(s32 a0, s32 a1); -extern void func_8014BC44(s32 a0, s32 a1); -extern u8 D_800B9A17; -extern void func_8014BCC0(s32 a0, s32 a1); -extern u16 D_80078EB6; -extern s32 func_8014BCEC(s32 a0, s32 a1); -extern void func_8014BD24(s32 a0, s32 a1); -extern void func_8014BD60(s32 param_1, s32 param_2); -extern void func_8014BD98(s32 a0, u16 a1); -extern void func_8014BDC8(void); -extern void func_8014BDE0(void); -extern s32 func_8017267C(s32 *a0); -extern s32 func_80013294(void *a0, void *a1); -extern void func_80029ED4(s32 a0); -extern void func_8014BDE8(s32 a0); -extern void func_8014BE78(void); -extern void func_8014BE9C(void); -extern void func_80029124(s32 a0, s32 a1); -extern void func_8014BEC0(void); -extern void func_8014BF18(s32 a0); -extern void func_8014BF48(void); -extern u8 func_8014BF6C(void); -extern void func_8014BF8C(u8 arg0); -extern void func_8014BFB0(void); -extern u8 func_8014BFD4(void); -extern void func_8014BFF4(s32 a0, s32 a1); -extern void func_8014C010(s32 a0, s32 a1); -extern s32 func_8014C050(s32 a0, s32 a1); -extern s32 func_8014C088(s32 a0, s32 a1); -extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); -extern s32 func_8014C118(void * a0, s32 a1, s32 a2); -extern s32 func_8014C168(s32 * param_1, s32 param_2); -extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); -extern u8 D_8018F14C[]; -extern void func_8014C1A0(s32 arg0, s32 arg1); -extern s32 func_80013328(s32 a0, s32 a1); -extern s32 func_8014C59C(void *a0, void *a1); -extern s32 func_8014C308(s32 arg0, s32 arg1, s32 arg2, s32 arg3); -extern s32 func_8014C43C(void *a0, s32 a1, s32 a2, s32 a3, s16 a5); -extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); -extern s32 ratan2(s32 dx, s32 dy); -extern u8 D_8018F154; -extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); -extern s16 func_8014C5D0(s32 a0, s32 a1); -extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); -extern u8 D_80126D17; -extern void func_8014C6AC(void); -extern void func_8014C6C0(void); -extern u8 D_80126D1E; -extern void func_8014C6D0(void); -extern void func_8014C6E0(void); -extern s32 func_8014C860(s32 a0, s32 a1); -extern void func_8014C8C8(s32 a0, s32 *a1); -extern void func_8014C88C(s32 a0); -extern void func_8014C8C8(s32 dst, s32 * src); -extern void func_8014C8F0(s32 arg0); -extern u8 D_801151F0[]; -extern s32 func_8014C918(s32 a0, s32 a1); -extern s32 D_80126B50; -extern void func_8014C968(void); -extern void func_8014C978(void); -extern s32 func_8014C98C(void); -extern void func_80139914(s32 a0); -extern s32 func_8014CA00(s32 a0); -extern u16 func_8014CA70(s32 a0, s32 a1); -extern s32 func_8014CA14(s32 a0, s32 a1); -extern u16 func_8014CAE4(s32 *a0, s32 a1); -extern s32 func_8014CA88(s32 *a0, s32 a1); -extern s32 func_8014CAFC(void); -extern s32 func_8014CB0C(void); -extern s32 func_8014CB1C(void); -extern u8 D_80126D1F; -extern s32 func_8014CB2C(void); -extern s32 func_8014CB58(void); -extern u8 D_80126D1D; -extern void func_8014CB68(void); -extern s32 func_8014CB7C(void); -extern s32 func_8014CB8C(void); -extern short D_80126C9E; -extern void func_8014CB9C(struct Packed8 *a0); -extern s32 D_80126CDC; -extern void func_8014CBD8(void); -extern s16 D_80126CC4; -extern void func_8014CBE8(void); -extern void func_8014CBF8(void *a0); -extern void func_8014D3E0(s32 a0); -extern void func_8014D04C(void); -extern void func_8014CCB4(void); -extern void func_8014CC28(s32 a0); -extern void func_8014CD0C(u8 *a0); -extern s32 func_8014CF04(s32 a0, s32 a1, void *a2); -extern void func_8014CD80(s32 a0, void *a1, void *a2); -extern void func_8014D0A4(s32 a0); -extern s32 func_8014D2A0(s32 a0, void *a1, void *a2); -extern s32 func_8014D12C(s32 a0, void *a1, void *a2); -extern void func_8014D438(s32 a0); -extern void func_8014D3E0(s32 _arg0); -extern void func_8014D610(s32 a0, void *a1, void *a2); -extern s32 func_8014D4C0(s32 a0, void *a1, void *a2); -extern void func_8014D790(s32 a0); -extern void func_8014D738(void); -extern s32 func_8014DD8C(s32 a0, void *a1, void *a2); -extern s32 func_8014D820(s32 a0, u16 *a1, u16 *a2); -extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8014DCE0(s32 arg0, s32 arg1, s32 arg2); -extern s32 func_8014DD8C(s32 arg0, void *arg1, void *arg2); -extern void func_8014DF94(s32 arg0); -extern void func_8014DF3C(void); -extern s32 func_8014E284(s32 a0, s16 *a1, s16 *a2); -extern s32 func_8014E048(s32 a0, u16 *a1, u16 *a2); /* u16*: def lhu semantics (T5b reconcile; ptr param type codegen-neutral for the caller) */ -extern s32 func_80135A4C(s32 a0, s32 a1, s32 *a2, s32 a3); -extern s32 func_80133784(s32 a0, void *a1, s32 a2); -extern u8 D_801152A8[]; /* canonical TU type (engine_core) — read via *(u16*) cast */ -extern s16 D_801152AC; -extern s32 func_8014E048(s32 param_1, u16 * param_2, u16 * param_3); -extern void func_8014E48C(s32 a0); -extern void func_8014E434(void); -extern void func_8014E5B4(s32 a0, void *a1, void *a2); -extern s32 func_8014E514(u8 *a0, s32 a1, s32 a2); -extern void func_8014E6F8(struct SubE6F8 *a0); -extern void func_8014E6A0(void); -extern s32 func_8014E83C(s32 a0, s16 *a1, s16 *a2); -extern s32 func_8014E790(s32 a0, s16 *a1, s16 *a2); -extern s32 func_8014E790(s32 arg0, s16 * arg1, s16 * arg2); -extern s32 func_8014E83C(s32 arg0, s16 * arg1, s16 * arg2); -extern void func_8014E934(s32 _arg0); -extern s32 func_8014EA4C(void *a0, void *a1, void *a2, s32 a3); -extern s32 func_8014E98C(void *a0); -extern s32 D_801150D8; -extern s16 D_801152AA; -extern u8 D_80126720[]; -extern s16 D_80126724; -extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); -extern s32 func_8014ED80(struct SubED80 *a0); -extern int D_801ED4D8; -extern void func_8014ED28(s32 _arg0); -extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); -extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); -extern s32 func_8014F24C(struct SubF24C *a0); -extern void func_8014F1F4(void); -extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2); -extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2); -extern s32 func_8014F4C0(); -extern s32 func_8014F468(void); -extern int func_8014F74C(); -extern int func_8014F6F4(void); -extern u8 D_800D3918[]; -extern u8 D_801152A8[]; -extern s32 D_801152BC; -extern int func_8014F74C(s32 arg0); -extern s32 func_8014FA70(s32 a0); -extern s32 D_801ED4DC; -extern void func_8014FA04(s32 a0); -extern s32 func_8014FBC0(); -extern s32 func_8014FC18(u8 *self); -extern int func_8014FD54(int param_1); -extern void func_8014FCFC(void); -extern void func_80150170(void *a0); -extern s32 func_8014FE60(void *a0); -extern void func_8014FDF4(struct S8014FDF4 *a0); -extern s32 func_8014FE60(void *e); -extern s32 func_80134510(s32 arg); -extern s32 func_80150150(s32 a, s32 b); -extern s32 func_80150460(s32 a, s32 b); -extern void func_801504D8(u16 *a0); -extern s32 func_80150480(s32 _arg0); -extern s32 func_80150528(void *a0, void *a1, void *a2); -extern s32 func_80150528(void *arg0, void *arg1, void *arg2); -extern s32 func_801506A4(s32 a0, s32 a1); -extern s32 func_801505FC(s32 a0); -extern s32 func_801506A4(s32 arg0, s32 arg1); -extern void func_80150820(s32 a0, s32 a1); -extern void func_8015086C(int param_1); -extern s32 func_801508B4(s32 a0); -extern s32 func_8015094C(s32 a0); -extern short func_801508F8(s32 a0); -extern s32 D_8018F184; -extern s32 D_80126990; -extern s32 D_80126994; -extern s32 func_80021174(s32 a0, s32 a1); -extern s32 func_8015094C(s32 param_1); -extern void func_80150B9C(void); -extern s32 func_80151184(s32 a0, s32 a1, s32 a2); -extern s32 func_80150BA4(s32 a0); -extern s32 func_801619D0(void *a0); -extern void func_80150BC8(s32 *a0); -extern s32 func_80150480(s32 a0); -extern u16 D_800AE6DC; -extern void func_80150C48(s32 a0); -extern int func_80151184(int arg, int a1, int a2); -extern int func_80150CA0(int arg); -extern void func_80150EC4(s32 a, s32 b); -extern void func_80150CC4(s32 a); -extern void func_80150CE4(s32 a); -extern void func_80150D04(s32 a); -extern void func_80150D24(s32 a); -extern void func_80150D44(s32 a); -extern void func_80150D64(s32 a); -extern void func_80150D84(s32 a); -extern void func_80150DA4(s32 a); -extern void func_80150DC4(s32 a); -extern void func_80150DE4(s32 a); -extern void func_80150E04(s32 a); -extern void func_80150E24(s32 a); -extern void func_80150E44(s32 a); -extern void func_80150EC4(s32 a0, s32 a1); -extern void func_80150E64(s32 a0); -extern void func_80150E84(s32 a0); -extern void func_80150EA4(s32 a0); -extern u8 D_800AE6C0; -extern s16 D_800AE6C8; -extern s16 D_800AE6CA; -extern s16 D_800AE6CC; -extern s32 D_800AE6C4; -extern s16 D_800AE6CE; -extern u8 D_800AE6BE; -extern u8 D_801201F8[]; -extern void func_80150F78(void); -extern void func_80150F80(s32 a0); -extern int func_80150FB4(int arg); -extern void func_80150FD8(s32 a0); -extern int func_80151014(int arg); -extern void func_80151038(s32 a0); -extern int func_80151070(int arg); -extern int func_80151094(int arg); -extern void func_801510B8(void); -extern void func_801510C0(void); -extern int func_801510C8(int arg); -extern int func_801510EC(int arg); -extern s32 func_8012DB84(void); -extern s32 func_80151110(void); -extern void func_80151130(void); -extern int func_80151138(int arg); -extern void func_8015115C(s32 *a0, s16 a1); -extern s32 func_80151164(s32 a0, s32 a1); -extern s32 func_80151184(s32 arg0, s32 arg1, s32 arg2); -extern void func_801511A8(u8 *a0); -extern void func_801511C4(u8 *a0); -extern int func_80151204(int arg, int a1); -extern int func_801511E0(int arg); -extern int func_80151204(int a0, int a1); -extern void func_80151238(void *a0); -extern void func_8015126C(u16 *p); -extern void func_80151780(s32 a0); -extern void func_801516F0(s32 *a0); -extern void func_8015173C(s32 *a0); -extern s16 D_8011DB1A; -extern s32 D_80127518; -extern s32 D_801151FC; -extern s32 func_801725CC(u8 *a0); -extern s32 func_80029D3C(void); -extern void func_80151878(void); -extern void func_80153B58(s32 *a0); -extern s32 func_80151880(s32 a0); -extern s32 func_801518D8(s32 a0); -extern s32 func_80151944(void); -extern s32 func_80151924(void); -extern void func_8014E934(s32 a0); -extern s32 func_8014F3E8(s32 a0); -extern void func_801519C8(s32 a0); -extern void func_80151980(s32 a0); -extern M2C_UNK D_800D5880; -extern s32 D_800D58AC; -extern void func_80154274(s32 *a0, s32 a1); -extern void func_80154A74(s32 a0, s32 a1); -extern void func_801519C8(s32 arg0); -extern void func_80151C54(s32 a0); -extern void func_801542DC(s32 *a0, s32 a1); -extern void func_8015BDD0(s32 *a0); -extern void func_80165718(s32 a0); -extern u8 D_800D46E4[]; -extern void func_80151AE4(s32 arg0); -extern void (*D_8018F22C[])(void); -extern void func_80151D24(void *a0); -extern void func_80151DB0(s32 a0); -extern void func_80151D60(void *a0); -extern s32 func_80172630(u8 *a0); -extern s32 D_80062C14; -extern void func_80151DB0(s32 param_1); -extern void func_80151E78(s32 *a0); -extern void func_80151ECC(struct S80151ECC *a0); -extern void func_80151FB4(s32 a0); -extern void func_80151F38(s32 *a0); -extern void func_801553C0(s32 a0); -extern void func_80153C18(); -extern void (*D_8018F250[])(void); -extern void func_80152058(void *a0); -extern void func_801520DC(s32 a0); -extern void func_80152094(s32 a0); -extern void func_80147324(s32 a0); -extern u8 D_80062C04[]; -extern M2C_UNK D_8018F240; -extern void func_801520DC(s32 arg0); -extern void func_801470B4(s32 a0); -extern void func_8015369C(s32 a0); -extern void func_80152194(s32 *a0); -extern s32 func_801536DC(s32 a0); -extern void func_8015220C(s32 a0); -extern s32 func_80153800(s32 a0); -extern void func_801522CC(s32 a0); -extern void func_80152254(s32 *a0); -extern void (*D_8018F264[])(void); -extern void func_80152370(void *a0); -extern void func_801523F4(s32 a0); -extern void func_801523AC(s32 a0); -extern void func_8001382C(s32 a0, void *a1, void *a2); -extern u8 D_8018F270[]; -extern void func_801523F4(s32 arg0); -extern void func_801525F4(int); -extern s32 func_801535F4(void *arg0); -extern void func_8015BF48(s32 *a0); -extern void func_80152500(int param_1); -extern void func_801525F4(s32 a0); -extern void (*D_8018F280[])(void); -extern void func_80152698(void *a0); -extern void func_80152714(s32 a0); -extern void func_801526D4(s32 a0); -extern void func_80152790(s32 a0); -extern void (*D_8018F298[])(void); -extern void func_8015282C(void *a0); -extern void func_801528B0(s32 a0); -extern void func_80152868(s32 a0); -extern M2C_UNK D_8018F288; -extern void func_801528B0(s32 arg0); -extern void func_8015294C(s32 a0); -extern void func_80152A08(s32 a0); -extern void func_80152AC8(s32 a0); -extern void func_80152A50(s32 *a0); -extern void (*D_8018F2AC[])(void); -extern void func_80152B6C(void *a0); -extern void func_80152BF0(s32 a0); -extern void func_80152BA8(s32 a0); -extern void func_80152C80(s32 *a0); -extern void func_80152C40(s32 *a0); -extern void (*D_8018F2C8[])(void); -extern void func_80152D24(void *a0); -extern void func_80152DA8(s32 a0); -extern void func_80152D60(s32 a0); -extern M2C_UNK D_8018F2B8; -extern void func_80152DA8(s32 arg0); -extern void func_80152E4C(s32 a0); -extern void func_80152EFC(s32 a0); -extern void func_80152FBC(s32 a0); -extern void func_80152F44(s32 *a0); -extern void (*D_8018F2DC[])(void); -extern void func_80153060(void *a0); -extern void func_801530E4(s32 a0); -extern void func_8015309C(s32 a0); -extern void func_80155440(s32 *a0); -extern void func_801530E4(s32 arg0); -extern void func_80153150(struct S80153150 *a0); -extern void func_801531BC(s32 a0); -extern void func_8015327C(s32 a0); -extern void func_80153204(s32 *a0); -extern void (*D_8018F2F0[])(void); -extern void func_80153320(void *a0); -extern void func_801533A4(s32 a0); -extern void func_8015335C(s32 a0); -extern void func_80153410(s32 *a0); -extern void func_80153490(s32 a0); -extern void func_80153550(s32 a0); -extern void func_801534D8(s32 *a0); -extern void (*D_8011DB28)(s32 a0); -extern s32 func_801536DC(s32 param_1); -extern void func_800139C8(s32 a0, void *a1, void *a2); -extern s32 func_80153978(s32 a0, u16 *src); -extern s32 func_80133784(s32 a0, void *src, s32 dst); -extern s32 func_801539F8(s32 a0, void *a1); -extern s32 func_801539F8(s32 a0, void * a1); -extern s32 func_8016DA04(s32 a0); -extern s32 func_80153BD8(s32 a0); -extern s32 func_80153BF0(s32 a0); -extern void func_80153C18(void); -extern u16 D_8011F748; -extern void func_80153C30(void); -extern void func_80153C74(s16 a0, s16 a1); -extern s16 D_8011DB18; -extern void func_80153C44(int a0, int a1, s16 a2); -extern s16 D_8011DB0C; -extern s32 D_80115210; -extern void func_80153C8C(void); -extern void func_80153C9C(void); -extern s32 func_80153CBC(void); -extern s32 D_8018F304; -extern void (*D_8018F32C[])(void *a0); -extern void func_80153CCC(S80153CCC *a0); -extern void func_80153D7C(s32 a0); -extern void func_80153D34(s32 a0); -extern u8 D_8018F30C; -extern void func_80153D7C(s32 param_1); -extern void func_8015410C(void); -extern void func_80153E00(s32 param_1); -extern void func_80151664(void); -extern void func_80154134(u8 *a0); -extern void func_80154190(u8 *a0, s32 a1); -extern void func_80154150(s32 a0, s32 a1); -extern void func_80154218(u8 *a0, s32 a1, s32 a2); -extern void func_801541D8(u8 *a0, s32 a1, s32 a2); -extern s32 func_801549F8(s32 a0, s32 a1, s32 a2); -extern void func_801542A4(); -extern void func_801542A4(s32 *a0, s32 a1); -extern void func_8015430C(); -extern void func_8015430C(u8 *arg0, s32 arg1, s32 arg2); -extern void func_8015444C(void *a0, s32 *a1, s32 *a2, s32 *a3); -extern s32 func_80154358(void * arg0); -extern void func_80154AB4(s32 a0, s32 a1); -extern void func_80154B20(s32 a0, s32 a1, s32 a2); -extern void func_80154AE0(s32 a0, s32 a1, s32 a2); -extern void func_80154B7C(u8 *a0, s32 a1); -extern void func_80154B4C(u8 *a0, s32 a1); -extern void func_80154BC8(void *a0, s32 a1, s32 a2); -extern void func_80154B98(void *a0, s32 a1, s32 a2); -extern u8 D_800D8D10[]; -extern s16 D_80078E9E; -extern void func_801550FC(s32 a0); -extern void func_80154ED8(s32 a0, s32 a1); -extern void func_80154F9C(s32 a0); -extern void func_800183E0(s32 a0); -extern void func_801550FC(s32 arg0); -extern void func_8001D150(s32, s32); -extern void func_8001D130(int, int); -extern void func_80155150(int param_1); -extern s32 D_800DE2A4[]; -extern void func_801552F4(s32 a0); -extern void func_80155344(s32 a0); -extern s32 func_80155394(s32 *a0); -extern void func_801553A8(s32 *a0); -extern s32 func_80029178(s32); -extern int (*D_8018F378[])(void); -extern s32 func_80155458(s32 param_1); -extern s32 func_801659DC(u8 *a0); -extern s32 func_801554B8(void *arg0); -extern void func_801555F4(void *a0); -extern void func_80155518(s32 *a0); -extern void func_80155580(void *a0); -extern void (*D_8018F37C[])(void); -extern s32 func_80161104(void); -extern void func_801555F4(void *); -extern void func_801555BC(void *a0); -extern s32 func_80155800(s32 arg0); -extern int func_80155A44(int param_1); -extern int func_80161208(); -extern u8 D_800D4DA8[]; -extern void func_80155B20(s32 *a0); -extern s32 D_800D4DB4; -extern void func_80155B9C(s32 a0); -extern u8 D_800D4DD4[]; -extern void func_80155C0C(s32 *a0); -extern void func_8014ED28(s32 a0); -extern int func_80155FF8(int arg, int a1); -extern s32 D_800D4DF4; -extern void func_80155C64(s32 a0); -extern void func_8015E880(s32 *a0); -extern void func_80155D70(s32 param_1); -extern void func_80155E30(void *a0); -extern s32 func_80161208(); -extern void func_80155EA4(void *arg0); -extern void func_80155F58(void); -extern s32 func_80155F80(); -extern s32 func_80155F60(void); -extern s32 func_80155F80(s32 a0); -extern int func_80155FB0(int arg, int a1); -extern int func_80155FD4(int arg, int a1); -extern int func_80156044(int arg, int a1); -extern s32 func_80029B4C(s32 a0, s32 a1); -extern s32 func_80029BC8(s32 a0, s32 a1); -extern s32 func_80029C44(s32 a0, s32 a1); -extern s32 func_8015640C(s32 a0, s32 a1); -extern s32 rand(void); -extern u32 func_8015616C(s32 param_1, u16 param_2); -extern u16 func_80156370(u16 param_1); -extern s32 func_801564B0(s32 a0); -extern s32 func_8002A1B4(void); -extern s32 func_8002A400(void); -extern s32 func_8002A670(void); -extern s32 func_8002A8E0(void); -extern s32 D_801151E0[]; -extern s32 func_801565C0(void); -extern void func_80156A14(s32 *a0); -extern void func_80156648(s32 *a0); -extern u8 D_8011DAD8[]; -extern s32 func_8014C568(s16 *a0, s16 *a1); -extern void func_801567BC(s32 a0); -extern u8 D_80126730[]; -extern void func_80156848(s32 param_1, s32 param_2); -extern unsigned char D_8011520C[]; -extern unsigned short D_8018F7E0[]; -extern void func_80156A1C(s32 param_1, s32 param_2); -extern s32 D_801150E0[]; -extern void func_80156A88(s32 a0, s32 a1); -extern void func_80156B74(s32 param_1, u32 param_2, u8 *param_3); -extern void func_80156ECC(int param_1, int param_2, int param_3, int param_4, int param_5); -extern void func_80156FA8(s16 *param_1, s16 *param_2, s16 *param_3); -extern void func_80157158(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); -extern s32 func_80135004(s32 a0, void *a1, s32 a2); -extern s32 func_80135260(s32 arg0, s32 arg1, s16 *arg2, s16 *arg3); -extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); -extern void func_801575E4(void *a0); -extern void func_801574DC(s32 *a0); -extern void func_80157544(void *a0); -extern void (*D_8018F7F0[])(void); -extern void func_8014CC28(s32 a0); /* defined */ -extern s32 func_8014F3E8(s32 a0); /* declared */ -extern void func_8015BDD0(s32 *a0); /* defined */ -extern void func_801575E4(void *a0); /* defined */ -extern void func_80157580(s32 arg0); -extern u8 D_800D4F14[]; -extern void func_801576A8(void *arg0); -extern s32 func_8015773C(u8 *a0); -extern s32 func_8015771C(u8 *a0); -extern s32 func_8015773C(u8 * arg0); -extern int D_801ED510; -extern void func_801578C0(s32 a0); -extern void func_80157788(int param_1); -extern void func_801577C8(s32 arg0); -extern void (*D_8018F818[])(void); -extern void func_80157808(void *param_1); -extern void func_80157880(s32 a0); -extern s32 func_801725A4(u8 *a0); -extern u8 D_800D5128; -extern u8 D_8018F7F8; -extern void func_801578C0(s32 param_1); -extern void func_80147A84(int); -extern void func_80148038(int, int); -extern void func_80147460(int); -extern void func_80146D90(int); -extern void func_80161450(void *a0); -extern void func_80157A8C(int); -extern void func_80154A74(int, int); -extern unsigned char D_800D5178; -extern unsigned char D_8018F808; -extern void func_8015795C(int param_1); -extern void func_80161D20(s32 a0, s32 a1); -extern void func_80157A8C(s32 a0); -extern void func_8016706C(s32 a0); -extern u8 D_800D51AC[]; -extern void func_80157AC8(s32 param_1); -extern void func_80157B74(int param_1); -extern void func_8016158C(void *a0); -extern void func_8015BE04(s32 *a0); -extern void func_80157BC8(s32 a0); -extern void func_80157CCC(s32 a0); -extern void func_80157DC4(void *a0); -extern void func_80157FC4(void *a0); -extern void func_80157D74(u16 *a0); -extern void (*D_8018F858[])(void); -extern void func_80157E38(void *); -extern void func_80157E00(void *a0); -extern void func_80157E38(void * a0); -extern s32 func_80157F64(s32 *a0); -extern s32 func_80156600(void *a0); -extern void func_80157EA4(void *a0); -extern void (*D_8018F860[])(void); -extern void func_80158038(void *); -extern void func_80158000(void *a0); -extern s32 D_800D51E0; -extern s32 D_8018F82C; -extern void func_80158038(void * param); -extern u8 D_800D524C[]; -extern void func_80161418(void *a0); -extern void func_801580B4(s32 a0); -extern void func_801581AC(s32 a0); -extern void (*D_8018F86C[])(void); -extern void func_8015824C(void *a0); -extern void func_801582C0(void *); -extern void func_80158288(void *a0); -extern u8 D_800D52A8[]; -extern void func_801585A4(s32 *a0); -extern void func_801582C0(void *a0); -extern s32 func_801585AC(s32 *a0); -extern u8 D_800D52E8[]; -extern void func_80158344(s32 *a0); -extern s32 func_801615C4(void *a0, s32 a1); -extern u8 D_8018F83C; -extern u8 D_800D533C; -extern void func_80158434(s32 param_1); -extern void func_80158548(s32 param_1); -extern void func_801585EC(u8 *a0); -extern void func_80158794(void); -extern s32 D_801ED518; -extern s32 D_801ED524; -extern s32 D_801ED528; -extern void func_80158880(s32 *param); -extern void func_8015879C(s32 param_1); -extern void func_80158814(void *arg0); -extern void (*D_8018F8A8[])(s32 *); -extern void func_80158AE4(void *a0); -extern void func_80158AB4(void *a0); -extern void func_8016F264(void); -extern void func_80165840(void); -extern void func_801658DC(void); -extern void func_80165A78(s32); -extern void func_80158AE4(void * a0); -extern M2C_UNK D_800D58D8; -extern void func_80158BB0(void *arg0); -extern s32 func_80159404(s32 a0, s32 a1); -extern void func_80158C40(s32 *a0); -extern void func_80158CD8(s32 *a0); -extern s32 func_80159434(s32 a0, s32 a1); -extern void func_80158D60(s32 a0); -extern M2C_UNK D_800D5904; -extern void func_80158E24(s32 *a0); -extern s32 D_8018F87C[]; -extern int rand(void); -extern s32 func_8013767C(s32 a0); -extern void func_80158F00(int param_1); -extern u8 D_80110C3C[]; -extern s32 func_801399F0(s32); -extern void func_80139914(s32); -extern s32 func_80159464(void); -extern void func_801594E8(s32, s32); -extern void func_80158FA4(s32 param_1); -extern s32 func_801399F0(s32 a0); -extern u8 D_80110C94[]; -extern u8 D_80110CD4[]; -extern void func_80159070(void *a0); -extern s32 func_80029A94(s32); -extern void func_80175454(void); -extern void func_800298BC(void *); -extern void func_8002992C(s32); -extern void func_800CF804(void); -extern void func_800CF818(void); -extern u8 D_80110D0C[]; -extern void func_80159120(s32 a0); -extern void func_801592CC(s32 *a0); -extern u8 D_800AE6BD; -extern s32 D_801ED520; -extern void func_8015934C(void *arg0); -extern void func_801593E4(A801593E4 *a0); -extern void (*D_8018FAF8[])(void); -extern void func_80159698(void *a0); -extern s32 func_801596D4(void *a0); -extern void func_80174B6C(void); -extern void func_80129248(s16 a0); -extern void func_8013C938(void); -extern void func_8013CB20(void); -extern void func_8013C98C(void); -extern void func_8002850C(s32, s32, s32); -extern void func_80028620(s32, void *); -extern s16 D_800B9AAC[]; -extern s16 D_800B9B00; -extern u16 D_801270C0; -extern u32 D_800AFAE8[]; -extern char D_8018F918[]; -extern s32 func_801596F0(s32 param_1); -extern s32 func_80159874(void); -extern void func_800167B8(s32 a0); -extern s32 func_8015987C(s32 a0); -extern int func_800167F0(int arg); -extern int func_801598BC(void); -extern void func_80159968(void *a0); -extern void func_801598E0(u8 *a0); -extern void (*D_8018FB9C[])(void); -extern void func_80159A20(void *a0); -extern void func_801599E0(void *a0); -extern void func_80159A18(void); -extern void func_80159BE4(s32); -extern void func_80159B08(s32 *a0); -extern void func_80159B70(void *a0); -extern void func_80159B3C(void * a0); -extern void (*D_8018FCF0[])(void); -extern void func_80159BAC(s32 a0); -extern s32 func_80172590(u8 *a0); -extern unsigned char D_8018FB0C; -extern void func_80159BE4(s32 arg0); -extern void func_8015A1C8(s32 a0); -extern void func_8015A2D8(s32); -extern void func_8015A1FC(s32 *a0); -extern void func_8015A264(void *a0); -extern void func_8015A230(s32 *a0); -extern void (*D_8018FCF8[])(void); -extern void func_8015A2A0(s32 a0); -extern int D_8018FB1C; -extern s32 func_80172608(u8 *a0); -extern void func_8015A2D8(s32 param_1); -extern u8 D_800D48DC; -extern s32 func_8015AB7C(s32 a0); -extern s32 D_8011F9C4; -extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); -extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_8018FB3C; -extern void func_8015AC48(s32 arg0); -extern void func_8015AC90(s32 a0); -extern void func_8015ADB0(s32 a0); -extern void func_8015ACC4(s32 *arg0); -extern void func_8015AD3C(void *a0); -extern void func_8015AD08(void *arg0); -extern void (*D_8018FD00[])(void); -extern void func_8015ADB0(s32); -extern void func_8015AD78(s32 a0); -extern void func_8015ADB0(s32 arg0); -extern s32 D_800D4A9C; -extern int func_8015B6F4(int param_1); -extern u8 D_800D4F8C[]; -extern s32 func_8015B7B4(s32 a0); -extern u8 D_800D4BE0[]; -extern s32 func_8014A51C(void); -extern s32 func_8015B858(u8 *a0); -extern s32 D_800D4B48; -extern void func_8015B8F8(s32 *a0); -extern void func_8015BD8C(s32 *a0); -extern s32 func_8015BE94(); -extern void func_8015BE38(struct Obj *a0); -extern s32 func_8015BE74(void); -extern void func_80161124(void *a0); -extern s32 func_8015BE94(s32 *a0); -extern s32 func_8015AE2C(); -extern s32 func_8015BEC4(void); -extern s32 func_8015B950(s32 arg0); -extern s32 func_8015BEE4(void); -extern void func_8015BF04(s32 *a0); -extern void func_8015C0C4(s32 a0); -extern void func_8015BFF4(void *a0); -extern void func_8015BF7C(s32 *a0); -extern void func_8015C030(s32 *a0, s32 a1); -extern void func_8015BFB0(s32 *a0, s32 a1); -extern void (*D_8018FD28[])(void); -extern void func_8015C0C4(s32); -extern void func_8015C08C(s32 a0); -extern s32 func_8015C128(s32 param_1); -extern void func_8015C6A4(void); -extern void func_8015C788(s32 a0); -extern void func_8015C6AC(s32 *a0); -extern void func_8015C714(void *a0); -extern void func_8015C6E0(s32 *a0); -extern void (*D_8018FD34[])(void); -extern void func_8015C788(s32); -extern void func_8015C750(s32 a0); -extern void func_8015CB94(s32 a0); -extern void func_8015CBCC(void); -extern void func_8015CBD4(void); -extern void func_8015CBDC(void); -extern void func_8015CBE4(void); -extern void func_8015CBEC(void); -extern void func_8015CBF4(void); -extern void func_8015CBFC(void); -extern void func_8015CC04(void); -extern void func_8015CC0C(s32 *param_1); -extern void func_8015CC74(s32 *a0); -extern void func_8015CC40(s32 *a0); -extern s32 func_8015CCD0(); -extern s32 func_8015CCB0(void); -extern s32 func_801725E0(u8 *a0); -extern s32 func_8015CCD0(s32 param_1); -extern s32 func_8015CD20(s32 arg0); -extern void func_8015CF24(s32 a0); -extern void func_8015D01C(); -extern void func_8015CF58(s32 *param_1); -extern void func_8015CFC0(s32 *a0); -extern void func_8015CF8C(s32 *a0); -extern void func_8015CFFC(void); -extern void func_8015D01C(int param_1); -extern void (*D_8018FBA8[])(void *); -extern s32 func_801725F4(u8 *a0); -extern void func_8015D104(void *arg0); -extern s32 D_8018FDD8; -extern void func_8015D380(s32 a0); -extern unsigned char D_8018EEBC[]; -extern void func_8015D414(int param_1); -extern void func_8015D57C(s32); -extern void func_8015D480(s32 *a0); -extern s32 func_8015D4E8(s16 *a0); -extern void func_8015D4B4(s16 *a0); -extern void func_8015D524(s32 arg0); -extern void func_8015D544(s32 a0); -extern void func_801746DC(void); -extern void func_8015D57C(s32 arg0); -extern s32 func_80161B18(void *a0); -extern s32 func_80161B84(void *a0); -extern void func_80154150(int, int); -extern void func_80149374(int, int); -extern unsigned char D_8018FDEC[]; -extern void func_8015D5E8(int param_1); -extern int func_8015E0D4(int); -extern void func_8015DA5C(s32 a0); -extern void func_8015DB6C(s32 a0); -extern void func_8015DA90(s32 *a0); -extern void func_8015DAF8(s32 *a0); -extern void func_8015DB6C(s32); -extern void func_8015DB34(s32 a0); -extern void func_8015DCB8(s32 a0); -extern void func_8014BD60(s32 a0, s32 a1); -extern int func_8015DD74(int); -extern void func_8015DBD4(void *arg0); -extern int func_8015DC84(int a0); -extern s8 D_8018FE28[]; -extern void func_8015DCB8(s32 param_1); -extern int func_8015DD74(int arg0); -extern void func_8015DECC(s32 a0); -extern void func_8015DDF0(s32 *a0); -extern void func_8015DE58(s32 *a0); -extern void func_8015DECC(s32); -extern void func_8015DE94(s32 a0); -extern void func_8015E018(s32 a0); -extern void func_8015DF34(void *arg0); -extern int func_8015DFE4(int a0); -extern void func_8015E018(s32 param_1); -extern int func_8015E0D4(int a0); -extern void func_8015E22C(s32 a0); -extern void func_8015E150(s32 *a0); -extern s32 func_8015E1B8(s32 a0); -extern void func_8015E184(s32 *arg0); -extern void func_8015E22C(s32); -extern void func_8015E1F4(s32 a0); -extern u8 D_800D4FF4[]; -extern u8 D_800D5098[]; -extern u8 D_800D5060[]; -extern s32 func_8014A850(s32 a0); -extern void func_8015E40C(s32 a0); -extern void func_8015E588(void); -extern void func_8015E4B0(s32 a0); -extern void func_8015E288(s32 a0); -extern u16 D_8018FE70; -extern u16 D_8018FE72; -extern u16 D_8018FE74; -extern s32 D_8018FE78; -extern void func_80013E94(void *a0, void *a1); -extern void func_8015E4B0(s32 param_1); -extern void func_8013C9C4(void *a0); -extern s32 D_8018FE80; -extern void func_8015E5B0(u8 *self); -extern void func_8015E714(s32 *a0); -extern void func_8015E95C(s32); -extern void func_8015E84C(s32 *a0); -extern void func_8015E8E8(s32 *a0); -extern void func_8015E9B8(s32 *a0); -extern void func_8015E8B4(s32 *a0); -extern void func_8015E924(s32 a0); -extern void func_8015E95C(s32 a0); -extern s16 D_801152A0; -extern void func_80160818(s32 *a0); -extern void func_8015ED6C(s32 *a0); -extern void func_8015EE7C(s32); -extern void func_8015EDA0(s32 *a0); -extern s32 func_8015EE08(s32 a0); -extern void func_8015EDD4(s32 *arg0); -extern void func_8015EE44(s32 a0); -extern int D_800D4C48; -extern int D_8018FB8C; -extern void func_8015EE7C(s32 param_1); -extern void func_8015EEE0(void *arg0); -extern void func_8015EF9C(void); -extern void func_8015F080(s32); -extern void func_8015EFA4(s32 *a0); -extern void func_8015F00C(s32 *a0); -extern void func_8015EFD8(s32 *a0); -extern void func_8015F048(s32 a0); -extern void func_8015F080(s32 a0); -extern s32 D_80062BE8; -extern void func_801466F0(s32, s32, s32, s32, s32, s32, s32, s32); -extern s32 func_80161208(void); -extern void func_8015F118(void *a0); -extern void func_8015F260(s32 *a0); -extern void func_8015F380(); -extern void func_8015F2BC(s32 *a0); -extern void func_8015F324(s32 *a0); -extern void func_8015F2F0(s32 *a0); -extern void func_8015F360(void); -extern s32 func_801725B8(u8 *a0); -extern void func_8015F380(void* arg0); -extern void func_8015F738(s32 *a0); -extern void func_8015F848(s32 *a0); -extern void func_8015F76C(s32 *a0); -extern s32 func_8015F7D4(s32 a0); -extern void func_8015F7A0(s32 *arg0); -extern void func_8015F810(s32 *a0); -extern void func_80147078(s32 *, s16); -extern void func_80159B70(void *); -extern void func_8015F89C(void *arg0); -extern void func_8015F948(s32 *param_1); -extern void func_8015F9A4(void *arg0); -extern void func_8015FA24(s32 arg0); -extern void func_8015FBE0(s32 *a0); -extern void func_8015FA44(s32 *a0); -extern void func_8015FAAC(s32 *a0); -extern void func_8015FA78(s32 *a0); -extern s32 func_801612B8(void *a0, s32 a1); -extern void func_8016007C(s32 a0); -extern void func_8015FAE8(void *arg0); -extern void func_8015FCC8(void *param_1); -extern unsigned int D_8018FF04[]; -extern void func_8015FD74(int param_1); -extern s32 func_80028DE0(void); -extern u8 func_80165700(s32 a0, s32 a1); -extern void func_8015FDCC(s32 a0); -extern u8 D_80078EC2; -extern u8 func_801656E8(s32 a0, s32 a1); -extern void func_80165670(s32 a0, s32 a1); -extern void func_8016004C(s32 a0); -extern void func_8015FF20(void *param_1); -extern void func_801601AC(s32 *a0); -extern void func_801600D0(s32 *a0); -extern void func_80160138(s32 *a0); -extern void func_80160104(s32 *a0); -extern void func_80160174(s32 *a0); -extern void func_801601E4(s32 *a0); -extern void func_80160244(s32 *a0); -extern void func_8016032C(void); -extern void func_80160410(s32 *a0); -extern void func_80160334(s32 *a0); -extern void func_8016039C(s32 *a0); -extern void func_80160368(s32 *a0); -extern void func_801603D8(s32 *a0); -extern u8 D_80062BD0; -extern void func_80160410(s32 * a0); -extern void func_801607B8(s32 *a0); -extern void func_801608C0(s32 *a0); -extern void func_801607E4(s32 *a0); -extern void func_8016084C(s32 *a0); -extern void func_80160888(s32 *a0); -extern void func_80160A28(s32 a0); -extern void func_80160A74(s32 *a0); -extern void func_80160BB4(s32 *a0); -extern void func_80160ACC(s32 *a0); -extern s32 func_80160B34(s32 a0); -extern void func_80160B00(s32 *arg0); -extern void func_80160B70(s32 a0); -extern void func_80160C28(void *arg0); -extern void func_80160CB4(s32 *a0); -extern void func_80160D10(void *arg0); -extern void func_80160DEC(u8 *a0); -extern void func_80160F00(); -extern void func_80160E3C(s32 *a0); -extern void func_80160EA4(); -extern void func_80160E70(s32 *a0); -extern void (*D_8018FFB4[])(void); -extern void func_80160EA4(void *a0); -extern void func_80160EE0(void); -extern void func_80160F00(void* arg0); -extern void func_800D0F4C(s32 a0); -extern u8 D_80110EC0; -extern void func_80160F70(s32 a0); -extern void func_80160FE0(s32 *a0); -extern void func_80161034(void *a0); -extern void func_80161094(s32 a0); -extern void func_801610FC(void); -extern void func_801483E8(void); -extern s32 func_80161A60(s32 a0); -extern void func_8016130C(void *a0, s32 a1); -extern void func_80161240(void *a0); -extern void func_80161374(void *a0, s32 a1); -extern void func_80161278(void *a0); -extern s32 func_801612B8(void * a0, s32 a1); -extern void func_8016163C(void *a0, s32 a1); -extern void func_80161774(void *a0, s32 a1); -extern s32 func_8016197C(s32 a0, s32 a1); -extern s32 func_80161488(void *a0); -extern void func_80161888(void *a0, s32 a1); -extern void func_801614E4(void *a0); -extern void func_8016191C(void *a0, s32 a1); -extern void func_8016151C(void *a0); -extern void func_80161554(void *a0); -extern s32 func_801615C4(void * arg0, s32 arg1); -extern s32 func_801619A4(s32 *a0); -extern s32 func_80161A00(s32 a0); -extern s32 func_80161A30(s32 a0); -extern int func_801497A8(void); -extern int func_80161BE0(void *param_1); -extern u16 D_8018FFE4[]; -extern void func_80161C98(int param_1, u32 param_2); -extern void func_80161E08(s32); -extern s32 func_80162438(s32); -extern s32 D_800AE6A8; -extern void func_800D1734(void *); -extern s32 D_80190048; -extern void func_80161D88(void); -extern void func_80161E08(s32 param_1); -extern int func_800291DC(int); -extern int func_800D0E30(void *a0); -extern int func_801620C4(void); -extern s32 func_800D0D7C(s32, s32); -extern int D_801ED530[]; -extern void func_8016216C(void); -extern s32 func_801621CC(s32 arg0); -extern void func_801622C4(void); -extern void (*D_8019006C[])(void); -extern void func_80162330(void *a0); -extern void func_8014706C(void *a0); -extern s32 func_8016236C(u8 *a0); -extern void func_800D0C48(s32 a0); -extern s32 func_801623B8(s32 *a0); -extern s32 func_800167F0(s32 a0); -extern s32 func_80162414(void); -extern s32 func_80162438(s32 _unused0); -extern int func_801626B8(void); -extern void func_80162714(void); -extern int D_801ED588[]; -extern void func_80162760(void); -extern void func_801627C0(void); -extern void (*D_801900B4[])(void); -extern void func_80162834(void *a0); -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern void func_80162968(s32 a0); -extern s32 func_80162ACC(u8 *a0); -extern u8 D_800B5CB8; -extern s32 D_801900A4; -extern s32 D_800B5CBC; -extern u8 D_800B5CDF; -extern s32 D_800B5CEC; -extern void func_80162870(s32 param_1); -extern void func_801628F4(s32 *a0); -extern void func_80162968(s32 param_1); -extern void func_80162AC0(s32 *a0, s8 a1); -extern s32 func_80162AE0(u8 *a0); -extern void func_80162AF4(void); -extern void func_80162CC4(void); -extern s32 D_80126D40; -extern void func_80162B1C(void); -extern void func_80162D28(s32 *a0); -extern void func_80162D88(s32 *a0); -extern void func_80162DE8(s32 *a0); -extern void func_80162E48(s32 *a0); -extern void func_80162EA8(s32 *a0); -extern void func_80162F60(s32 arg0, s32 arg1); -extern void func_80162F80(s32 arg0, s32 arg1); -extern void func_80162FA0(s32 arg0, s32 arg1); -extern void func_80162F08(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80162FC0(s32 *a0); -extern void func_80162FF4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801630C4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80163194(s32 a0, s32 a1, s32 a2, s32 a3, s32 arg4); -extern void func_8016325C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80163234(s32 a0); -extern s32 D_80115100; -extern s32 func_801632E0(void); -extern s32 D_80115200; -extern s32 func_801632F0(void); -extern u16 D_80126B18[]; -extern void func_80163328(void); -extern s32 func_801633A8(void); -extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); -extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, u16 * a5); -extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); -extern char D_801EC888[8]; -extern void *memcpy(void *dst, const void *src, unsigned int n); -extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); -extern void func_80157158(); -extern void func_80163664(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, s32 a7, s32 a8, s32 a9, u16 a10, s32 a11, s32 a12); -extern void func_801636D0(s32 a0, s32 a1); -extern s32 func_8016380C(struct S8016380C *a0, s32 a1); -extern void *memcpy(void *dst, void *src, s32 n); -extern s32 func_801638A0(u8 *a0, s32 a1); -extern s32 func_80163950(s32 a0); -extern void (*D_801900BC[])(void); -extern void func_80163A58(void *a0); -extern void func_80163A94(s32 param_1); -extern void func_80163C2C(s32 param_1); -extern void func_80163EC8(s32 param_1); -extern void func_80164270(s32 *a0); -extern void func_80164418(void); -extern void func_80163764(s32 a0); -extern void func_801642AC(s32 a0); -extern void func_8016432C(s32 a0); -extern void func_80164410(void); -extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80164530(s32 arg0); -extern void (*D_80190110[])(void); -extern void func_80164744(s32 param_1); -extern void func_8001C810(s32 a0, s32 a1); -extern void func_80164A74(s32 *a0); -extern void func_80164930(s32 a); -extern u16 D_800DF2E0; -extern s32 D_801900D8; -extern s16 D_8019010C; -extern s16 D_8019010A; -extern s16 D_80190108; -extern void func_801647A4(int param_1); -extern void func_80164ACC(); -extern void func_80164864(void *a0); -extern void func_80164930(s32 param_1); -extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80164ACC(s32 a0); -extern void (*D_8019011C[])(void); -extern void func_80164BA0(void *a0); -extern void func_8001CD50(s32 a0, s32 a1); -extern void func_800233CC(void *, unsigned short); -extern void func_80164DD0(s32 a0); -extern void func_80164DB0(void); -extern u8 D_801ED5E8; -extern u8 D_801ED5E9; -extern u8 D_801ED5EA; -extern u8 D_801ED5EB; -extern u8 D_801ED5EC; -extern u8 D_801ED5ED; -extern u8 D_801ED5EE; -extern u8 D_801ED5EF; -extern void func_80164BDC(s32 param_1); -extern void func_80164E40(void); -extern void func_80164CD4(u8 *a0); -extern void func_80164D4C(void *arg0); -extern void (*D_8019012C[])(void); -extern void func_80164EA4(void *a0); -extern void func_80165124(void *a0); -extern void func_80164EE0(int param_1); -extern s32 func_80165140(s32 a0); -extern void func_801651B8(void *a0); -extern void func_80164F44(void *arg0); -extern void func_80165024(void *a0); -extern void func_80165064(s32 *a0); -extern void func_801650C4(s32 *a0); -extern s32 func_80165140(s32 param_1); -extern s32 func_80165240(s32 a0, s32 a1, s32 a2); -extern s32 D_801ED628; -extern void func_801651B8(void * param_1); -extern u8 D_80126CF8; -extern void func_8016533C(void); -extern void func_801653F4(s32 a0); -extern void func_80165580(s32 a0); -extern void func_80165374(s32 a0); -extern void func_80165580(s32 _arg0); -extern void func_801653B8(s32 *a0); -extern s32 func_80165624(s32 a0); -extern u8 D_80078EC5; -extern void (*D_80190170[])(void); -extern u8 func_80165658(s32 a0, s32 a1); -extern void func_800CAE0C(s32 a0); -extern void func_801654A8(s32 arg0); -extern void func_80165B28(void *a0); -extern void func_801655E4(s32 a0); -extern u8 D_801901EC[]; -extern s32 D_8019020C[]; -extern u8 D_80190288[]; -extern u8 func_801656D0(s32 a0, s32 a1); -extern u8 D_801902A8[]; -extern u8 D_801902C8[]; -extern void func_800CAF6C(void); -extern void func_80165770(void); -extern void func_801657D8(void); -extern u8 D_80078EC3; -extern void func_801657A0(void); -extern s32 D_80078EA0; -extern s32 D_80078EA8; -extern u8 D_80078EBB; -extern s32 D_80078ED4; -extern s32 D_80078ED8; -extern s32 D_80078EDC; -extern u8 D_80078EE0; -extern void func_80165874(void); -extern s8 D_80078EC4; -extern void func_801658EC(void); -extern s32 func_80165900(void); -extern s32 func_80165910(void); -extern s32 D_8012672C; -extern s32 D_8012811C; -extern s32 D_80126B08; -extern void func_80165938(void); -extern void func_80165958(void); -extern s32 func_80165978(void); -extern void func_80165988(void); -extern s32 func_801659A8(void); -extern void func_801659B8(void); -extern s32 func_801659CC(void); -extern void func_80165A18(void); -extern s32 func_80165A50(s32 _arg0); -extern void func_80165AC8(void); -extern void func_80165A78(s32 arg0); -extern void (*D_80190364[])(void); -extern void func_80165B08(void); -extern void func_80165B10(void); -extern void func_80165B18(void); -extern void func_80165B20(void); -extern void (*D_801903E0[])(void); -extern void func_80165BB4(u8 *a0); -extern void func_80165B6C(u8 *a0); -extern void func_80165C58(s32 arg0); -extern void func_80165BFC(void *a0); -extern void func_80165C78(void); -extern M2C_UNK D_801EC898; -extern void func_80165E2C(u16 *arg0); -extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); -extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); -extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); -extern void func_80165E90(void); -extern void func_80020F34(s32 a0, s32 a1); -extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); -extern void (*D_801903EC[])(void); -extern void func_80166018(void *a0); -extern void func_80166054(s32 arg0); -extern void func_801661CC(s32 param_1); -extern void func_80166244(void* arg0); -extern void func_8016629C(void *a0); -extern void func_801662F4(void *a0); -extern void func_8016634C(void *a0); -extern void func_801663A4(void *a0); -extern void (*D_801903F4[])(void); -extern void func_801663FC(void *a0); -extern s32 func_800D21C4(s32 a0, void *a1, s32 a2); -extern void func_800D1FC8(s32 a0, s32 a1); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); -extern void func_801665B4(); -extern void func_80146C3C(); -extern void func_80166438(u8 *a0); -extern s32 func_80128ED8(s32 param_1, s32 *param_2); -extern void func_800D22E4(s32 a0); -extern void func_801665B4(s32 *a0); -extern void (*D_801904BC[])(void); -extern void func_80166618(void *a0); -extern void (*D_801904CC[])(void); -extern void func_80166654(void *a0); -extern s32 func_80166690(s32 param_1, s32 param_2); -extern s32 func_80166994(); -extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); -extern s32 func_80167540(s32 arg0); -extern void (*D_801904DC[])(void); -extern void func_801678B4(void *a0); -extern void RotMatrixYXZ(void *a0, void *a1); -extern void func_80048EAC(void *a0, void *a1); -extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80146C3C(void); -extern void func_801678F0(s32 a0); -extern void (*D_801904E8[])(void); -extern void func_80167A9C(void *a0); -extern void func_80167AD8(void); -extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); -extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); -extern u8 D_80190448[]; -extern u8 D_8019045C[]; -extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); -extern void func_800D20C0(void *a0, void *a1, s32 a2); -extern void func_80017E68(void *a0, void *a1); -extern void func_800D23D0(void *a0); -extern void ApplyTransposeMatrixLV(void *a0, void *a1, void *a2); -extern s32 D_801269A4; -extern s32 D_801269A8; -extern s32 D_801269AC; -extern void func_80168070(s32 param_1, s16 *param_2, s16 *param_3, void *param_4); -extern s32 func_80166994(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_8016829C(s32 a0); -extern s32 func_80166690(s32 a0, s32 a1); -extern void func_80168328(s32 arg0); -extern void func_801683D8(s32 a0); -extern void func_801684B4(s32 a0); -extern void func_80168540(s32 a0); -extern void func_801685EC(s32 a0); -extern void func_80168640(s32 a0); -extern s32 RotMatrixX(s32 a0, void *a1); -extern void func_80168664(void *arg0); -extern void (*D_80190500[])(void); -extern void func_80168744(void *a0); -extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_801687CC(s32 a0); -extern void func_80168780(s32 a0); -extern void func_80168828(void); -extern void func_801687CC(s32 param_1); -extern void func_80168828(); -extern void (*D_80190508[])(void); -extern void func_801689D8(void *a0); -extern void func_80168A14(s32 *a0); -extern void func_80168A88(void); -extern void (*D_80190510[])(void); -extern void func_80168AA8(void *a0); -extern void func_80168AE4(s32 a0); -extern void func_800D2318(void); -extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); -extern void (*D_80190518[])(void); -extern void func_80168D58(void *a0); -extern void func_80168D94(int a0); -extern void func_80168F40(); -extern void func_80168EC4(s32 a0); -extern void func_80168F40(void *arg0); -extern void (*D_80190520[])(void); -extern void func_8016901C(void *a0); -extern void func_80169058(s32 a0); -extern s32 func_80169228(void); -extern void func_801691B8(void *a0); -extern void (*D_80190528[])(void); -extern void func_801693CC(void *a0); -extern void func_80169584(s32 param_1); -extern void func_80169408(s32 a0); -extern void func_8016951C(int param_1); -extern s32 func_80017758(void *a0, void *a1); -extern s32 func_80017DC4(void *a0, void *a1); -extern void func_801696D8(s32 a0, s32 a1); -extern void (*D_80190530[])(void); -extern void func_80169830(void *a0); -extern void func_8016986C(s32 a0); -extern s32 func_80169A4C(s32 a0, s32 a1); -extern void func_801699D0(void *arg0); -extern void (*D_801905E4[])(void); -extern void func_80169B80(void *a0); -extern void func_80169E44(s32 a0); -extern void (*D_801905EC[])(void); -extern void func_80169F00(void *a0); -extern char D_8019059C[]; -extern char D_8019055C[]; -extern void func_80169F3C(int param_1); -extern void func_80169FE0(s32 a0); -extern void (*D_80190624[])(void); -extern void func_8016A020(void *a0); -extern void func_8016A05C(void *a0); -extern void func_8016A290(s32 a, void *b, void *c); -extern void func_8016A08C(s32 param_1); -extern void func_8016A1CC(int param_1); -extern void func_8016A290(s32 param_1, void *param_2, void *param_3); -extern void (*D_80190630[])(void); -extern void func_8016A700(void *a0); -extern s32 func_8016A73C(s32 arg0); -extern s32 func_8016A8FC(s32 a0); -extern void func_8016A890(s32 arg0); -extern void func_8016AA50(s32 param_1, s32 param_2); -extern void (*D_80190678[])(void); -extern void func_8016AB30(void *a0); -extern void func_8016B234(void); -extern void func_8016AFB0(s32 a0); -extern void func_8016B114(void *arg0); -extern s32 func_8016B448(s32, s32); -extern s32 func_8016BA48(s32 a0); -extern void func_8016B3F4(s32 a0); -extern s32 func_8016B428(s32 a0); -extern void func_8016B984(void *a0); -extern s32 func_8016B448(s32 arg0, s32 arg1); -extern void (*D_801906F4[])(void); -extern void func_8016B4BC(void *a0); -extern int func_8016B9F8(int); -extern int func_8016B834(int, int); -extern void func_8016B91C(int); -extern int D_801ED948; -extern void func_8016B4F8(int param_1); -extern s32 func_8016B9F8(s32 param_1); -extern void func_8016B6BC(s32, s32, s32, s32); -extern void func_8016B91C(s32); -extern s16 D_801906E8[]; -extern void func_8016B5C0(s32 param_1); -extern void func_8001CD9C(int, void *); -extern int *D_8019072C[]; -extern unsigned short D_80190734[]; -extern unsigned short D_8019073C[]; -extern unsigned char D_801ED950[]; -extern int func_8016B834(int param_1, int param_2); -extern void func_8016B964(SrcB964 *a0, DstB964 *a1); -extern void func_8016B91C(s32 arg0); -extern s32 D_801ED948; -extern s32 func_8016BA68(s32, s32); -extern void func_8016BADC(void *a0, s32 a1, s32 a2); -extern void (*D_80190744[])(void); -extern void func_8016BBA4(void *a0); -extern s32 func_8016BBE0(s32 param_1); -extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801EDA84; -extern M2C_UNK D_801EDA88; -extern void func_8016BCC0(void *arg0); -extern s32 func_8016BD78(s32 param_1); -extern s32 func_8016BEA0(s32 param_1); -extern void func_8016BF34(void *a0); -extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801EDA10; -extern void (*D_80190774[])(void); -extern void func_8016C14C(void *a0); -extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801EDA8C[]; -extern u8 D_801EDA94[]; -extern u8 D_801EDA44[]; -extern void func_8016C2C4(s32 param); -extern s32 func_8016C49C(s32 param_1_arg); -extern s32 VectorNormalSS(void *a0, void *a1); -extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); -extern short func_8016CF04(s32 a0, s32 a1); -extern void func_8016C83C(s32 a0); -extern void (*D_8019077C[])(void); -extern void func_8016CB84(void *a0); -extern short func_8016CF04(s32 param_1, s32 param_2); -extern void (*D_80190798[])(void); -extern void func_8016D19C(void *a0); -extern void (*D_801907A0[])(void); -extern void func_8016D428(void *a0); -extern void func_8016D464(u8 *a0); -extern void func_8016D4DC(s32 a0); -extern void func_8016D5EC(s32 *a0); -extern short func_8016CBC0(void); -extern void func_8016D64C(int param_1); -extern void func_8016D778(s32 a0); -extern void func_800D20C0(); -extern void func_8016D848(s32 *a0); -extern void func_8016D984(s32 *a0); -extern void func_8016DBD8(u8 *a0); -extern void (*D_80190808[])(int); -extern void func_8016DA30(int param_1); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801907AC; -extern u8 D_801907B8; -extern void func_8016DA7C(s32 param_1); -extern void func_8016DB34(s32 param_1); -extern void (*D_8019083C[])(void); -extern void func_8016DEA4(void *a0); -extern void func_8016DEE0(s32 a0); -extern void (*D_80190844[])(void); -extern void func_8016DF20(void *a0); -extern void func_8016E3CC(s32 a0); -extern void func_8016E1CC(s32 a0); -extern void func_8016E26C(s32 *a0); -extern void func_8016E2E8(void *a0); -extern void func_8016E460(void *a0, void *a1); -extern void func_8016E358(void *a0); -extern void func_8016E460(void *arg0, void *arg1); -extern void (*D_80190898[])(void); -extern void func_8016E5B8(void *a0); -extern void func_8016E5F4(s32 arg0); -extern void func_8016E778(); -extern void func_8016E688(void *a0); -extern void func_8016E6E4(s32 a0); -extern void func_8016E728(u8 *a0); -extern void func_8016E7C8(int param_1, short *p1, unsigned int *p2); -extern void func_8016E778(int param_1); -extern void func_8016E7C8(int param_1, short *param_2, unsigned int *param_3); -extern s32 D_80115218; -extern void func_8016E8F0(void); -extern void func_8016E918(short param_1, short param_2); -extern s32 func_8016E95C(); -extern u16 D_801908CC[]; -extern s32 func_8016EC0C(s32 a0, s32 a1); -extern void func_8016EAC0(Wave *param_1); -extern u8 D_801908BC[]; -extern void func_8016EB3C(s32 p); -extern void func_8016EBA8(u8 *param_1); -extern void func_8016ED6C(void); -extern s32 D_80126D70; -extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); -extern void func_8016ED8C(s32 a0, s32 a1, s32 a2); -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern void func_8016EDBC(s32 a0, s32 a1, s32 a2); -extern void func_8016EE94(); -extern void func_8016EDEC(s32 _arg0, s32 _arg1, s32 _arg2); -extern void func_8016EF78(s32 a0); -extern void func_8016EE40(s32 _arg0, s32 _arg1, s32 _arg2); -extern void func_801726D0(void *a0); -extern s32 D_80126D50; -extern s32 D_80126D54; -extern u8 D_80126D6C; -extern u8 D_80126D6D; -extern u8 D_80126D6E; -extern s32 D_80126D5C; -extern s32 D_80126D60; -extern s16 D_80126D64; -extern s16 D_80126D66; -extern s16 D_80126D68; -extern s16 D_80126D6A; -extern u8 D_80126D1A; -extern s32 D_80127058; -extern s32 D_8012705C; -extern s32 D_80127060; -extern s32 D_80127064; -extern s32 D_80127068; -extern s32 D_8012706C; -extern s32 D_80127070; -extern s32 D_80127074; -extern s16 D_80126D20; -extern void func_8016EE94(s32 a0, s32 a1); -extern s32 func_8016EFC8(s32); -extern s32 func_8016EFA8(s32 a0); -extern void func_8016F094(s32 *a0); -extern s32 func_8016F0AC(); -extern s32 D_801908E8; -extern void func_8016F250(void); -extern void func_8016F288(void); -extern void func_8016F2A8(void); -extern void func_8016F2C8(void); -extern void func_8016F2EC(void); -extern void func_8016F30C(void); -extern void func_8016F330(void); -extern void func_8016F350(void); -extern void func_8016F374(void); -extern void func_8016F388(void); -extern void func_8016F398(void); -extern s32 func_8016F44C(s32 a0); -extern void func_8016F470(s32 a0); -extern s32 func_8016F410(s32 a0); -extern void func_80175414(s32 _arg0); -extern s32 func_8016F4C4(s32); -extern s32 func_8016F494(s32 a0); -extern void func_8016F0E4(void); -extern s32 func_8016F4C4(s32 param_1); -extern void func_8016F4F4(void); -extern void func_801719A4(int a0, int a1); -extern void func_800D1724(s32 a0); -extern void func_80171928(void *a0); -extern void *D_8011F738; -extern void func_8016F4FC(void *a0); -extern void func_8014708C(void *a0); -extern void func_8016F540(void *a0); -extern void func_8016F578(s32 *a0); -extern void func_8016F5B0(void *a0); -extern void func_80147060(u8 *a0); -extern void func_8016F5E0(u8 *a0); -extern void func_8016F610(void *a0); -extern void func_8016F648(void *a0); -extern void func_8016F680(void *a0); -extern void func_8016F6B0(void *a0); -extern void (*D_80190960[])(void); -extern void func_8016F6E0(void *a0); -extern s32 func_80171990(u8 *a0); -extern void func_8016F764(void *a0); -extern void func_8016F71C(u8 *a0); -extern void (*D_80190968[])(void); -extern void func_8016F798(void *a0); -extern void func_8016F804(void *a0); -extern void func_8016F7D4(u8 *a0); -extern void func_80171928(void *); -extern void (*D_80190970[])(void); -extern void func_8016F834(void *a0); -extern void func_8016F8AC(u8 *a0); -extern void func_8016F870(u8 *a0); -extern void func_80172358(u8 *a0, u8 *a1); -extern void (*D_80190978[])(void); -extern void func_8016F8E4(void *a0); -extern void func_8016F95C(void *a0); -extern void func_8016F920(u8 *a0); -extern s32 func_80171CC4(void *a0, void *a1); -extern s32 func_80171D1C(void *a0, void *a1, s32 a2); -extern u16 D_8011F73E; -extern void (*D_80190980[])(void); -extern void func_8016F9C4(void *a0); -extern void func_80171B44(s32 *a0); -extern void func_8016FA44(s32 a0); -extern void func_8016FA00(s32 a0); -extern s32 func_80171C64(s32 a0, s32 a1); -extern void (*D_80190988[])(void); -extern void func_8016FA84(void *a0); -extern void func_8016FB10(void *a0); -extern void func_8016FAC0(u8 *a0); -extern void func_8016FB50(void *a0); -extern void (*D_80190994[])(void); -extern void func_8016FB7C(void *a0); -extern void func_8016FC24(); -extern void func_8016FBB8(s32 a0); -extern s32 func_80171B4C(s32 a0, s32 a1); -extern void func_8016FC24(s32 a0); -extern void func_8016FC64(void *a0); -extern void (*D_801909A0[])(void); -extern void func_8016FC90(void *a0); -extern void func_8016FD08(u8 *a0); -extern void func_8016FCCC(u8 *a0); -extern s32 func_80172658(s32 *a0); -extern void func_8016FD08(u8 *s0); -extern void func_8016FD7C(s32 *a0); -extern void (*D_801909AC[])(void); -extern void func_8016FDB4(void *a0); -extern void func_8016FE2C(u8 *a0); -extern void func_8016FDF0(u8 *a0); -extern void func_8016FE2C(u8 * a0); -extern s32 func_8016FE78(s32 *a0); -extern s32 func_80172664(s32 *a0); -extern void func_8016FED0(s32 *a0); -extern void (*D_801909BC[])(void); -extern void func_8016FF30(void *a0); -extern void func_8016FFA8(u8 *a0); -extern void func_8016FF6C(u8 *a0); -extern void (*D_801909CC[])(void); -extern void func_8016FFDC(void *a0); -extern void func_80170068(u8 *a0); -extern void func_80170018(u8 *a0); -extern void func_801700B8(u8 *a0); -extern void func_80170100(u8 *a0); -extern void (*D_801909D4[])(void); -extern void func_80170150(void *a0); -extern void func_801701C8(u8 *a0); -extern void func_8017018C(u8 *a0); -extern void func_801701C8(u8 * a0); -extern void (*D_801909DC[])(void); -extern void func_80170240(void *a0); -extern void func_801702B8(s32 a0); -extern void func_8017027C(u8 *a0); -extern s16 func_80171AB0(s32 a0, void *a1); -extern void (*D_801909E4[])(void); -extern void func_801702FC(void *a0); -extern void func_80170374(u8 *a0); -extern void func_80170338(u8 *a0); -extern s32 func_8014C168(s32 *a0, s32 a1); -extern void func_80170374(u8 * a0); -extern void (*D_801909EC[])(void); -extern void func_801703E0(void *a0); -extern void func_8017044C(u8 *a0); -extern void func_8017041C(u8 *a0); -extern void func_8017044C(u8 * a0); -extern void (*D_801909F4[])(void); -extern void func_801704B0(void *a0); -extern void func_8017051C(void *a0); -extern void func_801704EC(u8 *a0); -extern void (*D_801909FC[])(void); -extern void func_80170548(void *a0); -extern void func_801705C0(u8 *a0); -extern void func_80170584(u8 *a0); -extern void func_801705C0(u8 * a0); -extern void (*D_80190A04[])(void); -extern void func_801705F8(void *a0); -extern void func_80170670(void *a0); -extern void func_80170634(u8 *a0); -extern void func_8012A568(void (*a0)(void)); -extern void (*D_80190A0C[])(void); -extern void func_801706AC(void *a0); -extern void func_80170718(void *a0); -extern void func_801706E8(u8 *a0); -extern void func_80129FF4(void); -extern void (*D_80190A14[])(void); -extern void func_80170748(void *a0); -extern void func_801707D4(void *a0); -extern void func_80170784(u8 *a0); -extern s32 func_80174ED4(void); -extern void (*D_80190A1C[])(void); -extern void func_80170810(void *a0); -extern void func_801708B0(void *a0); -extern u8 D_800D5DA8; -extern void func_8017084C(s32 a0); -extern u8 D_800D5A34[]; -extern void func_80170AD8(void *a0); -extern void func_80171904(s32 a0); -extern void func_80170B48(int a0); -extern void func_80170928(void); -extern u8 D_800D59EC[]; -extern void func_80170970(void); -extern u8 D_800D599C[]; -extern void func_801709B8(void); -extern u8 D_800D5934[]; -extern void func_80170A00(void); -extern void func_80170A48(void); -extern u8 D_800D5DC0[]; -extern void func_80170A90(void); -extern void (*D_80190A24[])(void); -extern void func_80170B14(int a0); -extern void func_80170B90(u8 *a0); -extern void (*D_80190A2C[])(void); -extern void func_80170BD8(void *a0); -extern void func_80170C44(u8 *a0); -extern void func_80170C14(u8 *a0); -extern void (*D_80190A34[])(void); -extern void func_80170C74(void *a0); -extern s32 func_8017197C(u8 *a0); -extern void func_80170CF0(void *a0); -extern void func_80170CB0(u8 *a0); -extern void (*D_80190A3C[])(void); -extern void func_80170D68(void *a0); -extern void func_80170DE0(u8 *a0); -extern void func_80170DA4(u8 *a0); -extern s32 D_8011F73C; -extern s32 D_8011F740; -extern void func_801718AC(void *a0); -extern void func_80170DE0(u8 * _arg0); -extern void (*D_80190A44[])(void); -extern void func_80170E34(void *a0); -extern void func_80170EAC(u8 *a0); -extern void func_80170E70(u8 *a0); -extern int func_800D0F8C(int a0); -extern void func_80170EAC(u8 * _arg0); -extern void (*D_80190A4C[])(void); -extern void func_80170EFC(void *a0); -extern void func_80170F74(void *a0); -extern void func_80170F38(u8 *a0); -extern void (*D_80190A54[])(void); -extern void func_80170FB0(void *a0); -extern void func_80171028(void *a0); -extern void func_80170FEC(u8 *a0); -extern void (*D_80190A5C[])(void); -extern void func_80171064(void *a0); -extern void func_801710DC(u8 *a0); -extern void func_801710A0(u8 *a0); -extern u16 D_8011F73A; -extern void func_801710DC(u8 * arg0); -extern void (*D_80190A64[])(void); -extern void func_80171120(void *a0); -extern void func_8017118C(u8 *a0); -extern void func_8017115C(u8 *a0); -extern void func_80142454(s32 a0); -extern void func_8017118C(u8 * a0); -extern void (*D_80190A6C[])(void); -extern void func_801711C0(void *a0); -extern void func_80171238(void); -extern void func_801711FC(u8 *param_1); -extern void (*D_80190A74[])(void); -extern void func_80171260(void *a0); -extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80171384(void *a0); -extern void (*D_80190A7C[])(void); -extern void func_801714E4(void *a0); -extern void func_8017162C(void *a0); -extern void func_80171520(s32 a0); -extern s32 func_801716AC(s32 a0, void *a1, s32 *a2); -extern s32 func_80012FC8(s32 a0, s32 a1, s32 a2, s32 a3); -extern u8 D_800A5E94; -extern u8 D_800A5E95; -extern u8 D_800A5E96; -extern s32 func_801716AC(s32 a0, void * a1, s32 * a2); -extern int func_800D0FE0(int a0); -extern void func_801717A0(void *a0); -extern void func_8013E588(void *a0); -extern void func_801717F4(void *a0); -extern void func_80171824(void *a0); -extern void func_80171854(void *a0); -extern void func_80171884(void); -extern void func_80171A1C(u8 *a0); -extern void func_80171928(void * a0); -extern void func_8017196C(s32 *a0, s8 a1); -extern void func_80171A04(s32 *a0); -extern void func_80171A10(s32 *a0); -extern void func_80171A34(s32 *a0, s8 a1); -extern s32 func_80171A44(u8 *a0); -extern s32 func_80171A58(u8 *a0); -extern s32 func_80171A6C(u8 *a0); -extern void func_80171A80(s32 *a0, s32 a1); -extern s32 func_80171A88(s32 a0); -extern s16 func_80171AB0(s32 param_1, void * _arg1); -extern void func_80171B10(void *a0); -extern void func_80171EC8(s32 a0); -extern s32 func_80171C64(s32 param_1, s32 param_2); -extern s32 func_80171D78(s32 a0, s32 a1); -extern int func_8017250C(short *a0, short *a1); -extern s32 func_80171CC4(void * a0, void * a1); -extern s32 func_80171FFC(short *a0, short *a1, s32 a2); -extern s32 func_80171D1C(void * a0, void * a1, s32 a2); -extern s32 func_8017248C(s32 a0, s32 a1); -extern s32 func_80171E08(s32 arg0, s32 arg1, s32 arg2); -extern s32 func_80047948(s32 a0); -extern s32 func_8004787C(s32 a0); -extern void func_80172170(s32 a0, s32 a1); -extern s32 func_8017209C(void *arg0, void *arg1, s32 arg2, s32 arg3); -extern void func_801722CC(s32 *a0); -extern void func_80172304(s32 *a0); -extern void func_80172310(u8 *a0); -extern void func_801723C4(s32 param_1, s32 param_2); -extern void func_80161C24(s32, s32); -extern void func_80172414(s32 a0); -extern s32 func_801724EC(s32 a0); -extern s32 func_8017248C(s32 arg0, s32 arg1); -extern s32 func_80013450(s32); -extern s32 func_80172560(u8 *a0, u8 *a1); -extern s32 func_8017261C(u8 *a0); -extern s32 func_80172644(u8 *a0); -extern s32 func_80172670(s32 *a0); -extern s32 func_80172688(s32 *a0); -extern s32 func_80172694(s32 *a0); -extern s32 func_801726A0(s32 *a0); -extern s32 func_801726AC(s32 *a0); -extern s32 func_801726B8(s32 *a0); -extern s32 func_801726C4(s32 *a0); -extern s32 func_80172760(s32 a0); -extern s32 func_80174650(s32); -extern void (*D_80127088)(void); -extern s32 D_801270BC; -extern s16 D_80126B0C; -extern void func_801726D0(void * _arg0); -extern void func_80172710(void); -extern void func_80174684(void *); -extern void func_80172738(void); -extern s16 D_80126B30; -extern s32 func_801727D0(void *a0); -extern void func_80172780(void *a0); -extern void func_80172844(u8 *a0); -extern void func_8017280C(u8 *a0); -extern void func_8017288C(void); -extern s32 func_801728E4(void *a0); -extern void func_80172894(void *a0); -extern void func_80172958(u8 *a0); -extern void func_80172920(u8 *a0); -extern s16 D_80126B36; -extern void func_80172958(u8 * a0); -extern void func_801729A8(void); -extern s32 func_801729F0(void *a0); -extern s16 D_80126B34; -extern s16 D_80126B32; -extern void func_801729B0(s32 a0); -extern void func_80172A8C(void *a0); -extern void func_80172A2C(int param_1); -extern void func_80172ACC(u8 *a0); -extern void func_80172B0C(void); -extern s32 func_80172B44(void *a0); -extern void func_80172B14(s16 a0); -extern s32 D_801150F8; -extern void func_80172BC8(void *a0); -extern void func_80172B80(u8 *a0); -extern void func_80172C48(void); -extern void (*D_80190AC0[])(void); -extern void func_80172CA0(void *a0); -extern void func_80172D14(u8 *a0); -extern void func_80172CDC(u8 *a0); -extern void func_80172D14(u8 * a0); -extern void func_80172D60(void); -extern s32 D_80127508; -extern s32 func_80172DAC(void *a0); -extern void func_80172D68(s32 a0); -extern void func_80172E20(u8 *a0); -extern void func_80172DE8(u8 *a0); -extern void func_80172E20(u8 * a0); -extern void func_80172E8C(void); -extern void func_8017303C(void *); -extern void func_80172E94(void); -extern void func_80172ED4(void); -extern void func_80172EFC(void); -extern void func_80172F24(void); -extern u8 D_800D47F4[]; -extern void func_80172F4C(void); -extern void func_80172F9C(void); -extern u8 D_800D5C6C[]; -extern void func_80172FEC(void); -extern s32 func_80173078(void *a0); -extern void func_8017303C(void * a0); -extern void func_801730FC(struct S801730FC *a0); -extern void func_801730B4(s32 a0); -extern void func_8017316C(void); -extern s32 func_8017319C(void *a0); -extern void func_80173174(void); -extern u8 D_800D5AA0[]; -extern void func_80173220(void *a0); -extern void func_801731D8(s32 *a0); -extern M2C_UNK D_80190A84; -extern void func_80173220(void * arg0); -extern void func_80173294(void); -extern void func_801732C4(); -extern void func_8017329C(void); -extern void func_801732C4(s32 *a0); -extern void func_8017331C(); -extern void func_801732F4(void); -extern void func_8017331C(s32 *a0); -extern void func_80173374(); -extern void func_8017334C(void); -extern void func_80173374(s32 *a0); -extern void func_801733A4(void); -extern void func_801733CC(s32 a0); -extern void func_801734BC(s32 a0, s32 a1); -extern s16 D_80126B3E; -extern void func_80173460(s32 a0, s32 a1); -extern void func_801734BC(s32 arg0, s32 _unused1); -extern void (*D_80190AF0[])(void); -extern void func_80173544(void *a0); -extern void func_801735B8(u8 *a0); -extern void func_80173580(u8 *a0); -extern s16 D_80126B40; -extern void func_801735EC(void *a0); -extern void func_80173648(u8 *a0); -extern void func_801736A8(void); -extern s32 func_8014C118(void *a0, s32 a1, s32 a2); -extern s32 func_801736FC(void *a0); -extern void func_801736B0(s32 a0, s32 a1); -extern void func_80173770(u8 *a0); -extern void func_80173738(u8 *a0); -extern void func_801723C4(s32 a0, s32 a1); -extern void func_801737B0(void); -extern s32 func_801737E8(void *a0); -extern void func_801737B8(s16 a0); -extern void func_8017385C(u8 *a0); -extern void func_80173824(u8 *a0); -extern void func_801738D4(void); -extern s32 func_8017390C(void *a0); -extern void func_801738DC(s16 a0); -extern void func_80173980(u8 *a0); -extern void func_80173948(u8 *a0); -extern void func_801739D8(u8 *a0); -extern void func_80173A20(void); -extern s32 D_8012750C; -extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); -extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); -extern void (*D_80190B2C[])(void); -extern void func_80173B4C(void *a0); -extern void func_80173BC0(u8 *a0); -extern void func_80173B88(u8 *a0); -extern void func_80173C64(u8 *a0); -extern void func_80173E1C(s32 a0); -extern s16 D_80126938; -extern s16 D_80126B3A; -extern void func_800D128C(s32, s32); -extern void func_80174158(s32 a0); -extern void func_8002A088(s32); -extern void func_8002A2D4(s32); -extern void func_8002A544(s32); -extern void func_8002A7B4(s32); -extern s32 func_80174188(s32 a0); -extern void func_801741A8(s32 a0); -extern s32 func_800D0EC4(void); -extern void func_800D0F0C(s32, s32); -extern void func_80145EE8(s32); -extern void func_80173EF8(void *param_1); -extern s32 func_8014BCEC(s32, s32); -extern void func_801741A8(s32 _arg0); -extern s16 D_80126B3C; -extern s16 D_8011F9C8; -extern void func_801741EC(u8 *a0); -extern void func_80174274(void); -extern s32 func_801742A4(void *a0); -extern void func_8017427C(void); -extern void func_80174318(u8 *a0); -extern void func_801742E0(u8 *a0); -extern void func_80174354(void); -extern s32 func_80174384(void *a0); -extern void func_8017435C(void); -extern void func_801743F0(u8 *a0); -extern void func_801743C0(u8 *a0); -extern void func_801743F0(u8 * a0); -extern void func_80174430(void); -extern s32 func_80174474(void *a0); -extern void func_80174438(s32 a0); -extern void func_801744E0(u8 *a0); -extern void func_801744B0(u8 *a0); -extern void func_80174524(void); -extern void func_80174554(); -extern void func_8017452C(void); -extern void func_80174554(s32 arg0); -extern void func_801745AC(); -extern void func_80174584(void); -extern void func_801745AC(s32 *a0); -extern void func_80174604(void); -extern void func_801745DC(void); -extern void func_80174630(void); -extern s32 func_80174650(s32 _arg0); -extern void func_80174674(void); -extern void func_801746A4(void); -extern s32 func_800CF8CC(void); -extern void func_80174714(void); -extern s32 func_80174754(void); -extern s16 func_80174764(void); -extern s16 func_80174774(void); -extern s32 func_801747CC(void *a0); -extern void func_80174784(void); -extern s32 func_801747AC(s32 a0); -extern s32 func_80174808(u8 *a0); -extern void func_8017481C(void); -extern s32 func_80174888(void *a0); -extern void func_80174824(void); -extern void func_8017484C(s32 a0); -extern void func_801748C4(s32 a0); -extern void func_801748E4(void); -extern void func_8012A018(s32 a, s32 b); -extern s32 func_8017496C(void *a0); -extern void func_801748EC(void); -extern s32 func_801749C8(); -extern s32 func_801749A8(s32 a0); -extern void func_80174BBC(void *a0); -extern void func_8012A0E0(void); -extern void func_80174BF4(void *a0); -extern void (*D_80190B84[])(); -extern void func_80174BF4(void * arg0); -extern s32 func_80174CB0(s32, s32); -extern s32 func_80174C60(s32 a0); -extern void func_80174C80(s32 a0); -extern s32 D_8012697C; -extern u16 D_80126980; -extern s32 func_80174F28(void *a0); -extern void func_80174E9C(s32 a0); -extern void func_80174EF0(s32 a0, s16 a1); -extern s32 func_80175014(u8 *a0, u8 *a1, s32 a2); -extern void func_80174F64(u8 *a0); -extern void func_80174FBC(u8 *a0); -extern s32 func_8017509C(u8 *a0, s32 a1, u8 *a2, u8 *a3); -extern void func_80175184(s32 *a0); -extern void func_80175114(s32 *a0); -extern void func_80175184(); -extern void func_80175150(s32 *a0); -extern void (*D_80190B94[])(void*); -extern s32 func_80175268(s32); -extern void func_80175184(s32* arg0); -extern s32 func_80175218(void *a0); -extern void func_801751D8(void *a0); -extern void (*D_80190B9C[])(s32); -extern s32 func_80175218(void * param_1); -extern void func_801752BC(s32 *a0); -extern u8 D_8011F7A8; -extern u8 D_8011F7A9; -extern u8 D_8011F7AD; -extern u8 D_8011F7AE; -extern void func_80175414(s32 _arg0); -extern void func_80175494(void); -extern void (*D_80190D04[])(); -extern s32 func_801758FC(void); -extern s32 func_80175820(void); -extern s32 func_801759D8(void); -extern void func_8017553C(s32 *param); -extern void func_801757A0(s32 a0); -extern short D_800B9A02; -extern void func_80175590(void *arg0); -extern s16 D_800B9A02; -extern void func_801757A0(s32); -extern void func_80175624(void *a0); -extern void func_801757E0(int); -extern void func_80175668(void); -extern void (*D_80190D10[])(); -extern void func_80175690(s32 *param); -extern void func_80175DA8(s32 a0); -extern void func_80175AB8(s32 a0); -extern void func_80176144(s32 a0); -extern void func_801756E4(s32 arg0); -extern void func_80175798(void); -extern void func_80176734(s32 a0); -extern void func_80176218(s32 a0); -extern void func_80176D00(s32 a0); -extern void func_801757E0(s32 a0); -extern s32 func_80178004(s32 a0, s32 a1, s32 a2); -extern u8 D_8011F7B1; -extern u16 D_8011F7B4; -extern u16 D_8011F7B6; -extern s16 D_8011F81E; -extern void *func_80177784(void *a0, s32 a1, s32 a2, s32 a3); -extern u32 func_801783D0(s32 a0, s32 a1); -extern void *func_801777BC(void *a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern u16 D_8011F82C; -extern u16 D_8011F82A; -extern u32 * func_80176D94(void *param_1, u32 param_2, s16 param_3_); -extern void func_801778A8(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80176FF4(s32 a0); -extern u16 D_8011F830; -extern u16 D_8011F82E; -extern u32 * func_801770E0(void *param_1, u32 param_2, s16 param_3_); -extern void func_80177340(s32 a0); -extern u8 D_8011F837; -extern u8 D_8011F7F0; -extern u8 D_8011F7AB; -extern u32 * func_8017742C(u32 *param_1, s32 param_2, s32 param_3); -extern void func_801776EC(u8 *a0); -extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); -extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); -extern void func_80177F84(s32 param_1, s32 param_2); -extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); -extern M2C_UNK D_801ECAE0; -extern void func_80178438(u16 *arg0); -extern void func_801787D4(void); -extern void func_8012A908(void); -extern void func_8017869C(s32 a0); -extern void func_80130D0C(s32 a0); -extern void func_8013E370(void); -extern s32 D_8011DB08; -extern void func_8017849C(void); -extern void func_8013E4B4(void); -extern s16 D_801270C4; -extern s32 D_801274D8; -extern s16 D_801270C2; -extern u8 D_801270C6; -extern u8 D_801270C7; -extern s32 D_801274DC; -extern s32 D_801274E0; -extern void func_80178608(void); -extern void func_80178744(s32 a0, s32 a1); -extern void func_80178840(); -extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); -extern void func_8012E8E0(s32 a0, s32 a1); -extern void func_8012B2CC(s32 a0); -extern s32 func_801788B8(s32 arg0, s32 arg1); -extern s32 func_801789AC(s32 arg0); -extern s16 D_801EF3F0; -extern int func_80178970(void); -extern s32 func_80178B18(s32 param_1, s32 param_2); -extern s32 func_80178B70(s32 param_1, s32 param_2); -extern void func_80178BB8(s32 a0, s32 a1); -extern s32 func_80178BF8(); -extern short D_801EF464; -extern void func_80178D18(void); -extern s32 func_80178D40(s32 arg0, s32 arg1); -extern void func_80179B28(s32 a0); -extern void func_80179B74(u16 *p); -extern void func_80179D30(u16 *a0); -extern void func_80179D78(u16 *a0); -extern void func_80179B74(u16 *p); -extern void func_80179DCC(short a0); -extern void func_80179DF8(void); -extern void func_80179E1C(short a0); -extern void func_80179E48(s16 a0); -extern void func_80179E74(s16 a0); -extern void func_80179EA0(u16 *a0); -extern void func_80179B74(u16 *p); -extern void func_80179EE8(short a0); -extern void func_80179F14(s16 a0, s16 a1); -extern void func_80179F44(void); -extern void func_80179F6C(short a0); -extern void func_80179F98(u16 *a0); -extern void func_80179FEC(u16 *a0); -extern void func_8017A040(u16 *a0); -extern s32 D_801EE5F4; -extern void func_8017A094(s32 arg0); -extern void func_8017A0C4(s32 arg0); -extern void func_8017A0F4(void); -extern void func_8017A11C(void); -extern s32 D_801EE61C; -extern void func_8017A144(s32 a0); -extern void func_8017A180(void); -extern void func_8017A1A8(void); -extern void func_8017A1D0(void); -extern void func_8017A1F8(void); -extern void func_8017A220(void); -extern void func_8017A248(void); -extern void func_8017A270(void); -extern void func_8017A298(void); -extern void func_8017A2C0(void); -extern void func_8017A2E8(void); -extern void func_8017A310(void); -extern void func_8017A338(void); -extern void func_8017A360(void); -extern void func_8017A388(void); -extern s16 D_801EE5D8; -extern s32 func_8017A3B0(void); -extern short D_801EE614; -extern short D_801EE610; -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); -extern int func_8017A3D8(void); -extern void func_80172310(u8*); -extern void func_80172780(void*); -extern void func_80172894(void*); -extern void func_801729B0(s32); -extern void func_80172B14(s16); -extern void func_80172C50(u16 *); -extern void func_80172D68(s32); -extern void func_801733FC(s16, u16 *); -extern void func_80173460(s32, s32); -extern void func_801734BC(s32, s32); -extern void func_801736B0(s32, s32); -extern void func_801737B8(s16); -extern void func_801738DC(s16); -extern void func_80173A28(s32, s32, s32, s32, s32, s32); -extern void func_80174438(s32); -extern void func_8017A4AC(void); -extern s32 func_8017AD0C(s32 arg0); -extern s32 func_8017AD0C(s32); -extern s32 func_8017ADE8(s32 a0); -extern s32 func_8017AE08(void); -/* ==== end §8b carried decl layer ==== */ - - -extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); -extern void func_8012B178(s32 a0, s32 a1); -extern void func_8012AD80(s32 a0); -extern s32 func_8012B030(u8 *a0); -extern s32 func_8012B744(void *a0, void *a1); -extern s32 func_8012BE98(s32 a0, u16 *a1); -extern s32 func_80012A60(s32 a0, s32 a1); - -extern s16 D_801EF3A8; -extern s16 D_801EF3AA; -extern s16 D_801EF3B4; - -void func_8017AE2C(s32 param_1) { - register s32 pv __asm__("$16") = param_1; - register s16 *g __asm__("$17") = &D_801EF3A8; - - switch (g[0]) { - case 0: - default: - return; - case 1: - g[1] = (u16)g[1] - 1; - if (g[1] <= 0) { - *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) = (u16)g[2]; - goto reset_both; - } - { - s32 r = func_8012B608(*(s16 *)(*(s32 *)(pv + 0x20) + 0x12), g[2], 6); - *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) = - *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) + r; - } - return; - case 2: - func_8012B178(pv, (s32)g[4] << 8); - func_8012AD80(pv); - *(u16 *)(pv + 0xA) -= 8; - func_8012B030((u8 *)pv); - break; - case 3: - if (g[1] != 0) { - if (g[5] != 0) { - void *p = (void *)(pv + 4); - if ((s16)func_80012A60(*(s16 *)(*(s32 *)(pv + 0x20) + 0x12), - (s16)func_8012B744(p, &g[6])) < 0x100) { - g[1] = 0; - } - *(s16 *)(*(s32 *)(pv + 0x20) + 0x12) = - func_8012B744(p, &D_801EF3B4); - func_8012B178(pv, 0xFFFA0000); - func_8012AD80(pv); - *(u16 *)(pv + 0xA) -= 8; - func_8012B030((u8 *)pv); - /* &D_801EF3A8+0xC == &D_801EF3B4; distinct rtx defeats gcc's address-CSE - so BE98's arg rematerializes instead of sharing the store's reg (byte-gate). */ - if (func_8012BE98(pv, (u16 *)((s32)&D_801EF3A8 + 0xC)) < 0x101) { - D_801EF3A8 = 0; - D_801EF3AA = 0; - } - } - { - s32 t = func_8012B744((void *)(pv + 4), &g[6]); - s32 r = func_8012B608(*(s16 *)(*(s32 *)(pv + 0x20) + 0x12), t, g[3]); - *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) = - *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) + r; - } - g[1] = (u16)g[1] - 1; - if (g[1] > 0) { - return; - } - g[1] = 0; - return; - } - *(s16 *)(*(s32 *)(pv + 0x20) + 0x12) = - func_8012B744((void *)(pv + 4), &D_801EF3B4); - func_8012B178(pv, 0xFFFA0000); - func_8012AD80(pv); - *(u16 *)(pv + 0xA) -= 8; - func_8012B030((u8 *)pv); - /* see note above: distinct rtx for the same address defeats address-CSE. */ - if (func_8012BE98(pv, (u16 *)((s32)&D_801EF3A8 + 0xC)) < 0x101) { - D_801EF3A8 = 0; - D_801EF3AA = 0; - } - return; - case 4: - func_8012AD80(pv); - } - g[1] = (u16)g[1] - 1; - if (g[1] > 0) { - return; - } -reset_both: - g[0] = 0; - g[1] = 0; - return; -} - -// @class: plumbing -// @stuck: none — MATCH - - -void func_8017B0E4(int param_1, int param_2) -{ - extern s16 D_801EE654; - extern s16 D_801EE656; - extern s16 D_801EE658; - extern s16 D_801EE64C; - extern s16 D_801EE64E; - extern s16 D_801EE650; - - *(s32 *)(((s32)param_1) + 0x48) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x48), (s32)D_801EE654, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x4C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x4C), (s32)D_801EE656, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x50) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x50), (s32)D_801EE658, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x3C) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x3C), (s32)D_801EE64C, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x40) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x40), (s32)D_801EE64E, (s32)((s16)param_2)); - *(s32 *)(((s32)param_1) + 0x44) = (s16)func_80012C6C((s32)*(s16 *)(((s32)param_1) + 0x44), (s32)D_801EE650, (s32)((s16)param_2)); -} - - - -extern s16 D_801EE5DC; -extern u16 D_801EE65C; -extern u16 D_801EE65E; -extern u16 D_801EE660; -extern s16 D_801EF3F0; - -void func_8017B1D8(void) { - /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every - LATER function in this TU, which blocks a byte-true decl of a different type. - Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ - extern u16 D_80126B5E; - extern u16 D_80126B66; - extern u16 D_80126B62; - func_8012A418(); - D_801EF3F0 = 0; - D_801EE5DC = 0; - D_801EE65C = D_80126B5E; - D_801EE65E = D_80126B62; - D_801EE660 = D_80126B66; -} - - -// @class: regalloc-order — simplified sibling of matched func_8017B614. -// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move -// (unaligned lwl/lwr/swl/swr), ZERO memcpy-symbol reference, so the TU's `extern memcpy` -// (which turned the old draft's memcpy into a CALL -> DIFF 64) can't drift this. -// $16 pin + in-place re-tie keeps param_2 in $a1 until the >=0xB branch, then $s0 for loads. - - -s32 func_8017B238(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190E4C[]; - extern s16 D_801EE654; - extern s16 D_801EE64C; - extern u8 D_8012694C; - - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B238_8017B238 *)&buf[0] = *(Blk8_8017B238_8017B238 *)src; - *(Blk8_8017B238_8017B238 *)&buf[8] = *(Blk8_8017B238_8017B238 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190E4C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190E4C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EE654; - s16 *p78C = &D_801EE64C; - *(Blk8_8017B238_8017B238 *)p794 = *(Blk8_8017B238_8017B238 *)&buf[0]; - *(Blk8_8017B238_8017B238 *)p78C = *(Blk8_8017B238_8017B238 *)&buf[8]; - func_8012A018((s32)func_8017BE60, 0); - D_8012694C = 0; - D_801EF3F0 = 1; - D_801EE5DC = 0; - } -} - - - -// @class: struct -// @stuck: none — MATCH (74 ins) - - /* 8 bytes, align 2 -> lwl/lwr/swl/swr copy */ - /* 16-byte stride array element */ - - - -s32 func_8017B368(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801EE5FC; - extern SV4_8017B368 D_801EE604; - extern s16 D_801EE654; - extern s16 D_801EE64C; - extern u16 D_80190E4C; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801EE5FC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801EE604; - } else { - s32 ax = (s32)&((Pair16_8017B368 *)&D_80190E4C)[n].x; - s32 ay = (s32)&((Pair16_8017B368 *)&D_80190E4C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801EE654) = loc0; - (*(SV4_8017B368 *)&D_801EE64C) = loc1; - D_801EF3F0 = 1; - D_801EE5DC = 0; -} - - - - - -s32 func_8017B490(s32 param) -{ - extern void func_8017BA3C(s32 param_1, s32 param_2); - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern SV4_8017B368 D_801EE5FC; - extern SV4_8017B368 D_801EE604; - extern s16 D_801EE654; - extern s16 D_801EE64C; - extern u16 D_80190E4C; - extern s16 D_801EE5DC; - extern s16 D_801EF3F0; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - extern s32 D_80126990; - extern s32 D_80126994; - extern s32 D_80126998; - - SV4_8017B368 loc0; - SV4_8017B368 loc1; - u32 n = (u32)&D_801EE5FC; - - ((void (*)(void))func_8017BA3C)(); - - if (n >= 0xB) { - loc0 = *(SV4_8017B368 *)n; - loc1 = D_801EE604; - } else { - s32 ax = (s32)&((Pair16 *)&D_80190E4C)[n].x; - s32 ay = (s32)&((Pair16 *)&D_80190E4C)[n].y; - func_8012F214(param, ax, (s32)&loc0); - func_8012F214(param, ay, (s32)&loc1); - } - - (*(SV4_8017B368 *)&D_801EE654) = loc0; - (*(SV4_8017B368 *)&D_801EE64C) = loc1; - D_801EF3F0 = 1; - D_801EE5DC = 0x1E; - D_80126990 = (*(SV4_8017B368 *)&D_801EE654).a; - D_80126994 = (*(SV4_8017B368 *)&D_801EE654).b; - D_80126998 = (*(SV4_8017B368 *)&D_801EE654).c; - D_80126984 = (*(SV4_8017B368 *)&D_801EE64C).a; - D_80126988 = (*(SV4_8017B368 *)&D_801EE64C).b; - D_8012698C = (*(SV4_8017B368 *)&D_801EE64C).c; -} - - -// @class: regalloc-order + T1 memcpy-builtin→call re-crack -// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps -// param_2 in $a1 until the branch, then $s0 for the loads). Block-moves are align-1 struct-assigns -// (u8[8]) so they lower via emit_block_move (movstrsi/move_by_pieces) with ZERO memcpy-symbol -// reference — TU-independent, so the sibling TU's `extern memcpy` (which disables the builtin and -// turned the old inlined block-move into a CALL) can no longer drift this. - - - - -s32 func_8017B614(s32 param_1, s32 param_2) -{ - extern void func_8012F214(s32 a0, s32 a1, s32 a2); - extern void func_80129CF8(void); - extern s32 func_8017BE60(void *a0); - extern u8 D_80190E4C[]; - extern s16 D_801EE654; - extern s16 D_801EE656; - extern s16 D_801EE658; - extern s16 D_801EE64C; - extern s16 D_801EE64E; - extern s16 D_801EE650; - extern u8 D_8012694C; - extern s32 D_80126998; - extern s32 D_80126984; - extern s32 D_80126988; - extern s32 D_8012698C; - - u8 buf[16]; - - if (((u32)param_2) >= 0xB) { - register u8 *src __asm__("$16"); - __asm__ __volatile__("" : "=r"(src) : "0"((u8 *)((u32)param_2))); - *(Blk8_8017B614 *)&buf[0] = *(Blk8_8017B614 *)src; - *(Blk8_8017B614 *)&buf[8] = *(Blk8_8017B614 *)(src + 8); - } else { - s32 a1addr = (s32)&D_80190E4C[((u32)param_2) * 0x10]; - s32 a2addr = (s32)&D_80190E4C[((u32)param_2) * 0x10 + 8]; - func_8012F214(param_1, a1addr, (s32)&buf[0]); - func_8012F214(param_1, a2addr, (s32)&buf[8]); - } - { - s16 *p794 = &D_801EE654; - s16 *p78C = &D_801EE64C; - *(Blk8_8017B614 *)p794 = *(Blk8_8017B614 *)&buf[0]; - *(Blk8_8017B614 *)p78C = *(Blk8_8017B614 *)&buf[8]; - ((void(*)(s32, s32))func_8012A018)((s32)func_8017BE60, 0); - { - s32 v794, v796, v798, v78C, v78E, v790; - D_8012694C = 0; - v794 = *p794; - v796 = D_801EE656; - v798 = D_801EE658; - v78C = *p78C; - v78E = D_801EE64E; - v790 = D_801EE650; - __asm__ __volatile__(""); - D_801EF3F0 = 1; - D_801EE5DC = 0x1E; - D_80126990 = v794; - D_80126994 = v796; - D_80126998 = v798; - D_80126984 = v78C; - D_80126988 = v78E; - D_8012698C = v790; - } - func_80129CF8(); - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EE5DC; -extern s16 D_801EE654; -extern s16 D_801EE656; -extern s16 D_801EE658; -extern s16 D_801EE64C; -extern s16 D_801EE64E; -extern s16 D_801EE650; - -void func_8017B7A8(void) -{ - D_8012694C = 1; - D_801EE5DC = 0; - D_801EE654 = (s16) D_80114F30; - D_801EE656 = (s16) D_80114F34; - D_801EE658 = (s16) D_80114F38; - D_801EE64C = (s16) D_80114F24; - D_801EE64E = (s16) D_80114F28; - D_801EE650 = (s16) D_80114F2C; -} - - - - -extern s32 D_801151D4; -extern s16 D_801EE66C; -extern s16 D_801EE66E; -extern s16 D_801EE670; -extern s16 D_801EE674; -extern s16 D_801EE676; -extern s16 D_801EE678; - -void func_8017B824(void) { - D_801EE66C = (s16) M2C_FIELD(D_801151D4, s32 *, 0x48); - D_801EE66E = (s16) M2C_FIELD(D_801151D4, s32 *, 0x4C); - D_801EE670 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x50); - D_801EE674 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x3C); - D_801EE676 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x40); - D_801EE678 = (s16) M2C_FIELD(D_801151D4, s32 *, 0x44); -} - - - -// @class: schedule -// @stuck: none — MATCH - -extern s16 D_801EE66C; -extern s16 D_801EE66E; -extern s16 D_801EE670; -extern s16 D_801EE674; -extern s16 D_801EE676; -extern s16 D_801EE678; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -void func_8017B880(void) -{ - D_80114F30 = D_801EE66C; - D_80114F34 = D_801EE66E; - D_80114F38 = D_801EE670; - D_80114F24 = D_801EE674; - D_80114F28 = D_801EE676; - D_80114F2C = D_801EE678; -} - - -// @class: struct -// @stuck: none — MATCH - -/* 16-byte unaligned block copy from param to two adjacent align-1 globals. - src[0..7] -> (*(S8_8017B8E8 *)&D_801EE654), src[8..15] -> (*(S8_8017B8E8 *)&D_801EE64C) (source order). - An 8-byte struct of u8 has alignment 1, so gcc copies it via lwl/lwr+swl/swr. */ - - - -s32 func_8017B8E8(s32 src) { - (*(S8_8017B8E8 *)&D_801EE654) = ((S8_8017B8E8 *)src)[0]; - (*(S8_8017B8E8 *)&D_801EE64C) = ((S8_8017B8E8 *)src)[1]; -} - - - - -// @class: struct -// @stuck: none — MATCH (63 ins) - -extern u16 D_801EE65C; -extern u16 D_801EE65E; -extern u16 D_801EE660; - -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; - -extern u8 D_8012694C; -extern s16 D_801EE5DC; -extern short D_801EE664; -extern short D_801EE666; -extern short D_801EE668; -extern s16 D_801EE654; -extern s16 D_801EE656; -extern s16 D_801EE658; -extern s16 D_801EE64C; -extern s16 D_801EE64E; -extern s16 D_801EE650; - -void func_8017B940(void) -{ - /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every - LATER function in this TU, which blocks a byte-true decl of a different type. - Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ - extern u16 D_80126B5E; - extern u16 D_80126B66; - extern u16 D_80126B62; - s32 buf[3]; - - D_8012694C = 2; - buf[0] = (*(s16 *)&D_80126B5E) - (*(s16 *)&D_801EE65C); - buf[1] = (*(s16 *)&D_80126B62) - (*(s16 *)&D_801EE65E); - buf[2] = (*(s16 *)&D_80126B66) - (*(s16 *)&D_801EE660); - (*(s16 *)&D_801EE664) = buf[0]; - (*(s16 *)&D_801EE666) = buf[1]; - (*(s16 *)&D_801EE668) = buf[2]; - D_801EE654 = D_80114F30 + buf[0]; - D_801EE5DC = 0; - D_801EE656 = D_80114F34 + buf[1]; - D_801EE658 = D_80114F38 + buf[2]; - D_801EE64C = D_80114F24 + buf[0]; - D_801EE64E = D_80114F28 + buf[1]; - D_801EE650 = D_80114F2C + buf[2]; -} - - - -// @class: struct -// @stuck: none — MATCH (62 ins) - -extern void func_8012F214(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -/* short-only (align 2) struct -> the 8-byte struct copy emits lwl/lwr/swl/swr */ - -/* PSX MATRIX_L48: 3x3 short rotation + pad + 3 long translation (offset 0x14) */ - -extern SV4 D_801EE5FC; -extern SV4 D_801EE604; - -void func_8017BA3C(s32 param_1, s32 param_2) -{ - SV4 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX mtx; /* sp+0x18 : MATRIX_L48, t[] at sp+0x2c */ - SV4 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4 svec; /* sp+0x40 : func_8012F214 out */ - SV4 buf1; /* sp+0x48 : RotTransSV arg1 (-> D_801EE604) */ - SV4 buf2; /* sp+0x50 : RotTransSV arg2 */ - - func_8012F214(param_1, param_2, (s32)&svec); - D_801EE5FC = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - D_801EE604 = buf1; -} - - -// @class: struct -// @stuck: none — MATCH (65 ins) -#include "common.h" - - - - -s32 func_8017BB34(s32 param_1, s32 param_2) -{ - SV4_8017BB34 v0; /* sp+0x10 : func_80049CAC arg0 */ - MTX_8017BB34 mtx; /* sp+0x18 : MATRIX_L48, t[] at sp+0x2c */ - SV4_8017BB34 v1; /* sp+0x38 : RotTransSV arg0 */ - SV4_8017BB34 svec; /* sp+0x40 */ - SV4_8017BB34 buf1; /* sp+0x48 : RotTransSV arg1 (-> (*(SV4_8017BB34*)&D_801EE604)) */ - SV4_8017BB34 buf2; /* sp+0x50 : RotTransSV arg2 */ - - svec = *(SV4_8017BB34 *)param_2; - (*(SV4_8017BB34*)&D_801EE5FC) = svec; - - v0.a = -*(s16 *)(param_2 + 0xc); - v0.b = *(u16 *)(param_2 + 8); - v0.c = 0; - v1.a = 0; - v1.b = 0; - v1.c = -*(s16 *)(param_2 + 0xa); - ((void (*)(void *, void *))func_80049CAC)(&v0, &mtx); - - mtx.t[0] = (s32)svec.a; - mtx.t[1] = (s32)svec.b; - mtx.t[2] = (s32)svec.c; - func_8004914C(&mtx); - func_800491AC(&mtx); - - RotTransSV(&v1, &buf1, &buf2); - (*(SV4_8017BB34*)&D_801EE604) = buf1; -} - - - - -// @class: regalloc-order -// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0 - -extern void (*D_801EE624[10])(int); - -void func_8017BC38(int param_1) -{ - register int i __asm__("$17"); - register void (**p)(int) __asm__("$16"); - - i = 0; - p = D_801EE624; - do { - if (*p != (void (*)(int))0) { - (*p)(param_1); - } - i = i + 1; - p = p + 1; - } while (i < 10); - return; -} - - - - -// @class: plumbing -// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow - -extern void func_8017B0E4(int, int); -extern s16 D_801EE5DC; -extern s16 D_801EF3F0; - -void func_8017BCA0(int param_1) { - func_8017B0E4(param_1, 0xC); - D_801EE5DC = D_801EE5DC + 1; - if (D_801EE5DC >= 0x1F) { - D_801EF3F0 = 2; - } -} - - - - -// @class: plumbing -// @stuck: none — MATCH expected (simple short-increment + guarded call) - -extern s16 D_801EE5DC; -extern s16 D_801EF3F0; - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -void func_8017BCF4(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EE5DC = D_801EE5DC + 1; - if (0x18 < D_801EE5DC) { - func_8012A4BC(); - D_801EF3F0 = 0; - } - return; -} - - - - -// @class: regalloc-order -// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm) - -extern void func_8017B0E4(int, int); -extern void func_8012A4BC(void); - -extern s16 D_801EE5DC; -extern void (*D_801EE620)(void); -extern short D_801EE664; -extern short D_801EE666; -extern short D_801EE668; -extern s16 D_801EF3F0; - -extern s32 D_80114F24; -extern s32 D_80114F28; -extern s32 D_80114F2C; -extern s32 D_80114F30; -extern s32 D_80114F34; -extern s32 D_80114F38; - -void func_8017BD50(int param_1) -{ - func_8017B0E4(param_1, 6); - D_801EE5DC = D_801EE5DC + 1; - if (D_801EE5DC >= 0x19) { - if (D_801EE620 != 0) { - (*D_801EE620)(); - } else { - D_80114F30 = D_80114F30 + D_801EE664; - D_80114F34 = D_80114F34 + D_801EE666; - D_80114F38 = D_80114F38 + D_801EE668; - D_80114F24 = D_80114F24 + D_801EE664; - D_80114F28 = D_80114F28 + D_801EE666; - D_80114F2C = D_80114F2C + D_801EE668; - func_8012A4BC(); - } - D_801EF3F0 = 0; - } -} - - - -extern void (*D_80190EEC[])(void); - -void func_8017BE60(void *a0) { - D_80190EEC[*(u8 *)((s32)a0 + 0x4)](); -} - - - -extern void (*D_80190F8C[])(void); - -void func_8017BE9C(void *a0) { - D_80190F8C[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80190F94[])(void); - -void func_8017BED8(void *a0) { - D_80190F94[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80190F9C[])(void); - -void func_8017BF14(void *a0) { - D_80190F9C[*(u16 *)((s32)a0 + 0x2)](); -} - - -/* Decl layer conformed to the TU (ov_SC03_001_jr_8017AE2C.c): - * - func_8012913C: the TU already declares `extern u8 *func_8012913C(s32 a0);` - * at line 7121 -- BELOW this splice point (3327), which is why cc1 reported the - * conflict at 7181. Copied verbatim; the s32 use is pushed to a cast at the call - * site, matching the idiom the TU itself uses at line 7145. Byte-neutral. - * - func_8012C750: not declared in this TU; conformed anyway to the canonical - * engine_core.h form (`s32 func_8012C750(s32 a0)`, DEFINE_func_8012C750) with the - * pointer arg cast at the call site, so a future macro expansion cannot collide. - */ -extern u8 D_801EE680[]; -extern u8 *func_8012913C(s32 a0); -extern s32 func_8012C750(s32 a0); - - -/* $16-$19 are pinned: without them gcc's strength reduction splits the `s1` store - * base into TWO induction variables (base+0x18 with offsets -4/0, plus base+0x1C), - * burning an extra callee-saved reg and growing the frame to 0x48. s4 must stay - * UNPINNED -- a pin collapses `$v0 = $s4 + 1; $s4 = $v0` into `addiu $s4,$s4,1` and - * then sign-extends from $s4, losing the target's `addu $s4,$v0,$zero` + sll/sra on - * $v0 at the loop join. It still lands in $20 naturally once $16-$19 are taken. - */ -void func_8017BF50(s32 a0) -{ - register s32 s3 asm("$19"); - register s16 *s0 asm("$16"); - register s32 *s1 asm("$17"); - register u8 *s2 asm("$18"); - s16 s4; - Buf8017BF50 buf; - - s3 = a0; - s0 = *(s16 **)(s3 + 0xDC); - if (s0 != 0) { - s2 = D_801EE680; - s4 = 0; - s1 = (s32 *)(D_801EE680 + 0x1C); - buf.unk06 = 0x158; - buf.unk0A = 0; - buf.unk08 = 0; - buf.unk0E = 0; - buf.unk10 = 0; - do { - u16 v1; - - v1 = (u16)*s0; - if ((v1 & 0xFFFF) == 0x8000) break; - - if (*(s16 *)(s3 + 0x70) != 0) { - buf.unk00 = *s0++; - buf.unk02 = *s0++; - buf.unk04 = *s0++; - if (((s32 (*)(void *))func_8012C750)(&buf) == 0) break; - } else { - s32 v3; - - v3 = ((s32 (*)(s32))func_8012913C)(0x11); - if (v3 == 0) break; - s1[-2] = *s0++; - s1[-1] = *s0++; - s1[0] = *s0++; - s1 += 8; - *(u8 **)(v3 + 0x30) = s2; - s2 += 0x20; - } - s4++; - } while (s4 < 0x10); - } - *(u16 *)(s3 + 2) += 1; -} - - -extern s32 D_801151D4; -extern s16 D_801EE880; -extern void func_800D23D0(void *a0); - -void func_8017C094(void) { - s16 diffs[3]; - s32 *ptr = (s32 *)D_801151D4; - - diffs[0] = (s16)(*(s32 *)((u8 *)ptr + 0x68) - *(s32 *)((u8 *)ptr + 0x5C)); - diffs[1] = (s16)(*(s32 *)((u8 *)ptr + 0x6C) - *(s32 *)((u8 *)ptr + 0x60)); - diffs[2] = (s16)(*(s32 *)((u8 *)ptr + 0x70) - *(s32 *)((u8 *)ptr + 0x64)); - - func_800D23D0(diffs); - - D_801EE880 = (u16)diffs[1]; -} - - -extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80190EF8[]; - -void func_8017C100(s32 param_1) -{ - s32 s0; - - s0 = *(s32 *)(param_1 + 0x20); - if (*(s16 *)(param_1 + 0x2e) == 0) { - func_8001CB6C((u8 *)s0, (s32)D_80190EF8, 0x3c0, 0xa0); - } else { - func_8001CC3C(s0, (s32)D_80190EF8, 0x3c0, 0xa0); - } - *(u8 *)(s0 + 0x27) = 0xfc; - *(u16 *)(s0 + 0x1a) = 0x3c00; - *(u16 *)(s0 + 0x18) = 0x3c00; - *(u32 *)(s0 + 0x4) |= 0x01000000; - *(u32 *)(s0 + 0x34) = *(u32 *)(param_1 + 0x30); - (*(u16 *)(param_1 + 0x2))++; -} - - -#include "common.h" - -extern void RotMatrixYXZ(void *a0, void *a1); -extern s16 D_801EE880; - - -void func_8017C1AC(s32 param_1) -{ - SV4 sv4; - s32 s0; - s32 a1; - - s0 = *(s32 *)(param_1 + 0x20); - sv4.a = -0x20; - sv4.c = 0; - sv4.b = D_801EE880; - a1 = *(s32 *)(s0 + 0x34); - RotMatrixYXZ(&sv4, a1); -} - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C810(s32 a0, s32 a1); -extern void func_8012A828(s32, s32); -extern void func_8012B260(u8 *a0); - -extern u8 D_80190F74[]; -extern u8 D_80190F7C[]; - -void func_8017C1EC(s32 a0) -{ - /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every - LATER function in this TU, which blocks a byte-true decl of a different type. - Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ - extern u8 D_8018D838[]; - s32 s0; - - s0 = ((s32 (*)(void))func_8012C1B8)(); - if (s0 == 0) { - ((void (*)(s32))func_8012CAE4)(a0); - return; - } - - func_8001C810(s0, (s32)D_80190F74); - func_8012A828(a0, (s32)D_8018D838); - - *(s32 *)(a0 + 0x20) = s0; - *(s16 *)(s0 + 0x1A) = 0x3C00; - *(s16 *)(s0 + 0x18) = 0x3C00; - *(s16 *)(s0 + 0x10) = -0x20; - *(s16 *)(s0 + 0x12) = -1; - *(s32 *)(s0 + 0x4) |= 0x8040; - *(u16 *)(s0 + 0x2C) |= 0x10; - - ((void (*)(s32))func_8012B260)(a0); - - *(s32 *)(a0 + 0x58) = (s32)D_80190F7C; - *(u16 *)(a0 + 0x2) += 1; -} - - -// @class: jump-opt / cross-jump — MATCH (34 ins) -// @stuck: none. -// -// TWO byte-levers were needed here (both new, both generalizable to the 10-member family): -// -// (1) TWO STORES, NOT A TERNARY. The obvious `v = cond ? 0x800 : 0x40; store v;` is -// rewritten by jump.c:699 ("Simplify if (...) x = a; else x = b; -> x = b; -// if (...) x = a;") which HOISTS the `li 0x800` above the `slti`. The hoisted li is -// then live across the compare, so its pseudo CONFLICTS with the slt result's hard -// reg and loses $v0 (it lands in $a1 — REGALLOC-PERM/$a1>$v0, 3 mismatches). -// Writing the store in BOTH arms makes `prev_active_insn (simplejump)` a MEM-dest -// set, so `GET_CODE (SET_DEST (temp4)) == REG` fails and the hoist is blocked; the -// two arms stay in their own basic blocks, each `li` is a block-local quantity and -// first-fits $v0 (K3). jump2's cross-jumping then re-merges the two identical -// `sh $v0,0x5C($a0)` tails back into one, and dbr fills the branch delay slot from -// the TARGET thread — reproducing `bnez; li 0x800(slot); li 0x40; sh` exactly. -// -// (2) `>=` NOT `<`. Target is `slti; bnez` = jumpifnot of `diff >= 0x40`, so the 0x40 -// arm is the fall-through THEN and the 0x800 arm is the branch-target ELSE. -// Writing the condition as `< 0x40` gives beqz and swaps the two `li` immediates. -// -// (3) 8 bytes of dead stack. Target frame is 0x28; this body's natural frame is 0x20 -// (vars=8, regs=2/0, args=16). The original declared an 8-byte local it never -// reads — reproduced as `unused[2]` (same device as ov_SC03_099_jr_8017BEBC.c:3486). -// -// Declaration surface (checked against the whole TU in one pass, D2): -// D_80126B62 TU:1790/2726/3054 `extern u16` -> cast to s16* at the use site (the -// load is `lh`), exactly as TU:3085 already does. -// func_80049CAC TU:3105 `extern void func_80049CAC(s32, s32)` — reused verbatim. -// D_801EE880 not declared anywhere in include/ or src/ (incl. engine_core.h macro -// bodies) — this is its first declaration. Data: 4 shorts @ tail18. - -#include "common.h" - -extern s16 D_801EE880; -extern void func_80049CAC(s32 a0, s32 a1); - -void func_8017C2B0(s32 a0) -{ - /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every - LATER function in this TU, which blocks a byte-true decl of a different type. - Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ - extern u16 D_80126B62; - s32 unused[2]; /* dead 8-byte local — frame 0x28, not 0x20 */ - s32 s0; - - s0 = *(s32 *)(a0 + 0x20); - - if ((s32)*(s16 *)(a0 + 0xA) - (s32)(*(s16 *)&D_80126B62) >= 0x40) { - *(s16 *)(a0 + 0x5C) = 0x40; - } else { - *(s16 *)(a0 + 0x5C) = 0x800; - } - - if (*(s16 *)(s0 + 0x12) != D_801EE880) { - *(s16 *)(s0 + 0x12) = D_801EE880; - func_80049CAC(*(s32 *)(a0 + 0x20) + 0x10, *(s32 *)(a0 + 0x20) + 0x34); - *(u16 *)(s0 + 0x2C) |= 0x11; - } -} - - - -extern void (*D_80190FBC[])(void); - -void func_8017C338(void *a0) { - D_80190FBC[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6); -extern void func_800D20C0(void *a0, void *a1, s32 a2); -extern void func_800D23D0(void *a0); -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); - - -void func_8017C374(s32 param_1) { - - extern u8 D_80190FA4; - s32 obj = *(s32 *)(param_1 + 0x34); - Work8017 w; - short i; - s32 e; - s32 node; - - func_80146A6C(0x11, (void *)param_1, *(s16 *)(param_1 + 6), - (s16)(*(u16 *)(param_1 + 0xA) - 0x10), - *(s16 *)(param_1 + 0xE), 0, 0); - - w.x = *(u16 *)(param_1 + 6); - w.y = *(u16 *)(param_1 + 0xA); - w.z = *(u16 *)(param_1 + 0xE); - func_800D20C0(&w.x, &w.vx, 10); - *(s16 *)(param_1 + 6) = w.x; - *(s16 *)(param_1 + 0xE) = w.z; - w.vy = 0; - func_800D23D0(&w.vx); - - i = 0; - do { - e = func_80146A6C(0x12, (void *)param_1, *(s16 *)(obj + 6), - *(s16 *)(obj + 0xA), *(s16 *)(obj + 0xE), i, 0); - if (e != 0) { - *(s16 *)(e + 0x12) = w.vx; - *(s16 *)(e + 0x16) = w.vy; - *(s16 *)(e + 0x1A) = 0; - } - i = i + 1; - } while (i < 3); - - node = func_800D222C(param_1, &D_80190FA4, 0xFD); - if (node != 0) { - *(s32 *)(param_1 + 0x20) = node; - *(u32 *)(node + 4) = *(u32 *)(node + 4) | 0x5D000100; - ((void (*)(void *))func_8001CF30)((void *)node); - *(s16 *)(node + 0x18) = 0x4000; - *(s16 *)(node + 0x1A) = 0x200; - *(s16 *)(param_1 + 0x16) = 0x200; - *(s16 *)(param_1 + 0x14) = 0x1000; - *(s16 *)(node + 0x28) = 0x240; - *(s16 *)(node + 0x2A) = 0x180; - *(s16 *)(node + 0x10) = w.vx; - *(s16 *)(node + 0x12) = w.vy; - *(s16 *)(param_1 + 2) = *(s16 *)(param_1 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(param_1); - } -} - - -extern void func_80146C3C(void); -void func_8017C538(u8 *p) { - u8 *q; - s32 t; - s32 b; - q = *(u8 **)(p + 0x20); - *(u16 *)(p + 0x16) = *(u16 *)(p + 0x16) + *(u16 *)(p + 0x14); - if (*(s32 *)(p + 0x1C) < 8) { - *(s16 *)(p + 0x14) = *(u16 *)(p + 0x14) - 0x200; - } else { - *(s16 *)(p + 0x14) = *(u16 *)(p + 0x14) - 0x51; - } - b = *(u8 *)(q + 0x26) - 2; - *(s16 *)(q + 0x1A) = *(u16 *)(p + 0x16); - *(s8 *)(q + 0x26) = b; - *(s8 *)(q + 0x25) = b; - *(s8 *)(q + 0x24) = b; - t = *(s32 *)(p + 0x1C); - *(s32 *)(p + 0x1C) = t + 1; - if (t >= 0x1E) { - ((void (*)(u8 *))func_80146C3C)(p); - } -} - - - -extern void (*D_80190FC4[])(void); - -void func_8017C5CC(void *a0) { - D_80190FC4[*(u16 *)((s32)a0 + 0x2)](); -} - - - -// @class: plumbing -// @stuck: none — MATCH (41 ins, relocation-masked); frame needed a 0x30 address-taken local - -extern s32 func_800D222C(s32 a0, void *a1, s32 a2); -extern s32 func_8001CF30(void *a0); -extern void func_80146C3C(void); -extern u8 D_80190FB0; - -void func_8017C608(s32 a0) { - s32 r; - s32 buf[12]; - - (void)&buf; - r = func_800D222C(a0, &D_80190FB0, 0x18); - if (r != 0) { - *(s32 *)(a0 + 0x20) = r; - *(u32 *)(r + 4) = *(u32 *)(r + 4) | 0x5C000140; - func_8001CF30((void *)r); - *(s16 *)(r + 0x10) = 0x400; - *(s16 *)(r + 0x18) = 0x3000; - *(s16 *)(r + 0x1A) = 0x3000; - *(s16 *)(r + 0x28) = 0x248; - *(s16 *)(r + 0x2A) = 0x180; - *(s16 *)(a0 + 2) = *(s16 *)(a0 + 2) + 1; - } else { - ((void (*)(s32))func_80146C3C)(a0); - } -} - - -extern void func_80146C3C(void); -void func_8017C6AC(int a0) { - int v0 = *(int *)(a0 + 0x1C); - register unsigned char *p __asm__("$5") = *(unsigned char **)(a0 + 0x20); - *(int *)(a0 + 0x1C) = v0 + 1; - if (v0 >= 0x1F) { - func_80146C3C(); - } else { - unsigned short hv = *(unsigned short *)(p + 0x1A) + 0x1E0; - signed char bv = *(unsigned char *)(p + 0x26) - 3; - *(unsigned short *)(p + 0x1A) = hv; - *(unsigned short *)(p + 0x18) = hv; - *(signed char *)(p + 0x26) = bv; - *(signed char *)(p + 0x25) = bv; - *(signed char *)(p + 0x24) = bv; - } -} - - -#define gte_ldv0(r0) __asm__ volatile ( \ - "lwc2 $0, 0( %0 );" \ - "lwc2 $1, 4( %0 )" \ - : \ - : "r"( r0 ) ) -#define gte_ldv3(r0, r1, r2) __asm__ volatile ( \ - "lwc2 $0, 0( %0 );" \ - "lwc2 $1, 4( %0 );" \ - "lwc2 $2, 0( %1 );" \ - "lwc2 $3, 4( %1 );" \ - "lwc2 $4, 0( %2 );" \ - "lwc2 $5, 4( %2 )" \ - : \ - : "r"( r0 ), "r"( r1 ), "r"( r2 ) ) -#define gte_ldv3c(r0) __asm__ volatile ( \ - "lwc2 $0, 0( %0 );" \ - "lwc2 $1, 4( %0 );" \ - "lwc2 $2, 8( %0 );" \ - "lwc2 $3, 12( %0 );" \ - "lwc2 $4, 16( %0 );" \ - "lwc2 $5, 20( %0 )" \ - : \ - : "r"( r0 ) ) -#define gte_rtps() __asm__ volatile ("nop;nop;rtps") -#define gte_rtpt() __asm__ volatile ("nop;nop;rtpt") -#define gte_nclip() __asm__ volatile ("nop;nop;nclip") -#define gte_stsxy(r0) __asm__ volatile ( \ - "swc2 $14, 0( %0 )" \ - : \ - : "r"( r0 ) \ - : "memory" ) -#define gte_stsxy3(r0, r1, r2) __asm__ volatile ( \ - "swc2 $12, 0( %0 );" \ - "swc2 $13, 0( %1 );" \ - "swc2 $14, 0( %2 )" \ - : \ - : "r"( r0 ), "r"( r1 ), "r"( r2 ) \ - : "memory" ) -#define gte_stsxy3c(r0) __asm__ volatile ( \ - "swc2 $12, 0( %0 );" \ - "swc2 $13, 4( %0 );" \ - "swc2 $14, 8( %0 )" \ - : \ - : "r"( r0 ) \ - : "memory" ) -#define gte_stsxy3_f3(r0) __asm__ volatile ( \ - "swc2 $12, 8( %0 );" \ - "swc2 $13, 12( %0 );" \ - "swc2 $14, 16( %0 )" \ - : \ - : "r"( r0 ) \ - : "memory" ) -#define gte_stsxy3_ft3(r0) __asm__ volatile ( \ - "swc2 $12, 8( %0 );" \ - "swc2 $13, 16( %0 );" \ - "swc2 $14, 24( %0 )" \ - : \ - : "r"( r0 ) \ - : "memory" ) -#define gte_stsxy3_f4(r0) __asm__ volatile ( \ - "swc2 $12, 8( %0 );" \ - "swc2 $13, 12( %0 );" \ - "swc2 $14, 16( %0 )" \ - : \ - : "r"( r0 ) \ - : "memory" ) -#define gte_stsz3(r0, r1, r2) __asm__ volatile ( \ - "swc2 $17, 0( %0 );" \ - "swc2 $18, 0( %1 );" \ - "swc2 $19, 0( %2 )" \ - : \ - : "r"( r0 ), "r"( r1 ), "r"( r2 ) \ - : "memory" ) -#define gte_stsz4(r0, r1, r2, r3) __asm__ volatile ( \ - "swc2 $16, 0( %0 );" \ - "swc2 $17, 0( %1 );" \ - "swc2 $18, 0( %2 );" \ - "swc2 $19, 0( %3 )" \ - : \ - : "r"( r0 ), "r"( r1 ), "r"( r2 ), "r"( r3 ) \ - : "memory" ) -#define gte_stszotz(r0) __asm__ volatile ( \ - "mfc2 $12, $19;" \ - "nop;" \ - "sra $12, $12, 2;" \ - "sw $12, 0( %0 )" \ - : \ - : "r"( r0 ) \ - : "$12", "memory" ) -#define gte_stflg(r0) __asm__ volatile ( \ - "cfc2 $12, $31;" \ - "nop;" \ - "sw $12, 0( %0 )" \ - : \ - : "r"( r0 ) \ - : "$12", "memory" ) -#define gte_stopz(r0) __asm__ volatile ( \ - "swc2 $24, 0( %0 )" \ - : \ - : "r"( r0 ) \ - : "memory" ) - -void func_8017C710(s32 arg0) -{ - typedef struct { u32 w0, w1, w2; } Prim; - - extern s32 func_800491EC(void); - extern void func_800547D8(s32, MATRIX2 *); - extern void func_80052E38(MATRIX2 *); - extern u8 *D_800A5E60; - extern u8 D_800A6610[]; - extern short D_800B9A02; /* TU-visible spelling (engine_core.h + ov_SC01_000.c col-0); unsigned access forced at use — §8d sub-class (b) */ - - DVECTOR2 tmpxy[4]; - SVECTOR2 box[8]; - SVECTOR2 sxy[8]; - MATRIX2 mtx; - struct { long otz, flag, opz, sz0, sz1, sz2, sz3; } g; - - s32 lim; - s32 nparts; - s32 j; - u32 nprim; - u32 i; - Part *part; - Prim *prim; - u8 *pkt; - u32 ot; - u8 *vtx; - u8 *va, *vb, *vc, *vd; - u32 w, code; - u32 wx, wy, wz; - s32 xa32, xb32, t32; - s32 xmn1, xmx1, xmn2, xmx2; - s32 mnc, mxc; - s16 my, mny, mx, mn; - - lim = func_800491EC() + *(s32 *)(arg0 + 0x64); - func_800547D8(arg0 + 0x10, &mtx); - func_80052E38(&mtx); - - pkt = D_800A5E60; - part = *(Part **)(arg0 + 0xC); - nparts = *(s32 *)(*(s32 *)(arg0 + 8) + 8); - vtx = *(u8 **)(*(s32 *)(arg0 + 8) + 0x10); - ot = (u32)&D_800A6610[(*(u16 *)&D_800B9A02) << 14]; - - for (j = 0; j < nparts; j++, part++) { - wx = part->xx; - mn = wx; - mx = wx >> 16; - wy = part->yy; - mny = wy; - my = wy >> 16; - wz = part->zz; - box[0].vx = mn; box[0].vy = mny; - box[1].vx = mx; box[1].vy = mny; - box[2].vx = mn; box[2].vy = mny; - box[3].vx = mx; box[3].vy = mny; - box[4].vx = mn; box[4].vy = my; - box[5].vx = mx; box[5].vy = my; - box[6].vx = mn; box[6].vy = my; - box[7].vx = mx; box[7].vy = my; - wy = wz >> 16; - box[0].vz = wz; - box[1].vz = wz; - box[4].vz = wz; - box[5].vz = wz; - box[2].vz = wy; - box[3].vz = wy; - box[6].vz = wy; - box[7].vz = wy; - - gte_ldv3c(&box[0]); - gte_rtpt(); - gte_stsxy3(&sxy[0], &sxy[1], &sxy[2]); - gte_ldv0(&box[3]); - gte_rtps(); - gte_stsxy(&sxy[3]); - gte_ldv3c(&box[4]); - __asm__ volatile (""); /* §45-B live-length slider: +1 static insn splits the 228/230 allocno-priority tie (498/498 -> 497/498) */ - gte_rtpt(); - gte_stsxy3(&sxy[4], &sxy[5], &sxy[6]); - gte_ldv0(&box[7]); - gte_rtps(); - gte_stsxy(&sxy[7]); - gte_stszotz(&g.otz); - - if (lim >= g.otz) { - xa32 = sxy[0].vx; - xb32 = sxy[1].vx; - if (xb32 < xa32) { xmx1 = xa32; xmn1 = xb32; } else { xmn1 = xa32; xmx1 = xb32; } - t32 = sxy[2].vx; - if (xmx1 < t32) xmx1 = t32; else if (t32 < xmn1) xmn1 = t32; - t32 = sxy[3].vx; - if (xmx1 < t32) xmx1 = t32; else if (t32 < xmn1) xmn1 = t32; - xa32 = sxy[4].vx; - xb32 = sxy[5].vx; - if (xb32 < xa32) { xmx2 = xa32; xmn2 = xb32; } else { xmn2 = xa32; xmx2 = xb32; } - t32 = sxy[6].vx; - if (xmx2 < t32) xmx2 = t32; else if (t32 < xmn2) xmn2 = t32; - t32 = sxy[7].vx; - if (xmx2 < t32) xmx2 = t32; else if (t32 < xmn2) xmn2 = t32; - mnc = xmn1; - if (xmn2 < xmn1) mnc = xmn2; - mxc = xmx1; - if (mxc < xmx2) mxc = xmx2; - if ((s16)mxc >= -0xA0 && (s16)mnc < 0xA1) { - xa32 = sxy[0].vy; - xb32 = sxy[1].vy; - if (xb32 < xa32) { xmx1 = xa32; xmn1 = xb32; } else { xmn1 = xa32; xmx1 = xb32; } - t32 = sxy[2].vy; - if (xmx1 < t32) xmx1 = t32; else if (t32 < xmn1) xmn1 = t32; - t32 = sxy[3].vy; - if (xmx1 < t32) xmx1 = t32; else if (t32 < xmn1) xmn1 = t32; - xa32 = sxy[4].vy; - xb32 = sxy[5].vy; - if (xb32 < xa32) { xmx2 = xa32; xmn2 = xb32; } else { xmn2 = xa32; xmx2 = xb32; } - t32 = sxy[6].vy; - if (xmx2 < t32) xmx2 = t32; else if (t32 < xmn2) xmn2 = t32; - t32 = sxy[7].vy; - if (xmx2 < t32) xmx2 = t32; else if (t32 < xmn2) xmn2 = t32; - mnc = xmn1; - if (xmn2 < xmn1) mnc = xmn2; - mxc = xmx1; - if (mxc < xmx2) mxc = xmx2; - if ((s16)mxc >= -0x78 && (s16)mnc < 0x79) { - prim = (Prim *)part->prim; - nprim = part->nprim; - for (i = 0; i < nprim; i++, prim++) { - w = prim->w1; - va = vtx + (w & 0xFFFF); - vb = vtx + (w >> 16); - w = prim->w2; - vc = vtx + (w & 0xFFFF); - w = w >> 16; - gte_ldv3(va, vb, vc); - gte_rtpt(); - gte_stflg(&g.flag); - if (!(g.flag & 0x7F85E000)) { - gte_nclip(); - code = w & 7; - vd = vtx + (w & 0xFFF8); - gte_stopz(&g.opz); - if (g.opz > 0) { - switch (code) { - case 4: - case 5: - gte_stsxy3_f3(pkt); - gte_stsz3(&g.sz0, &g.sz1, &g.sz2); - if (((PolyF3 *)pkt)->x0 > ((PolyF3 *)pkt)->x1) { - mx = ((PolyF3 *)pkt)->x0; - mn = ((PolyF3 *)pkt)->x1; - } else { - mn = ((PolyF3 *)pkt)->x0; - mx = ((PolyF3 *)pkt)->x1; - } - if (((PolyF3 *)pkt)->x2 > mx) mx = ((PolyF3 *)pkt)->x2; - else if (((PolyF3 *)pkt)->x2 < mn) mn = ((PolyF3 *)pkt)->x2; - if (mx >= -0xA0 && mn < 0xA1) { - if (((PolyF3 *)pkt)->y0 > ((PolyF3 *)pkt)->y1) { - my = ((PolyF3 *)pkt)->y0; - mny = ((PolyF3 *)pkt)->y1; - } else { - mny = ((PolyF3 *)pkt)->y0; - my = ((PolyF3 *)pkt)->y1; - } - if (((PolyF3 *)pkt)->y2 > my) my = ((PolyF3 *)pkt)->y2; - else if (((PolyF3 *)pkt)->y2 < mny) mny = ((PolyF3 *)pkt)->y2; - if (my >= -0x78 && mny < 0x79) { - s32 za, zb; - u32 *otp; - if (g.sz0 > g.sz1) { - za = g.sz0; - if (za < g.sz2) za = g.sz2; - } else { - za = g.sz1; - if (za < g.sz2) za = g.sz2; - } - g.opz = za; - if (code != 4) g.opz = za + 0x20; - ((PolyF3 *)pkt)->rgbc = prim->w0; - otp = (u32 *)(((g.opz >> 2) << 2) + ot); - *(u32 *)pkt = (*otp & 0xFFFFFF) | 0x4000000; - *otp = (*otp & 0xFF000000) | ((u32)pkt & 0xFFFFFF); - pkt += 0x14; - } - } - break; - case 6: - case 7: - gte_stsxy3_ft3(pkt); - gte_stsz3(&g.sz0, &g.sz1, &g.sz2); - if (((PolyFT3 *)pkt)->x0 > ((PolyFT3 *)pkt)->x1) { - mx = ((PolyFT3 *)pkt)->x0; - mn = ((PolyFT3 *)pkt)->x1; - } else { - mn = ((PolyFT3 *)pkt)->x0; - mx = ((PolyFT3 *)pkt)->x1; - } - if (((PolyFT3 *)pkt)->x2 > mx) mx = ((PolyFT3 *)pkt)->x2; - else if (((PolyFT3 *)pkt)->x2 < mn) mn = ((PolyFT3 *)pkt)->x2; - if (mx >= -0xA0 && mn < 0xA1) { - if (((PolyFT3 *)pkt)->y0 > ((PolyFT3 *)pkt)->y1) { - my = ((PolyFT3 *)pkt)->y0; - mny = ((PolyFT3 *)pkt)->y1; - } else { - mny = ((PolyFT3 *)pkt)->y0; - my = ((PolyFT3 *)pkt)->y1; - } - if (((PolyFT3 *)pkt)->y2 > my) my = ((PolyFT3 *)pkt)->y2; - else if (((PolyFT3 *)pkt)->y2 < mny) mny = ((PolyFT3 *)pkt)->y2; - if (my >= -0x78 && mny < 0x79) { - s32 za, zb; - u32 *otp; - u32 *tp; - if (g.sz0 > g.sz1) { - za = g.sz0; - if (za < g.sz2) za = g.sz2; - } else { - za = g.sz1; - if (za < g.sz2) za = g.sz2; - } - g.opz = za; - if (code == 7) g.opz = za + 0x20; - tp = (u32 *)prim->w0; - ((PolyFT3 *)pkt)->rgbc = tp[0]; - ((PolyFT3 *)pkt)->uvc0 = tp[1]; - ((PolyFT3 *)pkt)->uvp1 = tp[2]; - ((PolyFT3 *)pkt)->uv2 = tp[3]; - otp = (u32 *)(((g.opz >> 2) << 2) + ot); - *(u32 *)pkt = (*otp & 0xFFFFFF) | 0x7000000; - *otp = (*otp & 0xFF000000) | ((u32)pkt & 0xFFFFFF); - pkt += 0x20; - } - } - break; - case 0: - case 1: - gte_stsxy3_f4(pkt); - gte_ldv0(vd); - gte_rtps(); - if (((PolyF4 *)pkt)->x0 > ((PolyF4 *)pkt)->x1) { - mx = ((PolyF4 *)pkt)->x0; - mn = ((PolyF4 *)pkt)->x1; - } else { - mn = ((PolyF4 *)pkt)->x0; - mx = ((PolyF4 *)pkt)->x1; - } - if (((PolyF4 *)pkt)->x2 > mx) mx = ((PolyF4 *)pkt)->x2; - else if (((PolyF4 *)pkt)->x2 < mn) mn = ((PolyF4 *)pkt)->x2; - if (((PolyF4 *)pkt)->y0 > ((PolyF4 *)pkt)->y1) { - my = ((PolyF4 *)pkt)->y0; - mny = ((PolyF4 *)pkt)->y1; - } else { - mny = ((PolyF4 *)pkt)->y0; - my = ((PolyF4 *)pkt)->y1; - } - if (((PolyF4 *)pkt)->y2 > my) my = ((PolyF4 *)pkt)->y2; - else if (((PolyF4 *)pkt)->y2 < mny) mny = ((PolyF4 *)pkt)->y2; - gte_stflg(&g.flag); - if (!(g.flag & 0x7F85E000)) { - gte_stsz4(&g.sz0, &g.sz1, &g.sz2, &g.sz3); - gte_stsxy((long *)&((PolyF4 *)pkt)->x3); - if (((PolyF4 *)pkt)->x3 < mn) mn = ((PolyF4 *)pkt)->x3; - else if (mx < ((PolyF4 *)pkt)->x3) mx = ((PolyF4 *)pkt)->x3; - if (mx >= -0xA0 && mn < 0xA1) { - if (((PolyF4 *)pkt)->y3 < mny) mny = ((PolyF4 *)pkt)->y3; - else if (my < ((PolyF4 *)pkt)->y3) my = ((PolyF4 *)pkt)->y3; - if (my >= -0x78 && mny < 0x79) { - s32 za, zb; - u32 *otp; - zb = g.sz2; - if (zb < g.sz3) zb = g.sz3; - za = g.sz0; - if (za < g.sz1) za = g.sz1; - if (za < zb) za = zb; - g.opz = za; - ((PolyF4 *)pkt)->rgbc = prim->w0; - otp = (u32 *)(((za >> 2) << 2) + ot); - *(u32 *)pkt = (*otp & 0xFFFFFF) | 0x5000000; - *otp = (*otp & 0xFF000000) | ((u32)pkt & 0xFFFFFF); - pkt += 0x18; - } - } - } - break; - case 2: - case 3: - gte_stsxy3c(&tmpxy[0]); - gte_ldv0(vd); - gte_rtps(); - if (tmpxy[0].vx > tmpxy[1].vx) { - mx = tmpxy[0].vx; - mn = tmpxy[1].vx; - } else { - mn = tmpxy[0].vx; - mx = tmpxy[1].vx; - } - if (tmpxy[2].vx > mx) mx = tmpxy[2].vx; - else if (tmpxy[2].vx < mn) mn = tmpxy[2].vx; - if (tmpxy[0].vy > tmpxy[1].vy) { - my = tmpxy[0].vy; - mny = tmpxy[1].vy; - } else { - mny = tmpxy[0].vy; - my = tmpxy[1].vy; - } - if (tmpxy[2].vy > my) my = tmpxy[2].vy; - else if (tmpxy[2].vy < mny) mny = tmpxy[2].vy; - gte_stflg(&g.flag); - if (!(g.flag & 0x7F85E000)) { - gte_stsz4(&g.sz0, &g.sz1, &g.sz2, &g.sz3); - gte_stsxy((long *)&((PolyFT4 *)pkt)->x3); - if (((PolyFT4 *)pkt)->x3 < mn) mn = ((PolyFT4 *)pkt)->x3; - else if (mx < ((PolyFT4 *)pkt)->x3) mx = ((PolyFT4 *)pkt)->x3; - if (mx >= -0xA0 && mn < 0xA1) { - if (((PolyFT4 *)pkt)->y3 < mny) mny = ((PolyFT4 *)pkt)->y3; - else if (my < ((PolyFT4 *)pkt)->y3) my = ((PolyFT4 *)pkt)->y3; - if (my >= -0x78 && mny < 0x79) { - s32 za, zb; - u32 *otp; - u32 *tp; - u32 uvw; - zb = g.sz2; - if (zb < g.sz3) zb = g.sz3; - za = g.sz0; - if (za < g.sz1) za = g.sz1; - if (za < zb) za = zb; - g.opz = za; - if (code == 3) g.opz = za + 0x20; - *(u32 *)&((PolyFT4 *)pkt)->x0 = *(u32 *)&tmpxy[0]; - *(u32 *)&((PolyFT4 *)pkt)->x1 = *(u32 *)&tmpxy[1]; - *(u32 *)&((PolyFT4 *)pkt)->x2 = *(u32 *)&tmpxy[2]; - tp = (u32 *)prim->w0; - ((PolyFT4 *)pkt)->rgbc = tp[0]; - ((PolyFT4 *)pkt)->uvc0 = tp[1]; - ((PolyFT4 *)pkt)->uvp1 = tp[2]; - uvw = tp[3]; - ((PolyFT4 *)pkt)->uv2 = uvw; - ((PolyFT4 *)pkt)->uv3 = uvw >> 16; - otp = (u32 *)(((g.opz >> 2) << 2) + ot); - *(u32 *)pkt = (*otp & 0xFFFFFF) | 0x9000000; - *otp = (*otp & 0xFF000000) | ((u32)pkt & 0xFFFFFF); - pkt += 0x28; - } - } - } - break; - } - } - } - } - } - } - } - } - D_800A5E60 = pkt; -} - -#include "common.h" -#include "/home/musashi/bfm-decomp/src/shared/engine_core.h" - -/* fleet-modal spelling (engine_core.h, n=1411 occurrences) */ -extern void func_8012ADE4(u8 *a0); -/* TU-verbatim spelling (already at ov_SC03_001_jr_8017AE2C.c:585) */ -extern s32 func_80135888(s32 a0, s32 a1, s32 a2, s32 a3); - -s32 func_8017D5F0(s32 a0, s32 a1) { - s32 s0 = a0; - s32 s1 = a1; - s16 spA[4]; /* sp+0x10 */ - struct M8012AF0C spB; /* sp+0x18 (src) */ - struct M8012AF0C spC; /* sp+0x20 (dst) */ - - spA[0] = *(u16 *)(s0 + 0x3A); - spA[1] = *(u16 *)(s0 + 0x3E); - spA[2] = *(u16 *)(s0 + 0x42); - spB.a = *(u16 *)(s0 + 0x6); - spB.b = *(u16 *)(s0 + 0xA); - spB.c = *(u16 *)(s0 + 0xE); - spC = spB; - - if (func_80135888(*(s32 *)(s1 + 0x20), *(s32 *)(s1 + 0x58), (s32)spA, (s32)&spC) != 0) { - s32 v1; - s16 a1v; - s16 a0v; - s16 a2v; - - func_8012ADE4((u8 *)s0); - - if (*(s32 *)(s1 + 0x58) == 0) { - return 1; - } - - v1 = *(s32 *)(*(s32 *)(s1 + 0x78) + 0x8); - a1v = *(s16 *)(s1 + 0x6); - a0v = *(s16 *)(s0 + 0x6); - if (a0v >= a1v + *(s16 *)(v1 + 0x6)) { - return 1; - } - if (a1v + *(s16 *)(v1 + 0x4) >= a0v) { - return 1; - } - a2v = *(s16 *)(s0 + 0xE); - a1v = *(s16 *)(s1 + 0xE); - if (a2v >= a1v + *(s16 *)(v1 + 0xE)) { - return 1; - } - if (a1v + *(s16 *)(v1 + 0xC) < a2v) { - *(s16 *)(s0 + 0xE) = a2v + 0x40; - } - return 1; - } - - return 0; -} - - -#include "common.h" - -/* TU-adopted declarations (law 2 — copied verbatim from src/ov_SC03_001/ov_SC03_001_jr_8017AE2C.c) */ -extern s32 func_8012B744(void *a0, void *a1); -extern s32 func_8012BE98(s32 a0, u16 *a1); -extern void func_8012B2CC(s32 a0); -extern void func_8012A828(s32 a0, s32 a1); - -/* Not yet declared anywhere in this TU — added per call-site evidence / shared engine_core fleet consensus */ -extern s32 func_8012CBCC(s32 a0); -extern s32 func_8012E544(s32 a0); -extern s32 func_8017D5F0(s32 a0, s32 a1); -extern void func_8012B1B4(s32 a0, s32 a1); -extern s32 rand(void); - -extern s16 D_80191010; -extern s16 D_801BE3F0; -extern s16 D_801BE498; -extern s16 D_8019102C; - -void func_8017D734(s32 param_1) { - if (*(s16 *)(param_1 + 0x100) > 0) { - if (func_8012CBCC(param_1) & 0x6000) { - *(s16 *)(param_1 + 0x16) = -4; - } - { - s32 r = func_8012E544(0xAD); - if (r != 0) { - func_8017D5F0(param_1, r); - } - } - if (*(s16 *)(param_1 + 0xA) < *(s16 *)(param_1 + 0x8A) - 0x30) { - *(u16 *)(param_1 + 0xE) = *(u16 *)(param_1 + 0xE) + 0x40; - } - } - - if (--*(s32 *)(param_1 + 0x1C) == 0) { - s32 phase = (u16)(*(u16 *)(param_1 + 0x100) + 1) & 3; - *(u16 *)(param_1 + 0x100) = phase; - if (phase == 0) { - *(s32 *)(param_1 + 0x1C) = 0x14; - func_8012A828(param_1, (s32)&D_801BE3F0); - } else if (phase >= 0) { - if (phase < 4) { - u16 *s1 = (u16 *)&D_80191010; - s32 t; - - *(s32 *)(param_1 + 0x1C) = 0x1E; - func_8012A828(param_1, (s32)&D_801BE498); - - t = func_8012BE98(param_1, s1); - if (t < 0x4000) { - s32 r2 = rand(); - s32 v1 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v1 + 0x12) = *(u16 *)(v1 + 0x12) + (r2 & 0x1FF); - } else { - s32 v0 = func_8012B744((void *)(param_1 + 4), s1); - s32 v1 = *(s32 *)(param_1 + 0x20); - *(u16 *)(v1 + 0x12) = (u16)v0; - } - func_8012B2CC(param_1); - func_8012B1B4(param_1, (s32)&D_8019102C); - } - } - } -} - - -#include "common.h" - -/* decl_prior: tu spelling adopted verbatim */ -extern void func_8012B1B4(s32 a0, s32 a1); -extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); -extern s32 func_8012B744(void *a0, void *a1); -extern void func_8012A828(s32 a0, s32 a1); - -/* No TU decl found for these; fleet-modal spelling used except where the asm - * itself proves a return value is consumed (func_8012CBCC — see notes). */ -extern s32 func_8012CBCC(s32 a0); -extern s32 func_8012E544(s32 a0); -extern s32 func_8017D5F0(s32 a0, s32 a1); - -/* Small table of s16 fields; only addresses of most are ever taken here. */ -extern s16 D_80191020; -extern s16 D_80191018; -extern s16 D_8019101C; -extern s16 D_80191010; -extern s16 D_801BE398; - -void func_8017D8A8(s32 param_1) { - s32 pv = param_1; - s32 s0; - s32 v0; - s32 s2; - - func_8012B1B4(pv, (s32)&D_80191020); - s0 = func_8012CBCC(pv); - if (s0 & 0x6000) { - *(s16 *)(pv + 0x16) = -4; - } - - v0 = func_8012E544(0xAD); - if (v0 != 0) { - if (func_8017D5F0(pv, v0) != 0) { - s0 |= 0x8000; - } - } - - if (s0 & 0x8000) { - s16 cnt = (s16)(*(u16 *)(pv + 0x104) + 1) & 0x3F; - *(u16 *)(pv + 0x104) = cnt; - if (cnt < 0x1F) { - *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) += 0x200; - } else { - *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) -= 0x200; - } - } else { - *(u16 *)(pv + 0x104) = 0; - } - - s2 = pv + 4; - { - s16 *p = &D_80191018; - s32 t = (s32)func_8012B744((void *)s2, p); - s32 r = func_8012B608(*(s16 *)(*(s32 *)(pv + 0x20) + 0x12), t, 4); - *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) = - *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) + r; - - { - s32 dx = *(s16 *)(pv + 6) - *p; - s32 dy = *(s16 *)(pv + 0xE) - D_8019101C; - if (dx * dx + dy * dy < 0x400) { - *(s16 *)(pv + 2) = 3; - func_8012A828(pv, (s32)&D_801BE398); - v0 = (s32)func_8012B744((void *)s2, &D_80191010); - *(s16 *)(*(s32 *)(pv + 0x20) + 0x12) = (s16)v0; - } - } - } -} - - -#include "common.h" - -extern void func_8012A828(s32, s32); -extern void func_8012B2CC(s32 a0); -extern void func_8012B1B4(s32 a0, s32 a1); -extern s32 D_801BE2F0; -extern s32 D_801BE5E0; -extern s32 D_80191038; -extern void *D_80191044[]; - -void func_8017DA48(s32 a0) { - /* +0xFC = requested sub-state, +0xFE = acked sub-state */ - if (*(s16 *)(a0 + 0xFC) != *(s16 *)(a0 + 0xFE)) { - *(s16 *)(a0 + 0xFE) = *(s16 *)(a0 + 0xFC); - switch (*(s16 *)(a0 + 0xFC)) { - case 0: - *(s32 *)(a0 + 0x1C) = 1; /* timer */ - *(s16 *)(a0 + 0x2) = 1; /* state */ - break; - case 1: - func_8012A828(a0, (s32)&D_801BE2F0); - *(s16 *)(a0 + 0x2) = 2; - break; - case 2: - func_8012A828(a0, (s32)&D_801BE5E0); - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = 0xC00; - func_8012B2CC(a0); - func_8012B1B4(a0, (s32)&D_80191038); - *(s16 *)(a0 + 0x2) = 4; - *(s32 *)(a0 + 0x1C) = 0x78; - break; - case 3: - func_8012A828(a0, (s32)&D_801BE2F0); - *(s16 *)(a0 + 0x2) = 5; - break; - } - } - ((void (*)(s32))D_80191044[*(u16 *)(a0 + 0x2)])(a0); -} - - -extern s32 func_8012C354(s32 arg0, s32 arg1); -extern s32 func_80143970(s32 arg0); -extern void func_8012B23C(s32 arg0); - -void func_8017DB6C(s32 arg0) { - extern s32 D_80190FDC; - extern s32 D_801BE2F0; - s32 s0 = arg0; - - if (func_8012C354(arg0, (s32)&D_80190FDC) == 0) { - return; - } - *(u8 *)(s0 + 0xC0) = 1; - *(s32 *)(s0 + 0xB4) = -1; - *(u8 *)(s0 + 0xC1) = 0; - *(s32 *)(s0 + 0xC4) = 1; - if (((u32)func_80029504() < 0x14) || ((u32)func_80029504() >= 0x46) || - (((func_80029178(0xE5) & 0xFF) != 0) && (func_80029504() != 0x3C))) { - func_8012C218((void *)s0); - } else { - func_80143970(s0); - *(s16 *)(s0 + 2) = 1; - func_8012B23C(s0); - func_8012A828(s0, (s32)&D_801BE2F0); - *(s32 *)(s0 + 0x1C) = 1; - } -} - - -void func_8017DC48(void) { -} - -extern s32 func_8012CBCC(s32 a0); -extern void func_8012C218(void *a0); - -void func_8017DC50(arg0) -s32 arg0; -{ - register s32 s0 __asm__("$16"); - register s32 v0 __asm__("$2"); - register s32 v1 __asm__("$3"); - register s32 a0 __asm__("$4"); - register s32 a1 __asm__("$5"); - - s0 = arg0; - v1 = func_8012CBCC(s0); - v0 = v1 & 0x6000; - if (v0 != 0) { - *(s16 *)(s0 + 0x16) = -4; - } - v0 = v1 & 0x8000; - if (v0 != 0) { - v0 = *(s32 *)(s0 + 0x4); - v1 = *(s32 *)(s0 + 0x10); - a0 = *(s32 *)(s0 + 0x14); - a1 = *(s32 *)(s0 + 0x18); - v0 = v0 + v1; - *(s32 *)(s0 + 0x4) = v0; - v0 = *(s32 *)(s0 + 0x8); - v1 = *(s32 *)(s0 + 0xC); - v0 = v0 + a0; - v1 = v1 + a1; - *(s32 *)(s0 + 0x8) = v0; - *(s32 *)(s0 + 0xC) = v1; - } - v0 = *(s32 *)(s0 + 0x1C) - 1; - *(s32 *)(s0 + 0x1C) = v0; - if (v0 == 0) { - func_8012C218((void *)s0); - } -} - - -#include "common.h" - -extern s32 func_8012E544(s32 a0); -extern void func_8012C218(void *a0); -extern void func_8012B1B4(s32 a0, s32 a1); -extern s32 func_8012CBCC(s32 a0); -extern s32 func_8012B744(void *a0, void *a1); -extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); -extern s16 D_80191020; - -typedef struct { s16 vx, vy, vz, pad; } TmpVec_8017DCE4; - -void func_8017DCE4(s32 a0) -{ - register s32 pv __asm__("$16") = a0; - s32 s1; - s32 flags; - TmpVec_8017DCE4 tmp; - s32 v0; - - s1 = func_8012E544(0xAD); - if (s1 == 0) { - func_8012C218((void *)pv); - return; - } - - func_8012B1B4(pv, (s32)&D_80191020); - flags = func_8012CBCC(pv); - - if (flags & 0x6000) { - *(s16 *)(pv + 0x16) = -6; - } - - if (flags & 0x8000) { - *(s32 *)(pv + 4) += *(s32 *)(pv + 0x10); - *(s32 *)(pv + 8) += *(s32 *)(pv + 0x14); - *(s32 *)(pv + 0xC) += *(s32 *)(pv + 0x18); - } - - tmp.vx = *(u16 *)(s1 + 6) + 0x20; - tmp.vz = *(u16 *)(s1 + 0xE) + 0x20; - v0 = func_8012B744((void *)(pv + 4), &tmp); - - { - s32 r = func_8012B608(*(s16 *)(*(s32 *)(pv + 0x20) + 0x12), v0, 4); - *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) = - *(u16 *)(*(s32 *)(pv + 0x20) + 0x12) + r; - } -} - - - -extern void (*D_8019106C[])(void); - -void func_8017DDEC(void *a0) { - D_8019106C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); -extern u32 D_8019105C; - -void func_8017DE28(s32 arg0) { - s32 v0 = ((s32 (*)(s32))func_8012C1B8)(arg0); - *(s32*)((u8*)arg0 + 0x20) = v0; - if (v0 == 0) { - ((void (*)(s32))func_8012CAE4)(arg0); - } else { - func_8001C214(v0, 0); - *(s16*)((u8*)arg0 + 0x2) = 1; - *(s16*)((u8*)arg0 + 0x5C) = 0x20; - *(s32*)((u8*)arg0 + 0x58) = (u32)&D_8019105C | 0x40000000; - *(s16*)((u8*)(*(s32*)((u8*)arg0 + 0x20)) + 0x12) = *(u16*)((u8*)arg0 + 0xFC); - } -} - - -DEFINE_func_8017DEA4() /* dedup: shared engine-core @0x8017DEA4 (src/shared) */ - - -extern void (*D_801910A4[])(void); - -void func_8017DEAC(void *a0) { - D_801910A4[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -extern void func_8017E204(void *arg0); -extern s32 func_8012AD50(void *arg0); - -/* 0x24-stride record at D_801EE888 (4 entries; asm/ov_SC04_018/data/tail18.data.s) */ - - -void func_8017DEE8(void *arg0) { - - extern u8 D_80078EB1; - extern Ent_8017D6EC_8017DEE8 D_801EE888[]; - s32 i; - - if (D_80078EB1 == 7) { - for (i = 0; i < 4; i++) { - Ent_8017D6EC_8017DEE8 *p = &D_801EE888[i]; - - p->unk16 = i; - func_8017E204(p); - if (i & 1) { - p->unk1C = 1; - } - } - func_8012AD50(arg0); - } -} - - - - -extern u8 D_80078EB1; -extern u8 D_80078E78[]; -extern u8 D_800AF630[]; -extern s32 func_8004787C(s32 a0); -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_8017E1B4(void *a0); -extern void func_8017E2C0(void *arg0); - -void func_8017DF78(void *arg0) -{ - /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every - LATER function in this TU, which blocks a byte-true decl of a different type. - Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ - extern Ent_8017D6EC_8017DEE8 D_801EE888[]; - u8 *m; - u8 *e78; - s32 k; - - m = D_800AF630; - e78 = D_80078E78; - - if (D_80078EB1 >= 9) { - s32 count; - s32 i; - u8 *base; - - base = (u8 *)D_801EE888; - count = 0; - for (i = 0; i < 4; i++) { - if (*(s32 *)(base + i * 0x24 + 0x1C) == 0) { - count++; - } - } - if (count == 0) { - func_8012AD44((s32 *)arg0, 0); - return; - } - } - - for (k = 0; k < 4; k++) { - u8 *p = (u8 *)D_801EE888 + k * 0x24; - s32 c; - - if (*(s32 *)(p + 0x1C) != 0) { - continue; - } - - { - s16 val = *(s16 *)(p + 0xC); - if (val < 0x401) { - *(s16 *)(p + 0xC) = val + 0xB; - } else if (*(s32 *)(p + 0x18) != 0) { - *(s32 *)(p + 0x18) -= 1; - } else { - *(s16 *)(p + 0xC) = val + 0xB; - } - } - - if (*(s16 *)(p + 0xC) >= 0x801) { - *(s16 *)(p + 0xC) = 0; - } - - c = (func_8004787C(*(s16 *)(p + 0xC)) / 64) & 0xFF; - c = c | (c << 16 | c << 8); - *(s32 *)(p + 0x4) = c; - - c = (func_8004787C(*(s16 *)(p + 0xC)) / 256) & 0xFF; - c = c | (c << 16 | c << 8); - *(s32 *)(p + 0x8) = c; - - if ((*(u16 *)(m + 0xA3AA) & 1) == 0) { - s16 cnt = *(u16 *)(p + 0xE) + 1; - *(u16 *)(p + 0xE) = cnt; - if (cnt >= 0x40) { - *(u16 *)(p + 0xE) = 0; - } - } - - { - s32 val2 = *(s16 *)(p + 0xC); - if (val2 == 0) { - *(s32 *)(p + 0x1C) = 1; - } else if (val2 >= 0x556) { - if (*(s32 *)(p + 0x20) == 0) { - *(s32 *)(p + 0x20) = 1; - if (e78[0x39] < 9) { - func_8017E1B4(p); - } - } - } - } - - func_8017E2C0(p); - } -} - - - - -/* func_8017E1B4 - iterate through 4-entry array, call func_8017E204 if any unk1C is non-zero */ - -extern void func_8017E204(void *arg0); - - - - -void aF8017E1B4(void) __asm__("func_8017E1B4"); -void aF8017E1B4(void) -{ - - extern Ent_8017D6EC D_801EE888[]; - s32 i = 0; - Ent_8017D6EC *p = &D_801EE888[0]; - - while (i < 4) { - if (p->unk1C != 0) { - func_8017E204(p); - break; - } - i++; - p = (Ent_8017D6EC *)((char *)p + 0x24); - } -} - - - -extern s32 rand(void); - -void func_8017E204(void *arg0) { - - extern void (*D_80191074[])(void); - s32 base = (s32)arg0; - s32 r1; - s32 r2; - s32 h; - s32 t; - - *(s32 *)(base + 0x0) = (s32)D_80191074; - *(s32 *)(base + 0x4) = 0; - *(s32 *)(base + 0x8) = 0; - *(s16 *)(base + 0xC) = 0; - *(s16 *)(base + 0xE) = 0; - *(s16 *)(base + 0x10) = 0; - - r1 = rand(); - r2 = rand(); - h = *(s16 *)(base + 0x16) * 80; - t = (r1 & 7) * 5 - 0xA0; - *(s16 *)(base + 0x12) = h + t + (r2 & 0xF); - - *(s16 *)(base + 0x14) = -((rand() & 0xF) * 2); - *(s32 *)(base + 0x1C) = 0; - *(s32 *)(base + 0x20) = 0; - *(s32 *)(base + 0x18) = (*(u16 *)(base + 0x16) & 2) * 30; -} - - - - -/* func_8017E2C0 — build a 4-vertex SVECTOR quad from an 8-u16 source record, - * translate it by the actor's (0x12,0x14) offset, and hand it to the - * 0x80017714 draw helper — three records per call. - * - * Frame math: 0x10 arg-save + 0x38 local + 7 saved regs (s0..s5,ra) = 0x68. - * The local is the same block shape as the D_801AA000 global in - * ov_SC06_008_jr_8017C294 (SVECTOR v[4]; then six words), with the last - * word DEAD (idiom 6: the frame delta is a dead field, not codegen). - * - * Two levers, both required: - * (1) THE PRIM BASE IS A SOURCE-LEVEL POINTER, not `&prim` at the use sites. - * Writing the loop body as `prim.v[k].vx = ...` addresses every store - * sp-relative, costs no callee-saved register and comes out -3 ins - * ($s5 never allocated, no `addiu $s1,$sp,0x10`). Introducing `q = &prim` - * BEFORE the loop and using `q->` only inside it reproduces the target - * exactly: the pre-loop initialisers stay sp-relative (same block as q's - * set, so cse folds them back) while the loop body keeps $s1. - * (2) A chained assignment stores the INNERMOST target first. The target's - * order is `sw 0x34` then `sw 0x30`, so it must be written - * `prim.f20 = prim.f24 = x;` — `f24 = f20 = x` emits 0x30 then 0x34. - * - * The two induction pointers ($s4 walking the record and $s0 = $s4 + 0xE) - * fall out of a SINGLE `u16 *p` walked with `p += 8` — loop.c splits the - * eight DEST_ADDR givs onto two bases on its own; do not hand-write a - * second pointer. - * - * Byte-identical target asm in ov_SC04_019 and ov_SC05_017 (same TU name), - * so this body remaps to those overlays unchanged. - */ - - - -extern void func_80017714(void *); - -void func_8017E2C0(void *arg0) -{ - s32 a0 = (s32)arg0; - Prim_8017DAC4_8017E2C0 prim; - Prim_8017DAC4_8017E2C0 *q; - u16 *p; - u16 dx, dy; - s32 i; - - q = &prim; - p = *(u16 **)(a0 + 0x0); - dx = *(u16 *)(a0 + 0x12); - dy = *(u16 *)(a0 + 0x14); - i = 0; - - prim.v[0].vz = 3; - prim.f20 = prim.f24 = *(s32 *)(a0 + 0x4); - prim.f28 = *(s32 *)(a0 + 0x8); - prim.f2C = 0; - prim.f30 = 0x50000000; - - do { - q->v[0].vx = p[0] + dx; - q->v[0].vy = p[1] + dy; - q->v[1].vx = p[2] + dx; - q->v[1].vy = p[3] + dy; - q->v[2].vx = p[4] + dx; - q->v[2].vy = p[5] + dy; - q->v[3].vx = p[6] + dx; - q->v[3].vy = p[7] + dy; - func_80017714(q); - p += 8; - i++; - } while (i < 3); -} - - -void func_8017E3D8(void) -{ - extern void func_8013CB84(void); - extern void func_8017E408(void); - extern void func_800D06E8(void); - - func_8013CB84(); - func_8017E408(); - func_800D06E8(); -} - - - -// @class: regalloc-order -// @stuck: none — MATCH - -extern u32 D_801EE918; -extern u16 D_801910AC[]; -extern u16 D_801EE91C[]; -extern s32 D_801910CC; - -extern void func_800183E0(s32 a0); - -void func_8017E408(void) -{ - u32 i; - u16 *p; - u32 base; - u16 *tbl; - - i = 0; - tbl = D_801910AC; - base = D_801EE918 >> 8; - p = D_801EE91C; - do { - *p = tbl[(base + i) & 0xF] | 0x8000; - i = i + 1; - p = p + 1; - } while (i < 0x10); - func_800183E0((s32)&D_801910CC); - D_801EE918 = D_801EE918 + 0x100; -} - - - -// @class: plumbing -// @stuck: none — MATCH (simple two-call wrapper, $s0 holds param across calls by default regalloc) - -extern void func_8017E824(void *arg0); -extern void func_8016EDEC(s32 a0, s32 a1, s32 a2); -extern void func_800167B8(s32 a0); - -s32 func_8017E494(s32 param_1) -{ - ((void (*)(void *, s32))func_8016EDEC)(func_8017E824, 0x1000000); - func_800167B8(0); - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - return 0; -} - - - -extern s32 func_800167F0(s32 a0); - -s32 func_8017E4E4(void) { - return (func_800167F0(0) & 0xffff) != 0; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_8017E508); - - -extern void func_800D1E28(void); -extern s32 func_800D1D94(void); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern void func_800D0C48(s32 a0); - -s32 func_8017E578(s32 a0) { - - extern s16 D_800B9A0A; - s16 s0; - - if (--(*(s32 *)(a0 + 0x28)) == -1) { - func_800D1E28(); - s0 = D_800B9A0A; - if (s0 != 0x1000 || (s16)func_800D1D94() != s0) { - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - func_8002D4C8(0x1D, 0); - func_800D0C48(1); - } - *(u8 *)(a0 + 0x15) += 1; - } - return 0; -} - - -extern void func_800D1EBC(void); - void func_8017E628(void) { - func_800D1EBC(); - } - - - -extern void func_800D1E28(void); - -s32 func_8017E648(void *a0) { - s32 *p = (s32 *)((u8 *)a0 + 0x28); - *p = *p - 1; - - if (*p == -1) { - func_800D1E28(); - (*(u8 *)((u8 *)a0 + 0x15))++; - } - - return 0; -} - - -extern void func_800D1E28(void); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8001BFD0(void); -extern s32 func_800291B4(s32 arg); -extern void func_800D0C48(s32 a0); - -s32 func_8017E69C(s32 param_1) { - if ((*(s32 *)(param_1 + 0x28) = *(s32 *)(param_1 + 0x28) - 1) == -1) { - func_800D1E28(); - func_8002D4C8(0x1C, 0); - func_8001BFD0(); - if ((func_800291B4(0xCE) & 0xFF) == 0) { - func_800D0C48(1); - } - *(u8 *)(param_1 + 0x15) = *(u8 *)(param_1 + 0x15) + 1; - } - return 0; -} - - - -extern void (*D_801910EC[])(void); - -void func_8017E720(void *a0) { - D_801910EC[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_801910F4[])(void); - -void func_8017E75C(void *a0) { - D_801910F4[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_80191100[])(void); - -void func_8017E798(void *a0) { - D_80191100[*(u8 *)((s32)a0 + 0x15)](); -} - - - -extern void (*D_8019110C[])(void); - -void func_8017E7D4(void *a0) { - D_8019110C[*(u8 *)((s32)a0 + 0x15)](); -} - - -extern s32 D_80127050; - void func_8017E810(void) { - D_80127050 = 1; - } - - - -extern void (*D_801913C0[])(void); - -void func_8017E824(void *a0) { - D_801913C0[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017E860(s32 *a0) { - *(u8 *)((s32)a0 + 0x214) += 1; - } - - -extern void func_80175414(s32 _arg0); -extern void func_8016F0E4(void); -extern void func_80165770(void); -void func_8017E874(void *a0) { - ((void (*)(void *))func_80175414)(a0); - ((s32 (*)(struct S *))func_8016F0E4)((struct S *)a0); - ((void (*)(void *))func_80165770)(a0); -} - - - -extern void (*D_801913C8[])(void); - -void func_8017E8AC(void *a0) { - D_801913C8[*(u8 *)((s32)a0 + 0x214)](); -} - - -void func_8017E8E8(u8 *a0) { - *(s8 *)(a0 + 0x214) += 1; - } - - -extern void func_8016F0E4(void); - void func_8017E8FC(void) { - ((s32 (*)(void))func_8016F0E4)(); - } - - - -extern void func_8012A018(s32 a, s32 b); -extern void func_8012A094(s32 a0); -extern void func_8017E9E0(void *a0); - - -void func_8017E91C(void) { - - extern u8 D_80126948[]; - extern s32 D_80126950; - 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_801269E8; - u8 tmp = D_801269E8; - - D_80126954 = 0x1F4; - D_80126950 = 0x1F4; - D_8012695C = 0x4B0; - D_80126968 = 0x238; - D_8012696A = 0; - D_8012696C = 0; - D_80126976 = 0; - D_80126978 = 0; - D_8012697A = 0; - func_8012A018((s32)func_8017E9E0, 0); - D_801269E8 = tmp; - func_8012A094((s32)D_80126948); - func_8017E9E0(D_80126948); - func_8012A094((s32)D_80126948); - func_8017E9E0(D_80126948); -} - - - -extern void (*D_801913D0[])(void); - -void func_8017E9E0(void *a0) { - D_801913D0[*(u8 *)((s32)a0 + 0x4)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_8017EA1C); - -void func_8017EA50(u8 *a0) { - *(s8 *)(a0 + 0xa0) = 0; - } - - - - -extern u16 func_801487F4(s32 *a0); -extern u16 func_80148800(s32 *a0); -extern s32 func_80012A60(s32 a0, s32 a1); - -void func_8017EA58(void *a0, u8 *a1) -{ - - extern s32 D_80126B58; - extern s16 D_8018D828[]; - /* Dead aggregate local (idiom 6): args(0x10) + saves(7*4) alone give a 0x30 - * frame; the target is 0x38, i.e. vars != 0. gcc-2.7.2 rounds the var area - * to 8, so ONE dead word reproduces it (s32 pad[2] overshoots to 0x40). */ - s32 frame_pad[1]; - u8 dir; - s32 lim; - s32 flags; - s32 held; - s32 cur; - - dir = *a1; - held = ((s32(*)(s32 *))func_801487F4)(&D_80126B58); - cur = ((s32(*)(s32 *))func_80148800)(&D_80126B58); - *(s16 *)((s32)a0 + 0x9C) = 0x5B; - - lim = 0; - if (cur & 3) { - lim = 0x555; - flags = cur; - *(s16 *)((s32)a0 + 0xA2) = 8; - } else if (*(s16 *)((s32)a0 + 0xA2) == 0) { - if (held & 3) { - lim = 0x555; - flags = held; - *(s16 *)((s32)a0 + 0x9C) = 0x2D; - } - } else { - *(s16 *)((s32)a0 + 0xA2) = *(s16 *)((s32)a0 + 0xA2) - 1; - } - - if (lim != 0) { - if (flags & 1) { - dir = (dir - 1) & 7; - } else if (flags & 2) { - dir = (dir + 1) & 7; - } - if ((s16)func_80012A60(*(s16 *)((s32)a0 + 0x1A), D_8018D828[dir]) < lim) { - *a1 = dir; - } - } - - *(s16 *)((s32)a0 + 0x22) = D_8018D828[*a1]; -} - - - - - /* 0x20: m@0, pad@0x12, t@0x14 */ - /* 8 bytes */ - -extern s32 func_80012B04(s32 a0, s32 a1, s32 a2); -extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); -extern s32 func_80012C6C(s32 a0, s32 a1, s32 a2); -extern void func_80049CAC(s32 a0, s32 a1); -extern void func_8012F14C(s32 a0, s32 a1, s32 a2); - -void func_8017EB98(s32 param_1) -{ - extern s16 D_80126940; - extern s16 D_80126942; - extern s16 D_80126944; - - MATRIX m1; - SVECTOR svec_in; - SVECTOR svec_out; - register s32 lim __asm__("$16"); - - lim = *(u16 *)(param_1 + 0x9C); - - { - s32 delta = func_80012B04(*(s16 *)(param_1 + 0x1A), *(s16 *)(param_1 + 0x22), 0x14); - if ((s16)delta > (s16)lim) { - delta = lim; - } else if ((s16)delta < -(s16)lim) { - delta = -lim; - } - *(s16 *)(param_1 + 0x1A) = (*(u16 *)(param_1 + 0x1A) + delta) & 0xFFF; - *(s16 *)(param_1 + 0x18) = func_80012ABC(*(s16 *)(param_1 + 0x18), *(s16 *)(param_1 + 0x20), 4); - } - - *(s16 *)(param_1 + 0x1C) = func_80012ABC(*(s16 *)(param_1 + 0x1C), *(s16 *)(param_1 + 0x24), 4); - *(s32 *)(param_1 + 0x8) = (s16)func_80012C6C(*(s16 *)(param_1 + 0x8), *(s16 *)(param_1 + 0xC), 4); - *(s32 *)(param_1 + 0x10) = (s16)func_80012C6C(*(s16 *)(param_1 + 0x10), *(s16 *)(param_1 + 0x14), 4); - *(s16 *)(param_1 + 0x28) = func_80012C6C(*(s16 *)(param_1 + 0x28), *(s16 *)(param_1 + 0x2E), 0x10); - *(s16 *)(param_1 + 0x2A) = func_80012C6C(*(s16 *)(param_1 + 0x2A), *(s16 *)(param_1 + 0x30), 0x10); - *(s16 *)(param_1 + 0x2C) = func_80012C6C(*(s16 *)(param_1 + 0x2C), *(s16 *)(param_1 + 0x32), 0x10); - - { - s16 *p940 = &D_80126940; - *(s32 *)(param_1 + 0x48) = (s32)*(s16 *)(param_1 + 0x28) + *p940; - *(s32 *)(param_1 + 0x4C) = (s32)*(s16 *)(param_1 + 0x2A) + D_80126942; - *(s32 *)(param_1 + 0x50) = (s32)*(s16 *)(param_1 + 0x2C) + D_80126944; - func_80049CAC(param_1 + 0x18, (s32)&m1); - - m1.t[0] = *(s16 *)(param_1 + 0x28) + *p940; - m1.t[1] = *(s16 *)(param_1 + 0x2A) + D_80126942; - m1.t[2] = *(s16 *)(param_1 + 0x2C) + D_80126944; - } - svec_in.vx = 0; - svec_in.vy = 0; - svec_in.vz = *(s32 *)(param_1 + 0x10); - ((void (*)(s32, s32, s32))func_8012F14C)((s32)&m1, (s32)&svec_in, (s32)&svec_out); - - *(s32 *)(param_1 + 0x3C) = (s32)svec_out.vx; - *(s32 *)(param_1 + 0x40) = (s32)svec_out.vy; - *(s32 *)(param_1 + 0x44) = (s32)svec_out.vz; -} - - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_801913D4; - void func_8017ED8C(void *a0) { - *(short *)((char *)a0 + 0x2) = 2; - func_80187778(a0, &D_801913D4); - } - - -#include "common.h" - -/* decl block copied verbatim from the destination TU, immediately preceding - * this function's own address range (src/ov_SC03_001/ov_SC03_001_jr_8017AE2C.c - * lines 4910-4914, right above the sibling func_8017F058 which shares - * func_80029504 / func_8018766C / func_80187778 / func_801877C0). */ -extern s32 func_80029504(void); -extern s32 func_801877C0(s32); -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_80187778(s32*, s32); - -/* func_8012C1B8 / func_8012CAE4 / func_8001C214 declared as in the TU's - * func_8017DE28 (lines 4198-4200). */ -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32, s32); - -/* already declared at TU line 2512 */ -extern s32 func_801788B8(s32 arg0, s32 arg1); - -/* this function's own callback target, INCLUDE_ASM'd at TU line ~4906 */ -extern s32 func_8017EF30(); - -void func_8017EDB8(void *a0) { - - extern short D_801913D4; - void *s0 = a0; - s32 v0; - s32 v1; - void *v1p; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((u8 *)s0 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(s0); - } - func_8001C214(*(s32 *)((u8 *)s0 + 0x20), 0); - - v1 = func_80029504(); - if (v1 < 0xC8) { - v0 = ((s32 (*)(void))func_801877C0)(); - if (v0 == 3) { - v0 = 2; - } else { - v0 = func_8018766C(0xA, 0x10); - if (v0 != 0) { - v0 = 1; - } else { - v0 = 2; - } - } - } else if (v1 < 0x258) { - func_8012CAE4(s0); - return; - } else if (v1 < 0x384) { - if (v1 < 0x276) { - func_8012CAE4(s0); - return; - } - v0 = 1; - } else { - v0 = 1; - } - - *(s16 *)((u8 *)s0 + 0x2) = (s16)v0; - __asm__ __volatile__(""); - func_80187778((s32 *)s0, (s32)&D_801913D4); - - v1p = *(void **)((u8 *)s0 + 0x68); - *(s16 *)((u8 *)v1p + 0xC) = 0x7FFF; - *(s32 *)((u8 *)s0 + 0xD4) = func_801788B8((s32)s0, (s32)&func_8017EF30); -} - - -extern void (*D_801914A8[])(void); - -void func_8017EEA8(void *a0) { - D_801914A8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void func_80178CBC(s32*, s32); - extern short D_80191438; - void func_8017EEE4(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 4; - ((void (*)(s32, s32))func_80178CBC)((int)arg0, (int)&D_80191438); - } - - -extern s32 func_800D0EC4(void); - s32 func_8017EF10(void) { - return (func_800D0EC4() == 0); - } - - -extern s32 func_8012BD14(s32 a0); -extern s32 func_80178BF8(); -extern u16 D_80126B5E; -extern u16 D_80126B66; -extern void func_80172710(void); - - s32 func_8017EF30(a0) -void *a0; -{ - s32 field; - s32 *p; - s32 v0; - field = *(s32 *)((s32)a0 + 0x64); - if (*(u16 *)(field + 0x2) != 2) { - return 0; - } - if (func_8012BD14(field) >= 0x6401) { - return 0; - } - if (*(s16 *)&D_80126B5E >= 0x281) { - return 0; - } - if (*(s16 *)&D_80126B66 < -0x380) { - return 0; - } - p = *(s32 **)((s32)a0 + 0x64); - v0 = *(u16 *)((s32)p + 0x2) + 1; - *(u16 *)((s32)p + 0x2) = v0; - func_80178BF8(); - return (s32)func_80172710; - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_8017EFD4); - - -extern s32 func_80029504(void); -extern s32 func_801877C0(s32); -extern s32 func_80187904(void); -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_80187778(s32*, s32); - -void func_8017F058(void *a0) { - - extern short D_801913D4; - void *s0 = a0; - s32 v1 = func_80029504(); - s32 v0; - - if (v1 < 0xC8) { - v0 = ((s32 (*)(void))func_801877C0)(); - v1 = 3; - if (v0 == v1) { - return; - } - v0 = func_8018766C(0xA, 0x10); - if (v0 == 0) { - return; - } - v0 = 1; - } else if (v1 < 0x258) { - v0 = 1; - } else if (v1 < 0x384) { - v0 = func_8018766C(0xA, 0x10); - if (v0 == 0) { - return; - } - v0 = 1; - } else { - v0 = func_80187904(); - v1 = 1; - if (v0 == v1) { - return; - } - v0 = func_8018766C(0xA, 0x10); - if (v0 == 0) { - return; - } - v0 = 1; - } - - *(s16 *)((char *)s0 + 0x2) = 0x1; - ((void (*)(s32, s32))func_80187778)((s32)s0, (s32)&D_801913D4); -} - - - -extern int func_80178970(void); -extern void func_80178D18(void); -extern void func_80187778(s32*, s32); - -void func_8017F0EC(void * arg0) { - - extern short D_801913D4; - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)((s32)arg0); - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32, s32))func_80187778)((int)arg0, (int)&D_801913D4); - } -} - - -extern void func_8001D074(s32 a0, s32 a1); -extern void func_800233CC(void *a0, u16 a1); -extern void func_8001CD50(s32 a0, s32 a1); - -void func_8017F13C(void) { - extern s32 D_801EE950[]; - extern s32 D_801EE96C; - s32 i; - - i = 0; - do { - D_801EE950[i] = ((s32 (*)(s32, s32))func_8001D074)(0x3E, 0x7D); - (&D_801EE96C)[i * 0x10] = 0; - func_800233CC(&(&D_801EE96C)[i * 0x10] - 1, 0x30); - func_8001CD50(D_801EE950[i], (s32)(&(&D_801EE96C)[i * 0x10] - 1)); - ((s32 *)D_801EE950[i])[1] |= 0xD0000040; - i++; - } while (i < 6); -} - - -void func_8017F1F0(s32 a0, s32 a1) -{ - extern s32 D_801EEAEC[]; - register s32 rv __asm__("$2"); - s32 x = D_801EEAEC[0]; - s32 y = a1; - s32 d; - - if (y < a0) { - if (x < y) { - x = x + 0x5A0; - } - y = y + 0x5A0; - } - if (a0 >= x) { - rv = -1; - goto done; - } - if (x >= y) { - rv = -1; - goto done; - } - d = x - a0; - if (d < 16) { - rv = d * 2; - goto done; - } - d = y - x; - if (d < 16) { - rv = d * 2; - goto done; - } - rv = 31; -done: - __asm__("" :: "r"(rv)); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_8017F258); - -void func_8017F2AC(u16 *a0, s32 a1) -{ - extern u16 D_800B99DA; - extern u8 D_801918EC[]; - - u8 arr[4]; - s32 t; - s32 q; - - q = 0x50; - if (D_801918EC[D_800B99DA & 0xF] == 0) { - q = 0x60; - } - a1 += 1; - t = q * a1; - q = t / 32; - arr[0] = q; - arr[1] = q; - arr[2] = q / 2; - arr[3] = 0; - - if (*(s16 *)((char *)a0 + 6) == -1) { - return; - } - do { - func_8017F368(a0, *(s32 *)arr); - a0 = (u16 *)((char *)a0 + 8); - } while (*(s16 *)((char *)a0 + 6) != -1); -} - - - -/* func_8017F368 (ov_SC04_018, ov_SC04_018_jr_8017AE2C) — MATCH (250 ins) - * - * Shadow/marker quad renderer: builds an outer quad (D_801914BC offset table) - * through RotNclip4, rejects it on OTZ, builds the inner quad (D_8019153C) - * through RotTransPers4, then emits 4 semi-transparent POLY_G4 (0x24 each) + - * one semi-transparent POLY_F4 (0x18) out of one 0xA8 packet allocation. - * - * Levers that closed the residual (all byte-verified against the .s): - * - frame 0xE0 with locals starting at 0x30: STARTING_FRAME_OFFSET == - * outgoing-args size (RotNclip4 takes 11 args -> 0x2C -> 0x30). `pad0[16]` - * is the DEAD 0x20-byte first local (§136 idiom 6) that puts va at sp+0x50. - * - `sxy[8]` is ONE array: RotNclip4 fills [0..3], RotTransPers4 fills [4..7], - * and the loop indexes the whole thing (idx values run 0..7). - * - `register u16 *dst __asm__("$4")`: a HARD-reg dst is not a biv, so loop.c - * cannot strength-reduce its +2/+4 accesses into a second IV. That is what - * gives ONE register with offsets 0/2/4 (unpinned -> 254 ins, extra IV). - * - `p2 = p1 + 2` (two walked source pointers): `p1[0]` is a bare deref - * (excluded from givs, loop-map L1 rule 4) so p1 stays the biv used at - * offset 0, and p2 is the second IV carrying the -2/0 offset cluster. - * - `while` loops with `i++` written BEFORE the pointer bumps: the increment - * LUID order decides which bump fills the first load-delay slot. - * - `s16 idx[4]` as a real ARRAY (ARRAY_REF => MEM_IN_STRUCT_P): that makes - * the varying-address packet store conflict with the stack slots, so CSE - * cannot forward idx[1..3] and gcc re-loads them with `lh` (an - * INDIRECT_REF `*(s16*)(buf+0x82)` forwards them and loses the reloads). - * - `D_800A651C[][5]` / `D_801E01Dx[][4]` two-dimensional externs: the 1-D - * `sym + byte_offset` spelling makes gcc materialise `&D_800A651C` into a - * hoisted callee-saved register ($s5, +4 ins); the 2-D array-ref keeps the - * symbol folded in the MEM address (gas `lw $2,sym($1)` macro) and makes the - * table index a REDUCED GIV, whose preheader init lands AFTER the hoisted - * `addiu $s3,$sp,0x30` movable (target order s3 -> s2 -> s0). - * - `type2 = type + zr` ($zero pin): the target keeps TWO pseudos for - * (attr & 0xFF) — $a0 for the pre-call use and $s1 for the post-call one — - * so a plain second variable would be propagated away by CSE. - * - `pk[7] = 0x3A` written AFTER the 0x1C colour store: it only conflicts with - * the 0x04 store, so the scheduler sinks it into the `lh 0xB6($sp)` delay - * slot exactly as in the target (§135 idiom 4, source order sets the sink). - */ - -extern void func_8012E32C(void); -extern void func_8017F750(void *, s32); -extern s32 RotNclip4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); -extern s32 RotTransPers4(s32, s32, s32, s32, s32 *, s32 *, s32 *, s32 *, s32 *, s32 *); -extern void *func_80010A08(s32); -extern s32 AddPrim(s32, void *); -extern void func_8012E28C(s32, s32); - -void func_8017F368(u16 *a0, s32 a1) -{ - - extern s32 D_800A651C[][5]; - extern u16 D_801914BC[]; - extern u16 D_8019153C[]; - extern u16 D_801915DC[][4]; - extern u16 D_801915DE[][4]; - extern u16 D_801915E0[][4]; - extern u16 D_801915E2[][4]; - register s32 zr __asm__("$0"); - - u16 pad0[16]; /* dead: locals begin at sp+0x30, va must land at sp+0x50 */ - u16 va[16]; /* sp+0x50 — outer quad, 4 x SVECTOR */ - u16 vb[16]; /* sp+0x70 — inner quad, 4 x SVECTOR */ - s32 sxy[8]; /* sp+0x90 — [0..3] RotNclip4, [4..7] RotTransPers4 */ - s16 idx[4]; /* sp+0xB0 */ - s32 p; /* sp+0xB8 */ - s32 otz; /* sp+0xBC */ - s32 flag; /* sp+0xC0 */ - - u16 attr; - s32 type; - s32 type2; - u16 *p1; - u16 *p2; - register u16 *dst __asm__("$4"); - s32 i; - u8 *pk; - s32 j; - - func_8012E32C(); - - attr = a0[3]; - type = attr & 0xFF; - type2 = type + zr; - if ((attr & 0xF00) == 0x200) { - func_8017F750(a0, a1); - return; - } - - p1 = (u16 *)((u8 *)D_801914BC + type * 0x20); - i = 0; - p2 = p1 + 2; - dst = va; - while (i < 4) { - dst[0] = a0[0] + p1[0]; - dst[1] = a0[1] + p2[-1]; - dst[2] = a0[2] + p2[0]; - i++; - p1 += 4; - p2 += 4; - dst += 4; - } - - if (RotNclip4((s32)&va[0], (s32)&va[4], (s32)&va[8], (s32)&va[12], - &sxy[0], &sxy[1], &sxy[2], &sxy[3], &p, &otz, &flag) <= 0) { - return; - } - - otz -= 0x10; - if (otz < 0) { - return; - } - if (otz >= 0x1000) { - return; - } - - p1 = (u16 *)((u8 *)D_8019153C + type2 * 0x20); - i = 0; - p2 = p1 + 2; - dst = vb; - while (i < 4) { - dst[0] = a0[0] + p1[0]; - dst[1] = a0[1] + p2[-1]; - dst[2] = a0[2] + p2[0]; - i++; - p1 += 4; - p2 += 4; - dst += 4; - } - - RotTransPers4((s32)&vb[0], (s32)&vb[4], (s32)&vb[8], (s32)&vb[12], - &sxy[4], &sxy[5], &sxy[6], &sxy[7], &p, &flag); - - pk = func_80010A08(0xA8); - - for (j = 0; j < 4; j++) { - idx[0] = D_801915DC[j][0]; - idx[1] = D_801915DE[j][0]; - idx[2] = D_801915E0[j][0]; - idx[3] = D_801915E2[j][0]; - *(s32 *)(pk + 0x4) = a1 & -(idx[0] < 4); - *(s32 *)(pk + 0xC) = a1 & -(idx[1] < 4); - *(s32 *)(pk + 0x14) = a1 & -(idx[2] < 4); - *(s32 *)(pk + 0x1C) = a1 & -(idx[3] < 4); - pk[7] = 0x3A; - *(u32 *)(pk + 0x0) = 0x08000000; - *(s32 *)(pk + 0x8) = sxy[idx[0]]; - *(s32 *)(pk + 0x10) = sxy[idx[1]]; - *(s32 *)(pk + 0x18) = sxy[idx[2]]; - *(s32 *)(pk + 0x20) = sxy[idx[3]]; - AddPrim(D_800A651C[(u16)D_800B9A02][0] + (otz * 4), pk); - pk += 0x24; - } - - *(s32 *)(pk + 0x4) = a1; - pk[7] = 0x2A; - *(u32 *)(pk + 0x0) = 0x05000000; - *(s32 *)(pk + 0x8) = sxy[0]; - *(s32 *)(pk + 0xC) = sxy[1]; - *(s32 *)(pk + 0x10) = sxy[2]; - *(s32 *)(pk + 0x14) = sxy[3]; - AddPrim(D_800A651C[(u16)D_800B9A02][0] + (otz * 4), pk); - func_8012E28C(otz, 1); -} - - -extern s32 D_801EE950[]; -extern s32 D_801EE968[]; - -void func_8017F750(void *a0, s32 a1) { - s32 v1; - s32 *a2; - - v1 = ((u16 *)a0)[3] >> 12; - a2 = (s32 *)D_801EE950[v1]; - a2[1] &= 0x7FFFFFFF; - D_801EE968[v1 * 16] = a1; - ((u16 *)a2)[4] = ((u16 *)a0)[0]; - ((u16 *)a2)[5] = ((u16 *)a0)[1]; - ((u16 *)a2)[6] = ((u16 *)a0)[2]; - ((u16 *)a2)[9] = (((u16 *)a0)[3] & 0xF) << 10; -} - - - -extern void (*D_801918FC[])(void); - -void func_8017F7C8(void *a0) { - D_801918FC[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern s32 func_8012C658(s32 arg0, s32 arg1, s32 arg2); -extern s32 func_8012BEE8(s32 a0); -extern s32 rand(void); - -void func_8017F804(s32 param_1) { - - extern u8 D_8019190C[][4]; - s32 i; - s32 v1; - s32 uVar1; - - if (func_8018766C(7, 0x13) == 0) { - return; - } - for (i = 0; i < 4; i++) { - if (D_8019190C[*(s16 *)(param_1 + 0x100)][i] == *(s32 *)(param_1 + 0x1c)) { - func_8012C658(0x140, - *(u8 *)(param_1 + 0xfc) | ((*(s16 *)(param_1 + 0xfe) << 8) & 0xff00), - param_1); - break; - } - } - if (func_8012BEE8(param_1) == 0) { - return; - } - *(s32 *)(param_1 + 0x1c) = 0x50; - uVar1 = rand(); - v1 = *(u16 *)(param_1 + 0xfe) + (uVar1 & 0xf) - 7; - v1 &= 0xff; - *(u16 *)(param_1 + 0xfe) = v1; - uVar1 = rand(); - v1 = *(u16 *)(param_1 + 0xfc) + (uVar1 & 0xf) - 7; - v1 &= 0xff; - *(u16 *)(param_1 + 0xfc) = v1; - uVar1 = rand(); - *(s16 *)(param_1 + 0x100) = uVar1 % 7; -} - - - -extern void (*D_80191928[])(void); - -void func_8017F920(void *a0) { - D_80191928[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80191930[])(void); - -void func_8017F95C(void *a0) { - D_80191930[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80191940[])(void); - -void func_8017F998(void *a0) { - D_80191940[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_80191950[])(void); - -void func_8017F9D4(void *a0) { - D_80191950[*(u16 *)((s32)a0 + 0x2)](); -} - - -void func_8017FA10(void) { -} - -extern s32 func_8012BEE8(s32 a0); -extern s32 rand(void); - -void func_8017FA18(s32 param_1) { - s32 uVar1; - s32 iVar2; - register s32 iVar3 __asm__("$3"); - register s32 iVar4 __asm__("$16"); - u32 uVar3; - - uVar1 = *(u16 *)(param_1 + 0x34); - if (uVar1 == 1) { - goto case1; - } - if (uVar1 < 2) { - if (uVar1 == 0) { - goto case0; - } - return; - } - if (uVar1 == 2) { - goto case2; - } - if (uVar1 != 3) { - return; - } - goto case3; - -case0: - iVar2 = func_8012BEE8(param_1); - if (iVar2 == 0) { - return; - } - *(s32 *)(param_1 + 0x1c) = 0x40; - *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; - uVar3 = rand(); - iVar4 = uVar3 & 0x3fff; - iVar4 = iVar4 + 0x7800; - uVar3 = rand(); - if ((uVar3 & 1) == 0) { - iVar4 = -iVar4; - } - *(s32 *)(param_1 + 0xe0) = iVar4; - *(s32 *)(param_1 + 0xe4) = 0; - return; - -case1: - iVar3 = *(s32 *)(param_1 + 0xe4); - iVar3 = iVar3 + *(s32 *)(param_1 + 0xe0); - *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + iVar3; - *(s32 *)(param_1 + 0xe4) = iVar3; - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); - iVar2 = func_8012BEE8(param_1); - if (iVar2 == 0) { - return; - } - *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; - uVar3 = rand(); - uVar3 = uVar3 & 0x3f; - goto tail; - -case2: - *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + *(s32 *)(param_1 + 0xe4); - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); - iVar2 = func_8012BEE8(param_1); - if (iVar2 == 0) { - return; - } - *(s32 *)(param_1 + 0x1c) = 0x40; - *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; - *(s32 *)(param_1 + 0xe0) = -*(s32 *)(param_1 + 0xe0); - return; - -case3: - __asm__ __volatile__("" ::: "memory"); - iVar3 = *(s32 *)(param_1 + 0xe4); - iVar3 = iVar3 + *(s32 *)(param_1 + 0xe0); - *(s32 *)(param_1 + 0xdc) = *(s32 *)(param_1 + 0xdc) + iVar3; - *(s32 *)(param_1 + 0xe4) = iVar3; - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(param_1 + 0xde); - iVar2 = func_8012BEE8(param_1); - if (iVar2 == 0) { - return; - } - *(u16 *)(param_1 + 0x34) = 0; - uVar3 = rand(); - uVar3 = uVar3 & 0xff; - -tail: - *(u32 *)(param_1 + 0x1c) = uVar3 + 0x40; -} - - - -extern void (*D_80191960[])(void); - -void func_8017FBC4(void *a0) { - D_80191960[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern s32 RotTransPers(s32, s32, s32 *, s32 *); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8017FC00(void) -{ - - extern u16 D_800B99DA; - extern s32 D_80126B58; - extern u8 D_800AF648; - extern s32 D_80191968; - extern s32 func_80013450(s32); - s32 *p = &D_80126B58; - s32 sxy, pv, flag; - s16 x; - s32 pan; - s32 dist; - s32 vol; - - if (!(D_800B99DA & 1)) { - func_8004914C(&D_800AF648); - func_800491AC(&D_800AF648); - if (RotTransPers((s32)&D_80191968, (s32)&sxy, &pv, &flag) <= 0 || flag < 0) { - func_8002D4C8(4, 0x7E6); - } else { - x = *(u16 *)&sxy + 0xA0; - *(s16 *)&sxy = x; - if (x < 0) { - x = 0; - *(s16 *)&sxy = x; - } else if (x >= 0x141) { - x = 0x140; - *(s16 *)&sxy = x; - } - x = *(s16 *)&sxy; - pan = (x * 15) / 320; - dist = ((s32 (*)(s32, s32))func_80013450)((s32)(p + 1), (s32)&D_80191968); - if (dist >= 0x240) { - dist = 0x23F; - } - { - s32 panpart; - vol = ((0x23F - dist) * 127) / 576; - panpart = ((pan << 8) & 0xF00) | 0x3000; - func_8002D4C8(0x7E6, panpart | (vol & 0x7F)); - } - } - } -} - - -extern s32 D_801915FC; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FD5C(void) { - D_801EEAE8 = &D_801915FC; - func_8017F1F0(0x474, 0x4B0); -} - - -extern s32 D_80191634; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FD90(void) { - D_801EEAE8 = &D_80191634; - func_8017F1F0(0x474, 0x4EC); -} - - -extern s32 D_8019166C; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FDC4(void) { - D_801EEAE8 = &D_8019166C; - func_8017F1F0(0x474, 0x4B0); -} - - -extern s32 D_80191694; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FDF8(void) { - D_801EEAE8 = &D_80191694; - func_8017F1F0(0x474, 0x4B0); -} - - - -extern s32 D_801916CC; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FE2C(void) { - D_801EEAE8 = &D_801916CC; - func_8017F1F0(0x474, 0x528); -} - - -extern s32 D_80191704; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32, s32); -extern s32 func_80029504(void); - -s32 func_8017FE60(void) { - s32 var_s0; - - D_801EEAE8 = (s32)&D_80191704; - var_s0 = ((s32 (*)(s32, s32))func_8017F1F0)(0x168, 0x1A4); - if (var_s0 == -1) { - var_s0 = ((s32 (*)(s32, s32))func_8017F1F0)(0x474, 0x4EC); - } - if ((u32)(func_80029504() - 200) < 220) { - return -1; - } - return var_s0; -} - - - -extern s32 D_80191744; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FED4(void) { - D_801EEAE8 = &D_80191744; - func_8017F1F0(0x474, 0x1A4); -} - - - - -extern s32 func_80029504(void); -extern void func_8017F1F0(s32 arg0, s32 arg1); - -s32 func_8017FF08(void) { - - extern s32 D_8019177C; - s32 v; - D_801EEAE8 = (s32)&D_8019177C; - v = func_80029504(); - if ((u32)(v - 0x64) < 0x1F4) { - return -1; - } - func_8017F1F0(0x96, 0xF0); -} - - - -extern s32 D_8019179C; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FF54(void) { - D_801EEAE8 = &D_8019179C; - func_8017F1F0(0x12c, 0x1A4); -} - - - -extern s32 D_801917EC; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FF88(void) { - D_801EEAE8 = &D_801917EC; - func_8017F1F0(0x474, 0x4B0); -} - - - -extern s32 D_8019184C; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8017FFBC(void) { - D_801EEAE8 = &D_8019184C; - func_8017F1F0(0x474, 0x4B0); -} - - - - -extern s32 func_80029504(void); -extern void func_8017F1F0(s32 arg0, s32 arg1); - -s32 func_8017FFF0(void) { - - extern s32 D_8019187C; - s32 v; - D_801EEAE8 = (s32)&D_8019187C; - v = func_80029504(); - if ((u32)(v - 0x64) < 0x1F4) { - return -1; - } - func_8017F1F0(0x474, 0x78); -} - - - -extern s32 D_80191894; -extern s32 D_801EEAE8; -extern void func_8017F1F0(s32 arg0, s32 arg1); - -void func_8018003C(void) { - D_801EEAE8 = &D_80191894; - func_8017F1F0(0x564, 0x1A4); -} - - -s32 func_80180070(void) { - return -1; - } - - -void func_80180078(void) -{ - extern u8 D_80078EB0; - extern u8 D_80078EB1; - extern s32 D_801EEAEC[]; - extern s32 D_801EF2DC; - extern s32 D_801EE950[]; - extern void func_8017F258(s32 arg0); - extern void func_8017FC00(void); - s32 i; - s32 mask; - s32 *ptr; - - i = 0; - mask = 0x80000000; - D_801EEAEC[0] = D_80078EB1 * 60 + D_80078EB0; - ptr = D_801EE950; - - while (i < 6) { - *(s32 *)(*ptr + 4) |= mask; - ptr++; - i++; - } - - for (i = 2; i < 18; i++) { - func_8017F258(i); - } - - func_8017FC00(); - - if (D_801EF2DC != 0) { - D_801EF2DC = D_801EF2DC - 1; - } -} - - -extern void func_8001C214(s32, s32); -extern void func_8012C1B8(void); -extern void func_8012C588(s32, s32); -extern void func_8012CAE4(void *a0); -extern void func_8017F13C(void); - - void func_80180134(void *a0) { - s32 v0; - u16 val; - v0 = ((s32 (*)(void *))func_8012C1B8)(a0); - *(s32 *)((char *)a0 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(a0); - return; - } - func_8001C214(v0, 0); - func_8012C588(0x13F, 0); - func_8012C588(0x66, 0); - func_8012C588(0x65, 0); - func_8012C588(0x14C, 0); - func_8012C588(0x335, 0); - func_8012C588(0x3D9, 0); - val = *(u16 *)((char *)a0 + 0x72); - *(u16 *)((char *)a0 + 0x2) = 1; - val |= 0x1000; - *(u16 *)((char *)a0 + 0x72) = val; - func_8017F13C(); - } - - -extern u8 D_80191904[]; -extern void func_8012E8E0(s32 a0, s32 a1); - - void func_801801E0(s32 a0) { - *(s16 *)(a0 + 0x2) = 1; - func_8012E8E0(a0, (s32)&D_80191904); - *(s16 *)(a0 + 0xFE) = 0; - *(s16 *)(a0 + 0xFC) = 0x80; - } - - -extern void func_8012B200(u8 *a0); - -/* - * func_80180224 -- ov_SC04_018 / ov_SC04_018_jr_80188E1C, 71 ins, family reach x6. - * - * STEP 0 sibling: this is a direct extension of the shared-engine-core macro - * DEFINE_func_80144558() (src/shared/engine_core.h) -- identical prologue - * through the func_80128EA8 call and the three field copies (+8/+0xA/+0xC - * from param_1+6/+0xA/+0xE), but instead of calling func_8012B200(param_1) at - * the end, this variant sets a handful of extra fields directly and calls - * func_8012B0B4 (angle -> velocity split), matching the idiom seen at - * src/ov_SC03_099/ov_SC03_099_jr_8017BEBC.c:func_8017F9C4/func_8017FB58 and - * the DEFINE_func_8012B0B4() macro itself (single u32 result word written - * through the output pointer). - */ -extern void func_8012C194(void); -extern void func_8012CAE4(void *a0); -extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern void func_80128EA8(s32 a0, s32 a1, s32 a2); -extern void func_8012B0B4(unsigned int *param_1, int param_2, int param_3); - -void func_80180224(u8 *arg0) -{ - - extern u8 D_800D387C[]; - extern u8 D_800D3888[]; - register u8 *param_1 __asm__("$16"); /* $s0 */ - s32 raw; - u32 buf[6]; - - param_1 = arg0; - { - register s32 s0 __asm__("$17"); /* $s1 -- scoped: dead after func_80128EA8 */ - s0 = ((s32 (*)(void))func_8012C194)(); - if (s0 == 0) { - func_8012CAE4(param_1); - return; - } - *(s32 *)(param_1 + 0xCC) = s0; - func_8001CC3C(s0, 0, 0, 0); - *(s32 *)(s0 + 0x20) = (s32)D_800D387C; - *(u8 *)(s0 + 0x27) = 0x9C; - *(u16 *)(s0 + 0x1A) = 0x3000; - *(u16 *)(s0 + 0x18) = 0x3000; - *(u32 *)(s0 + 4) = *(u32 *)(s0 + 4) | 0x50000000; - func_80128EA8(s0, (s32)(param_1 + 0xD0), (s32)D_800D3888); - } - { - s32 obj = *(s32 *)(param_1 + 0xCC); - *(u16 *)(obj + 8) = *(u16 *)(param_1 + 6); - *(u16 *)(obj + 0xA) = *(u16 *)(param_1 + 0xA); - *(u16 *)(obj + 0xC) = *(u16 *)(param_1 + 0xE); - } - raw = *(s16 *)(param_1 + 0x70); - *(s32 *)(param_1 + 0x1C) = 0x5A; - *(u16 *)(param_1 + 2) = 1; - *(s32 *)(param_1 + 0x10) = 0; - *(s32 *)(param_1 + 0x14) = 0xFFF80000; - *(s32 *)(param_1 + 0x18) = 0; - func_8012B0B4((unsigned int *)buf, (raw & 0xFF00) >> 4, (raw & 0xFF) << 6); - { - register s32 full __asm__("$2"); - register s32 low __asm__("$3"); - full = *(s32 *)buf; - low = *(s16 *)buf; - *(s32 *)(param_1 + 0x48) = 0; - *(s32 *)(param_1 + 0x44) = low; - *(s32 *)(param_1 + 0x4C) = full >> 16; - } -} - - -extern void func_80016714(void *a0, s32 a1); -extern s32 func_80128ED8(s32 param_1, s32 *param_2); -extern void func_8012AD80(s32 a0); -extern void func_8012C218(void *a0); -extern s32 func_8012BEE8(s32 a0); - -void func_80180340(s32 param_1) { - s32 temp_s1; - s32 temp_v1; - - temp_s1 = *(s32 *)(param_1 + 0xCC); - func_8012AD80(param_1); - temp_v1 = *(s32 *)(param_1 + 0xCC); - *(u16 *)(temp_v1 + 8) = *(u16 *)(param_1 + 6); - *(u16 *)(temp_v1 + 0xA) = *(u16 *)(param_1 + 0xA); - *(u16 *)(temp_v1 + 0xC) = *(u16 *)(param_1 + 0xE); - if ((*(u32 *)(param_1 + 0x1C) & 7) == 0) { - func_80128ED8(temp_s1, (s32 *)(param_1 + 0xD0)); - } - if (func_8012BEE8(param_1) != 0) { - func_80016714((void *)temp_s1, 0x38); - func_8012C218((void *)param_1); - } -} - - - -extern void func_8012B414(int a0); - void func_801803DC(s32 arg0) { - s32 temp_v1 = *(s32 *)(arg0 + 0x20); - *(s16 *)(temp_v1 + 0x14) += 0x8; - ((void (*)(void))func_8012B414)(); - } - - - extern void func_8012C1B8(void); - extern void func_8012CAE4(void *a0); - extern void func_8001C214(s32 a0, s32 a1); - extern void func_8001D0E8(s32 a0, s32 a1, s32 a2); - extern void func_8012E8E0(s32 a0, s32 a1); - extern s32 D_801BECE0[]; - extern s32 D_80191938[]; - void func_80180410(s32 a0) { - s32 v0; - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(a0 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4((void *)a0); - return; - } - func_8001C214(v0, (s32)D_801BECE0); - func_8001D0E8(*(s32 *)(a0 + 0x20), 0x7FFF, 0x7FFF); - func_8012E8E0(a0, (s32)D_80191938); - *(s16 *)(a0 + 0x2) = 1; - } - - -void func_80180488(s32 arg0) -{ - extern u16 D_800B99DA; - extern s32 func_8004787C(s32 a0); - *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x10) = (u32)func_8004787C(D_800B99DA * 48) >> 5; -} - - -extern s32 func_80029504(void); -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C810(s32 a0, s32 a1); -extern void func_8001D0E8(s32 a0, s32 a1, s32 a2); -extern void func_8012E8E0(s32 a0, s32 a1); -extern s32 D_801BE978[]; -extern s32 D_80191948[]; - -void func_801804D0(s32 a0) { - s32 v0; - if ((u32)(func_80029504() - 0x181) < 0x55) { - func_8012CAE4((void *)a0); - return; - } - *(s32 *)(a0 + 0x20) = v0 = ((s32 (*)(void))func_8012C1B8)(); - if (v0 == 0) { - func_8012CAE4((void *)a0); - return; - } - func_8001C810(v0, (s32)D_801BE978); - *(s32 *)(*(s32 *)(a0 + 0x20) + 4) |= 0x8000; - func_8001D0E8(*(s32 *)(a0 + 0x20), 0x7FFF, 0x7FFF); - func_8012E8E0(a0, (s32)D_80191948); - *(s16 *)(a0 + 0x2) = 1; - return; -} - - -extern s32 D_80191958[]; -extern s32 D_801BEE78[]; -extern void func_8001C214(s32, s32); -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8012E8E0(s32 a0, s32 a1); - -void func_80180574(a0) -s32 a0; -{ - extern s32 D_801BEE78[]; - extern s32 D_80191958[]; - s32 v0; - - v0 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(a0 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4((void *)a0); - } else { - func_8001C214(v0, (s32)D_801BEE78); - func_8012E8E0(a0, (s32)D_80191958); - *(s16 *)(a0 + 0x2) = 1; - *(s16 *)(a0 + 0x34) = 0; - *(s32 *)(a0 + 0xDC) = 0; - *(s32 *)(a0 + 0xE0) = 0; - *(s32 *)(a0 + 0xE4) = 0; - } -} - - -void func_801805EC(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - } - - - -extern void (*D_80191978[])(void); - -void func_801805F8(void *a0) { - D_80191978[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_801877C0(s32); -extern s32 func_80187904(void); -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern u8 D_80078EBA; - -s32 func_80180634(void) { - s32 v0; - - v0 = ((s32 (*)(void))func_801877C0)(); - if (v0 == 3) { - return 1; - } - v0 = func_80187904(); - if (v0 == 1) { - return 1; - } - if (D_80078EBA != 2) { - return func_8018766C(0xC, 0x14) == 0; - } - return 1; -} - - -extern s32 func_80180634(void); -extern void func_801805EC(void *a0); - - void func_8018069C(void *a0) { - s32 s0; - s0 = 1; - *(s32 *)(*(s32 *)((char *)a0 + 0xCC) + 0xB0) = s0; - if (func_80180634() != s0) { - return; - } - func_801805EC(a0); - } - - - - - void func_801806E8(s32 a0) { - s32 *v1; - v1 = *(s32 **)((s32)a0 + 0xCC); - *(s32 *)((s32)v1 + 0xB0) = 2; - if (func_80180634() == 0) { - *(s16 *)((s32)a0 + 0x2) = 1; - } - } - - -extern s32 func_8012E57C(s32 a0, s32 a1); - -void func_80180728(void *a0) { - s32 v0; - - v0 = func_8012E57C(0x61, 0xD); - *(s32 *)((char *)a0 + 0xCC) = v0; - v0 = func_80180634(); - - if (v0 != 0) { - v0 = 2; - } else { - v0 = 1; - } - - *(s16 *)((char *)a0 + 0x2) = v0; -} - - -void func_80180770(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - } - - -extern void (*D_8019198C[])(void); - -void func_8018077C(void *a0) { - D_8019198C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern u8 D_80078EBA; -extern void func_80180770(void *a0); - -void func_801807B8(void *a0) { - s32 v0; - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - if (D_80078EBA == 3) { - v0 = 0; - } else { - v0 = func_8018766C(7, 0x13) != 0; - } - if (!v0) { - func_80180770(a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80180820); - -extern s32 func_8012E57C(s32 a0, s32 a1); -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern u8 D_80078EBA; - - void func_80180884(void *a0) { - s32 v0; - v0 = func_8012E57C(0x61, 0x8); - *(s32 *)((char *)a0 + 0xCC) = v0; - if (D_80078EBA == 3) { - v0 = 0; - } else { - v0 = func_8018766C(0x7, 0x13); - v0 = (0U < (u32)v0) ? 1 : 0; - } - if (v0 != 0) { - v0 = 1; - } else { - v0 = 2; - } - *(s16 *)((char *)a0 + 0x2) = v0; - } - - -void func_801808F0(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - } - - - -extern void (*D_801919A0[])(void); - -void func_801808FC(void *a0) { - D_801919A0[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_80029504(void); -extern s32 func_80029178(s32 arg); -extern s32 func_8018766C(s32 arg0, s32 arg1); - -s32 func_80180938(void) { - if ((u32)(func_80029504() - 0x12C) < 0x12C) { - if ((func_80029178(0xFA) & 0xFF) != 0) { - return 0; - } - } - return (0U < (u32)func_8018766C(0xA, 0x14)) ? 1 : 0; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_8018098C); - -extern s32 func_80180938(void); - -void func_801809D0(s32 a0) { - s32 *v1; - v1 = *(s32 **)((s32)a0 + 0xCC); - *(s32 *)((s32)v1 + 0xB0) = 2; - if (func_80180938() != 0) { - *(s16 *)((s32)a0 + 0x2) = 1; - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80180A10); - - - -extern void func_8012A828(s32, s32); - extern short D_801C3B38; - void func_80180A58(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x7; - *(short *)((char *)a0 + 0x34) = 0; - ((void (*)(s32 *, s32))func_8012A828)((s32 *)a0, (s32)&D_801C3B38); - } - - - -extern void (*D_80191B0C[])(void); - -void func_80180A88(void *a0) { - D_80191B0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_801877C0(s32); -extern s32 func_8018766C(s32 arg0, s32 arg1); - -s32 func_80180AC4(s32 a0) { - switch (((s32 (*)(void))func_801877C0)()) { - case 0: - return func_8018766C(7, 0x13) != 0; - case 3: - return 0; - default: - return func_8018766C(9, 0x11) != 0; - } -} - - -extern void func_80188A78(s32 a0, s32 a1, s32 a2); -extern void func_80180D34(void *a0); - -void func_80180B1C(s32 a0) { - *(s16 *)(a0 + 2) = 1; - func_80188A78(a0, 0xC, 1); - func_80180D34((void *)a0); -} - - - - -/* func_80180B5C — state-entry init (family exemplar, reach x11). - * Sets the actor's state id (halfword @ +0x2) then runs the fixed - * five-call entry chain. Sibling style copied from func_80180164 - * in the same TU (cookbook §71). */ - -extern void func_8012E8E0(s32, s32); -extern void func_8012E88C(s32); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32); -extern void func_80187994(s32, s32, s32, s32); - - -void aF80180B5C(void *arg0) __asm__("func_80180B5C"); -void aF80180B5C(void *arg0) -{ - - extern short D_801919AC; - extern short D_801C3B38; - extern short D_801B92EC; - *(short *)((char *)arg0 + 0x2) = 2; - func_8012E8E0((s32)arg0, (s32)&D_801919AC); - func_8012E88C((s32)arg0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)arg0, (s32)&D_801C3B38); - func_80187750((s32)arg0); - func_80187994((s32)arg0, (s32)&D_801B92EC, 0, 0x60); -} - - -extern void func_8012E88C(s32 a0); -extern void func_8012A828(s32 a0, s32 a1); -extern void func_80187750(s32 a0); -extern void func_80188A78(s32 a0, s32 a1, s32 a2); -extern void func_80187994(s32 a0, s32 a1, s32 a2, s32 a3); - -void func_80180BCC(void *arg0) { - extern short D_801C3B38; - extern short D_801B92FC; - s32 s0; - s0 = (s32)arg0; - *(short *)((char *)arg0 + 0x2) = 3; - func_8012E88C((s32)arg0); - __asm__("" ::: "memory"); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)s0, (s32)&D_801C3B38); - func_80187750((s32)s0); - func_80188A78((s32)s0, 0xC, 1); - func_80187994((s32)s0, (s32)&D_801B92FC, 0, 0x40); -} - - - -extern void func_8012A828(s32 a0, s32 a1); - extern short D_801C3B38; - void func_80180C3C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 3; - func_8012A828((int)arg0, (int)&D_801C3B38); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80180C68); - - extern void func_8012E88C(s32 a0); - extern void func_8012A828(s32, s32); - extern void func_80187750(s32 a0); - extern void func_80187994(s32 a0, s32 a1, s32 a2, s32 a3); - extern short D_801C3B38; - extern short D_801B92EC; - void func_80180CD4(s32 a0) { - *(u16 *)(a0 + 2) = 6; - func_8012E88C(a0); - ((void (*)(s32, s32))func_8012A828)(a0, (s32)&(*(s32 *)&D_801C3B38)); - func_80187750(a0); - func_80187994(a0, (s32)&(*(s32 *)&D_801B92EC), 1, 0x60); - } - - -void func_80180D34(void *a0) { - extern void func_80187778(s32 *, s32); - extern short D_801919AC; - func_80187778((s32 *)a0, (s32)&D_801919AC); -} - - - -extern s32 func_801877C0(s32 a0); - -void func_80180D5C(s32 a0) { - - extern s32 D_801919D0[]; - s32 idx = func_801877C0(a0); - *(s32 *)(a0 + 0xE4) = D_801919D0[idx]; -} - - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_80180D9C(void) { - if ((func_80029178(0x110) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x110, 1); - return 1; - } - return 0; - } - - -extern s32 func_80180AC4(s32 a0); -extern s32 func_80180B5C(void *a0); -void func_80180DD8(int param_1) -{ - if (((int (*)(void))func_80180AC4)() != 0) { - ((void (*)(int))func_80180B5C)(param_1); - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80180E10); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80180E68); - -extern s32 func_801789AC(s32 arg0); -extern int func_80178970(void); -extern void func_80178D18(void); -extern void func_80178CBC(s32 *a0, s32 a1); -void func_80180C3C(void *arg0); - -void func_80180ECC(void *a0) { - extern u16 D_80191AC4[]; - extern u8 D_80191AEC; - u16 state; - s32 r; - - state = *(u16 *)((char *)a0 + 0x34); - switch (state) { - case 1: - r = func_801789AC((s32)a0); - if (r != 0) { - if (r == state) { - func_80178CBC((s32 *)a0, (s32)&D_80191AC4); - } else { - func_80178CBC((s32 *)a0, (s32)&D_80191AEC); - } - *(u16 *)((char *)a0 + 0x34) = *(u16 *)((char *)a0 + 0x34) + 0x1; - } - break; - case 0: - case 2: - if (((s32 (*)(s32))func_80178970)((s32)a0) != 0) { - ((void (*)(s32))func_80178D18)((s32)a0); - func_80180C3C(a0); - } - break; - } -} - - -extern void func_80188A14(void *a0, s32 a1, s32 a2); -extern s32 func_801886A0(s32 arg0); -extern s32 func_80187A64(s32 a0); - -void func_80180FA0(void *arg0) { - func_80188A14(arg0, 0xC, 1); - if (func_801886A0(0xC)) { - if (func_80187A64((s32)arg0)) { - func_80180B1C((s32)arg0); - } - } -} - - -#include "common.h" - -extern s32 func_8018727C(void *a0, void *a1); -extern s32 func_80180AC4(s32 a0); -extern void func_80180BCC(void *a0); -extern void func_80180B1C(s32 a0); -extern s32 func_801788B8(s32 a0, s32 a1); -extern s32 D_801919BC; -extern s32 func_80181078(void *a0); - -void func_80180FF8(void *arg0) { - if (func_8018727C(arg0, &D_801919BC) == 0) { - return; - } - - if (((int (*)(void))func_80180AC4)() != 0) { - func_80180BCC(arg0); - } else { - func_80180B1C((s32)arg0); - } - - *(s16 *)(*(s32 *)((char *)arg0 + 0x68) + 0xC) = 0x7FFF; - *(s32 *)((char *)arg0 + 0xD4) = func_801788B8((s32)arg0, (s32)func_80181078); -} - - - -extern s32 func_8012BD14(s32 a0); -extern s32 func_80178BF8(); -extern void func_80172710(void); - -s32 func_80181078(void *a0) -{ - s32 ptr; - u16 st; - - ptr = *(s32 *)((s32)a0 + 0x64); - st = *(u16 *)((s32)ptr + 0x2); - if (st != 3) { - return 0; - } - - if (func_8012BD14(ptr) >= 0x4001) { - return 0; - } - - { - s32 p; - u16 st2; - p = *(s32 *)((s32)a0 + 0x64); - st2 = *(u16 *)((s32)p + 0x2); - st2++; - *(u16 *)((s32)p + 0x2) = st2; - } - func_80178BF8(); - return (s32)func_80172710; -} - - -void func_801810EC(void *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - } - - - -extern void (*D_80191B30[])(void); - -void func_801810F8(void *a0) { - D_80191B30[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern u8 D_80078EBA; -extern void func_801810EC(void *a0); - - void func_80181134(void *a0) { - s32 v0; - *(s32 *)(*(s32 *)((s32)a0 + 0xcc) + 0xb0) = 1; - if (D_80078EBA == 0) { - v0 = 0; - } else { - v0 = func_8018766C(0xB, 0x10) != 0; - } - if (!v0) { - func_801810EC(a0); - } - } - - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern u8 D_80078EBA; - -void func_8018119C(a0) -void *a0; -{ - s32 v0; - *(s32 *)(*(s32 *)((s32)a0 + 0xCC) + 0xB0) = 2; - if (D_80078EBA == 0) { - v0 = 0; - } else { - v0 = func_8018766C(0xB, 0x10) != 0; - } - if (v0 != 0) { - *(u16 *)((char *)a0 + 2) = 1; - } -} - - -extern s32 func_8012E57C(s32 a0, s32 a1); -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern u8 D_80078EBA; - -void func_80181200(a0) -void *a0; -{ - s32 v0; - v0 = func_8012E57C(0x61, 0x9); - *(s32 *)((char *)a0 + 0xCC) = v0; - if (D_80078EBA == 0) { - v0 = 0; - } else { - v0 = func_8018766C(0xB, 0x10); - v0 = (0U < (u32)v0) ? 1 : 0; - } - if (v0 != 0) { - v0 = 1; - } else { - v0 = 2; - } - *(s16 *)((char *)a0 + 0x2) = v0; -} - - - -extern void func_80187778(s32*, s32); - extern short D_80191B3C; - void func_8018126C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32, s32))func_80187778)((int)arg0, (int)&D_80191B3C); - } - - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80191B3C; - void func_80181298(short *param_1) { - *(short *)((char *)param_1 + 0x2) = 0x3; - func_80187778(param_1, &D_80191B3C); - } - - - -extern void (*D_80191C08[])(void); - -void func_801812C4(void *a0) { - D_80191C08[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_80029504(void); -extern s32 func_801877C0(s32); -extern s32 func_80187890(void); - -void func_80181300(s32 a0) { - - extern s32 D_80191B58[]; - extern s32 D_80191B6C[]; - - s32 v1 = func_80029504(); - - if (v1 < 0xC8) { - s32 v0 = ((s32 (*)(void))func_801877C0)(); - *(s32 *)(a0 + 0xE4) = D_80191B58[v0]; - } else { - s32 v0 = func_80187890(); - *(s32 *)(a0 + 0xE4) = D_80191B6C[v0]; - } -} - - -extern s32 func_8014CB1C(void); - int func_80181374(void) { - return func_8014CB1C() != 0; - } - - - -extern void func_8014B2A8(void); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_80181394(void) { - func_8014B2A8(); - ((s32 (*)(s32, s32))func_8002D4C8)(0x464, 0); -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80191BC0; - void func_801813C0(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - *(short *)((char *)a0 + 0x34) = 0; - func_80178CBC((s32 *)a0, (s32)&D_80191BC0); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_801813F0); - -extern s32 func_8018766C(s32 arg0, s32 arg1); - -void func_80181458(s32 *arg0) { - register s32 *s0 asm("$16") = arg0; - s32 v1; - *(s32 *)((u8 *)(*(s32 **)((u8 *)s0 + 0xCC)) + 0xB0) = 1; - if (func_8018766C(6, 0x12) != 0) { - v1 = 1; - } else { - v1 = (func_8018766C(0x12, 0x15) != 0) ? 2 : 0; - } - if (v1 != 1) { - func_80181298((short *)s0); - } -} - - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern short D_80191B3C; -extern void func_80187778(s32 *a0, s32 a1); - - void func_801814C4(s32 *arg0) { - register s32 *s0 asm("$16") = arg0; - s32 v0, v1; - *(s32 *)((u8 *)(*(s32 **)((u8 *)s0 + 0xCC)) + 0xB0) = 2; - v0 = func_8018766C(6, 0x12); - if (v0 != 0) { - v1 = 1; - } else { - v0 = func_8018766C(0x12, 0x15); - v1 = (v0 != 0) ? 2 : 0; - } - if (v1 != 2) { - *(s16 *)((u8 *)s0 + 2) = 1; - func_80187778(s0, (s32)&D_80191B3C); - } - } - - -extern int func_80178970(void); -extern void func_80178D18(void); -extern void func_80187778(s32*, s32); - -void func_8018153C(void * arg0) { - - extern short D_80191B3C; - if (*(u16 *)((char *)arg0 + 0x34) == 0) { - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)((s32)arg0); - *(short *)((char *)arg0 + 0x2) = 3; - ((void (*)(s32, s32))func_80187778)((int)arg0, (int)&D_80191B3C); - } - } -} - - -extern s32 func_8018727C(void *a0, void *a1); -extern s32 func_8018766C(s32 a0, s32 a1); -extern void func_80187778(s32 *a0, s32 a1); -extern s32 func_801788B8(s32 a0, s32 a1); -extern short D_80191B3C; -extern s32 D_80191B44; -extern void func_8018166C(void *); - -void func_801815A0(void *arg0) { - void *s0 = arg0; - s32 v1; - s32 v0; - void *ptr; - - if (func_8018727C(arg0, &D_80191B44) == 0) { - return; - } - - if (func_8018766C(6, 0x12) != 0) { - v1 = 1; - } else { - v1 = (func_8018766C(0x12, 0x15) != 0) << 1; - } - - switch (v1) { - case 0: - v0 = 1; - break; - case 1: - v0 = 2; - break; - case 2: - v0 = 3; - break; - default: - goto tail; - } - - *(short *)((char *)s0 + 2) = v0; - func_80187778((s32 *)s0, (s32)&D_80191B3C); - -tail: - ptr = *(void **)((char *)s0 + 0x68); - *(short *)((char *)ptr + 0xC) = 0x7FFF; - *(s32 *)((char *)s0 + 0xD4) = func_801788B8((s32)s0, (s32)func_8018166C); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_8018166C); - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_801816D8); - - -extern void (*D_80191C20[])(void); - -void func_801817C4(void *a0) { - D_80191C20[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_801816D8(void); -extern u8 D_801EF3D6; - -void func_80181800(s32 a0) { - if (func_801816D8() != 0) { - *(s32 *)(*(s32 *)(a0 + 0xCC) + 0xB0) = 1; - D_801EF3D6 = 1; - } else { - *(s32 *)(*(s32 *)(a0 + 0xCC) + 0xB0) = 2; - D_801EF3D6 = 0; - } -} - - -extern s32 func_8012E57C(s32 a0, s32 a1); -extern s32 func_801816D8(void); -extern u8 D_801EF3D6; - -void func_80181864(s32 a0) { - *(s16 *)(a0 + 0x2) = 1; - *(s32 *)(a0 + 0xCC) = func_8012E57C(0x61, 0xE); - if (func_801816D8() != 0) { - *(s32 *)(*(s32 *)(a0 + 0xCC) + 0xB0) = 1; - D_801EF3D6 = 1; - } else { - *(s32 *)(*(s32 *)(a0 + 0xCC) + 0xB0) = 2; - D_801EF3D6 = 0; - } -} - - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80191C28; - void func_801818E0(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x2; - func_80187778((s32 *)a0, (s32)&D_80191C28); - } - - - -extern void (*D_80191C90[])(void); - -void func_8018190C(void *a0) { - D_80191C90[*(u16 *)((s32)a0 + 0x2)](); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80181948); - -void func_80181988(void *a0) { - *(short *)((char *)a0 + 0x2) = 4; - *(short *)((char *)a0 + 0x34) = 0; - *(int *)((char *)a0 + 0x1c) = 0x3c; - } - - - -extern s32 func_801877C0(s32 a0); - -void func_801819A0(s32 a0) { - - extern s32 D_80191C44[]; - s32 idx = func_801877C0(a0); - *(s32 *)(a0 + 0xE4) = D_80191C44[idx]; -} - - -extern s32 func_80181948(s32 a0); -extern void func_801818E0(short*); -void func_801819E0(int param_1) -{ - if (((int (*)(void))func_80181948)() != 0) { - ((void (*)(int))func_801818E0)(param_1); - } -} - - -void func_80181A18(s32 *a0) -{ - extern s32 func_80181948(s32 a0); - extern void func_80187778(s32*, s32); - extern s16 D_80191C28; - - *(s32 *)(a0[0x33] + 0xB0) = 2; - if (func_80181948((s32)a0) == 0) { - *(s16 *)((char *)a0 + 0x2) = 1; - func_80187778(a0, (s32)&D_80191C28); - } -} - - -void func_80181A68(void *arg0) -{ - extern s32 func_80128C98(s32); - extern void func_8001C97C(s32 *); - extern void func_80178CBC(s32 *, s32); - extern int func_80178970(void); - extern void func_80178D18(void); - extern void func_80187778(s32 *, s32); - extern s16 D_801F1370; - extern s16 D_80191C58; - extern s16 D_80191C28; - extern s16 D_801E4340; - - switch (*(u16 *)((char *)arg0 + 0x34)) { - case 0: - if (func_80128C98(4) != 0) { - *(u16 *)((char *)arg0 + 0x34) = *(u16 *)((char *)arg0 + 0x34) + 1; - func_8001C97C(&D_801F1370); - *(s32 *)(*(s32 *)((char *)arg0 + 0x20) + 0x24) = (s32)&D_801F1370; - func_80178CBC(arg0, (s32)&D_80191C58); - } - break; - case 1: - if (((int (*)(s32))func_80178970)(arg0) != 0) { - ((void (*)(s32))func_80178D18)(arg0); - *(s32 *)(*(s32 *)((char *)arg0 + 0x20) + 0x24) = (s32)&D_801E4340; - *(s16 *)((char *)arg0 + 2) = 2; - func_80187778(arg0, (s32)&D_80191C28); - } - break; - } -} - - -void func_80181B40(void *arg0) { - extern s32 func_8018727C(void *a0, void *a1); - extern s32 func_80181948(s32 a0); - extern void func_80187778(s32 *a0, s32 a1); - extern s32 func_801788B8(s32 a0, s32 a1); - extern s32 func_80181BC0(void *a0); - extern short D_80191C28; - extern s32 D_80191C30[]; - void *v1; - - if (func_8018727C(arg0, &D_80191C30) == 0) { - return; - } - - if (((int (*)(void))func_80181948)() != 0) { - *(s16 *)((char *)arg0 + 2) = 2; - } else { - *(s16 *)((char *)arg0 + 2) = 1; - } - - func_80187778((s32 *)arg0, (s32)&D_80191C28); - - v1 = *(void **)((char *)arg0 + 0x68); - *(s16 *)((char *)v1 + 0xC) = 0x7FFF; - *(s32 *)((char *)arg0 + 0xD4) = func_801788B8((s32)arg0, (s32)func_80181BC0); -} - - - -extern void func_80172710(void); -extern s32 func_8018739C(void); -extern s32 func_80188D1C(void *); -extern s32 func_80178BF8(void); - -s32 func_80181BC0(void *a0) -{ - void *s0 = a0; - void **v0p; - u16 v1; - - v0p = (void **)(s0 + 0x64); - v1 = *(u16 *)(*v0p + 0x2); - if (v1 != 0x2) { - return 0; - } - - if (func_8018739C() == 0) { - return 0; - } - - if (func_80188D1C(*v0p) != 0) { - return 0; - } - - *(u16 *)(*v0p + 0x2) = 0x3; - func_80178BF8(); - - return (s32)func_80172710; -} - - -void func_80181C38(void *arg0) -{ - extern void func_8012E8E0(s32, s32); - extern void func_8012E88C(s32); - extern void func_8012A828(s32, s32); - extern void func_80187750(s32); - extern void func_80187994(s32, s32, s32, s32); - extern short D_80191CA4; - extern short D_801C37E8; - extern short D_801B9348; - - *(short *)((char *)arg0 + 0x2) = 2; - *(short *)((char *)arg0 + 0x34) = 0; - func_8012E8E0((s32)arg0, (s32)&D_80191CA4); - func_8012E88C((s32)arg0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)arg0, (s32)&D_801C37E8); - func_80187750((s32)arg0); - func_80187994((s32)arg0, (s32)&D_801B9348, 0, 0x60); -} - - - - -extern void func_8012E8E0(s32 a0, s32 a1); -extern void func_8012E88C(s32 a0); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32 a0); - - -void func_80181CAC(void *a0) { - - extern short D_80191CAC; - extern short D_801C3890; - *(short *)((char *)a0 + 0x2) = 3; - func_8012E8E0((s32)a0, (s32)&D_80191CAC); - func_8012E88C((s32)a0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)a0, (s32)&D_801C3890); - func_80187750((s32)a0); -} - - - extern void func_8012E8E0(s32 a0, s32 a1); - extern void func_8012E88C(s32 a0); - extern void func_8012A828(s32, s32); - extern void func_80187750(s32); - extern void func_80187994(s32, s32, s32, s32); - void func_80181D04(void *arg0) { - extern short D_80191CAC; - extern s32 D_801C37E8; - extern u8 D_801B9354[]; - void *v1; - *(short *)((char *)arg0 + 0x2) = 0x4; - func_8012E8E0((s32)arg0, (s32)&D_80191CAC); - v1 = *(void **)((char *)arg0 + 0x20); - *(short *)((char *)v1 + 0x12) = *(short *)((char *)v1 + 0x12) + 0x800; - func_8012E88C((s32)arg0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)arg0, (s32)&(*(short *)&D_801C37E8)); - func_80187750((s32)arg0); - *(short *)((char *)arg0 + 0x34) = 0; - func_80187994((s32)arg0, (s32)&(*(short *)D_801B9354), 0x1, 0x40); - } - - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80191CA4; - void func_80181D8C(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - func_80187778((s32 *)a0, (s32)&D_80191CA4); - } - - -#include "common.h" - -/* decl_prior-driven externs — signatures copied from the TU's own spelling - * where "tu" was present on the card (wave law 2); rest from "def"/"fleet". */ -extern s32 func_8018727C(void *a0, void *a1); -extern void func_80187778(s32 *a0, s32 a1); -extern s32 func_801788B8(s32 arg0, s32 arg1); -extern s32 func_801877C0(s32 a0); -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_8012E8E0(s32 a0, s32 a1); -extern void func_8012E88C(s32 a0); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32 a0); - -extern short D_80191CB4; -extern short D_80191CA4; -extern short D_80191CAC; -extern short D_801C3890; - -/* forward decls: both defined later in this TU (func_80181FE0 @6183, - * func_80182058 @6231) and registered here as callback pointers. */ -extern s32 func_80181FE0(void *a0); -extern s32 func_80182058(void *a0); - -void func_80181DB8(void *arg0) { - void *s0 = arg0; - void *ptr; - s32 v0; - - if (func_8018727C(arg0, &D_80191CB4) == 0) { - return; - } - - func_80187778((s32 *)s0, (s32)&D_80191CA4); - - ptr = *(void **)((u8 *)s0 + 0x68); - *(s16 *)((u8 *)ptr + 0xC) = 0x7FFF; - - *(s32 *)((u8 *)s0 + 0xD4) = func_801788B8((s32)s0, (s32)func_80181FE0); - *(s32 *)((u8 *)s0 + 0xD8) = func_801788B8((s32)s0, (s32)func_80182058); - - v0 = ((s32 (*)(void))func_801877C0)(); - - if (v0 == 3) { - if (func_8018766C(0xA, 0x16) == 0) { - *(s16 *)((u8 *)s0 + 0x2) = 1; - } else { - *(s16 *)((u8 *)s0 + 0x2) = 5; - } - } else { - if (func_8018766C(0xA, 0x10) != 0) { - *(s16 *)((u8 *)s0 + 0x2) = 3; - func_8012E8E0((s32)s0, (s32)&D_80191CAC); - func_8012E88C((s32)s0); - func_8012A828((s32)s0, (s32)&D_801C3890); - func_80187750((s32)s0); - return; - } else { - if (func_8018766C(0x10, 0x16) != 0) { - *(s16 *)((u8 *)s0 + 0x2) = 5; - } else { - *(s16 *)((u8 *)s0 + 0x2) = 1; - } - } - } - - func_80187778((s32 *)s0, (s32)&D_80191CA4); -} - - - -extern void (*D_80191D3C[])(void); - -void func_80181ED4(void *a0) { - D_80191D3C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_80182F3C(s32 a0); -extern short D_80191CAC; -extern short D_801C3890; -extern void func_8012A828(s32, s32); -extern void func_8012E88C(s32); -extern void func_8012E8E0(s32 a0, s32 a1); -extern void func_80178CBC(s32*, s32); - -void func_80181F10(void *a0) { - s32 v0; - - *(short *)((char *)a0 + 0x2) = 9; - func_8012E8E0((s32)a0, (s32)&D_80191CAC); - func_8012E88C((s32)a0); - ((void (*)(s32, s32))func_8012A828)((s32)a0, (s32)&D_801C3890); - v0 = func_80182F3C((s32)a0); - ((void (*)(s32, s32))func_80178CBC)((s32)a0, v0); -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80191CDC; - void func_80181F74(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x7; - func_80178CBC(a0, &D_80191CDC); - } - - - -extern s32 func_801877C0(s32 a0); - -void func_80181FA0(s32 a0) { - - extern s32 D_80191CC8[]; - s32 idx = func_801877C0(a0); - *(s32 *)(a0 + 0xE4) = D_80191CC8[idx]; -} - - - -extern void func_80172710(void); -extern s32 func_8018739C(void); -extern s32 func_80188D1C(void *); -extern s32 func_80178BF8(void); - -s32 func_80181FE0(void *a0) -{ - void *s0 = a0; - void **v0p; - u16 v1; - - v0p = (void **)(s0 + 0x64); - v1 = *(u16 *)(*v0p + 0x2); - if (v1 != 0x5) { - return 0; - } - - if (func_8018739C() == 0) { - return 0; - } - - if (func_80188D1C(*v0p) != 0) { - return 0; - } - - *(u16 *)(*v0p + 0x2) = 0x6; - func_80178BF8(); - - return (s32)func_80172710; -} - - - -/* func_80182058 — state-machine callback registered by func_80180A08. - * - * Shape (read off the target, not off Ghidra — the Ghidra seed is for a - * different address entirely): - * - guard call func_8012BD14(a0->0x64), bail if result > 0x4000 - * - switch on the u16 at +2 of a0->0x64, cases 3 / 2 / 4 (gcc balances the - * tree on the middle case 3, hence `slti $v0,$v1,4` for "index > node->high") - * - the comparison constants for the case-2/case-4 sub-tests ride in the - * dispatch branch delay slots (§3-T4: read the constant off the delay slot, - * not off the branch line) — case 2 tests +0x34 == 1, case 4 tests +0x34 == 0 - * - the two adjacent globals get their own `lui $at` each => two separate - * symbols, NOT one array (§20 pointer-var rule does not apply here) - * - +0x34 is reloaded after the D_801EEAF0 store, and 0x64 is reloaded too: - * gcc-2.7.2 CSE invalidates memory on the global store, so re-express both - */ - -extern s32 func_8012BD14(s32 a0); -extern s32 func_80178BF8(); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2541) */ -extern void func_80172710(void); - -s32 func_80182058(void *a0) -{ - - extern s16 D_801EEAF0; - extern s16 D_801EEAF2; - void *p; - u16 st; - - if (func_8012BD14(*(s32 *)((s32)a0 + 0x64)) > 0x4000) { - /* LOAD-BEARING zero-byte cross-jump barrier (cookbook §5a). - * Without it gcc's find_cross_jump merges this `move v0,0; j epi` - * tail with the identical case-2 failure tail -> 58 ins instead of - * 60, and the case-2 `beq` then loses its delay-slot fill. */ - __asm__ __volatile__(""); - return 0; - } - - p = *(void **)((s32)a0 + 0x64); - st = *(u16 *)((s32)p + 0x2); - switch (st) { - case 3: - *(s16 *)((s32)p + 0x2) = 8; - break; - case 2: - if (*(u16 *)((s32)p + 0x34) != 1) { - return 0; - } - goto hit; - case 4: - if (*(u16 *)((s32)p + 0x34) != 0) { - return 0; - } - hit: - D_801EEAF0 = st; - D_801EEAF2 = *(u16 *)((s32)p + 0x34); - *(s16 *)(*(s32 *)((s32)a0 + 0x64) + 0x2) = 10; - break; - default: - return 0; - } - - func_80178BF8(); - return (s32)func_80172710; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80182148); - - -extern s32 func_801886A0(s32 a0); -extern s32 func_80187A64(s32 a0); -extern void func_80187994(s32, s32, s32, s32); -extern void func_80181CAC(void *a0); - -void func_801821C0(void *a0) -{ - - extern u8 D_801B9354[]; - if (*(u16 *)((s32)a0 + 0x34) == 0) { - if (func_801886A0(6) == 0) { - return; - } - if (func_80187A64((s32)a0) == 0) { - return; - } - ((void (*)(void *, void *, s32, s32))func_80187994)(a0, D_801B9354, 0, 0x40); - *(s16 *)((s32)a0 + 0x34) = 1; - return; - } - - *(s32 *)(*(s32 *)((s32)a0 + 0xCC) + 0xB0) = 2; - if (func_80187A64((s32)a0) != 0) { - func_80181CAC(a0); - } -} - - - -/* func_80182254 — guarded dispatch: ask func_8018766C(10, 0x10); if it answers - * zero, run func_80181D04 on the incoming entity. The entity pointer is live - * across the jal, so it lands in $s0 and comes back out as $a0. - * §3-T4: target branch is `bnez $v0, ret` => the C condition is `== 0`. */ - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_80181D04(); - -void func_80182254(void *arg0) { - if (func_8018766C(10, 0x10) == 0) { - func_80181D04(arg0); - } -} - - - -extern int func_80178970(void); -extern void func_80178D18(void); -extern void func_8012E8E0(s32, s32); -extern void func_8012E88C(s32); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32); - - -void func_80182294(void *a0) { - - extern short D_80191CAC; - extern short D_801C3890; - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)((s32)a0); - *(short *)((char *)a0 + 0x2) = 3; - func_8012E8E0((s32)a0, (s32)&D_80191CAC); - func_8012E88C((s32)a0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)a0, (s32)&D_801C3890); - func_80187750((s32)a0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80182304); - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern s32 func_801877C0(s32); -extern short D_80191CA4; -extern void func_80187778(s32 *a0, s32 a1); - -void func_80182398(a0) -s32 *a0; -{ - *(s32 *)((s32)a0[0x33] + 0xB0) = 2; - if (func_8018766C(func_801877C0((s32)a0) == 3 ? 0xA : 0x10, 0x16) != 0) { - return; - } - *(short *)((char *)a0 + 0x2) = 1; - ((void (*)(s32 *, void *))func_80187778)(a0, (void *)&(*(s32 *)&D_80191CA4)); -} - - -#include "common.h" - -extern int func_80178970(void); -extern void func_80178D18(void); -extern void func_80187778(s32*, s32); - -void func_80182400(void * arg0) { - - extern short D_80191CA4; - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)((s32)arg0); - *(short *)((char *)arg0 + 0x2) = 5; - ((void (*)(s32, s32))func_80187778)((int)arg0, (int)&D_80191CA4); - } -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80191D14; - void func_80182450(short *param) { - param[1] = 0xB; - ((void (*)(s32, s32))func_80178CBC)((int)param, (int)&D_80191D14); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_8018247C); - -extern s16 D_801C36E8; -extern u8 D_801B9360[]; -extern void func_8012A828(s32, s32); -extern void func_8012E88C(s32 a0); -extern void func_80182898(void); -extern void func_80187750(s32 a0); -extern void func_80187994(s32 a0, s32 a1, s32 a2, s32 a3); - - void func_801824DC(void *arg0) { - s32 s0; - s0 = (s32)arg0; - *(s16*)((char *)arg0 + 0x2) = 2; - func_8012E88C((s32)arg0); - __asm__("" ::: "memory"); - ((void (*)(s32 *, s32))func_8012A828)((s32*)s0, (s32)&D_801C36E8); - func_80187750((s32)s0); - *(s16*)((char *)arg0 + 0x34) = 0; - func_80187994((s32)s0, (s32)D_801B9360, 0, 0x80); - func_80182898(); - } - - -extern s32 D_80191D74; -extern short D_801CAA80; -extern void func_8012A828(s32, s32); -extern void func_8012E88C(s32); -extern void func_8012E8E0(s32, s32); -extern void func_80182898(void); -extern void func_80187750(s32); - - void func_80182548(void *a0) { - extern s32 D_80191D74; - extern short D_801CAA80; - *(short *)((char *)a0 + 0x2) = 3; - func_8012E8E0((s32)a0, (s32)&D_80191D74); - func_8012E88C((s32)a0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)a0, (s32)&D_801CAA80); - func_80187750((s32)a0); - func_80182898(); - } - - -extern s16 D_801C36E8; -extern u8 D_801B936C[]; -extern void func_8012A828(s32, s32); -extern void func_8012E88C(s32); -extern void func_80187750(s32); -extern void func_80187994(s32, s32, s32, s32); - -void func_801825A8(arg0) -void *arg0; -{ - extern s16 D_801C36E8; - extern u8 D_801B936C[]; - *(short *)((char *)arg0 + 0x2) = 6; - func_8012E88C((s32)arg0); - ((void (*)(s32*, s32))func_8012A828)((s32 *)arg0, (s32)&D_801C36E8); - func_80187750((s32)arg0); - *(short *)((char *)arg0 + 0x34) = 0; - func_80187994((s32)arg0, (s32)&D_801B936C, 1, 0x80); -} - - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80191D6C; - void func_8018260C(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x7; - func_80187778((s32 *)a0, (s32)&D_80191D6C); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80182638); - - -extern void func_80187778(s32*, s32); - extern short D_80191D6C; - void func_8018268C(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 9; - ((void (*)(s32, s32))func_80187778)((int)arg0, (int)&D_80191D6C); - } - - -extern void func_8012E88C(s32); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32); - -void func_801826B8(void *arg0) { - extern s16 D_801C36E8; - *(short *)((char *)arg0 + 0x2) = 0xA; - func_8012E88C((s32)arg0); - func_8012A828((s32 *)arg0, (s32)&D_801C36E8); - func_80187750((s32)arg0); - *(short *)((char *)arg0 + 0x34) = 0; -} - - -extern s32 func_80187A64(s32 a0); -extern s32 func_801886A0(s32 a0); -extern short D_80191D6C; -extern u8 D_801B9360[]; -extern u8 D_801B93A4[]; -extern u8 D_801B93F4[]; -extern void func_80187778(s32*, s32); -extern void func_80187994(s32, s32, s32, s32); - -void func_80182704(void *a0) -{ - switch (*(u16 *)((s32)a0 + 0x34)) { - case 0: - if (func_801886A0(0xD) == 0) { - return; - } - *(u16 *)((s32)a0 + 0x34) = 1; - func_80187994((s32)a0, (s32)D_801B93F4, 1, 0x80); - return; - case 1: - func_801886A0(0xD); - if (((s32 (*)(s32))func_80187A64)((s32)a0) == 0) { - return; - } - *(u16 *)((s32)a0 + 0x34) = 2; - func_80187994((s32)a0, (s32)D_801B93A4, 1, 0x80); - return; - case 2: - if (((s32 (*)(s32))func_80187A64)((s32)a0) == 0) { - return; - } - *(u16 *)((s32)a0 + 0x34) = 3; - *(s32 *)((s32)a0 + 0x1C) = 0x20; - return; - case 3: - if (func_801886A0(3) == 0) { - return; - } - *(u16 *)((s32)a0 + 0x34) = 4; - func_80187994((s32)a0, (s32)D_801B9360, 1, 0x80); - return; - case 4: - func_801886A0(3); - if (((s32 (*)(s32))func_80187A64)((s32)a0) == 0) { - return; - } - *(u16 *)((s32)a0 + 0x2) = 1; - func_80187778((s32 *)a0, (s32)&D_80191D6C); - return; - } -} - - - -extern void (*D_80191E0C[])(void); - -void func_80182824(void *a0) { - D_80191E0C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 D_801D6014; -extern s32 D_801DD064; -extern s32 D_801EEAF8; -extern void func_8001C97C(s32 *arg); - -void func_80182860() { - func_8001C97C(&D_801DD064); - D_801EEAF8 = D_801D6014; -} - - -extern s32 D_801DD064; -extern s32 D_801D6014; - -void func_80182898(void) { - D_801D6014 = D_801DD064; -} - - -extern s32 D_801EEAF8; -extern s32 D_801D6014; - -void func_801828B0(void) { - *(s32 *)&D_801D6014 = D_801EEAF8; -} - - - - -extern void func_8012E8E0(s32, s32); -extern void func_8012E88C(s32); -extern void func_8012A828(s32, s32); -extern void func_80178CBC(s32 *, s32); - -void func_801828C8(void *arg0) { - - extern s32 D_80191D74; - extern s32 D_801C3790; - extern s32 D_80191DA4; - *(short *)((char *)arg0 + 0x2) = 5; - func_8012E8E0((s32)arg0, (s32)&D_80191D74); - func_8012E88C((s32)arg0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)arg0, (s32)&D_801C3790); - func_80178CBC((s32 *)arg0, (s32)&D_80191DA4); -} - - - -extern s32 func_801877C0(s32 a0); - -void func_80182928(s32 a0) { - - extern s32 D_80191D90[]; - s32 idx = func_801877C0(a0); - *(s32 *)(a0 + 0xE4) = D_80191D90[idx]; -} - - - -/* func_80182968 — guarded dispatch: ask func_8018766C(9, 0x12); if it answers - * NON-zero, run func_801824DC on the incoming entity. The entity pointer is - * live across the jal, so it lands in $s0 and comes back out as $a0. - * §71 sibling: func_80181B34 in this same TU is the identical shape. - * §3-T4: target branch is `beqz $v0, ret` => the C condition is `!= 0` - * (the sibling's is `bnez` => `== 0`; polarity is read off the opcode). */ - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_801824DC(); - -void func_80182968(void *arg0) { - if (func_8018766C(9, 0x12) != 0) { - func_801824DC(arg0); - } -} - - -extern s32 func_80187A64(s32 a0); -extern s32 func_801886A0(s32 arg0); -extern u8 D_801B936C[]; -extern void func_80182548(); -extern void func_80187994(s32, s32, s32, s32); - -void func_801829A8(void *a0) { - s32 v0; - - if (*(u16 *)((u8 *)a0 + 0x34) == 0) { - if ((v0 = func_801886A0(3)) != 0 && (v0 = ((s32 (*)(void *))func_80187A64)(a0)) != 0) { - ((void (*)(void *, void *, s32, s32))func_80187994)(a0, D_801B936C, 0, 0x80); - *(u16 *)((u8 *)a0 + 0x34) = 1; - } - } else { - if ((v0 = ((s32 (*)(void *))func_80187A64)(a0)) != 0) { - func_80182548(a0); - } - } -} - - - -/* func_80182A34 — guarded dispatch: ask func_8018766C(9, 0xF); if it answers - * zero, run func_801825A8 on the incoming entity. The entity pointer is live - * across the jal, so it lands in $s0 and comes back out as $a0. - * §3-T4: target branch is `bnez $v0, ret` => the C condition is `== 0`. */ - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_801825A8(void *arg0); - -void func_80182A34(void *arg0) { - if (func_8018766C(9, 0xF) == 0) { - func_801825A8(arg0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80182A74); - - -extern s32 func_80187A64(s32 a0); -extern void func_80187994(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_801886A0(s32 a0); -extern void func_8018260C(short*); - -void func_80182AEC(void *arg0) { - - extern u8 D_801B9360[]; - if (*(u16 *)((char *)arg0 + 0x34) == 0) { - if (((s32 (*)(void))func_80187A64)() != 0) { - func_80187994((s32)arg0, (s32)&D_801B9360[0], 1, 0x80); - *(s16 *)((char *)arg0 + 0x34) = 1; - } - } else if (func_801886A0(3) != 0) { - if (func_80187A64((s32)arg0) != 0) { - ((void (*)(void *))func_8018260C)(arg0); - } - } -} - - - -/* func_80182B78 — guarded dispatch: ask func_8018766C(15, 0x11); if it answers - * zero, run func_80182638 on the incoming entity. The entity pointer is live - * across the jal, so it lands in $s0 and comes back out as $a0. - * §3-T4: target branch is `bnez $v0, ret` => the C condition is `== 0`. */ - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_80182638(void *arg0); - -void func_80182B78(void *arg0) { - if (func_8018766C(15, 0x11) == 0) { - func_80182638(arg0); - } -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80182BB8); - - -/* func_80182CC4 — guarded dispatch: ask func_8018766C(17, 0x12); if it answers - * zero, run func_801826B8 on the incoming entity. The entity pointer is live - * across the jal, so it lands in $s0 and comes back out as $a0. - * §3-T4: target branch is `bnez $v0, ret` => the C condition is `== 0`. */ - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_801826B8(void *arg0); - -void func_80182CC4(void *arg0) { - if (func_8018766C(17, 0x12) == 0) { - func_801826B8(arg0); - } -} - - -#include "common.h" - -extern s32 func_8018727C(void *a0, void *a1); -extern void func_80182860(void); -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_8012E8E0(s32, s32); -extern void func_8012E88C(s32 a0); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32 a0); -extern void func_80182898(void); -extern void func_80187778(s32 *a0, s32 a1); -extern s32 func_801788B8(s32 arg0, s32 arg1); -extern s32 func_80182DFC(void *a0); - -extern short D_80191D7C; -extern s32 D_80191D74; -extern short D_801CAA80; -extern short D_80191D6C; - -void func_80182D04(void *a0) { - s32 v0; - void *v1; - - if (func_8018727C(a0, &D_80191D7C) != 0) { - func_80182860(); - v0 = func_8018766C(9, 0xF); - if (v0 != 0) { - *(s16 *)((char *)a0 + 0x2) = 3; - func_8012E8E0((s32)a0, (s32)&D_80191D74); - func_8012E88C((s32)a0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)a0, (s32)&D_801CAA80); - func_80187750((s32)a0); - func_80182898(); - } else { - if (func_8018766C(0xF, 0x11) != 0) { - *(s16 *)((char *)a0 + 0x2) = 7; - } else if (func_8018766C(0x11, 0x12) != 0) { - *(s16 *)((char *)a0 + 0x2) = 9; - } else { - *(s16 *)((char *)a0 + 0x2) = 1; - } - func_80187778((s32 *)a0, (s32)&D_80191D6C); - } - v1 = *(void **)((char *)a0 + 0x68); - *(s16 *)((char *)v1 + 0xC) = 0x7FFF; - *(s32 *)((char *)a0 + 0xD4) = func_801788B8((s32)a0, (s32)&func_80182DFC); - } -} - - - -extern s32 func_8012BD14(s32 a0); -extern s32 func_80178BF8(); -extern void func_80172710(void); - -s32 func_80182DFC(void *a0) -{ - s32 ptr; - u16 st; - - ptr = *(s32 *)((s32)a0 + 0x64); - st = *(u16 *)((s32)ptr + 0x2); - if (st != 3) { - return 0; - } - - if (func_8012BD14(ptr) >= 0x4001) { - return 0; - } - - { - s32 p; - u16 st2; - p = *(s32 *)((s32)a0 + 0x64); - st2 = *(u16 *)((s32)p + 0x2); - st2++; - *(u16 *)((s32)p + 0x2) = st2; - } - func_80178BF8(); - return (s32)func_80172710; -} - - - - -extern void func_8012E8E0(s32, s32); -extern void func_8012E88C(s32); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32); -extern void func_80187994(s32, s32, s32, s32); - - -void func_80182E70(void *arg0) { - - extern short D_80191E38; - extern short D_801C37E8; - extern short D_801B9400; - *(short *)((char *)arg0 + 0x2) = 2; - func_8012E8E0((s32)arg0, (s32)&D_80191E38); - func_8012E88C((s32)arg0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)arg0, (s32)&D_801C37E8); - func_80187750((s32)arg0); - *(short *)((char *)arg0 + 0x34) = 0; - func_80187994((s32)arg0, (s32)&D_801B9400, 0, 0x40); -} - - - - -extern void func_8012E8E0(s32 a0, s32 a1); -extern void func_8012E88C(s32 a0); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32 a0); - - -void func_80182EE4(void *a0) { - - extern short D_80191E40; - extern short D_801C3890; - *(short *)((char *)a0 + 0x2) = 3; - func_8012E8E0((s32)a0, (s32)&D_80191E40); - func_8012E88C((s32)a0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)a0, (s32)&D_801C3890); - func_80187750((s32)a0); -} - - -#include "common.h" - -/* TU spellings adopted verbatim from src/ov_SC03_001/ov_SC03_001_jr_8017AE2C.c - * (law 2): func_800291B4/func_800291A0 are the file-scope externs at lines 57-58, - * func_801877C0 is the line-4911 spelling and is CALLED through the file's own - * zero-arg idiom `((s32 (*)(void))func_801877C0)()` (line 4924) because the target - * .s leaves $a0 untouched. func_8012E544 is not declared in this TU; the fleet - * modal spelling (1365 sites) is used. The D_* tables follow the TU house style - * `extern short D_x;` + `(s32)&D_x`. */ -extern s32 func_8012E544(s32 a0); -extern s32 func_800291B4(s32 arg); -extern void func_800291A0(s32, s32); -extern s32 func_801877C0(s32); - -extern short D_80191F00; -extern short D_80191F40; -extern short D_80191F80; -extern short D_80191FC0; -extern short D_80192000; -extern short D_80192070; -extern short D_801920C8; -extern short D_80192120; -extern short D_80192190; -extern short D_801921E8; -extern short D_80192278; -extern short D_801922A0; - -s32 func_80182F3C(s32 a0) { - s32 e; - s32 cond; - s32 result; - /* $v0 pin: the two-def return pseudo of the early-out below falls to - * global_alloc and lands in $a0 (costing a `move $v0,$a0` in each of the two - * delay slots the target leaves as `nop`). The pin restores the target's - * $v0 = pointer / $v1 = 0xA2 / $a0 = halfword assignment at zero byte cost. */ - register s32 v __asm__("$2"); - s32 c; - - /* +0x0 is a u16 object id; 0xA2 selects the 0xA4 partner lookup. */ - if (*(u16 *)(a0 + 0) == 0xA2) { - e = func_8012E544(0xA4); - /* if/else STATEMENT, not `&&`/`?:` — fold canonicalises both of those to - * "non-zero arm first", which emits the [load][zero] block order; the - * target's cross-jumped shape needs [zero][load]. */ - if (e == 0) { - cond = 0; - } else { - cond = (*(u16 *)(e + 2) == 3); - } - } else { - e = func_8012E544(0xA2); - if (e == 0) { - cond = 0; - } else { - cond = (*(u16 *)(e + 2) == 3); - } - } - - if (!cond) { - v = (s32)&D_801922A0; - if (*(u16 *)(a0 + 0) == 0xA2) { - v = (s32)&D_80192278; - } - return v; - } - - result = (s32)&D_80191F00; - switch (((s32 (*)(void))func_801877C0)()) { - case 0: - c = func_800291B4(0xD6) & 0xFF; - /* zero-byte re-tie (cookbook §189-C): without it cse folds - * `(raw & 0xFF) & 1` back onto the raw call result and emits - * `andi $v0,$v0,1`; the target reads the masked copy, `andi $v0,$a1,1`. */ - __asm__("" : "=r"(c) : "0"(c)); - if (c != 0) { - result = (s32)&D_80191F80; - if ((c & 1) != 0) { - result = (s32)&D_80191F40; - } - } - c++; - if ((c & 0xFF) == 0) { - c = 2; - } - func_800291A0(0xD6, c & 0xFF); - break; - case 1: - /* signed magic 0x55555556 => the modulo operand is a plain (signed) s32; - * a u8 `c` would let c-typeck's `shorten` do it unsigned (multu/0xAAAAAAAB). */ - c = func_800291B4(0xD7) & 0xFF; - switch (c % 3) { - case 0: - result = (s32)&D_80191FC0; - break; - case 1: - /* cse re-uses $s0 (== 1 on this arm of the outer switch) for the - * literal 1, which is where the target's `beq $v0,$s0` comes from. */ - result = (s32)&D_80192000; - break; - default: - result = (s32)&D_80192070; - break; - } - c++; - func_800291A0(0xD7, c & 0xFF); - break; - case 2: - c = func_800291B4(0xD9) & 0xFF; - __asm__("" : "=r"(c) : "0"(c)); - result = (s32)&D_80192190; - if ((c & 1) != 0) { - result = (s32)&D_801921E8; - } - c++; - func_800291A0(0xD9, c & 0xFF); - break; - case 3: - break; - default: - c = func_800291B4(0xD8) & 0xFF; - __asm__("" : "=r"(c) : "0"(c)); - result = (s32)&D_801920C8; - if ((c & 1) != 0) { - result = (s32)&D_80192120; - } - c++; - func_800291A0(0xD8, c & 0xFF); - break; - } - return result; -} - - - extern void func_8012E8E0(s32 a0, s32 a1); - extern void func_8012E88C(s32 a0); - extern void func_8012A828(s32, s32); - extern void func_80187750(s32); - extern void func_80187994(s32, s32, s32, s32); - void func_80183168(void *arg0) { - extern short D_80191E40; - extern s32 D_801C37E8; - extern u8 D_801B940C[]; - void *v1; - *(short *)((char *)arg0 + 0x2) = 0x4; - func_8012E8E0((s32)arg0, (s32)&D_80191E40); - v1 = *(void **)((char *)arg0 + 0x20); - *(short *)((char *)v1 + 0x12) = *(short *)((char *)v1 + 0x12) + 0x800; - func_8012E88C((s32)arg0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)arg0, (s32)&(*(short *)&D_801C37E8)); - func_80187750((s32)arg0); - *(short *)((char *)arg0 + 0x34) = 0; - func_80187994((s32)arg0, (s32)&(*(short *)D_801B940C), 0x1, 0x40); - } - - -extern void func_80187778(s32 *a0, s32 a1); - extern short D_80191E38; - void func_801831F0(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x5; - func_80187778((s32 *)a0, (s32)&D_80191E38); - } - - -extern s32 func_8018727C(void *a0, void *a1); -extern s32 func_801877C0(); -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_8012E88C(s32 a0); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32 a0); -extern void func_80187778(s32 *a0, s32 a1); -extern s32 func_801788B8(s32 arg0, s32 arg1); -extern s32 func_80183448(void *a0); -extern s32 func_801834C0(void *a0); - -void func_8018321C(void *a0) { - - extern short D_80191E48; - extern short D_80191E40; - extern short D_80191E38; - extern short D_801C3890; - void *s0 = a0; - s32 v0; - void *v1; - - if (func_8018727C(a0, &D_80191E48) != 0) { - if (((s32 (*)(void))func_801877C0)() == 3) { - if (func_8018766C(0xA, 0x15) == 0) { - *(s16 *)((char *)s0 + 0x2) = 1; - } else { - *(s16 *)((char *)s0 + 0x2) = 5; - } - ((void (*)(s32 *, s32))func_80187778)((s32 *)s0, (s32)&D_80191E38); - } else { - if (func_8018766C(0xA, 0x10) != 0) { - *(s16 *)((char *)s0 + 0x2) = 3; - func_8012E8E0((s32)s0, (s32)&D_80191E40); - func_8012E88C((s32)s0); - ((void (*)(s32, s32))func_8012A828)((s32)s0, (s32)&D_801C3890); - func_80187750((s32)s0); - } else { - if (func_8018766C(0x10, 0x15) != 0) { - *(s16 *)((char *)s0 + 0x2) = 5; - } else { - *(s16 *)((char *)s0 + 0x2) = 1; - } - ((void (*)(s32 *, s32))func_80187778)((s32 *)s0, (s32)&D_80191E38); - } - } - - v1 = *(void **)((char *)s0 + 0x68); - *(s16 *)((char *)v1 + 0xC) = 0x7FFF; - v0 = func_801788B8((s32)s0, (s32)&func_80183448); - *(s32 *)((char *)s0 + 0xD4) = v0; - func_8012E8E0(v0, (s32)&D_80191E38); - *(s32 *)((char *)s0 + 0xD8) = func_801788B8((s32)s0, (s32)&func_801834C0); - } -} - - - -extern void (*D_801922F0[])(void); - -void func_8018333C(void *a0) { - D_801922F0[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_80182F3C(s32 a0); -extern short D_80191E40; -extern short D_801C3890; -extern void func_8012A828(s32, s32); -extern void func_8012E88C(s32); -extern void func_8012E8E0(s32 a0, s32 a1); -extern void func_80178CBC(s32*, s32); - -void func_80183378(void *a0) { - s32 v0; - - *(short *)((char *)a0 + 0x2) = 9; - func_8012E8E0((s32)a0, (s32)&D_80191E40); - func_8012E88C((s32)a0); - ((void (*)(s32, s32))func_8012A828)((s32)a0, (s32)&D_801C3890); - v0 = func_80182F3C((s32)a0); - ((void (*)(s32, s32))func_80178CBC)((s32)a0, v0); -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_80191E70; - void func_801833DC(short *a0) { - *(short *)((char *)a0 + 0x2) = 0x7; - func_80178CBC((s32 *)a0, (s32)&D_80191E70); - } - - - -extern s32 func_801877C0(s32 a0); - -void func_80183408(s32 a0) { - - extern s32 D_80191E5C[]; - s32 idx = func_801877C0(a0); - *(s32 *)(a0 + 0xE4) = D_80191E5C[idx]; -} - - - -extern void func_80172710(void); -extern s32 func_8018739C(void); -extern s32 func_80188D1C(void *); -extern s32 func_80178BF8(void); - -s32 func_80183448(void *a0) -{ - void *s0 = a0; - void **v0p; - u16 v1; - - v0p = (void **)(s0 + 0x64); - v1 = *(u16 *)(*v0p + 0x2); - if (v1 != 0x5) { - return 0; - } - - if (func_8018739C() == 0) { - return 0; - } - - if (func_80188D1C(*v0p) != 0) { - return 0; - } - - *(u16 *)(*v0p + 0x2) = 0x6; - func_80178BF8(); - - return (s32)func_80172710; -} - - - -/* func_801834C0 — state-machine callback registered by func_80180A08. - * - * Shape (read off the target, not off Ghidra — the Ghidra seed is for a - * different address entirely): - * - guard call func_8012BD14(a0->0x64), bail if result > 0x4000 - * - switch on the u16 at +2 of a0->0x64, cases 3 / 2 / 4 (gcc balances the - * tree on the middle case 3, hence `slti $v0,$v1,4` for "index > node->high") - * - the comparison constants for the case-2/case-4 sub-tests ride in the - * dispatch branch delay slots (§3-T4: read the constant off the delay slot, - * not off the branch line) — case 2 tests +0x34 == 1, case 4 tests +0x34 == 0 - * - the two adjacent globals get their own `lui $at` each => two separate - * symbols, NOT one array (§20 pointer-var rule does not apply here) - * - +0x34 is reloaded after the D_801EEB00 store, and 0x64 is reloaded too: - * gcc-2.7.2 CSE invalidates memory on the global store, so re-express both - */ - -extern s32 func_8012BD14(s32 a0); -extern s32 func_80178BF8(); /* TU-canonical (ov_SC04_018_jr_8017AE2C.c L2541) */ -extern void func_80172710(void); - -s32 func_801834C0(void *a0) -{ - - extern s16 D_801EEB00; - extern s16 D_801EEB02; - void *p; - u16 st; - - if (func_8012BD14(*(s32 *)((s32)a0 + 0x64)) > 0x4000) { - /* LOAD-BEARING zero-byte cross-jump barrier (cookbook §5a). - * Without it gcc's find_cross_jump merges this `move v0,0; j epi` - * tail with the identical case-2 failure tail -> 58 ins instead of - * 60, and the case-2 `beq` then loses its delay-slot fill. */ - __asm__ __volatile__(""); - return 0; - } - - p = *(void **)((s32)a0 + 0x64); - st = *(u16 *)((s32)p + 0x2); - switch (st) { - case 3: - *(s16 *)((s32)p + 0x2) = 8; - break; - case 2: - if (*(u16 *)((s32)p + 0x34) != 1) { - return 0; - } - goto hit; - case 4: - if (*(u16 *)((s32)p + 0x34) != 0) { - return 0; - } - hit: - D_801EEB00 = st; - D_801EEB02 = *(u16 *)((s32)p + 0x34); - *(s16 *)(*(s32 *)((s32)a0 + 0x64) + 0x2) = 10; - break; - default: - return 0; - } - - func_80178BF8(); - return (s32)func_80172710; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_801835B0); - - -extern s32 func_801886A0(s32 a0); -extern s32 func_80187A64(s32 a0); -extern void func_80187994(s32, s32, s32, s32); -extern void func_80182EE4(void *a0); - -void func_80183628(void *a0) -{ - - extern u8 D_801B940C[]; - if (*(u16 *)((s32)a0 + 0x34) == 0) { - if (func_801886A0(3) == 0) { - return; - } - if (func_80187A64((s32)a0) == 0) { - return; - } - ((void (*)(void *, void *, s32, s32))func_80187994)(a0, D_801B940C, 0, 0x40); - *(s16 *)((s32)a0 + 0x34) = 1; - return; - } - - *(s32 *)(*(s32 *)((s32)a0 + 0xCC) + 0xB0) = 2; - if (func_80187A64((s32)a0) != 0) { - func_80182EE4(a0); - } -} - - - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_80183168(); - -void func_801836BC(s32 *a0) { - *(s32 *)((s32)a0[0x33] + 0xB0) = 2; - if (func_8018766C(10, 16) != 0) { - return; - } - func_80183168(a0); -} - - - -extern int func_80178970(void); -extern void func_80178D18(void); -extern void func_8012E8E0(s32, s32); -extern void func_8012E88C(s32); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32); - - -void func_80183708(void *a0) { - - extern short D_80191E40; - extern short D_801C3890; - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)((s32)a0); - *(short *)((char *)a0 + 0x2) = 3; - func_8012E8E0((s32)a0, (s32)&D_80191E40); - func_8012E88C((s32)a0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)a0, (s32)&D_801C3890); - func_80187750((s32)a0); - } -} - - - -extern s32 func_80187A64(s32 a0); -extern void func_80187994(s32 a0, s32 a1, s32 a2, s32 a3); -extern s32 func_801886A0(s32 a0); -extern void func_801831F0(short*); - -void func_80183778(void *arg0) { - - extern u8 D_801B9400[]; - if (*(u16 *)((char *)arg0 + 0x34) == 0) { - if (((s32 (*)(void))func_80187A64)() != 0) { - func_80187994((s32)arg0, (s32)&D_801B9400[0], 1, 0x40); - *(s16 *)((char *)arg0 + 0x34) = 1; - } - } else if (func_801886A0(3) != 0) { - if (func_80187A64((s32)arg0) != 0) { - ((void (*)(void *))func_801831F0)(arg0); - } - } -} - - -extern s32 func_8018766C(s32 a0, s32 a1); -extern void func_80187778(s32*, s32); -extern s32 func_801877C0(s32); -extern short D_80191E38; -void func_80183804(s32 *a0) { - *(s32 *)((s32)a0[0x33] + 0xB0) = 2; - if (func_8018766C(func_801877C0((s32)a0) == 3 ? 0xA : 0x10, 0x15) != 0) { - return; - } - *(short *)((char *)a0 + 0x2) = 1; - ((void (*)(s32 *, void *))func_80187778)(a0, (void *)&(*(s32 *)&D_80191E38)); -} - - -#include "common.h" - -extern int func_80178970(void); -extern void func_80178D18(void); -extern void func_80187778(s32*, s32); - -void func_8018386C(void * arg0) { - - extern short D_80191E38; - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)((s32)arg0); - *(short *)((char *)arg0 + 0x2) = 5; - ((void (*)(s32, s32))func_80187778)((int)arg0, (int)&D_80191E38); - } -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_801922C8; - void func_801838BC(short *a0) { - *(short *)((char *)a0 + 0x2) = 0xB; - func_80178CBC((s32 *)a0, (s32)&D_801922C8); - } - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_801838E8); - - - -extern void func_8012E8E0(s32, s32); -extern void func_8012E88C(s32); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32); -extern void func_80187994(s32, s32, s32, s32); - - -void func_80183948(void *arg0) { - - extern short D_80192320; - extern short D_801C36E8; - extern short D_801B9434; - *(short *)((char *)arg0 + 0x2) = 2; - func_8012E8E0((s32)arg0, (s32)&D_80192320); - func_8012E88C((s32)arg0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)arg0, (s32)&D_801C36E8); - func_80187750((s32)arg0); - *(short *)((char *)arg0 + 0x34) = 0; - func_80187994((s32)arg0, (s32)&D_801B9434, 0, 0x60); -} - - - - -extern void func_8012E8E0(s32 a0, s32 a1); -extern void func_8012E88C(s32 a0); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32 a0); - - -void func_801839BC(void *a0) { - - extern short D_80192328; - extern short D_801CAA80; - *(short *)((char *)a0 + 0x2) = 3; - func_8012E8E0((s32)a0, (s32)&D_80192328); - func_8012E88C((s32)a0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)a0, (s32)&D_801CAA80); - func_80187750((s32)a0); -} - - - extern void func_8012E8E0(s32, s32); - extern void func_8012E88C(s32); - extern void func_8012A828(s32, s32); - extern void func_80187750(s32); - extern void func_80187994(s32, s32, s32, s32); - void func_80183A14(void *arg0) { - extern short D_80192328; - extern short D_801C36E8; - extern short D_801B9440; - *(short *)((char *)arg0 + 0x2) = 6; - func_8012E8E0((s32)arg0, (s32)&D_80192328); - func_8012E88C((s32)arg0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)arg0, (s32)&D_801C36E8); - func_80187750((s32)arg0); - *(short *)((char *)arg0 + 0x34) = 0; - func_80187994((s32)arg0, (s32)&D_801B9440, 1, 0x60); - } - - - -extern void (*D_80192418[])(void); - -void func_80183A88(void *a0) { - D_80192418[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 D_801DD950; -extern s32 D_801DAAAC; -extern s32 D_801EEB08; -extern void func_8001C97C(s32 *arg); - -void func_80183AC4(void) { - func_8001C97C(&D_801DD950); - D_801EEB08 = D_801DAAAC; -} - - - -extern s32 D_801DD950; -extern s32 D_801DAAAC; - -void func_80183AFC(void) { - D_801DAAAC = D_801DD950; -} - - - - -extern void func_8012E8E0(s32, s32); -extern void func_8012E88C(s32); -extern void func_8012A828(s32, s32); -extern void func_80178CBC(s32 *, s32); - -void func_80183B14(void *arg0) { - - extern s32 D_80192328; - extern s32 D_801C3790; - extern s32 D_80192398; - *(short *)((char *)arg0 + 0x2) = 5; - func_8012E8E0((s32)arg0, (s32)&D_80192328); - func_8012E88C((s32)arg0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)arg0, (s32)&D_801C3790); - func_80178CBC((s32 *)arg0, (s32)&D_80192398); -} - - - -extern s32 func_801877C0(s32 a0); - -void func_80183B74(s32 a0) { - - extern s32 D_80192344[]; - s32 idx = func_801877C0(a0); - *(s32 *)(a0 + 0xE4) = D_80192344[idx]; -} - - - -extern s32 func_80029178(s32 arg); - extern void func_80029124(s32, s32); - s32 func_80183BB4(void) { - if ((func_80029178(0x113) & 0xFF) == 0) { - ((void (*)(void *, s32))func_80029124)((void *)0x113, 1); - return 1; - } - return 0; - } - - - -/* func_80183BF0 — guarded dispatch: ask func_8018766C(7, 0xe); if it answers - * NON-zero, run func_80183948 on the incoming entity. The entity pointer is - * live across the jal, so it lands in $s0 and comes back out as $a0. - * §71 sibling: func_80181B34 in this same TU is the identical shape. - * §3-T4: target branch is `beqz $v0, ret` => the C condition is `!= 0` - * (the sibling's is `bnez` => `== 0`; polarity is read off the opcode). */ - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_80183948(void *arg0); - -void func_80183BF0(void *arg0) { - if (func_8018766C(7, 0xe) != 0) { - func_80183948(arg0); - } -} - - -extern s32 func_80187A64(s32 a0); -extern s32 func_801886A0(s32 arg0); -extern void *D_801B9440; -extern void func_801839BC(void *a0); -extern void func_80187994(s32, s32, s32, s32); - -void func_80183C30(s32 a0) { - s32 v0, v1; - - if (*(u16 *)(a0 + 0x34) == 0) { - if ((v0 = func_801886A0(2)) != 0 && (v0 = func_80187A64(a0)) != 0) { - *(u16 *)(a0 + 0x34) = 1; - func_80187994(a0, (s32)&D_801B9440, 0, 0x60); - v1 = *(s32 *)(a0 + 0xCC); - *(s32 *)(v1 + 0xB0) = 2; - } - } else { - if ((v0 = func_80187A64(a0)) != 0) { - func_801839BC(a0); - } - } -} - - - -/* func_80183CC8 — guarded dispatch: ask func_8018766C(7, 0xE); if it answers - * zero, run func_80183A14 on the incoming entity. The entity pointer is live - * across the jal, so it lands in $s0 and comes back out as $a0. - * §3-T4: target branch is `bnez $v0, ret` => the C condition is `== 0`. */ - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_80183A14(); - -void func_80183CC8(void *arg0) { - if (func_8018766C(7, 0xE) == 0) { - func_80183A14(arg0); - } -} - - - -extern int func_80178970(void); -extern void func_80178D18(void); -extern void func_8012E8E0(s32, s32); -extern void func_8012E88C(s32); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32); - - -void func_80183D08(void *a0) { - - extern short D_80192328; - extern short D_801CAA80; - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)((s32)a0); - *(short *)((char *)a0 + 0x2) = 3; - func_8012E8E0((s32)a0, (s32)&D_80192328); - func_8012E88C((s32)a0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)a0, (s32)&D_801CAA80); - func_80187750((s32)a0); - } -} - - -extern s32 func_80187A64(s32 a0); -extern s32 func_801886A0(s32 arg0); -extern short D_80192320; -extern short D_801B9434; -extern void func_80187778(s32*, s32); -extern void func_80187994(s32, s32, s32, s32); - -void func_80183D78(s32 a0) { - if (*(u16*)(a0 + 0x34) == 0) { - if (func_80187A64(a0) != 0) { - *(s16*)(a0 + 0x34) = 1; - func_80187994(a0, (s32)&D_801B9434, 1, 0x60); - } - } else { - if (func_801886A0(0x2) != 0) { - if (func_80187A64(a0) != 0) { - *(s16*)(a0 + 0x2) = 1; - func_80187778((s32*)a0, (s32)&D_80192320); - } - } - } -} - - -void func_80183E14(void *a0) { - extern s32 func_8018727C(void *a0, void *a1); - extern void func_80183AC4(void); - extern void func_80183AFC(void); - extern s32 func_8018766C(s32 arg0, s32 arg1); - extern void func_8012E8E0(s32, s32); - extern void func_8012E88C(s32); - extern void func_8012A828(s32, s32); - extern void func_80187750(s32); - extern void func_80187778(s32 *a0, s32 a1); - extern s32 func_801788B8(s32 arg0, s32 arg1); - extern s32 func_80183EE4(void *a0); - extern short D_80192330; - extern short D_80192328; - extern short D_801CAA80; - extern short D_80192320; - s32 v0; - void *v1; - - if (func_8018727C(a0, &D_80192330) != 0) { - func_80183AC4(); - func_80183AFC(); - v0 = func_8018766C(7, 0xE); - if (v0 != 0) { - *(s16 *)((char *)a0 + 0x2) = 3; - func_8012E8E0((s32)a0, (s32)&D_80192328); - func_8012E88C((s32)a0); - ((void (*)(s32 *, s32))func_8012A828)((s32 *)a0, (s32)&D_801CAA80); - func_80187750((s32)a0); - } else { - *(s16 *)((char *)a0 + 0x2) = 1; - func_80187778((s32 *)a0, (s32)&D_80192320); - } - v1 = *(void **)((char *)a0 + 0x68); - *(s16 *)((char *)v1 + 0xC) = 0x7FFF; - *(s32 *)((char *)a0 + 0xD4) = func_801788B8((s32)a0, (s32)&func_80183EE4); - } -} - - - -extern s32 func_8012BD14(s32 a0); -extern s32 func_80178BF8(); -extern void func_80172710(void); - -s32 func_80183EE4(void *a0) -{ - s32 ptr; - u16 st; - - ptr = *(s32 *)((s32)a0 + 0x64); - st = *(u16 *)((s32)ptr + 0x2); - if (st != 3) { - return 0; - } - - if (func_8012BD14(ptr) >= 0x4001) { - return 0; - } - - { - s32 p; - u16 st2; - p = *(s32 *)((s32)a0 + 0x64); - st2 = *(u16 *)((s32)p + 0x2); - st2++; - *(u16 *)((s32)p + 0x2) = st2; - } - func_80178BF8(); - return (s32)func_80172710; -} - - -extern void func_80187778(s32 *a0, s32 a1); - -void func_80183F58(void *arg0) { - /* [T51] scoped in from file scope: a file-scope decl of these symbols constrains every - LATER function in this TU, which blocks a byte-true decl of a different type. - Declaration-only move (cookbook §103); the whole-binary byte-gate is the arbiter. */ - extern s32 D_80192434; - *(s16 *)((char *)arg0 + 0x2) = 0x2; - func_80187778(arg0, &D_80192434); -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80183F84); - -extern s32 D_801B9470; -extern short D_801C37E8; -extern void func_8012A828(s32, s32); -extern void func_8012E88C(s32); -extern void func_80187750(s32); -extern void func_80187994(s32, s32, s32, s32); - -void func_80183FF4(s32 a0) { - *(u16 *)(a0 + 2) = 6; - func_8012E88C(a0); - ((void (*)(s32, s32))func_8012A828)(a0, (s32)&D_801C37E8); - func_80187750(a0); - func_80187994(a0, (s32)&D_801B9470, 0, 0x40); -} - - -extern short D_801C37E8; -extern u8 D_801B9464[]; -extern void func_8012A828(s32, s32); -extern void func_8012E88C(s32); -extern void func_80187750(s32); -extern void func_80187994(s32, s32, s32, s32); - -void func_80184054(arg0) -void *arg0; -{ - extern short D_801C37E8; - extern u8 D_801B9464[]; - *(short *)((char *)arg0 + 0x2) = 7; - func_8012E88C((s32)arg0); - ((void (*)(s32*, s32))func_8012A828)((s32 *)arg0, (s32)&D_801C37E8); - func_80187750((s32)arg0); - *(short *)((char *)arg0 + 0x34) = 0; - func_80187994((s32)arg0, (s32)&D_801B9464, 1, 0x40); -} - - - -extern void func_80187778(s32*, s32); - extern short D_80192434; - void func_801840B8(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 8; - ((void (*)(s32, s32))func_80187778)((int)arg0, (int)&D_80192434); - } - - -#include "common.h" - -extern s32 func_8018727C(void *a0, void *a1); -extern s32 func_801877C0(s32 a0); -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_8012E88C(s32 a0); -extern void func_8012A828(s32, s32); -extern void func_80187750(s32 a0); -extern void func_80187994(s32, s32, s32, s32); -extern void func_80187778(s32 *a0, s32 a1); -extern s32 func_801788B8(s32 arg0, s32 arg1); -extern void func_80184350(void *a0); -extern s32 func_801843DC(); - -void func_801840E4(void *a0) { - - extern s16 D_80192444; - extern short D_80192434; - extern s32 D_801B9470; - extern short D_801C37E8; - void *s0 = a0; - void *v1; - s32 v0; - - if (func_8018727C(a0, &D_80192444) != 0) { - if (((s32 (*)(void))func_801877C0)() == 3) { - v0 = func_8018766C(7, 0x14); - if (v0 != 0) { - *(s16 *)((char *)s0 + 0x2) = 2; - } else { - *(s16 *)((char *)s0 + 0x2) = 1; - } - func_80187778(s0, &D_80192434); - } else { - v0 = func_8018766C(7, 0xA); - if (v0 != 0) { - *(s16 *)((char *)s0 + 0x2) = 2; - func_80187778(s0, &D_80192434); - } else { - v0 = func_8018766C(0xA, 0xC); - if (v0 != 0) { - *(s16 *)((char *)s0 + 0x2) = 6; - func_8012E88C((s32)s0); - ((void (*)(s32, s32))func_8012A828)((s32)s0, (s32)&D_801C37E8); - func_80187750((s32)s0); - func_80187994((s32)s0, (s32)&D_801B9470, 0, 0x40); - } else { - v0 = func_8018766C(0xC, 0x14); - if (v0 != 0) { - *(s16 *)((char *)s0 + 0x2) = 8; - } else { - *(s16 *)((char *)s0 + 0x2) = 1; - } - func_80187778(s0, &D_80192434); - } - } - } - - v1 = *(void **)((char *)s0 + 0x68); - *(s16 *)((char *)v1 + 0xC) = 0x7FFF; - *(s32 *)((char *)s0 + 0xD4) = func_801788B8((s32)s0, (s32)&func_80184350); - *(s32 *)((char *)s0 + 0xD8) = func_801788B8((s32)s0, (s32)&func_801843DC); - } -} - - - -extern void (*D_80192510[])(void); - -void func_80184210(void *a0) { - D_80192510[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_8019246C; - void func_8018424C(short *a0) { - *(short *)((char *)a0 + 0x2) = 4; - ((void (*)(s32, s32))func_80178CBC)((int)a0, (int)&D_8019246C); - } - - - -extern void func_80178CBC(s32*, s32); - extern short D_8019246C; - void func_80184278(void * arg0) { - *(short *)((char *)arg0 + 0x2) = 10; - ((void (*)(s32, s32))func_80178CBC)((int)arg0, (int)&D_8019246C); - } - - -extern void func_80178CBC(s32 *a0, s32 a1); - extern short D_801924B8; - void func_801842A4(short *param) { - param[1] = 0xC; - ((void (*)(s32, s32))func_80178CBC)((int)param, (int)&D_801924B8); - } - - - -extern s32 func_801877C0(s32 a0); - -void func_801842D0(s32 a0) { - - extern s32 D_80192458[]; - s32 idx = func_801877C0(a0); - *(s32 *)(a0 + 0xE4) = D_80192458[idx]; -} - - - -extern s32 func_801877C0(s32 a0); - -void func_80184310(s32 a0) { - - extern s32 D_801924A4[]; - s32 idx = func_801877C0(a0); - *(s32 *)(a0 + 0xE4) = D_801924A4[idx]; -} - - -INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_8017AE2C", func_80184350); - -extern s32 func_8012BD14(s32 a0); -extern s32 func_80178BF8(); -extern void func_80172710(void); - - s32 func_801843DC(param_1) -s32 param_1; -{ - register s32 obj __asm__("$16") = param_1; - s32 ptr; - s32 ptr2; - s32 result; - ptr = *(s32 *)((char *)obj + 0x64); - if (*(u16 *)((char *)ptr + 0x2) != 6) { - return 0; - } - result = func_8012BD14(ptr); - if (result >= 0x2401) { - return 0; - } - ptr2 = *(s32 *)((char *)obj + 0x64); - *(u16 *)((char *)ptr2 + 0x2) = 0xB; - func_80178BF8(); - return (s32)func_80172710; - } - - - - -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_80183F58(void *arg0); - -void func_8018444C(void *arg0) { - s32 v1; - - v1 = *(s32 *)((char *)arg0 + 0xCC); - *(s32 *)((char *)v1 + 0xB0) = 2; - if (func_8018766C(7, 0x14) != 0) { - func_80183F58(arg0); - } -} - - -extern s32 func_801877C0(s32); -extern s32 func_8018766C(s32 arg0, s32 arg1); -extern void func_80187778(s32*, s32); -extern void func_80183F84(s32); -extern s16 D_80192434; - -void func_80184498(void *arg0) { - *(s32 *)(*(s32 *)((s32)arg0 + 0xcc) + 0xb0) = 2; - if (func_801877C0((s32)arg0) == 3) { - if (func_8018766C(7, 0x14) == 0) { - *(u16 *)((char *)arg0 + 2) = 1; - func_80187778((s32 *)arg0, (s32)&D_80192434); - } - } else if (func_8018766C(7, 0xA) == 0) { - func_80183F84((s32)arg0); - } -} - - - -extern int func_80178970(void); -extern void func_80178D18(void); -extern void func_80187778(s32*, s32); - -void func_8018451C(void * arg0) { - - extern short D_80192434; - if (func_80178970() != 0) { - ((void (*)(s32))func_80178D18)((s32)arg0); - *(short *)((char *)arg0 + 0x2) = 2; - ((void (*)(s32, s32))func_80187778)((int)arg0, (int)&D_80192434); - } -} - - -extern s32 func_80187A64(s32 a0); -extern s32 func_801886A0(s32 arg0); -extern void func_80183FF4(s32 a0); - -void func_8018456C(void *a0) { - if (func_801886A0(2)) { - if (func_80187A64((s32)a0)) { - func_80183FF4((s32)a0); - } - } -} - - diff --git a/src/ov_SC03_007/ov_SC03_007_jr_80183894.c b/src/ov_SC03_007/ov_SC03_007_jr_80183894.c index 5dbd795772..b2fc1b9fd6 100644 --- a/src/ov_SC03_007/ov_SC03_007_jr_80183894.c +++ b/src/ov_SC03_007/ov_SC03_007_jr_80183894.c @@ -4480,35 +4480,7 @@ void func_80186074(void *a0) { } -void func_8018611C(void *a0) { - s32 sp10[3]; - extern void func_80185D3C(void *a0, s32 a1); - extern void func_80185E3C(void *a0); - extern void (*D_8018C678[])(void); - s32 t; - - if (func_8012CBCC() & 0x2000) { - func_80146A6C(2, a0, 0, 0, 0, 3, 0x30000000); - t = *(s32 *)((s32)a0 + 0x1C) + 1; - *(s32 *)((s32)a0 + 0x1C) = t; - if (t == 1) { - sp10[0] = 0; - sp10[1] = 0xFFFD0000; - sp10[2] = 0x20000; - func_8012B14C((s32)a0, sp10); - return; - } - func_8012B200((u8 *)a0); - func_8012A828(a0, (void *)&D_8018C678); - *(u16 *)((s32)a0 + 0xF6) = *(u16 *)((s32)a0 + 0x76) - 8; - *(u16 *)((s32)a0 + 0x98) = 0; - *(u16 *)((s32)a0 + 2) += 1; - *(s32 *)((s32)a0 + 0x1C) = 0x50; - } - func_80185D3C(a0, 0); - func_80185E3C(a0); -} - +INCLUDE_ASM("asm/ov_SC03_007/nonmatchings/ov_SC03_007_jr_80183894", func_8018611C); #include "common.h" diff --git a/src/ov_SC04_018/ov_SC04_018_jr_8017AE2C.c b/src/ov_SC04_018/ov_SC04_018_jr_8017AE2C.c index 3c0a2f80a0..bead5bab5d 100644 --- a/src/ov_SC04_018/ov_SC04_018_jr_8017AE2C.c +++ b/src/ov_SC04_018/ov_SC04_018_jr_8017AE2C.c @@ -6043,7 +6043,60 @@ 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_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_8017AE2C", func_80181804); +#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; + } +} + extern void (*D_80191BDC[])(void); diff --git a/src/ov_SC06_016/ov_SC06_016_jr_8017C8D0.c b/src/ov_SC06_016/ov_SC06_016_jr_8017C8D0.c index ec2e952457..22bf166121 100644 --- a/src/ov_SC06_016/ov_SC06_016_jr_8017C8D0.c +++ b/src/ov_SC06_016/ov_SC06_016_jr_8017C8D0.c @@ -4310,7 +4310,200 @@ void func_8017F694(s32 arg0) { } -INCLUDE_ASM("asm/ov_SC06_016/nonmatchings/ov_SC06_016_jr_8017C8D0", func_8017F784); +extern void *D_8019F6F8; +extern u16 D_8019F9DC[]; +extern s16 D_8019FB60; +extern u16 D_80188E6C[]; +extern s32 D_80188E8C[]; +extern s16 D_80188A18; +extern void func_8012E88C(u8 *a0); +extern void func_800183E0(s32 a0); +extern void func_8012B370(s32 a0); +extern void func_8017F694(s32 a0); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012E8A8(u8 *a0); +extern s32 func_80180BF0(void*); +extern void func_801807C4(void *a0); +extern void func_801803FC(void); +extern void func_801800E0(void *a0); +extern void func_8018048C(void *a0); + +void func_8017F784(s32 param_1) +{ + s32 var; + s32 k; + + switch (*(u16 *)(param_1 + 0x34)) { + case 0: { + register u16 *src __asm__("$6"); + register u16 *dst __asm__("$5"); + register s32 i __asm__("$4"); + register s32 fc __asm__("$2"); + if (*(u16 *)((char *)D_8019F6F8 + 2) != 5) { + return; + } + if (*(s32 *)(param_1 + 0x20) != 0) { + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x18) = 0; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1A) = 0; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1C) = 0; + } + func_8012E88C((u8 *)param_1); + src = D_80188E6C; + i = 0; + dst = D_8019F9DC; + fc = *(u16 *)(param_1 + 0xFC); + *(s32 *)(param_1 + 0x1C) = 0; + *(u16 *)(param_1 + 0x34) = 1; + D_8019FB60 = 1; + *(u16 *)(param_1 + 0xFC) = (fc - 1) & 0xF; + for (; i < 0x10; i++) { + *dst++ = src[(i + *(s16 *)(param_1 + 0xFC)) & 0xF]; + } + func_800183E0((s32)D_80188E8C); + *(s32 *)(param_1 + 4) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 4); + *(s32 *)(param_1 + 8) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 8) - 0x300000; + *(s32 *)(param_1 + 0xC) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 0xC); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x12); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) += 0x78; + func_8012B370(param_1); + func_8017F694(param_1); + __asm__ __volatile__("" ::: "memory"); + func_8018048C((void *)param_1); + break; + } + case 1: { + register u16 *src __asm__("$5"); + register u16 *dst __asm__("$4"); + register s32 i __asm__("$3"); + var = (*(s32 *)(param_1 + 0x1C) + 1) << 10; + *(s32 *)(param_1 + 0x1C) += 1; + if (*(s32 *)(param_1 + 0x20) != 0) { + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x18) = var; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1A) = var; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1C) = var; + } + func_8012E88C((u8 *)param_1); + if (*(s32 *)(param_1 + 0x1C) == 4) { + *(u16 *)(param_1 + 0x34) = 2; + __asm__ __volatile__("" ::: "memory"); + k = 0x1000; + if (*(s32 *)(param_1 + 0x20) != 0) { + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x18) = k; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1A) = k; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1C) = k; + } + func_8012E88C((u8 *)param_1); + } + src = D_80188E6C; + *(u16 *)(param_1 + 0xFC) = (*(u16 *)(param_1 + 0xFC) - 1) & 0xF; + for (i = 0, dst = D_8019F9DC; i < 0x10; i++) { + *dst++ = src[(i + *(s16 *)(param_1 + 0xFC)) & 0xF]; + } + func_800183E0((s32)D_80188E8C); + *(s32 *)(param_1 + 4) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 4); + *(s32 *)(param_1 + 8) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 8) - 0x300000; + *(s32 *)(param_1 + 0xC) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 0xC); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x12); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) += 0x78; + func_8012B370(param_1); + func_8017F694(param_1); + __asm__ __volatile__("" ::: "memory"); + func_8018048C((void *)param_1); + break; + } + case 2: { + register u16 *src __asm__("$5"); + register u16 *dst __asm__("$4"); + s32 i; + func_8012E88C((u8 *)param_1); + ((void (*)(void *))func_80180BF0)((void *)param_1); + if (*(u16 *)((char *)D_8019F6F8 + 2) == 6) { + *(u16 *)(param_1 + 0x34) = 3; + __asm__ __volatile__("" ::: "memory"); + *(s32 *)(param_1 + 0x1C) = D_80188A18; + __asm__ __volatile__("" ::: "memory"); + k = 0x1000; + if (*(s32 *)(param_1 + 0x20) != 0) { + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x18) = k; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1A) = k; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1C) = k; + } + func_8012E88C((u8 *)param_1); + src = D_80188E6C; + *(u16 *)(param_1 + 0xFC) = (*(u16 *)(param_1 + 0xFC) - 1) & 0xF; + for (i = 0, dst = D_8019F9DC; i < 0x10; i++) { + *dst++ = src[(i + *(s16 *)(param_1 + 0xFC)) & 0xF]; + } + func_800183E0((s32)D_80188E8C); + *(s32 *)(param_1 + 4) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 4); + *(s32 *)(param_1 + 8) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 8) - 0x300000; + *(s32 *)(param_1 + 0xC) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 0xC); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x12); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) += 0x78; + func_8012B370(param_1); + func_8017F694(param_1); + func_801807C4((void *)param_1); + func_801803FC(); + return; + } + src = D_80188E6C; + *(u16 *)(param_1 + 0xFC) = (*(u16 *)(param_1 + 0xFC) - 1) & 0xF; + for (i = 0, dst = D_8019F9DC; i < 0x10; i++) { + *dst++ = src[(i + *(s16 *)(param_1 + 0xFC)) & 0xF]; + } + func_800183E0((s32)D_80188E8C); + *(s32 *)(param_1 + 4) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 4); + *(s32 *)(param_1 + 8) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 8) - 0x300000; + *(s32 *)(param_1 + 0xC) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 0xC); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x12); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) += 0x78; + func_8012B370(param_1); + func_8017F694(param_1); + func_801800E0((void *)param_1); + __asm__ __volatile__("" ::: "memory"); + func_8018048C((void *)param_1); + break; + } + case 3: { + register u16 *src __asm__("$5"); + register u16 *dst __asm__("$4"); + s32 i; + s32 k3; + var = ((*(s32 *)(param_1 + 0x1C) - 5) << 12) / (D_80188A18 - 5); + if (var < 0x100) { + var = 0x100; + } + k3 = 0x1000; + if (*(s32 *)(param_1 + 0x20) != 0) { + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x18) = var; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1A) = var; + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x1C) = k3; + } + if (func_8012BEE8(param_1) != 0) { + func_8012E8A8((u8 *)param_1); + *(u16 *)(param_1 + 0x34) = 0; + } + src = D_80188E6C; + *(u16 *)(param_1 + 0xFC) = (*(u16 *)(param_1 + 0xFC) - 1) & 0xF; + for (i = 0, dst = D_8019F9DC; i < 0x10; i++) { + *dst++ = src[(i + *(s16 *)(param_1 + 0xFC)) & 0xF]; + } + func_800183E0((s32)D_80188E8C); + *(s32 *)(param_1 + 4) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 4); + *(s32 *)(param_1 + 8) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 8) - 0x300000; + *(s32 *)(param_1 + 0xC) = *(s32 *)(*(s32 *)(param_1 + 0x64) + 0xC); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = *(u16 *)(*(s32 *)(*(s32 *)(param_1 + 0x64) + 0x20) + 0x12); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) += 0x78; + func_8012B370(param_1); + func_8017F694(param_1); + func_801807C4((void *)param_1); + return; + } + default: + return; + } +} + extern void (*D_801890AC[])(void); diff --git a/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c b/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c index 5145e4f172..e06f33a163 100644 --- a/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c +++ b/src/ov_SC06_022/ov_SC06_022_jr_80184A28.c @@ -3530,7 +3530,191 @@ void func_801859F4(void *a0) { } -INCLUDE_ASM("asm/ov_SC06_022/nonmatchings/ov_SC06_022_jr_80184A28", func_80185B80); +/* ov_SC06_022 :: func_80185B80 — actor state machine, jump-table switch on the + * u16 state word at +0x34. Jump table = jtbl_801E0C3C (6 entries, 0..5), + * defined in asm/ov_SC06_022/data/tail20.data.s — this .s carries no data of + * its own (§160c), so plain `extern`s are correct here. + * + * Mechanical remap of ov_SC06_018 :: func_80187AEC (§40) — that body is BANKED + * and whole-binary-gate-proven (§260-A); this draft is its line-for-line + * relative with exactly four symbols remapped to this overlay's own relocs: + * D_801B5400 -> D_801BD358 func_80189000 -> func_80187094 + * func_8018944C -> func_801874E0 + * (jtbl name is compiler-generated from the switch lowering; the func_8012xxxx + * callees are shared-engine symbols that map to themselves under §40's rule — + * the twin calls the same addresses under the same names.) + * + * ⚠ BANK PREREQUISITE (not a body defect): this is a DATA-TAIL-TABLE jr + * function. match_one MATCH is necessary but not sufficient. Bankable ONLY + * through a gate arming harvest_verify._jtbl_prep_one — tools/jtbl_lane.py + * --targets func_80185B80@ov_SC06_022 --draft-dir , or a wave drawn with + * jtbl-carve in --levers. A plain-path gate cannot bank it (duplicate table: + * C-emitted .rodata + the raw tail20.data.s copy -> duplicate-symbol link + * error or shifted data). No manual wiring needed: §131 clamp auto-trims the + * non-code surplus word 0x9C024030 (verified present at 0x801E0C54 inside the + * dlabel; unambiguous sltiu=6); single-table 4-mod-8-first carve takes no + * JTBL_PADS var (§8e-2). + * + * GEOMETRY (R24, corrects the card's earlier tail19/mid-region claim — the + * split has been regenerated since the card was written): tail20.data.s opens + * at 0x801E0C38 with D_801E0C38 (one 4-byte zero word), then jtbl_801E0C3C + * (six entries 0x80185BD0..0x80185E2C + the surplus word), then D_801E0C58… + * The carve sandwich is therefore SINGLE-FILE and MINIMAL: + * [raw: D_801E0C38, 4 bytes][rodata: jtbl 0xC3C..0xC54][raw: rest of tail20] + * — far simpler than the multi-file flank this card previously warned about; + * tails 18/19 hold other functions' tables and are untouched by this carve. + * + * TABLE-LAYOUT DISTINCTION (R22): ov_SC06_018's jr tables are FUNCTION-LOCAL + * (its remaining unmatched jr fn declares jtbl_801D3B8C via dlabel in its own + * .s; that overlay has NO data-tail tables), so the banked twin went through + * the ORDINARY path. §81's law narrows to: the plain-path wall binds + * DATA-TAIL-table jr functions only. This card is provably in the bound + * subclass (table in tail20; own .s has no dlabel block). + * + * WAVE ACTIVITY OBSERVED (R23/R24): three distinct filesystem states across + * three consecutive reads — (i) table local-only in this .s + jtbl_801E0B10 + * duplicated in both its .s and tail19, (ii) old structure restored, (iii) + * stable state with the table in tail20. Signature of an ATOMIC + * ATTEMPT-AND-RESTORE jtbl-carve cycle on this very function: the lane is + * being exercised concurrently; if it lands, this draft banks through it + * as-is. + * + * FALSIFIABLE PREDICTION (R20, refined R22/R24): a plain-path attempt on this + * draft fails at LINK (duplicate global jtbl_801E0C3C) or with a + * data-tail-only byte diff around 0x801E0C3C (in tail20) — NEVER a + * code-section diff. A plain-path failure showing a CODE-section diff would + * falsify this record and point back at the body despite seven MATCHes. + * + * Keys (all byte-forced, do NOT "clean up") — inherited verbatim from the + * banked exemplar: + * + * (1) §161a — table indexed from ZERO (`lhu 0x34 ; sltiu <6 ; sll 2`), entry[0] + * is a real body, so `case 0:` carries the first arm. All six table + * words verified (R24) to land on this C's six case bodies. + * (2) `s32 pad[1];` is LOAD-BEARING: forces the 0x20 frame (args 0x10 + ra/s0 + * at 0x18/0x1C). Without it the frame compiles to 0x18 and all six + * prologue/epilogue immediates rot. 4 bytes -> right, 8 -> wrong. + * (3) Case 0's 0x102 write must be TWO stores in an if/else: with a live temp + * gcc keeps the value in $a0 for the later +0x400; the target instead + * re-LOADS `lhu 0x102($s0)` (§160d). Two stores kill the temp, the + * cross-jumper re-merges the single `sh`, the reload comes back. + * (4) Case 0's `iVar >= 4` test is written "wrong" round on purpose: the >= 4 + * arm is the fall-through, the div arm is the branch target. + * (5) Case 1 re-reads *(s16*)(param_1+0x70) at BOTH tests: one local gives + * `andi $v0,$v1,0x8000` (184 ins); two reads make cse emit + * `addu $v0,$v1,$zero` — the 185th instruction — and let the delay-slot + * filler steal `andi $v1,$v0,0xF`. + * (6) func_8012CC40 is fleet-canonical `void`; its $v0 is used here, so it is + * called through a cast (§17a-1) rather than being re-declared. + */ + +extern void func_8012CC40(s32 arg0, s32 arg1); /* fleet-canonical: void; $v0 used -> cast at use */ +extern s32 func_80143B6C(s32 a0, s32 a1); /* fleet-canonical */ +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012BEE8(s32 a0); +extern void func_8012E8C4(u8 *a0); +extern void func_8012E8A8(u8 *a0); +extern void func_80187094(s32 a0, s32 a1); +extern s32 func_801874E0(s32 a0, s32 a1, s32 a2); +extern void func_8012C218(void *a0); + +extern u8 D_801BD358; + +void func_80185B80(s32 param_1) +{ + s32 iVar; + s32 t; + u16 st; + u16 uVar1; + s32 pad[1]; /* see key (2): forces the 0x20 frame — never referenced */ + + if (0xf < *(s16 *)(param_1 + 0xA)) { + func_8012C218((void *)param_1); + return; + } + switch (*(u16 *)(param_1 + 0x34)) { + case 0: + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) + *(u16 *)(param_1 + 0xFC); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) = + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x12) + *(u16 *)(param_1 + 0xFE); + if ((((s32 (*)(s32, s32))func_8012CC40)( + param_1, + ((*(u16 *)(param_1 + 0x70) & 0xF) * 8) + (s32)&D_801BD358) & + 0x2000) == 0) { + return; + } + iVar = *(s32 *)(param_1 + 0x1C) + 1; + *(s32 *)(param_1 + 0x1C) = iVar; + if (iVar >= 4) { + if ((*(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) & 0xFFFU) > 0x800U) { + *(u16 *)(param_1 + 0x102) = 0xC00; + } else { + *(u16 *)(param_1 + 0x102) = 0x400; + } + t = *(u16 *)(param_1 + 0x70) & 0xF; + if (t < 4 && t != 0) { + *(u16 *)(param_1 + 0x102) = *(u16 *)(param_1 + 0x102) + 0x400; + } + *(s32 *)(param_1 + 0x1C) = 0x1E; + *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; + } else { + *(s32 *)(param_1 + 0x14) = -(0x80000 / iVar); + func_80143B6C(param_1, 1); + } + return; + case 1: + iVar = func_8012B608((s32)*(s16 *)(*(s32 *)(param_1 + 0x20) + 0x10), + (s32)*(s16 *)(param_1 + 0x102), 4); + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) = + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x10) + iVar; + if (func_8012BEE8(param_1) == 0) { + return; + } + st = *(u16 *)(param_1 + 0x34); + *(s32 *)(param_1 + 0x1C) = 0x1E; + *(u16 *)(param_1 + 0x34) = st + 1; + if ((*(s16 *)(param_1 + 0x70) & 0x8000) != 0) { + *(u16 *)(param_1 + 0x34) = st + 2; + } else if ((*(s16 *)(param_1 + 0x70) & 0xF) == 4) { + *(u16 *)(param_1 + 0x34) = 4; + *(s32 *)(param_1 + 0x1C) = 0x1E; + } + return; + case 2: + func_8012E8C4((u8 *)param_1); + if (func_8012BEE8(param_1) == 1) { + func_8012C218((void *)param_1); + } + return; + case 3: + if (*(s16 *)(*(s32 *)(param_1 + 0x64) + 0x36) != *(s16 *)(param_1 + 0x10A) && + *(s32 *)(param_1 + 0xE0) == 0) { + *(s32 *)(param_1 + 0x1C) = 0x1E; + uVar1 = 2; + if ((*(u16 *)(param_1 + 0x70) & 0xF) == 4) { + uVar1 = 4; + } + *(u16 *)(param_1 + 0x34) = uVar1; + *(s32 *)(param_1 + 0xE0) = 1; + } + return; + case 4: + if (func_8012BEE8(param_1) != 0) { + *(s32 *)(param_1 + 0x1C) = 0xA; + *(u16 *)(param_1 + 0x34) = *(u16 *)(param_1 + 0x34) + 1; + func_8012E8A8((u8 *)param_1); + func_80187094(param_1, 1); + } + return; + case 5: + if (func_801874E0(param_1, 0x60, 0xA0) == 1) { + func_8012C218((void *)param_1); + } + return; + } +} + extern void func_8012C218(void *a0); diff --git a/src/ov_SC06_029/ov_SC06_029_jr_8017C954.c b/src/ov_SC06_029/ov_SC06_029_jr_8017C954.c index f3134ea005..5cd9cffc81 100644 --- a/src/ov_SC06_029/ov_SC06_029_jr_8017C954.c +++ b/src/ov_SC06_029/ov_SC06_029_jr_8017C954.c @@ -5360,7 +5360,166 @@ void func_80182DB0(void *a0) { } -INCLUDE_ASM("asm/ov_SC06_029/nonmatchings/ov_SC06_029_jr_8017C954", func_80182ED8); +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 void *D_801DFDD4[][8]; + +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 = &D_801DFE54[t * 4]; + dd4 = (s32)((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; + *r = func_80013478((s32)&D_80126B5C, (s32)top); + r++; + 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_801833FC); diff --git a/src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c b/src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c index aa5fc0daa0..c0e697d355 100644 --- a/src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c +++ b/src/ov_SC06_030/ov_SC06_030_jr_8017C8D0.c @@ -3876,1115 +3876,3 @@ void func_8017F0A0(s32 a0) { INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_8017F268); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_8017F65C); - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_8017F98C); - -extern u8 * func_8012913C(s32 a0); -extern s32 rand(void); - -void func_8017FBA4(s32 param_1) -{ - u8 *obj; - s32 i; - - for (i = 0; i < 4; i++) { - obj = func_8012913C(0x23); - if (obj != NULL) { - *(s16 *)(obj + 6) = *(u16 *)(param_1 + 6) + (rand() % 160) - 0x50; - *(s16 *)(obj + 0xA) = *(u16 *)(param_1 + 0xA) - (rand() % 160); - *(s16 *)(obj + 0xE) = *(u16 *)(param_1 + 0xE) + (rand() % 160) - 0x50; - *(s16 *)(obj + 0x34) = 0x7000; - *(s32 *)(obj + 0x18) = 0; - *(s32 *)(obj + 0x14) = 0; - *(s32 *)(obj + 0x10) = 0; - } - } - - *(s32 *)(*(s32 *)(param_1 + 0x20) + 4) |= 0x80000000; - *(s32 *)(param_1 + 0x1C) = 6; - *(s16 *)(param_1 + 2) = 5; -} - - -extern void (*D_80185DDC[])(void); -extern u16 D_80126B96; -extern s32 func_8012D624(s16*, s32, s32); -extern void func_8002D4C8(s32, s32); - -void func_8017FCF4(void *param_1) { - u16 *q; - D_80185DDC[*(u16 *)((s32)param_1 + 0x2)](); - if (*(u16 *)((s32)param_1 + 0x0) != 0) { - *(s16 *)((s32)param_1 + 0xa) = *(u16 *)((s32)param_1 + 0xa) - 0x40; - if (*(u16 *)((s32)param_1 + 0x2) >= 5) { - if (((s32 (*)(void *, s32, s32))func_8012D624)(param_1, 0xA0, 0x78) == 1) { - q = &D_80126B96; - *q |= 0x4000; - } - } else { - if (((s32 (*)(void *, s32, s32))func_8012D624)(param_1, 0x10, 0x78) == 1) { - *(u16 *)((s32)param_1 + 0x2) = 4; - func_8002D4C8(0x941, 0); - q = &D_80126B96; - *q |= 0x4000; - } - } - *(s16 *)((s32)param_1 + 0xa) = *(u16 *)((s32)param_1 + 0xa) + 0x40; - } -} - - -extern void (*D_80185E08[])(void *); -extern void func_8012B370(s32 a0); -extern s32 func_8004787C(s32 a0); -extern s32 func_80047948(s32 a0); -extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); - -void func_8017FDDC(void *a0) { - s32 i; - s16 pos[3]; - s16 vel[3]; - - D_80185E08[*(u16 *)((s32)a0 + 2)](a0); - if (*(u16 *)a0 != 0) { - func_8012B370((s32)a0); - i = 0; - pos[0] = 0; - vel[1] = 0; - pos[1] = 0; - pos[2] = 0; - while (i < 0x1000) { - vel[0] = func_8004787C(i) >> 7; - vel[2] = func_80047948(i) >> 7; - func_8012D5E4((s32)a0, (s32)pos, (s32)vel, 0x40); - i += 0x200; - } - } -} - - -#include "common.h" - -extern void func_8004914C(void *a0); -extern void func_800491AC(void *a0); -extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8012CBCC(s32 a0); -extern void func_8012C218(s32 a0); - -extern u8 D_800AF648; - -void func_8017FE9C(s32 a0) { - struct { - s16 v[3]; /* sp+0x10 */ - s16 pad0; /* sp+0x16 */ - u16 sxy[2]; /* sp+0x18 */ - s32 z; /* sp+0x1C */ - s32 flag; /* sp+0x20 */ - s32 padend; /* frame padding: vars must be 0x28 */ - } L; - - if (*(s16 *)(a0 + 0x84) != 0) { - *(s16 *)(a0 + 0x84) = *(s16 *)(a0 + 0x84) - 1; - } else { - *(s16 *)(a0 + 0x84) = 0xF; - L.v[0] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x48); - L.v[1] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x4C); - L.v[2] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x50); - { 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 x = (s16)L.sxy[0]; - register s32 ax __asm__("$5"); - s32 vol; - ax = x; - if (x < 0) { - ax = -x; - } - vol = ((0xA0 - ax) * 0x7F) / 0xA0; - __asm__("" : "=r"(vol) : "0"(vol)); - x = (x + 0xA0) / 0x14; - if (x == 0x10) { - x = 0xF; - } - x = x << 8; - { - s32 flg = 0x3000; - func_8002D4C8(0x93E, ((vol | flg) | x) & 0xFFFF); - } - } - } - - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) + 0x300; - if (((s32 (*)(s32))func_8012CBCC)(a0) != 0) { - func_8012C218(a0); - } - - if ((*(s32 *)(a0 + 0x1C) -= 1) == 0) { - func_8012C218(a0); - } -} - - - -extern void (*D_80185E24[])(void); -extern s16 D_80126B9A; -extern s32 func_8012D624(s16 *a0, s32 a1, s32 a2); -extern s32 func_8012B8A4(s16 *a0); - -void func_80180058(s16 *param_1) { - D_80185E24[*(u16 *)(param_1 + 1)](); - if (*(u16 *)param_1 != 0 && func_8012D624(param_1, 0x1E, 100) != 0) { - D_80126B9A = func_8012B8A4(param_1); - } -} - - - -extern void (*D_80185E2C[])(void); - -void func_801800D4(void *a0) { - D_80185E2C[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern u16 D_801B9F00; -extern u16 D_801B9F02; -extern u16 D_801B9F04; -extern u16 D_801B9F08; -extern u16 D_801B9F0A; -extern u16 D_801B9F0C; - -void func_80180110(void *a0) { - u16 var_v1; - u16 var_a1; - *(u16 *)((s32)a0 + 0xDC) = D_801B9F00; - *(u16 *)((s32)a0 + 0xDE) = D_801B9F02; - *(u16 *)((s32)a0 + 0xE0) = D_801B9F04; - *(u16 *)((s32)a0 + 0xE4) = D_801B9F08; - *(u16 *)((s32)a0 + 0xE6) = D_801B9F0A; - var_v1 = *(u16 *)((s32)a0 + 2); - var_a1 = D_801B9F0C; - *(u16 *)((s32)a0 + 2) = var_v1 + 1; - *(u16 *)((s32)a0 + 0xE8) = var_a1; -} - - -#include "common.h" - -extern u16 D_801B9F00; -extern u16 D_801B9F02; -extern u16 D_801B9F04; -extern u16 D_801B9F08; -extern u16 D_801B9F0A; -extern u16 D_801B9F0C; - -void func_8018017C(void *a0) { - u16 v1; - u16 a1; - *(u16 *)((s32)a0 + 0xFC) = D_801B9F00; - v1 = *(u16 *)((s32)a0 + 2); - *(u16 *)((s32)a0 + 0xFE) = D_801B9F02; - *(u16 *)((s32)a0 + 0x100) = D_801B9F04; - *(u16 *)((s32)a0 + 0x104) = D_801B9F08; - *(u16 *)((s32)a0 + 0x106) = D_801B9F0A; - a1 = D_801B9F0C; - *(u32 *)((s32)a0 + 0x1C) = 0x10; - *(u16 *)((s32)a0 + 2) = v1 + 1; - *(u16 *)((s32)a0 + 0x108) = a1; -} - - -extern void func_80180228(s32 a0); -extern s32 func_8012BEE8(s32 a0); -extern void func_8012C218(s32 a0); -void func_801801E8(s32 a0) { - func_80180228(a0); - if (func_8012BEE8(a0)) { - func_8012C218(a0); - } -} - - -#include "common.h" - -/* func_80180228 — ov_SC06_030 / ov_SC06_030_jr_8017C8D0 (132 ins) - * - * Remap variant of the banked family func_80187EE8 (ov_SC03_014_jr_801848E4, - * MATCH): builds ONE 4-vertex gouraud packet on the stack (verts sp+0x10, - * colours sp+0x30, code sp+0x40), colour ramp derived from the s32 at a0+0x1C - * (*15, >>1, -0x10 clamped-at-0 for the far pair), then loads the camera matrix - * cached at D_800AF630+0x18 and runs one rtpt+rtps+avsz4 group over the - * SVECTORs at a0+0xFC / a0+0x104 / a0+0xDC / a0+0xE4, with the shared - * OT-range guard (otz>0, flag>=0, OT slot < &D_800AE610, (flag&~0x1000)==0). - * - * REMAP vs twin: the HALVED channel is BLUE here (twin: green). Target store - * order per vertex pair is b1,b0,r1,r0,g1,g0 — reproduced by three chained - * statements (right-to-left evaluation), b/r/g. - */ - -extern u8 D_800AF630[]; /* TU line 53, verbatim */ - -typedef struct { s16 vx, vy, vz, pad; } SV_80180228; -typedef struct { u8 r, g, b, cd; } CV_80180228; -typedef struct { - SV_80180228 v[4]; /* +0x00 : sxy0..3 (v[0].vz doubles as the otz slot) */ - CV_80180228 rgb[4]; /* +0x20 */ - u32 code; /* +0x30 */ - u32 pad; /* +0x34 */ -} PKT_80180228; - -/* every macro is suffixed: this TU already #defines the unsuffixed gte_* family - * (func_8017C8D0 region), so an unsuffixed name would clash. */ -#define gte_ldv0_80180228(r0) __asm__ volatile ( \ - "lwc2 $0, 0( %0 );" \ - "lwc2 $1, 4( %0 )" \ - : \ - : "r"( r0 ) ) - -#define gte_ldv3_80180228(r0, r1, r2) __asm__ volatile ( \ - "lwc2 $0, 0( %0 );" \ - "lwc2 $1, 4( %0 );" \ - "lwc2 $2, 0( %1 );" \ - "lwc2 $3, 4( %1 );" \ - "lwc2 $4, 0( %2 );" \ - "lwc2 $5, 4( %2 )" \ - : \ - : "r"( r0 ), "r"( r1 ), "r"( r2 ) ) - -#define gte_rtps_80180228() __asm__ volatile ("nop;nop;rtps") -#define gte_rtpt_80180228() __asm__ volatile ("nop;nop;rtpt") -#define gte_avsz4_80180228() __asm__ volatile ("nop;nop;avsz4") - -#define gte_stsxy_80180228(r0) __asm__ volatile ( \ - "swc2 $14, 0( %0 )" \ - : \ - : "r"( r0 ) \ - : "memory" ) - -#define gte_stsxy3_80180228(r0, r1, r2) __asm__ volatile ( \ - "swc2 $12, 0( %0 );" \ - "swc2 $13, 0( %1 );" \ - "swc2 $14, 0( %2 )" \ - : \ - : "r"( r0 ), "r"( r1 ), "r"( r2 ) \ - : "memory" ) - -#define gte_stotz_80180228(r0) __asm__ volatile ( \ - "swc2 $7, 0( %0 )" \ - : \ - : "r"( r0 ) \ - : "memory" ) - -#define gte_stflg_80180228(r0) __asm__ volatile ( \ - "cfc2 $12, $31;" \ - "nop;" \ - "sw $12, 0( %0 )" \ - : \ - : "r"( r0 ) \ - : "$12", "memory" ) - -#define gte_SetRotMatrix_80180228(r0) __asm__ volatile ( \ - "lw $12, 0( %0 );" \ - "lw $13, 4( %0 );" \ - "ctc2 $12, $0;" \ - "ctc2 $13, $1;" \ - "lw $12, 8( %0 );" \ - "lw $13, 12( %0 );" \ - "lw $14, 16( %0 );" \ - "ctc2 $12, $2;" \ - "ctc2 $13, $3;" \ - "ctc2 $14, $4" \ - : \ - : "r"( r0 ) \ - : "$12", "$13", "$14" ) - -#define gte_SetTransMatrix_80180228(r0) __asm__ volatile ( \ - "lw $12, 20( %0 );" \ - "lw $13, 24( %0 );" \ - "ctc2 $12, $5;" \ - "lw $14, 28( %0 );" \ - "ctc2 $13, $6;" \ - "ctc2 $14, $7" \ - : \ - : "r"( r0 ) \ - : "$12", "$13", "$14" ) - -void func_80180228(s32 a0) -{ - extern void func_80017714(void *); - extern s16 D_800B9A02; - /* §183 TYPE-shadowed-block-scope: adopt the twin's spelling for D_800A651C. - * The typedef is declared BLOCK-SCOPE here so it shadows (never redefines) - * the file-scope copy in src/shared/engine_types.h, which is byte-identical. */ - typedef struct { s32 a; s32 b[4]; } Ot_8018B23C; - extern Ot_8018B23C D_800A651C[]; - extern u8 D_800AE610[]; - - PKT_80180228 pkt; /* sp+0x10 .. sp+0x47 */ - s32 flag1; /* sp+0x48 */ - s32 flag2; /* sp+0x4C */ - s32 otz; /* sp+0x50 */ - u8 *base; - s32 *m; - s16 c, p, q; - s32 d; - - c = *(s32 *)(a0 + 0x1C) * 15; - base = D_800AF630; - p = c; - d = c >> 1; - q = d; - - /* REMAP: halved channel is BLUE (twin func_80187EE8: green). - Store order b1,b0,r1,r0,g1,g0 == target's sb sequence. */ - pkt.rgb[0].b = pkt.rgb[1].b = q; - pkt.rgb[0].r = pkt.rgb[1].r = p; - pkt.rgb[0].g = pkt.rgb[1].g = p; - - c -= 0x10; - p = c; - if (c < 0) { - p = 0; - } - { - s16 e; /* block-scoped: one pseudo (§136/L1) */ - e = d - 0x10; - q = e; - if (e < 0) { - q = 0; - } - } - pkt.rgb[2].b = pkt.rgb[3].b = q; - pkt.rgb[2].r = pkt.rgb[3].r = p; - pkt.rgb[2].g = pkt.rgb[3].g = p; - - pkt.code = 0x50000000; - - m = (s32 *)(base + 0x18); - gte_SetRotMatrix_80180228(m); - gte_SetTransMatrix_80180228(m); - - gte_ldv3_80180228((SV_80180228 *)(a0 + 0xFC), (SV_80180228 *)(a0 + 0x104), - (SV_80180228 *)(a0 + 0xDC)); - gte_rtpt_80180228(); - gte_stflg_80180228(&flag1); - gte_stsxy3_80180228(&pkt.v[0], &pkt.v[1], &pkt.v[2]); - gte_ldv0_80180228((SV_80180228 *)(a0 + 0xE4)); - gte_rtps_80180228(); - gte_stflg_80180228(&flag2); - flag1 = flag1 | flag2; - gte_stsxy_80180228(&pkt.v[3]); - gte_avsz4_80180228(); - gte_stotz_80180228(&otz); - - if (otz > 0 && flag1 >= 0 && - !((u32)&D_800AE610 < - (u32)(*(s32 *)((u8 *)&D_800A651C + (*(u16 *)&D_800B9A02) * 0x14) - + otz * 4)) && - (flag1 & 0xFFFFEFFF) == 0) { - pkt.v[0].vz = (s16)otz; - func_80017714(&pkt.v[0]); - } -} - - -extern void func_8001AAA0(s32 arg); - s32 func_80180438(void) { - return ((s32 (*)(s32))func_8001AAA0)(0x7C) != 0; - } - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_80180458); - -extern void func_800D0C48(s32 arg); - void func_8018047C(void) { - func_800D0C48(0x1); - } - - -extern s32 func_80180C5C(void); - s32 func_8018049C(void) { - return func_80180C5C() != 0; - } - - -extern void func_80016714(void *a0, s32 a1); -extern void func_8002A04C(s32 a0); -extern void func_8012C218(s32 a0); - -void func_801804BC(void *a0) { - if (*(u32 *)(a0 + 0xCC) != 0) { - func_80016714(*(void **)(a0 + 0xCC), 0x84); - } - func_8002A04C((s32)a0); - func_8012C218((s32)a0); -} - - -extern s32 func_8012C354(s32 a0, s32 a1); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8012A828(s32 a0, void *a1); -extern void func_8012B2CC(s32 a0); -extern s32 func_80143970(s32 a0); - -void func_80180508(void *a0) { - extern u8 D_80185D14[]; - extern u8 D_8018E4E4[]; - extern u8 D_80182184[]; - extern u8 D_8019EC8C; - extern u8 D_80185D48; - s32 s1; - - if (func_8012C354((s32)a0, (s32)D_80185D14) != 0) { - s1 = ((s32 (*)(void))func_8012C1B8)(); - if (s1 == 0) { - func_8012CAE4(a0); - } else { - *(s32 *)((s32)a0 + 0xCC) = s1; - func_8001C214(s1, (s32)D_8018E4E4); - *(s32 *)(s1 + 0x20) = *(s32 *)D_80182184; - *(s32 *)(s1 + 4) |= 0x80000000; - *(u8 *)((s32)a0 + 0xC0) = 1; - *(s32 *)((s32)a0 + 0xC4) = 3; - *(s32 *)((s32)a0 + 0xB4) = 0; - *(u16 *)((s32)a0 + 2) = 1; - func_8012A828((s32)a0, (void *)&D_8019EC8C); - *(u8 *)((s32)a0 + 0x75) = 0; - *(s32 *)((s32)a0 + 0xBC) = (s32)&D_80185D48; - func_80143970((s32)a0); - *(s32 *)((s32)a0 + 0x48) = 0xFFFE8000; - func_8012B2CC((s32)a0); - *(s32 *)((s32)a0 + 0x1C) = 0xF; - } - } -} - - -#include "common.h" - -extern u8 D_80185C2C[]; -extern u8 D_8019FFA4; -extern s32 func_80178B18(s32, s32); -extern void func_8012A828(s32 a0, void *a1); -extern s32 func_80178970(void); -extern void func_80178D18(void); -extern void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_801805F8(s32 a0) { - switch (*(u16 *)(a0 + 0x34)) { - case 0: - if (--*(s32 *)(a0 + 0x1C) == 0) { - ((void (*)(s32, s32))func_80178B18)(a0, (s32)D_80185C2C); - *(u16 *)(a0 + 0x34) = 1; - func_8012A828(a0, &D_8019FFA4); - } - break; - - case 1: - if (((s32 (*)(s32))func_80178970)(a0) != 0) { - ((void (*)(s32))func_80178D18)(a0); - *(u16 *)(a0 + 2) = 2; - func_8017BF08((void *)(a0 + 0x76), (void *)(a0 + 0x76), 6, 0xD2); - } else if (*(s32 *)(a0 + 0x94) == 0x22) { - func_8002D4C8(0xC7C, 0); - } - break; - } -} - - -void func_801806D4(s32 a0) { - s32 v0; - - v0 = *(s32 *)(a0 + 0x1C); - if (v0 != 0) { - *(s32 *)(a0 + 0x1C) = v0 - 1; - *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = - *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + func_8012BA10(a0, 8); - } else { - *(s16 *)(a0 + 0x34) = 0; - switch (*(s16 *)(a0 + 0xFC)) { - case 0: - *(s16 *)(a0 + 2) = 3; - return; - case 1: - *(s16 *)(a0 + 2) = 4; - *(s16 *)(a0 + 0x106) = *(u16 *)(a0 + 0x76); - return; - case 2: - *(s16 *)(a0 + 2) = 5; - return; - case 3: - if (*(s16 *)(a0 + 0x76) < *(s16 *)(a0 + 0x106)) { - *(s16 *)(a0 + 2) = 6; - } else { - *(s16 *)(a0 + 2) = 3; - } - return; - } - } -} - - -extern M2C_UNK D_80185DB8; -extern u8 D_80185DA0[]; -extern void func_8001CA1C(s32, s32); -extern void func_8012A828(s32, void*); -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); - - void func_801807B4(void *a0) { - s32 v0 = ((s32 (*)(void *))func_8012C1B8)(a0); - *(int *)((char *)a0 + 0x20) = v0; - if (v0 == 0) { - func_8012CAE4(a0); - } else { - ((void (*)(s32, u8 *))func_8001CA1C)(v0, D_80185DA0); - ((void (*)(void *, u8 *))func_8012A828)(a0, ((u8 *)&D_80185DB8)); - *(short *)((char *)a0 + 0x2) = 1; - } - } - - -void func_8018081C(s32 a0) { - *(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) + 1; - *(s32 *)(a0 + 4) = (*(s16 *)(a0 + 0x88) * 0x10000) + *(s32 *)(a0 + 0x10) * *(s32 *)(a0 + 0x1C); - *(s32 *)(a0 + 8) = (*(s16 *)(a0 + 0x8A) * 0x10000) + *(s32 *)(a0 + 0x14) * *(s32 *)(a0 + 0x1C); - *(s32 *)(a0 + 0xC) = (*(s16 *)(a0 + 0x8C) * 0x10000) + *(s32 *)(a0 + 0x18) * *(s32 *)(a0 + 0x1C); - *(s32 *)(a0 + 8) = *(s32 *)(a0 + 8) - (func_8004787C(*(s32 *)(a0 + 0x1C) << 6) << 11); - if (*(s32 *)(a0 + 0x1C) == 0x20) { - *(s16 *)(a0 + 2) = 2; - *(s32 *)(a0 + 0x1C) = 0x80; - func_8002D4C8(0x943, 0); - } -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_801808F0); - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_800599B8(s32 a0, s32 a1); -extern u8 D_80185AB0[]; -extern s16 D_80185DC8[]; -extern u8 D_80185928[]; - -void func_80180940(s32 param_1) { - s32 iVar1; - iVar1 = *(s32 *)(param_1 + 0x1C) - 1; - *(s32 *)(param_1 + 0x1C) = iVar1; - if (iVar1 <= 0) { - *(s16 *)(param_1 + 2) = 4; - func_8002D4C8(0x941, 0); - } else { - func_800599B8((s32)&D_80185AB0, (s32)&D_80185928[D_80185DC8[iVar1 % 10]]); - } -} - - -extern u8 D_801202A0[]; -extern void func_8012C218(s32 a0); -extern s32 func_80013350(s32 *a0, s32 *a1); - -void func_801809DC(s32 a0) -{ - s32 v1; - u16 *p; - s32 i; - - v1 = *(s32 *)(a0 + 0x1C) - 1; - *(s32 *)(a0 + 0x1C) = v1; - if (v1 == 0) { - func_8012C218(a0); - } else if (v1 == 3) { - i = 0; - p = (u16 *)D_801202A0; - for (; i < 0x60; i++) { - if (*p == 0x30B && p[1] < 5 && - func_80013350((s32 *)(a0 + 4), (s32 *)(p + 2)) < 0x6400) { - p[1] = 4; - } - p += 0x86; - } - } -} - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); -extern s32 func_80143970(s32 a0); - -void func_80180ABC(s32 a0) { - extern u8 D_8018F280[]; - s32 v1; - - v1 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(a0 + 0x20) = v1; - if (v1 == 0) { - func_8012CAE4((void *)a0); - } else { - func_8001C214(v1, (s32)D_8018F280); - *(u8 *)(a0 + 0xC0) = 1; - *(u16 *)(a0 + 2) = 1; - func_80143970(a0); - *(s32 *)(*(s32 *)(a0 + 0x20) + 4) |= 0x8000000; - *(u16 *)(*(s32 *)(a0 + 0x20) + 0x14) = 0x400; - *(s32 *)(a0 + 0x1C) = 0x78; - } -} - - -extern void func_8012CBCC(s32 a0); -extern void func_8012C218(s32 a0); - -void func_80180B50(s32 a0) { - s32 v1; - s32 v0; - - v1 = *(s32 *)(a0 + 0x20); - *(u16 *)(v1 + 0x10) = *(u16 *)(v1 + 0x10) + 0x300; - if (((s32 (*)(s32))func_8012CBCC)(a0) != 0) { - func_8012C218(a0); - } - v0 = *(s32 *)(a0 + 0x1c) - 1; - *(s32 *)(a0 + 0x1c) = v0; - if (v0 == 0) { - func_8012C218(a0); - } -} - - -extern void func_8012C1B8(void); -extern void func_8012CAE4(void *a0); -extern void func_8001C214(s32 a0, s32 a1); -extern s32 func_80143970(s32 a0); - -void func_80180BBC(s32 a0) { - extern u8 D_8018F000[]; - s32 v1; - - v1 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)(a0 + 0x20) = v1; - if (v1 == 0) { - func_8012CAE4((void *)a0); - } else { - func_8001C214(v1, (s32)D_8018F000); - *(u16 *)(a0 + 2) = 1; - *(u8 *)(a0 + 0xC0) = 1; - func_80143970(a0); - *(s32 *)(*(s32 *)(a0 + 0x20) + 4) |= 0x8000000; - *(s32 *)(a0 + 0x1C) = 0x78; - } -} - - - - - - - - - - - - - - - - - - - - -s32 func_80180C44(s32 arg0) -{ - s32 ret; - ret = 0x6F; if (0x514 > arg0) { ret = 0x8A; - } - else - { - } - return ret; -} - - -extern void func_8001AAA0(s32 arg); - s32 func_80180C5C(void) -{ - func_8001AAA0(0x6F); - } - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -void func_80180C7C(void) { - - extern s32 D_801B4C6C(void *a0); - ((void (*)(void *, s32))func_8016EE40)((void *)D_801B4C6C, 0x1000000); -} - - - -extern void (*D_801B4C84[])(void); - -void func_80180CA4(void *a0) { - D_801B4C84[*(u8 *)((s32)a0 + 0x216)](); -} - - -void func_80180CE0(void *a0) { - void *s0 = a0; - - func_80180FF4(a0); - if (*(s16 *)((s32)s0 + 0x210) >= 0) { - *(s16 *)((s32)s0 + 0x210) = 0x30; - } else { - *(s16 *)((s32)s0 + 0x210) = -0x30; - } - func_80171990((u8 *)s0); -} - - - -extern s32 func_801810D0(); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80171928(void *a0); - -void func_80180D28(void *param) -{ - void *s0 = param; - - if (func_801810D0() != 0) { - func_8002D4C8(0x8B1, 0); - func_80171928(s0); - } -} - - -extern void func_8016EE40(s32 a0, s32 a1, s32 a2); -extern s32 D_801B4C8C; - -void func_80180D68(void) { - ((void (*)(void *, s32))func_8016EE40)(&D_801B4C8C, 0x1000000); -} - - - -extern void (*D_801B4C98[])(void); - -void func_80180D90(void *a0) { - D_801B4C98[*(u8 *)((s32)a0 + 0x216)](); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_80180DCC); - - -extern s32 func_801810D0(); -extern void func_8002D4C8(s32 a0, s32 a1); -extern s32 func_80171990(u8*); - -void func_80180ED4(void *param) -{ - void *s0 = param; - - if (func_801810D0() != 0) { - func_8002D4C8(0x8B1, 0); - ((void (*)(void *))func_80171990)(s0); - } -} - - -extern s32 func_80013328(s32 a0, s32 a1); -extern u8 D_801202A0[]; -extern void func_800D1724(s32 a0); -extern void func_80171928(void *a0); - -void func_80180F14(arg0) -void *arg0; -{ - u8 *p; - u8 *found; - s32 i; - s32 best; - s16 t; - - found = 0; - best = 0x7FFFFFFF; - for (i = 0; i < 0x60; i++) { - p = &D_801202A0[i * 0x10C]; - if ((*(u16 *)(p + 0) != 0) && ((*(u16 *)(p + 0x5C) & 0x80) != 0)) { - t = (s16)func_80013328((s32)arg0 + 4, (s32)p + 4); - if (t < best) { - best = t; - found = p; - } - } - } - if (found != 0) { - func_800D1724(*(s32 *)(found + 0xDC)); - } - func_80171928(arg0); -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_80180FF4); - -extern void func_80015954(s32 a0, s32 a1); -extern void func_8012F14C(s32 a0, s32 a1, s32 a2); - -s32 func_801810D0(param_1) -s32 param_1; -{ - s32 sp10[2]; - s32 p; - s32 q; - short v; - - p = *(s32 *)(param_1 + 0x204); - q = *(s32 *)(p + 0x20); - if (p != 0) { - *(u16 *)(q + 0x12) = *(u16 *)(q + 0x12) + 0x80; - func_8012F14C(q + 0x34, param_1 + 0x20C, (s32)sp10); - func_80015954((s32)sp10, param_1 + 4); - } - q = *(s32 *)(param_1 + 0x20); - *(u16 *)(q + 0x12) = *(u16 *)(q + 0x12) + 0x80; - v = *(u16 *)(param_1 + 0x208) + 0x80; - *(u16 *)(param_1 + 0x208) = v; - return v == 0x800; -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_80181164); - - - -extern s32 rand(void); -extern s32 func_800CF8B4(); -extern s32 func_8014CB8C(void); -extern s32 func_801726C4(s32 *a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern s32 func_80143C74(s32 a0, s32 a1); - -void func_80181588(s32 param_1) -{ - - extern u16 D_80126B62; - extern u16 D_80126B66; - s32 diff; - s32 obj; - s32 quotient; - s16 sVar1; - u16 uVar2; - - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) = - *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) + *(u16 *)(param_1 + 0xFC); - - obj = (s32)&D_80126B62; - /* §137 zero-byte barrier: closes the $s2<->$s3 REGALLOC-PERM. global.c:allocno_compare - * ranks pri = floor_log2(R)*R/L*1e4*size; without this, diff (R=7,L=46) = 3043 outranks - * obj (R=11,L=109) = 3027 and takes $s2. This adds ONE reference to obj (R 11->12, - * L 109->110 => 3272) with no emitted bytes, so obj wins $s2 and diff falls to $s3. */ - __asm__ __volatile__("" :: "r"(obj)); - if (*(s16 *)obj < -0x4E0) { - diff = (s32)(s16)D_80126B66 - *(s16 *)(param_1 + 0xE); - if (diff < 0x140) { - uVar2 = *(u16 *)(param_1 + 0xFC) - 0x10; - *(u16 *)(param_1 + 0xFC) = uVar2; - if ((s16)uVar2 < 0) { - *(u16 *)(param_1 + 0xFC) = 0; - } - } else { - sVar1 = *(u16 *)(param_1 + 0xFC) + 0x10; - *(u16 *)(param_1 + 0xFC) = sVar1; - if (sVar1 > 0x300) { - *(u16 *)(param_1 + 0xFC) = 0x300; - } - if ((diff < 0x900) && (func_800CF8B4() != 0) && (func_8014CB8C() == 0)) { - quotient = (*(s16 *)(param_1 + 0xFC) * 0xD) / 0x300; - quotient = (quotient * (0x900 - diff)) / 0x900; - if (func_801726C4((s32 *)(obj - 0xA)) != 0) { - quotient = quotient * 2; - } - D_80126B66 = D_80126B66 + quotient; - func_8002D4C8(0x978, ((quotient * 0x7F / 0xD) | 0x1000) & 0xFFFF); - *(u16 *)(param_1 + 0xFE) = 1; - } - } - } else { - sVar1 = *(u16 *)(param_1 + 0xFC) + 0x10; - *(u16 *)(param_1 + 0xFC) = sVar1; - if (sVar1 > 0x300) { - *(u16 *)(param_1 + 0xFC) = 0x300; - } - } - - if (*(s32 *)(param_1 + 0x1C) != 0) { - *(s32 *)(param_1 + 0x1C) = *(s32 *)(param_1 + 0x1C) - 1; - } else { - if (*(s16 *)(param_1 + 0xFC) > 0x40) { - *(s32 *)(param_1 + 0x1C) = 3; - obj = func_80143C74(param_1, 0); - if (obj != 0) { - *(s16 *)(obj + 6) = rand() % 0x120 - 0xE0; - *(u16 *)(obj + 0xA) = -(rand() & 0x3F) - 0x502; - diff = rand() % 0x560 + 0x140; - *(u16 *)(obj + 0xE) = *(u16 *)(obj + 0xE) + diff; - quotient = (*(s16 *)(param_1 + 0xFC) * 0xD) / 0x300; - quotient = (quotient * (0x800 - diff)) / 0x800; - *(s16 *)(obj + 0x1A) = quotient * 2; - *(s32 *)(obj + 0x48) = -((rand() & 0x1FF) << 7); - } - } - } - - if (*(s16 *)(param_1 + 0xFE) == 2) { - *(u16 *)(param_1 + 0xFE) = 0; - func_8002D4C8(4, 0x978); - } - if (*(s16 *)(param_1 + 0xFE) == 1) { - *(u16 *)(param_1 + 0xFE) = 2; - } -} - - - -extern void (*D_801B4D2C[])(void); - -void func_801818FC(void *a0) { - D_801B4D2C[*(u16 *)((s32)a0 + 0x2)](); -} - - - - -extern s32 func_8012C354(s32 a0, s32 a1); -extern void func_8001C214(s32 a0, s32 a1); -extern void func_8012A828(s32, void*); -extern void func_8012B23C(void *a0); - - -void func_80181938(void *a0) { - - extern u8 D_801B4D44[]; - extern s32 D_801B4D78[]; - extern u8 D_80182184[]; - if (func_8012C354((s32)a0, (s32)D_801B4D44) != 0) { - u16 v1 = *(u16 *)((s32)a0 + 0x70); - - if (v1 & 0x10) { - u16 v0 = v1 & ~0x10; - *(u16 *)((s32)a0 + 0x70) = v0; - func_8001C214(*(s32 *)((s32)a0 + 0x20), D_801B4D78[(s16)v0]); - *(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x4) |= 0x60000040; - } else { - func_8001C214(*(s32 *)((s32)a0 + 0x20), D_801B4D78[(s16)v1]); - } - - if (*(s16 *)((s32)a0 + 0x70) == 8 || *(s16 *)((s32)a0 + 0x70) == 0xA) { - *(s16 *)((s32)a0 + 0x34) = 3; - *(u16 *)((s32)a0 + 0x5C) = 0x8800; - } - if (*(s16 *)((s32)a0 + 0x70) == 9) { - *(s16 *)((s32)a0 + 0x34) = 2; - *(u16 *)((s32)a0 + 0x5C) = 0x8800; - } - if (*(s16 *)((s32)a0 + 0x70) == 0xB) { - *(s16 *)((s32)a0 + 0x34) = 4; - } - - *(u8 *)((s32)a0 + 0xC0) = 1; - *(s32 *)((s32)a0 + 0xB4) = -1; - *(u8 *)((s32)a0 + 0x75) = 8; - ((void (*)(s32 *, s32))func_8012A828)((s32 *)a0, (s32)D_80182184); - - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - func_8012B23C(a0); - *(s16 *)((s32)a0 + 0xAE) = -1; - } -} - - -INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017C8D0", func_80181A80); - - -extern void (*D_801B4DA8[])(void); - -void func_80181C30(void *a0) { - D_801B4DA8[*(u16 *)((s32)a0 + 0x2)](); -} - - - -extern void (*D_801B4DE4[])(void); - -void func_80181C6C(void *a0) { - D_801B4DE4[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 func_8012C354(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); - -void func_80181CA8(void *a0) { - - extern u8 D_801B4CF8[]; - extern u8 D_80182184[]; - - if (func_8012C354((s32)a0, (s32)D_801B4CF8) != 0) { - *(u8 *)((s32)a0 + 0xC0) = 1; - *(s16 *)((s32)a0 + 0xAE) = -1; - func_8012A828(a0, D_80182184); - - *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; - *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) = - *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) | 0x10; - *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x18) = 0xE00; - *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x1A) = 0xE00; - *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x1C) = 0xE00; - *(u16 *)((s32)a0 + 0xFC) = 0x300; - *(u8 *)((s32)a0 + 0x75) = 8; - } -} - - -extern s32 func_8012C354(s32 a0, s32 a1); -extern void func_8012A828(s32 a0, void *a1); - -void func_80181D50(void *a0) { - - extern u8 D_801B4DB0[]; - extern u8 D_80182184[]; - - if (func_8012C354((s32)a0, (s32)D_801B4DB0) != 0) { - *(u8 *)((s32)a0 + 0xC0) = 1; - func_8012A828(a0, D_80182184); - *(u16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; - *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) = - *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) | 0x10; - *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x18) = 0xAAA; - *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x1C) = 0xAAA; - } -} - - -extern void func_80181164(void); - void func_80181DD4(s32 arg0) { - s32 temp_v0; - func_80181164(); - temp_v0 = *(s32 *)(arg0 + 0x1c) + 1; - *(s32 *)(arg0 + 0x1c) = temp_v0; - } - - - - diff --git a/src/ov_SC02_005/.cdecl_func_80185858.c b/src/ov_SC06_030/ov_SC06_030_jr_8017F65C.c similarity index 55% rename from src/ov_SC02_005/.cdecl_func_80185858.c rename to src/ov_SC06_030/ov_SC06_030_jr_8017F65C.c index b30b3a3b52..3aa156a2c7 100644 --- a/src/ov_SC02_005/.cdecl_func_80185858.c +++ b/src/ov_SC06_030/ov_SC06_030_jr_8017F65C.c @@ -1,34 +1,6 @@ #include "common.h" #include "../shared/engine_core.h" -/* HOISTED (P31 S54): these three typedefs were defined further down the file, BELOW the - * INCLUDE_ASM lines of stubs that need them. harvest_verify strips a draft's own copy of any - * typedef the TU already provides, which left the name undefined at the earlier insertion - * point (pregate_check: TYPEDEF-USED-ABOVE-DEFINITION). Typedefs emit no code, so moving them - * to the top is byte-neutral -- proven by the gate, not asserted. */ -typedef struct { - s16 f0; - s16 f2; - s16 f4; - s16 f6; -} D_80195AF6_t; - -typedef struct { - u8 pad[4]; - s32 field_4; -} SubStruct; - -typedef struct { - u8 pad_00[0x20]; - SubStruct *f_20; - u8 pad_24[0xA8]; - void *f_CC; - void *f_D0; - void *f_D4; - u8 pad_D8[0x10]; - s32 f_E8; -} MainStruct; - /* ==== Phase-26 §8b carried decl layer (jr_isolate_all.py) =================== * The file-scope decl environment from earlier code regions of this object — @@ -42,15 +14,9 @@ typedef struct { u8 pad[7]; /* -> 0x40 */ } Prim_8016E7C8; typedef void (*Handler)(struct Entry_8016E95C *); -typedef struct { u32 w0, w1, w2; } PrimCF90; -typedef struct { u8 *vtx; u32 f4; u32 xx, yy, zz; PrimCF90 *prim, *end; } CellCF90; -typedef struct { s16 vx, vy; } DVEC2_CF90; -typedef struct { s16 vx, vy, vz, pad; } SVEC2_CF90; -typedef struct { s16 m[3][3]; s32 t[3]; } MTX_CF90; -typedef struct { u32 tag, rgbc; s16 x0, y0, x1, y1, x2, y2; } PF3_CF90; -typedef struct { u32 tag, rgbc; s16 x0, y0, x1, y1, x2, y2, x3, y3; } PF4_CF90; -typedef struct { u32 tag, rgbc; s16 x0, y0; u32 uvc0; s16 x1, y1; u32 uvp1; s16 x2, y2; u16 uv2, p2; } PFT3_CF90; -typedef struct { u32 tag, rgbc; s16 x0, y0; u32 uvc0; s16 x1, y1; u32 uvp1; s16 x2, y2; u16 uv2, p2; s16 x3, y3; u16 uv3, p3; } PFT4_CF90; +typedef struct { + s16 v[4]; +} Blk8_80126940_8017DB94; extern void func_801458E0(void); extern s32 D_800AE6AC; extern s32 D_800AE6B0; @@ -60,19 +26,19 @@ extern void func_800D185C(u8 *a0); extern void func_801458E8(void); extern s32 func_80029504(void); extern void func_80145B24(void); -extern u8 D_80192E18; -extern u8 D_80192D88; -extern u8 D_80192D64; -extern u8 D_80192D40; -extern u8 D_80192DF4; -extern u8 D_80192DD0; -extern u8 D_80192DAC; -extern u8 D_80192D1C; +extern u8 D_80184390; +extern u8 D_80184300; +extern u8 D_801842DC; +extern u8 D_801842B8; +extern u8 D_8018436C; +extern u8 D_80184348; +extern u8 D_80184324; +extern u8 D_80184294; extern void func_80145934(void); -extern u8 D_80192EA8; -extern u8 D_80192E84; -extern u8 D_80192E60; -extern u8 D_80192E3C; +extern u8 D_80184420; +extern u8 D_801843FC; +extern u8 D_801843D8; +extern u8 D_801843B4; extern void func_80145A2C(void); extern s32 func_800291DC(s32); extern void func_800291C8(s32, s32); @@ -94,11 +60,11 @@ extern void func_80145C54(void); extern s32 func_80145CEC(); extern s32 func_80029178(s32 arg); extern void func_80146014(s32 a0); -extern unsigned char D_801922A0[]; -extern unsigned char D_801922D0[]; -extern unsigned char D_80192320[]; -extern unsigned char D_80192350[]; -extern unsigned char D_80192380[]; +extern unsigned char D_80183818[]; +extern unsigned char D_80183848[]; +extern unsigned char D_80183898[]; +extern unsigned char D_801838C8[]; +extern unsigned char D_801838F8[]; extern void func_80145EE8(s32 param_1); extern void MoveImage(void *a0, s32 a1, s32 a2); extern void func_80146074(void); @@ -147,7 +113,7 @@ extern void func_8014A71C(s32 a0); extern void func_80172588(s32 *a0); extern void func_801473DC(s32 *a0); extern void func_80015978(s32 a0, s32 *a1); -extern void (*D_801923D0[])(void *); +extern void (*D_80183948[])(void *); extern u8 D_80126BA4; extern s32 D_80127098; extern s32 D_80127094; @@ -414,10 +380,11 @@ extern s32 func_80149D10(s32 a0); extern s32 func_80149E94(s32 a0); extern s32 func_80149DD8(s32 a0); extern s32 func_80149D9C(s32 a0); +extern u8 D_801202A0[]; extern s32 func_80149F2C(s32 a0, s32 a1); extern s32 func_80149E94(s32 arg0); extern void func_80149FA8(void); -extern s32 D_80192498[]; +extern s32 D_80183A10[]; extern u8 D_80078E78[]; extern s32 func_80149FB0(s32 a0); extern s32 func_80135260(s32 arg0, s32 arg1, s16 *arg2, s16 *arg3); @@ -546,7 +513,7 @@ extern s32 func_8014C0C8(s32 a0_unused, s32 a1, s32 a2); extern s32 func_8014C118(void * a0, s32 a1, s32 a2); extern s32 func_8014C168(s32 * param_1, s32 param_2); extern void func_8014C1C8(s32 arg0, s32 arg1, void *arg2); -extern u8 D_80192520[]; +extern u8 D_80183A98[]; extern void func_8014C1A0(s32 arg0, s32 arg1); extern s32 func_80013328(s32 a0, s32 a1); extern s32 func_8014C59C(void *a0, void *a1); @@ -556,7 +523,7 @@ extern s32 func_8014C3A4(void *a0, s32 a1, s32 a2, s32 a3); extern s32 func_8014C3D0(void *a0, s32 a1, s32 a2, s32 a3); extern s32 func_8014C43C(void * a0, s32 a1, s32 a2, s32 a3, s16 a4); extern s32 ratan2(s32 dx, s32 dy); -extern u8 D_80192528; +extern u8 D_80183AA0; extern s32 func_8014C5FC(s32 a0, s32 a1, void *a2); extern s16 func_8014C5D0(s32 a0, s32 a1); extern s32 func_8014C5FC(s32 a0, s32 a1, void * a2); @@ -650,7 +617,7 @@ extern u8 D_80126720[]; extern s16 D_80126724; extern s32 func_8014EA4C(void * a0, void * a1, void * a2, s32 _arg3); extern s32 func_8014ED80(struct SubED80 *a0); -extern int D_801E3128; +extern int D_801B8C90; extern void func_8014ED28(s32 _arg0); extern s32 func_8014EE14(s32 a0, s16 *a1, s16 *a2); extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2); @@ -667,7 +634,7 @@ extern u8 D_801152A8[]; extern s32 D_801152BC; extern int func_8014F74C(s32 arg0); extern s32 func_8014FA70(s32 a0); -extern s32 D_801E312C; +extern s32 D_801B8C94; extern void func_8014FA04(s32 a0); extern s32 func_8014FBC0(); extern s32 func_8014FC18(u8 *self); @@ -692,9 +659,10 @@ extern void func_8015086C(int param_1); extern s32 func_801508B4(s32 a0); extern s32 func_8015094C(s32 a0); extern short func_801508F8(s32 a0); -extern s32 D_80192558; +extern s32 D_80183AD0; extern s32 D_80126990; extern s32 D_80126994; +extern u8 D_80126948[]; extern s32 func_80021174(s32 a0, s32 a1); extern s32 func_8015094C(s32 param_1); extern void func_80150B9C(void); @@ -788,7 +756,7 @@ extern void func_8015BDD0(s32 *a0); extern void func_80165718(s32 a0); extern u8 D_800D46E4[]; extern void func_80151AE4(s32 arg0); -extern void (*D_80192600[])(void); +extern void (*D_80183B78[])(void); extern void func_80151D24(void *a0); extern void func_80151DB0(s32 a0); extern void func_80151D60(void *a0); @@ -801,13 +769,13 @@ extern void func_80151FB4(s32 a0); extern void func_80151F38(s32 *a0); extern void func_801553C0(s32 a0); extern void func_80153C18(); -extern void (*D_80192624[])(void); +extern void (*D_80183B9C[])(void); extern void func_80152058(void *a0); extern void func_801520DC(s32 a0); extern void func_80152094(s32 a0); extern void func_80147324(s32 a0); extern u8 D_80062C04[]; -extern M2C_UNK D_80192614; +extern M2C_UNK D_80183B8C; extern void func_801520DC(s32 arg0); extern void func_801470B4(s32 a0); extern void func_8015369C(s32 a0); @@ -817,50 +785,50 @@ extern void func_8015220C(s32 a0); extern s32 func_80153800(s32 a0); extern void func_801522CC(s32 a0); extern void func_80152254(s32 *a0); -extern void (*D_80192638[])(void); +extern void (*D_80183BB0[])(void); extern void func_80152370(void *a0); extern void func_801523F4(s32 a0); extern void func_801523AC(s32 a0); extern void func_8001382C(s32 a0, void *a1, void *a2); -extern u8 D_80192644[]; +extern u8 D_80183BBC[]; extern void func_801523F4(s32 arg0); extern void func_801525F4(int); extern s32 func_801535F4(void *arg0); extern void func_8015BF48(s32 *a0); extern void func_80152500(int param_1); extern void func_801525F4(s32 a0); -extern void (*D_80192654[])(void); +extern void (*D_80183BCC[])(void); extern void func_80152698(void *a0); extern void func_80152714(s32 a0); extern void func_801526D4(s32 a0); extern void func_80152790(s32 a0); -extern void (*D_8019266C[])(void); +extern void (*D_80183BE4[])(void); extern void func_8015282C(void *a0); extern void func_801528B0(s32 a0); extern void func_80152868(s32 a0); -extern M2C_UNK D_8019265C; +extern M2C_UNK D_80183BD4; extern void func_801528B0(s32 arg0); extern void func_8015294C(s32 a0); extern void func_80152A08(s32 a0); extern void func_80152AC8(s32 a0); extern void func_80152A50(s32 *a0); -extern void (*D_80192680[])(void); +extern void (*D_80183BF8[])(void); extern void func_80152B6C(void *a0); extern void func_80152BF0(s32 a0); extern void func_80152BA8(s32 a0); extern void func_80152C80(s32 *a0); extern void func_80152C40(s32 *a0); -extern void (*D_8019269C[])(void); +extern void (*D_80183C14[])(void); extern void func_80152D24(void *a0); extern void func_80152DA8(s32 a0); extern void func_80152D60(s32 a0); -extern M2C_UNK D_8019268C; +extern M2C_UNK D_80183C04; extern void func_80152DA8(s32 arg0); extern void func_80152E4C(s32 a0); extern void func_80152EFC(s32 a0); extern void func_80152FBC(s32 a0); extern void func_80152F44(s32 *a0); -extern void (*D_801926B0[])(void); +extern void (*D_80183C28[])(void); extern void func_80153060(void *a0); extern void func_801530E4(s32 a0); extern void func_8015309C(s32 a0); @@ -870,7 +838,7 @@ extern void func_80153150(struct S80153150 *a0); extern void func_801531BC(s32 a0); extern void func_8015327C(s32 a0); extern void func_80153204(s32 *a0); -extern void (*D_801926C4[])(void); +extern void (*D_80183C3C[])(void); extern void func_80153320(void *a0); extern void func_801533A4(s32 a0); extern void func_8015335C(s32 a0); @@ -899,12 +867,12 @@ extern s32 D_80115210; extern void func_80153C8C(void); extern void func_80153C9C(void); extern s32 func_80153CBC(void); -extern s32 D_801926D8; -extern void (*D_80192700[])(void *a0); +extern s32 D_80183C50; +extern void (*D_80183C78[])(void *a0); extern void func_80153CCC(S80153CCC *a0); extern void func_80153D7C(s32 a0); extern void func_80153D34(s32 a0); -extern u8 D_801926E0; +extern u8 D_80183C58; extern void func_80153D7C(s32 param_1); extern void func_8015410C(void); extern void func_80153E00(s32 param_1); @@ -944,18 +912,17 @@ extern void func_80155344(s32 a0); extern s32 func_80155394(s32 *a0); extern void func_801553A8(s32 *a0); extern s32 func_80029178(s32); -extern int (*D_8019274C[])(void); +extern int (*D_80183CC4[])(void); extern s32 func_80155458(s32 param_1); extern s32 func_801659DC(u8 *a0); extern s32 func_801554B8(void *arg0); extern void func_801555F4(void *a0); extern void func_80155518(s32 *a0); extern void func_80155580(void *a0); -extern void (*D_80192750[])(void); +extern void (*D_80183CC8[])(void); extern s32 func_80161104(void); extern void func_801555F4(void *); extern void func_801555BC(void *a0); -extern s32 func_80155800(s32 arg0); extern int func_80155A44(int param_1); extern int func_80161208(); extern u8 D_800D4DA8[]; @@ -1002,7 +969,7 @@ extern void func_801567BC(s32 a0); extern u8 D_80126730[]; extern void func_80156848(s32 param_1, s32 param_2); extern unsigned char D_8011520C[]; -extern unsigned short D_80192BB4[]; +extern unsigned short D_8018412C[]; extern void func_80156A1C(s32 param_1, s32 param_2); extern s32 D_801150E0[]; extern void func_80156A88(s32 a0, s32 a1); @@ -1015,7 +982,7 @@ extern u32 func_801571C4(s32 a0, u16 a1, u16 a2, s32 a3, s32 a4, s32 a5, s32 a6, extern void func_801575E4(void *a0); extern void func_801574DC(s32 *a0); extern void func_80157544(void *a0); -extern void (*D_80192BC4[])(void); +extern void (*D_8018413C[])(void); extern void func_8014CC28(s32 a0); /* defined */ extern s32 func_8014F3E8(s32 a0); /* declared */ extern void func_8015BDD0(s32 *a0); /* defined */ @@ -1026,16 +993,16 @@ extern void func_801576A8(void *arg0); extern s32 func_8015773C(u8 *a0); extern s32 func_8015771C(u8 *a0); extern s32 func_8015773C(u8 * arg0); -extern int D_801E3160; +extern int D_801B8CC8; extern void func_801578C0(s32 a0); extern void func_80157788(int param_1); extern void func_801577C8(s32 arg0); -extern void (*D_80192BEC[])(void); +extern void (*D_80184164[])(void); extern void func_80157808(void *param_1); extern void func_80157880(s32 a0); extern s32 func_801725A4(u8 *a0); extern u8 D_800D5128; -extern u8 D_80192BCC; +extern u8 D_80184144; extern void func_801578C0(s32 param_1); extern void func_80147A84(int); extern void func_80148038(int, int); @@ -1045,7 +1012,7 @@ extern void func_80161450(void *a0); extern void func_80157A8C(int); extern void func_80154A74(int, int); extern unsigned char D_800D5178; -extern unsigned char D_80192BDC; +extern unsigned char D_80184154; extern void func_8015795C(int param_1); extern void func_80161D20(s32 a0, s32 a1); extern void func_80157A8C(s32 a0); @@ -1060,24 +1027,24 @@ extern void func_80157CCC(s32 a0); extern void func_80157DC4(void *a0); extern void func_80157FC4(void *a0); extern void func_80157D74(u16 *a0); -extern void (*D_80192C2C[])(void); +extern void (*D_801841A4[])(void); extern void func_80157E38(void *); extern void func_80157E00(void *a0); extern void func_80157E38(void * a0); extern s32 func_80157F64(s32 *a0); extern s32 func_80156600(void *a0); extern void func_80157EA4(void *a0); -extern void (*D_80192C34[])(void); +extern void (*D_801841AC[])(void); extern void func_80158038(void *); extern void func_80158000(void *a0); extern s32 D_800D51E0; -extern s32 D_80192C00; +extern s32 D_80184178; extern void func_80158038(void * param); extern u8 D_800D524C[]; extern void func_80161418(void *a0); extern void func_801580B4(s32 a0); extern void func_801581AC(s32 a0); -extern void (*D_80192C40[])(void); +extern void (*D_801841B8[])(void); extern void func_8015824C(void *a0); extern void func_801582C0(void *); extern void func_80158288(void *a0); @@ -1088,19 +1055,19 @@ extern s32 func_801585AC(s32 *a0); extern u8 D_800D52E8[]; extern void func_80158344(s32 *a0); extern s32 func_801615C4(void *a0, s32 a1); -extern u8 D_80192C10; +extern u8 D_80184188; extern u8 D_800D533C; extern void func_80158434(s32 param_1); extern void func_80158548(s32 param_1); extern void func_801585EC(u8 *a0); extern void func_80158794(void); -extern s32 D_801E3168; -extern s32 D_801E3174; -extern s32 D_801E3178; +extern s32 D_801B8CD0; +extern s32 D_801B8CDC; +extern s32 D_801B8CE0; extern void func_80158880(s32 *param); extern void func_8015879C(s32 param_1); extern void func_80158814(void *arg0); -extern void (*D_80192C7C[])(s32 *); +extern void (*D_801841F4[])(s32 *); extern void func_80158AE4(void *a0); extern void func_80158AB4(void *a0); extern void func_8016F264(void); @@ -1117,7 +1084,7 @@ extern s32 func_80159434(s32 a0, s32 a1); extern void func_80158D60(s32 a0); extern M2C_UNK D_800D5904; extern void func_80158E24(s32 *a0); -extern s32 D_80192C50[]; +extern s32 D_801841C8[]; extern int rand(void); extern s32 func_8013767C(s32 a0); extern void func_80158F00(int param_1); @@ -1141,10 +1108,10 @@ extern u8 D_80110D0C[]; extern void func_80159120(s32 a0); extern void func_801592CC(s32 *a0); extern u8 D_800AE6BD; -extern s32 D_801E3170; +extern s32 D_801B8CD8; extern void func_8015934C(void *arg0); extern void func_801593E4(A801593E4 *a0); -extern void (*D_80192ECC[])(void); +extern void (*D_80184444[])(void); extern void func_80159698(void *a0); extern s32 func_801596D4(void *a0); extern void func_80174B6C(void); @@ -1158,7 +1125,7 @@ extern s16 D_800B9AAC[]; extern s16 D_800B9B00; extern u16 D_801270C0; extern u32 D_800AFAE8[]; -extern char D_80192CEC[]; +extern char D_80184264[]; extern s32 func_801596F0(s32 param_1); extern s32 func_80159874(void); extern void func_800167B8(s32 a0); @@ -1167,7 +1134,7 @@ extern int func_800167F0(int arg); extern int func_801598BC(void); extern void func_80159968(void *a0); extern void func_801598E0(u8 *a0); -extern void (*D_80192F70[])(void); +extern void (*D_801844E8[])(void); extern void func_80159A20(void *a0); extern void func_801599E0(void *a0); extern void func_80159A18(void); @@ -1175,19 +1142,19 @@ extern void func_80159BE4(s32); extern void func_80159B08(s32 *a0); extern void func_80159B70(void *a0); extern void func_80159B3C(void * a0); -extern void (*D_801930C4[])(void); +extern void (*D_8018463C[])(void); extern void func_80159BAC(s32 a0); extern s32 func_80172590(u8 *a0); -extern unsigned char D_80192EE0; +extern unsigned char D_80184458; extern void func_80159BE4(s32 arg0); extern void func_8015A1C8(s32 a0); extern void func_8015A2D8(s32); extern void func_8015A1FC(s32 *a0); extern void func_8015A264(void *a0); extern void func_8015A230(s32 *a0); -extern void (*D_801930CC[])(void); +extern void (*D_80184644[])(void); extern void func_8015A2A0(s32 a0); -extern int D_80192EF0; +extern int D_80184468; extern s32 func_80172608(u8 *a0); extern void func_8015A2D8(s32 param_1); extern u8 D_800D48DC; @@ -1195,14 +1162,14 @@ extern s32 func_8015AB7C(s32 a0); extern s32 D_8011F9C4; extern s32 func_8015ABD4(s32 a0, s32 a1, s32 a2); extern s32 func_80161CD0(s32 a0, s32 a1); -extern M2C_UNK D_80192F10; +extern M2C_UNK D_80184488; extern void func_8015AC48(s32 arg0); extern void func_8015AC90(s32 a0); extern void func_8015ADB0(s32 a0); extern void func_8015ACC4(s32 *arg0); extern void func_8015AD3C(void *a0); extern void func_8015AD08(void *arg0); -extern void (*D_801930D4[])(void); +extern void (*D_8018464C[])(void); extern void func_8015ADB0(s32); extern void func_8015AD78(s32 a0); extern void func_8015ADB0(s32 arg0); @@ -1231,7 +1198,7 @@ extern void func_8015BFF4(void *a0); extern void func_8015BF7C(s32 *a0); extern void func_8015C030(s32 *a0, s32 a1); extern void func_8015BFB0(s32 *a0, s32 a1); -extern void (*D_801930FC[])(void); +extern void (*D_80184674[])(void); extern void func_8015C0C4(s32); extern void func_8015C08C(s32 a0); extern s32 func_8015C128(s32 param_1); @@ -1240,7 +1207,7 @@ extern void func_8015C788(s32 a0); extern void func_8015C6AC(s32 *a0); extern void func_8015C714(void *a0); extern void func_8015C6E0(s32 *a0); -extern void (*D_80193108[])(void); +extern void (*D_80184680[])(void); extern void func_8015C788(s32); extern void func_8015C750(s32 a0); extern void func_8015CB94(s32 a0); @@ -1267,12 +1234,12 @@ extern void func_8015CFC0(s32 *a0); extern void func_8015CF8C(s32 *a0); extern void func_8015CFFC(void); extern void func_8015D01C(int param_1); -extern void (*D_80192F7C[])(void *); +extern void (*D_801844F4[])(void *); extern s32 func_801725F4(u8 *a0); extern void func_8015D104(void *arg0); -extern s32 D_801931AC; +extern s32 D_80184724; extern void func_8015D380(s32 a0); -extern unsigned char D_80192290[]; +extern unsigned char D_80183808[]; extern void func_8015D414(int param_1); extern void func_8015D57C(s32); extern void func_8015D480(s32 *a0); @@ -1286,7 +1253,7 @@ extern s32 func_80161B18(void *a0); extern s32 func_80161B84(void *a0); extern void func_80154150(int, int); extern void func_80149374(int, int); -extern unsigned char D_801931C0[]; +extern unsigned char D_80184738[]; extern void func_8015D5E8(int param_1); extern int func_8015E0D4(int); extern void func_8015DA5C(s32 a0); @@ -1300,7 +1267,7 @@ extern void func_8014BD60(s32 a0, s32 a1); extern int func_8015DD74(int); extern void func_8015DBD4(void *arg0); extern int func_8015DC84(int a0); -extern s8 D_801931FC[]; +extern s8 D_80184774[]; extern void func_8015DCB8(s32 param_1); extern int func_8015DD74(int arg0); extern void func_8015DECC(s32 a0); @@ -1327,14 +1294,14 @@ extern void func_8015E40C(s32 a0); extern void func_8015E588(void); extern void func_8015E4B0(s32 a0); extern void func_8015E288(s32 a0); -extern u16 D_80193244; -extern u16 D_80193246; -extern u16 D_80193248; -extern s32 D_8019324C; +extern u16 D_801847BC; +extern u16 D_801847BE; +extern u16 D_801847C0; +extern s32 D_801847C4; extern void func_80013E94(void *a0, void *a1); extern void func_8015E4B0(s32 param_1); extern void func_8013C9C4(void *a0); -extern s32 D_80193254; +extern s32 D_801847CC; extern void func_8015E5B0(u8 *self); extern void func_8015E714(s32 *a0); extern void func_8015E95C(s32); @@ -1353,11 +1320,9 @@ extern s32 func_8015EE08(s32 a0); extern void func_8015EDD4(s32 *arg0); extern void func_8015EE44(s32 a0); extern int D_800D4C48; -extern int D_80192F60; +extern int D_801844D8; extern void func_8015EE7C(s32 param_1); -extern void func_80159B70(void*); -extern void (*D_80192F7C[])(void*); -extern void func_8015EEE0(void* arg0); +extern void func_8015EEE0(void *arg0); extern void func_8015EF9C(void); extern void func_8015F080(s32); extern void func_8015EFA4(s32 *a0); @@ -1397,7 +1362,7 @@ extern s32 func_801612B8(void *a0, s32 a1); extern void func_8016007C(s32 a0); extern void func_8015FAE8(void *arg0); extern void func_8015FCC8(void *param_1); -extern unsigned int D_801932D8[]; +extern unsigned int D_80184850[]; extern void func_8015FD74(int param_1); extern s32 func_80028DE0(void); extern u8 func_80165700(s32 a0, s32 a1); @@ -1442,7 +1407,7 @@ extern void func_80160F00(); extern void func_80160E3C(s32 *a0); extern void func_80160EA4(); extern void func_80160E70(s32 *a0); -extern void (*D_80193388[])(void); +extern void (*D_80184900[])(void); extern void func_80160EA4(void *a0); extern void func_80160EE0(void); extern void func_80160F00(void* arg0); @@ -1475,26 +1440,26 @@ extern s32 func_80161A00(s32 a0); extern s32 func_80161A30(s32 a0); extern int func_801497A8(void); extern int func_80161BE0(void *param_1); -extern u16 D_801933B8[]; +extern u16 D_80184930[]; extern void func_80161C98(int param_1, u32 param_2); extern void func_80161E08(s32); extern s32 func_80162438(s32); extern s32 D_800AE6A8; extern void func_800D1734(void *); -extern s32 D_8019341C; +extern s32 D_80184994; extern void func_80161D88(void); extern void func_80161E08(s32 param_1); extern int func_800291DC(int); extern int func_800D0E30(void *a0); extern int func_801620C4(void); extern s32 func_800D0D7C(s32, s32); -extern int D_801E3180[]; +extern int D_801B8CE8[]; extern void func_8016216C(void); extern u8 D_80078EB0; extern u8 D_80078EB1; extern s32 func_801621CC(s32 arg0); extern void func_801622C4(void); -extern void (*D_80193440[])(void); +extern void (*D_801849B8[])(void); extern void func_80162330(void *a0); extern void func_8014706C(void *a0); extern s32 func_8016236C(u8 *a0); @@ -1505,16 +1470,16 @@ extern s32 func_80162414(void); extern s32 func_80162438(s32 _unused0); extern int func_801626B8(void); extern void func_80162714(void); -extern int D_801E31D8[]; +extern int D_801B8D40[]; extern void func_80162760(void); extern void func_801627C0(void); -extern void (*D_80193488[])(void); +extern void (*D_80184A00[])(void); extern void func_80162834(void *a0); extern void func_8001CB6C(u8 *a0, s32 a1, s32 a2, s32 a3); extern void func_80162968(s32 a0); extern s32 func_80162ACC(u8 *a0); extern u8 D_800B5CB8; -extern s32 D_80193478; +extern s32 D_801849F0; extern s32 D_800B5CBC; extern u8 D_800B5CDF; extern s32 D_800B5CEC; @@ -1552,7 +1517,7 @@ extern s32 func_801633A8(void); extern s32 func_80163408(s32 param_1, s32 param_2, s32 param_3, s32 param_4); extern void func_80163534(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, u16 * a5); extern void func_8016345C(s32 a0, u16 a1, s32 a2, u16 a3, s32 a4); -extern char D_801E26F8[8]; +extern char D_801B8418[8]; extern void *memcpy(void *dst, const void *src, unsigned int n); extern void func_801634D8(s32 param_1, u16 param_2, u16 param_3, s32 param_4, u16 param_5); extern void func_80157158(); @@ -1562,7 +1527,7 @@ extern s32 func_8016380C(struct S8016380C *a0, s32 a1); extern void *memcpy(void *dst, void *src, s32 n); extern s32 func_801638A0(u8 *a0, s32 a1); extern s32 func_80163950(s32 a0); -extern void (*D_80193490[])(void); +extern void (*D_80184A08[])(void); extern void func_80163A58(void *a0); extern void func_80163A94(s32 param_1); extern void func_80163C2C(s32 param_1); @@ -1575,41 +1540,41 @@ extern void func_8016432C(s32 a0); extern void func_80164410(void); extern s32 func_80012DBC(s32 a0, s32 a1, s32 a2, s32 a3); extern void func_80164530(s32 arg0); -extern void (*D_801934E4[])(void); +extern void (*D_80184A5C[])(void); extern void func_80164744(s32 param_1); extern void func_8001C810(s32 a0, s32 a1); extern void func_80164A74(s32 *a0); extern void func_80164930(s32 a); extern u16 D_800DF2E0; -extern s32 D_801934AC; -extern s16 D_801934E0; -extern s16 D_801934DE; -extern s16 D_801934DC; +extern s32 D_80184A24; +extern s16 D_80184A58; +extern s16 D_80184A56; +extern s16 D_80184A54; extern void func_801647A4(int param_1); extern void func_80164ACC(); extern void func_80164864(void *a0); extern void func_80164930(s32 param_1); extern s32 func_8014C308(s32 a0, s32 a1, s32 a2, s32 a3); extern void func_80164ACC(s32 a0); -extern void (*D_801934F0[])(void); +extern void (*D_80184A68[])(void); extern void func_80164BA0(void *a0); extern void func_8001CD50(s32 a0, s32 a1); extern void func_800233CC(void *, unsigned short); extern void func_80164DD0(s32 a0); extern void func_80164DB0(void); -extern u8 D_801E3238; -extern u8 D_801E3239; -extern u8 D_801E323A; -extern u8 D_801E323B; -extern u8 D_801E323C; -extern u8 D_801E323D; -extern u8 D_801E323E; -extern u8 D_801E323F; +extern u8 D_801B8DA0; +extern u8 D_801B8DA1; +extern u8 D_801B8DA2; +extern u8 D_801B8DA3; +extern u8 D_801B8DA4; +extern u8 D_801B8DA5; +extern u8 D_801B8DA6; +extern u8 D_801B8DA7; extern void func_80164BDC(s32 param_1); extern void func_80164E40(void); extern void func_80164CD4(u8 *a0); extern void func_80164D4C(void *arg0); -extern void (*D_80193500[])(void); +extern void (*D_80184A78[])(void); extern void func_80164EA4(void *a0); extern void func_80165124(void *a0); extern void func_80164EE0(int param_1); @@ -1621,7 +1586,7 @@ extern void func_80165064(s32 *a0); extern void func_801650C4(s32 *a0); extern s32 func_80165140(s32 param_1); extern s32 func_80165240(s32 a0, s32 a1, s32 a2); -extern s32 D_801E3278; +extern s32 D_801B8DE0; extern void func_801651B8(void * param_1); extern u8 D_80126CF8; extern void func_8016533C(void); @@ -1632,18 +1597,18 @@ extern void func_80165580(s32 _arg0); extern void func_801653B8(s32 *a0); extern s32 func_80165624(s32 a0); extern u8 D_80078EC5; -extern void (*D_80193544[])(void); +extern void (*D_80184ABC[])(void); extern u8 func_80165658(s32 a0, s32 a1); extern void func_800CAE0C(s32 a0); extern void func_801654A8(s32 arg0); extern void func_80165B28(void *a0); extern void func_801655E4(s32 a0); -extern u8 D_801935C0[]; -extern s32 D_801935E0[]; -extern u8 D_8019365C[]; +extern u8 D_80184B38[]; +extern s32 D_80184B58[]; +extern u8 D_80184BD4[]; extern u8 func_801656D0(s32 a0, s32 a1); -extern u8 D_8019367C[]; -extern u8 D_8019369C[]; +extern u8 D_80184BF4[]; +extern u8 D_80184C14[]; extern void func_800CAF6C(void); extern void func_80165770(void); extern void func_801657D8(void); @@ -1675,18 +1640,18 @@ extern void func_80165A18(void); extern s32 func_80165A50(s32 _arg0); extern void func_80165AC8(void); extern void func_80165A78(s32 arg0); -extern void (*D_80193738[])(void); +extern void (*D_80184CB0[])(void); extern void func_80165B08(void); extern void func_80165B10(void); extern void func_80165B18(void); extern void func_80165B20(void); -extern void (*D_801937B4[])(void); +extern void (*D_80184D2C[])(void); extern void func_80165BB4(u8 *a0); extern void func_80165B6C(u8 *a0); extern void func_80165C58(s32 arg0); extern void func_80165BFC(void *a0); extern void func_80165C78(void); -extern M2C_UNK D_801E2708; +extern M2C_UNK D_801B8428; extern void func_80165E2C(u16 *arg0); extern s32 func_80165FA4(s32 a0, s32 a1, s32 a2); extern s32 func_80167DBC(s32 a0, s32 a1, s32 a2); @@ -1694,7 +1659,7 @@ extern s32 func_80167AE0(s32 a0, s32 a1, s32 a2); extern void func_80165E90(void); extern void func_80020F34(s32 a0, s32 a1); extern s32 func_80165FA4(s32 arg0, s32 arg1, s32 arg2); -extern void (*D_801937C0[])(void); +extern void (*D_80184D38[])(void); extern void func_80166018(void *a0); extern void func_80166054(s32 arg0); extern void func_801661CC(s32 param_1); @@ -1703,7 +1668,7 @@ extern void func_8016629C(void *a0); extern void func_801662F4(void *a0); extern void func_8016634C(void *a0); extern void func_801663A4(void *a0); -extern void (*D_801937C8[])(void); +extern void (*D_80184D40[])(void); extern void func_801663FC(void *a0); extern u8 D_800D387C[]; extern u8 D_800D3888[]; @@ -1716,28 +1681,28 @@ extern void func_80166438(u8 *a0); extern s32 func_80128ED8(s32 param_1, s32 *param_2); extern void func_800D22E4(s32 a0); extern void func_801665B4(s32 *a0); -extern void (*D_80193890[])(void); +extern void (*D_80184E08[])(void); extern void func_80166618(void *a0); -extern void (*D_801938A0[])(void); +extern void (*D_80184E18[])(void); extern void func_80166654(void *a0); extern s32 func_80166690(s32 param_1, s32 param_2); extern s32 func_80166994(); extern s32 func_80166F58(s32 param_1, s32 param_2, s32 param_3, s32 param_4); extern s32 func_80167540(s32 arg0); -extern void (*D_801938B0[])(void); +extern void (*D_80184E28[])(void); extern void func_801678B4(void *a0); extern void RotMatrixYXZ(void *a0, void *a1); extern void func_80048EAC(void *a0, void *a1); extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3); extern void func_80146C3C(void); extern void func_801678F0(s32 a0); -extern void (*D_801938BC[])(void); +extern void (*D_80184E34[])(void); extern void func_80167A9C(void *a0); extern void func_80167AD8(void); extern s32 func_80167AE0(s32 param_1, s32 param_2, s32 param_3); extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3); -extern u8 D_8019381C[]; -extern u8 D_80193830[]; +extern u8 D_80184D94[]; +extern u8 D_80184DA8[]; extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2); extern void func_800D20C0(void *a0, void *a1, s32 a2); extern void func_80017E68(void *a0, void *a1); @@ -1758,7 +1723,7 @@ extern void func_801685EC(s32 a0); extern void func_80168640(s32 a0); extern s32 RotMatrixX(s32 a0, void *a1); extern void func_80168664(void *arg0); -extern void (*D_801938D4[])(void); +extern void (*D_80184E4C[])(void); extern void func_80168744(void *a0); extern void func_80168BDC(s32 a0, s32 a1, s32 a2, s32 a3); extern void func_801687CC(s32 a0); @@ -1766,27 +1731,27 @@ extern void func_80168780(s32 a0); extern void func_80168828(void); extern void func_801687CC(s32 param_1); extern void func_80168828(); -extern void (*D_801938DC[])(void); +extern void (*D_80184E54[])(void); extern void func_801689D8(void *a0); extern void func_80168A14(s32 *a0); extern void func_80168A88(void); -extern void (*D_801938E4[])(void); +extern void (*D_80184E5C[])(void); extern void func_80168AA8(void *a0); extern void func_80168AE4(s32 a0); extern void func_800D2318(void); extern void func_80168BDC(s32 param_1, s32 param_2, s32 param_3, s32 param_4); -extern void (*D_801938EC[])(void); +extern void (*D_80184E64[])(void); extern void func_80168D58(void *a0); extern void func_80168D94(int a0); extern void func_80168F40(); extern void func_80168EC4(s32 a0); extern void func_80168F40(void *arg0); -extern void (*D_801938F4[])(void); +extern void (*D_80184E6C[])(void); extern void func_8016901C(void *a0); extern void func_80169058(s32 a0); extern s32 func_80169228(void); extern void func_801691B8(void *a0); -extern void (*D_801938FC[])(void); +extern void (*D_80184E74[])(void); extern void func_801693CC(void *a0); extern void func_80169584(s32 param_1); extern void func_80169408(s32 a0); @@ -1794,37 +1759,35 @@ extern void func_8016951C(int param_1); extern s32 func_80017758(void *a0, void *a1); extern s32 func_80017DC4(void *a0, void *a1); extern void func_801696D8(s32 a0, s32 a1); -extern void (*D_80193904[])(void); +extern void (*D_80184E7C[])(void); extern void func_80169830(void *a0); extern void func_8016986C(s32 a0); extern s32 func_80169A4C(s32 a0, s32 a1); extern void func_801699D0(void *arg0); -extern void (*D_801939B8[])(void); +extern void (*D_80184F30[])(void); extern void func_80169B80(void *a0); extern void func_80169E44(s32 a0); -extern void (*D_801939C0[])(void); +extern void (*D_80184F38[])(void); extern void func_80169F00(void *a0); -extern char D_80193970[]; -extern char D_80193930[]; +extern char D_80184EE8[]; +extern char D_80184EA8[]; extern void func_80169F3C(int param_1); extern void func_80169FE0(s32 a0); -extern void (*D_801939F8[])(void); +extern void (*D_80184F70[])(void); extern void func_8016A020(void *a0); extern void func_8016A05C(void *a0); extern void func_8016A290(s32 a, void *b, void *c); extern void func_8016A08C(s32 param_1); extern void func_8016A1CC(int param_1); extern void func_8016A290(s32 param_1, void *param_2, void *param_3); -extern void (*D_80193A04[])(void); +extern void (*D_80184F7C[])(void); extern void func_8016A700(void *a0); extern s32 func_8016A73C(s32 arg0); extern s32 func_8016A8FC(s32 a0); extern void func_8016A890(s32 arg0); extern u16 D_80126B5E; -extern u16 D_80126B62; -extern u16 D_80126B66; extern void func_8016AA50(s32 param_1, s32 param_2); -extern void (*D_80193A4C[])(void); +extern void (*D_80184FC4[])(void); extern void func_8016AB30(void *a0); extern void func_8016B234(void); extern void func_8016AFB0(s32 a0); @@ -1835,59 +1798,59 @@ extern void func_8016B3F4(s32 a0); extern s32 func_8016B428(s32 a0); extern void func_8016B984(void *a0); extern s32 func_8016B448(s32 arg0, s32 arg1); -extern void (*D_80193AC8[])(void); +extern void (*D_80185040[])(void); extern void func_8016B4BC(void *a0); extern int func_8016B9F8(int); extern int func_8016B834(int, int); extern void func_8016B91C(int); -extern int D_801E3598; +extern int D_801B9100; extern void func_8016B4F8(int param_1); extern s32 func_8016B9F8(s32 param_1); extern void func_8016B6BC(s32, s32, s32, s32); extern void func_8016B91C(s32); -extern s16 D_80193ABC[]; +extern s16 D_80185034[]; extern void func_8016B5C0(s32 param_1); extern void func_8001CD9C(int, void *); -extern int *D_80193B00[]; -extern unsigned short D_80193B08[]; -extern unsigned short D_80193B10[]; -extern unsigned char D_801E35A0[]; +extern int *D_80185078[]; +extern unsigned short D_80185080[]; +extern unsigned short D_80185088[]; +extern unsigned char D_801B9108[]; extern int func_8016B834(int param_1, int param_2); extern void func_8016B964(SrcB964 *a0, DstB964 *a1); extern void func_8016B91C(s32 arg0); -extern s32 D_801E3598; +extern s32 D_801B9100; extern s32 func_8016BA68(s32, s32); extern void func_8016BADC(void *a0, s32 a1, s32 a2); -extern void (*D_80193B18[])(void); +extern void (*D_80185090[])(void); extern void func_8016BBA4(void *a0); extern s32 func_8016BBE0(s32 param_1); extern void func_8016BFA8(s32 a0, s32 a1, s32 a2, s32 a3); -extern M2C_UNK D_801E36D4; -extern M2C_UNK D_801E36D8; +extern M2C_UNK D_801B923C; +extern M2C_UNK D_801B9240; extern void func_8016BCC0(void *arg0); extern s32 func_8016BD78(s32 param_1); extern s32 func_8016BEA0(s32 param_1); extern void func_8016BF34(void *a0); extern void func_8016BFD0(s32 a0, s32 a1, s32 a2, s32 a3, void *a4); -extern s32 D_801E3660; -extern void (*D_80193B48[])(void); +extern s32 D_801B91C8; +extern void (*D_801850C0[])(void); extern void func_8016C14C(void *a0); extern s32 func_8016C374(s32 a0, s32 a1, s32 a2, s32 a3); -extern u8 D_801E36DC[]; -extern u8 D_801E36E4[]; -extern u8 D_801E3694[]; +extern u8 D_801B9244[]; +extern u8 D_801B924C[]; +extern u8 D_801B91FC[]; extern void func_8016C2C4(s32 param); extern s32 func_8016C49C(s32 param_1_arg); extern s32 VectorNormalSS(void *a0, void *a1); extern void func_8016C74C(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); extern short func_8016CF04(s32 a0, s32 a1); extern void func_8016C83C(s32 a0); -extern void (*D_80193B50[])(void); +extern void (*D_801850C8[])(void); extern void func_8016CB84(void *a0); extern short func_8016CF04(s32 param_1, s32 param_2); -extern void (*D_80193B6C[])(void); +extern void (*D_801850E4[])(void); extern void func_8016D19C(void *a0); -extern void (*D_80193B74[])(void); +extern void (*D_801850EC[])(void); extern void func_8016D428(void *a0); extern void func_8016D464(u8 *a0); extern void func_8016D4DC(s32 a0); @@ -1899,17 +1862,17 @@ extern void func_800D20C0(); extern void func_8016D848(s32 *a0); extern void func_8016D984(s32 *a0); extern void func_8016DBD8(u8 *a0); -extern void (*D_80193BDC[])(int); +extern void (*D_80185154[])(int); extern void func_8016DA30(int param_1); extern s32 func_8001CC3C(s32 a0, s32 a1, s32 a2, s32 a3); -extern u8 D_80193B80; -extern u8 D_80193B8C; +extern u8 D_801850F8; +extern u8 D_80185104; extern void func_8016DA7C(s32 param_1); extern void func_8016DB34(s32 param_1); -extern void (*D_80193C10[])(void); +extern void (*D_80185188[])(void); extern void func_8016DEA4(void *a0); extern void func_8016DEE0(s32 a0); -extern void (*D_80193C18[])(void); +extern void (*D_80185190[])(void); extern void func_8016DF20(void *a0); extern void func_8016E3CC(s32 a0); extern void func_8016E1CC(s32 a0); @@ -1918,7 +1881,7 @@ extern void func_8016E2E8(void *a0); extern void func_8016E460(void *a0, void *a1); extern void func_8016E358(void *a0); extern void func_8016E460(void *arg0, void *arg1); -extern void (*D_80193C6C[])(void); +extern void (*D_801851E4[])(void); extern void func_8016E5B8(void *a0); extern void func_8016E5F4(s32 arg0); extern void func_8016E778(); @@ -1932,10 +1895,10 @@ extern s32 D_80115218; extern void func_8016E8F0(void); extern void func_8016E918(short param_1, short param_2); extern s32 func_8016E95C(); -extern u16 D_80193CA0[]; +extern u16 D_80185218[]; extern s32 func_8016EC0C(s32 a0, s32 a1); extern void func_8016EAC0(Wave *param_1); -extern u8 D_80193C90[]; +extern u8 D_80185208[]; extern void func_8016EB3C(s32 p); extern void func_8016EBA8(u8 *param_1); extern void func_8016ED6C(void); @@ -1975,7 +1938,7 @@ extern s32 func_8016EFC8(s32); extern s32 func_8016EFA8(s32 a0); extern void func_8016F094(s32 *a0); extern s32 func_8016F0AC(); -extern s32 D_80193CBC; +extern s32 D_80185234; extern void func_8016F250(void); extern void func_8016F288(void); extern void func_8016F2A8(void); @@ -2011,54 +1974,54 @@ extern void func_8016F610(void *a0); extern void func_8016F648(void *a0); extern void func_8016F680(void *a0); extern void func_8016F6B0(void *a0); -extern void (*D_80193D34[])(void); +extern void (*D_801852AC[])(void); extern void func_8016F6E0(void *a0); extern s32 func_80171990(u8 *a0); extern void func_8016F764(void *a0); extern void func_8016F71C(u8 *a0); -extern void (*D_80193D3C[])(void); +extern void (*D_801852B4[])(void); extern void func_8016F798(void *a0); extern void func_8016F804(void *a0); extern void func_8016F7D4(u8 *a0); extern void func_80171928(void *); -extern void (*D_80193D44[])(void); +extern void (*D_801852BC[])(void); extern void func_8016F834(void *a0); extern void func_8016F8AC(u8 *a0); extern void func_8016F870(u8 *a0); extern void func_80172358(u8 *a0, u8 *a1); -extern void (*D_80193D4C[])(void); +extern void (*D_801852C4[])(void); extern void func_8016F8E4(void *a0); extern void func_8016F95C(void *a0); extern void func_8016F920(u8 *a0); extern s32 func_80171CC4(void *a0, void *a1); extern s32 func_80171D1C(void *a0, void *a1, s32 a2); extern u16 D_8011F73E; -extern void (*D_80193D54[])(void); +extern void (*D_801852CC[])(void); extern void func_8016F9C4(void *a0); extern void func_80171B44(s32 *a0); extern void func_8016FA44(s32 a0); extern void func_8016FA00(s32 a0); extern s32 func_80171C64(s32 a0, s32 a1); -extern void (*D_80193D5C[])(void); +extern void (*D_801852D4[])(void); extern void func_8016FA84(void *a0); extern void func_8016FB10(void *a0); extern void func_8016FAC0(u8 *a0); extern void func_8016FB50(void *a0); -extern void (*D_80193D68[])(void); +extern void (*D_801852E0[])(void); extern void func_8016FB7C(void *a0); extern void func_8016FC24(); extern void func_8016FBB8(s32 a0); extern s32 func_80171B4C(s32 a0, s32 a1); extern void func_8016FC24(s32 a0); extern void func_8016FC64(void *a0); -extern void (*D_80193D74[])(void); +extern void (*D_801852EC[])(void); extern void func_8016FC90(void *a0); extern void func_8016FD08(u8 *a0); extern void func_8016FCCC(u8 *a0); extern s32 func_80172658(s32 *a0); extern void func_8016FD08(u8 *s0); extern void func_8016FD7C(s32 *a0); -extern void (*D_80193D80[])(void); +extern void (*D_801852F8[])(void); extern void func_8016FDB4(void *a0); extern void func_8016FE2C(u8 *a0); extern void func_8016FDF0(u8 *a0); @@ -2066,62 +2029,62 @@ extern void func_8016FE2C(u8 * a0); extern s32 func_8016FE78(s32 *a0); extern s32 func_80172664(s32 *a0); extern void func_8016FED0(s32 *a0); -extern void (*D_80193D90[])(void); +extern void (*D_80185308[])(void); extern void func_8016FF30(void *a0); extern void func_8016FFA8(u8 *a0); extern void func_8016FF6C(u8 *a0); -extern void (*D_80193DA0[])(void); +extern void (*D_80185318[])(void); extern void func_8016FFDC(void *a0); extern void func_80170068(u8 *a0); extern void func_80170018(u8 *a0); extern void func_801700B8(u8 *a0); extern void func_80170100(u8 *a0); -extern void (*D_80193DA8[])(void); +extern void (*D_80185320[])(void); extern void func_80170150(void *a0); extern void func_801701C8(u8 *a0); extern void func_8017018C(u8 *a0); extern void func_801701C8(u8 * a0); -extern void (*D_80193DB0[])(void); +extern void (*D_80185328[])(void); extern void func_80170240(void *a0); extern void func_801702B8(s32 a0); extern void func_8017027C(u8 *a0); extern s16 func_80171AB0(s32 a0, void *a1); -extern void (*D_80193DB8[])(void); +extern void (*D_80185330[])(void); extern void func_801702FC(void *a0); extern void func_80170374(u8 *a0); extern void func_80170338(u8 *a0); extern s32 func_8014C168(s32 *a0, s32 a1); extern void func_80170374(u8 * a0); -extern void (*D_80193DC0[])(void); +extern void (*D_80185338[])(void); extern void func_801703E0(void *a0); extern void func_8017044C(u8 *a0); extern void func_8017041C(u8 *a0); extern void func_8017044C(u8 * a0); -extern void (*D_80193DC8[])(void); +extern void (*D_80185340[])(void); extern void func_801704B0(void *a0); extern void func_8017051C(void *a0); extern void func_801704EC(u8 *a0); -extern void (*D_80193DD0[])(void); +extern void (*D_80185348[])(void); extern void func_80170548(void *a0); extern void func_801705C0(u8 *a0); extern void func_80170584(u8 *a0); extern void func_801705C0(u8 * a0); -extern void (*D_80193DD8[])(void); +extern void (*D_80185350[])(void); extern void func_801705F8(void *a0); extern void func_80170670(void *a0); extern void func_80170634(u8 *a0); extern void func_8012A568(void (*a0)(void)); -extern void (*D_80193DE0[])(void); +extern void (*D_80185358[])(void); extern void func_801706AC(void *a0); extern void func_80170718(void *a0); extern void func_801706E8(u8 *a0); extern void func_80129FF4(void); -extern void (*D_80193DE8[])(void); +extern void (*D_80185360[])(void); extern void func_80170748(void *a0); extern void func_801707D4(void *a0); extern void func_80170784(u8 *a0); extern s32 func_80174ED4(void); -extern void (*D_80193DF0[])(void); +extern void (*D_80185368[])(void); extern void func_80170810(void *a0); extern void func_801708B0(void *a0); extern u8 D_800D5DA8; @@ -2140,19 +2103,19 @@ extern void func_80170A00(void); extern void func_80170A48(void); extern u8 D_800D5DC0[]; extern void func_80170A90(void); -extern void (*D_80193DF8[])(void); +extern void (*D_80185370[])(void); extern void func_80170B14(int a0); extern void func_80170B90(u8 *a0); -extern void (*D_80193E00[])(void); +extern void (*D_80185378[])(void); extern void func_80170BD8(void *a0); extern void func_80170C44(u8 *a0); extern void func_80170C14(u8 *a0); -extern void (*D_80193E08[])(void); +extern void (*D_80185380[])(void); extern void func_80170C74(void *a0); extern s32 func_8017197C(u8 *a0); extern void func_80170CF0(void *a0); extern void func_80170CB0(u8 *a0); -extern void (*D_80193E10[])(void); +extern void (*D_80185388[])(void); extern void func_80170D68(void *a0); extern void func_80170DE0(u8 *a0); extern void func_80170DA4(u8 *a0); @@ -2160,41 +2123,41 @@ extern s32 D_8011F73C; extern s32 D_8011F740; extern void func_801718AC(void *a0); extern void func_80170DE0(u8 * _arg0); -extern void (*D_80193E18[])(void); +extern void (*D_80185390[])(void); extern void func_80170E34(void *a0); extern void func_80170EAC(u8 *a0); extern void func_80170E70(u8 *a0); extern int func_800D0F8C(int a0); extern void func_80170EAC(u8 * _arg0); -extern void (*D_80193E20[])(void); +extern void (*D_80185398[])(void); extern void func_80170EFC(void *a0); extern void func_80170F74(void *a0); extern void func_80170F38(u8 *a0); -extern void (*D_80193E28[])(void); +extern void (*D_801853A0[])(void); extern void func_80170FB0(void *a0); extern void func_80171028(void *a0); extern void func_80170FEC(u8 *a0); -extern void (*D_80193E30[])(void); +extern void (*D_801853A8[])(void); extern void func_80171064(void *a0); extern void func_801710DC(u8 *a0); extern void func_801710A0(u8 *a0); extern u16 D_8011F73A; extern void func_801710DC(u8 * arg0); -extern void (*D_80193E38[])(void); +extern void (*D_801853B0[])(void); extern void func_80171120(void *a0); extern void func_8017118C(u8 *a0); extern void func_8017115C(u8 *a0); extern void func_80142454(s32 a0); extern void func_8017118C(u8 * a0); -extern void (*D_80193E40[])(void); +extern void (*D_801853B8[])(void); extern void func_801711C0(void *a0); extern void func_80171238(void); extern void func_801711FC(u8 *param_1); -extern void (*D_80193E48[])(void); +extern void (*D_801853C0[])(void); extern void func_80171260(void *a0); extern s32 func_80012F74(s32 a0, s32 a1, s32 a2, s32 a3); extern void func_80171384(void *a0); -extern void (*D_80193E50[])(void); +extern void (*D_801853C8[])(void); extern void func_801714E4(void *a0); extern void func_8017162C(void *a0); extern void func_80171520(s32 a0); @@ -2292,7 +2255,7 @@ extern s32 D_801150F8; extern void func_80172BC8(void *a0); extern void func_80172B80(u8 *a0); extern void func_80172C48(void); -extern void (*D_80193E94[])(void); +extern void (*D_8018540C[])(void); extern void func_80172CA0(void *a0); extern void func_80172D14(u8 *a0); extern void func_80172CDC(u8 *a0); @@ -2325,7 +2288,7 @@ extern void func_80173174(void); extern u8 D_800D5AA0[]; extern void func_80173220(void *a0); extern void func_801731D8(s32 *a0); -extern M2C_UNK D_80193E58; +extern M2C_UNK D_801853D0; extern void func_80173220(void * arg0); extern void func_80173294(void); extern void func_801732C4(); @@ -2343,7 +2306,7 @@ extern void func_801734BC(s32 a0, s32 a1); extern s16 D_80126B3E; extern void func_80173460(s32 a0, s32 a1); extern void func_801734BC(s32 arg0, s32 _unused1); -extern void (*D_80193EC4[])(void); +extern void (*D_8018543C[])(void); extern void func_80173544(void *a0); extern void func_801735B8(u8 *a0); extern void func_80173580(u8 *a0); @@ -2372,7 +2335,7 @@ extern void func_80173A20(void); extern s32 D_8012750C; extern void func_80173A60(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4); extern void func_80173A28(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4, s32 a5); -extern void (*D_80193F00[])(void); +extern void (*D_80185478[])(void); extern void func_80173B4C(void *a0); extern void func_80173BC0(u8 *a0); extern void func_80173B88(u8 *a0); @@ -2443,14 +2406,22 @@ extern void func_801748C4(s32 a0); extern void func_801748E4(void); extern void func_8012A018(s32 a, s32 b); extern s32 func_8017496C(void *a0); +extern s32 D_80126954; extern s32 D_80126950; +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 void func_801748EC(void); extern s32 func_801749C8(); extern s32 func_801749A8(s32 a0); extern void func_80174BBC(void *a0); extern void func_8012A0E0(void); extern void func_80174BF4(void *a0); -extern void (*D_80193F58[])(); +extern void (*D_801854D0[])(); extern void func_80174BF4(void * arg0); extern s32 func_80174CB0(s32, s32); extern s32 func_80174C60(s32 a0); @@ -2468,12 +2439,12 @@ extern void func_80175184(s32 *a0); extern void func_80175114(s32 *a0); extern void func_80175184(); extern void func_80175150(s32 *a0); -extern void (*D_80193F68[])(void*); +extern void (*D_801854E0[])(void*); extern s32 func_80175268(s32); extern void func_80175184(s32* arg0); extern s32 func_80175218(void *a0); extern void func_801751D8(void *a0); -extern void (*D_80193F70[])(s32); +extern void (*D_801854E8[])(s32); extern s32 func_80175218(void * param_1); extern void func_801752BC(s32 *a0); extern u8 D_8011F7A8; @@ -2481,7 +2452,7 @@ extern u8 D_8011F7A9; extern u8 D_8011F7AD; extern u8 D_8011F7AE; extern void func_80175494(void); -extern void (*D_801940D8[])(); +extern void (*D_80185650[])(); extern s32 func_801758FC(void); extern s32 func_80175820(void); extern s32 func_801759D8(void); @@ -2494,7 +2465,7 @@ extern void func_801757A0(s32); extern void func_80175624(void *a0); extern void func_801757E0(int); extern void func_80175668(void); -extern void (*D_801940E4[])(); +extern void (*D_8018565C[])(); extern void func_80175690(s32 *param); extern void func_80175DA8(s32 a0); extern void func_80175AB8(s32 a0); @@ -2531,7 +2502,7 @@ extern void * func_80177784(void *a0, s32 a1, s32 a2, s32 a3); extern uint * func_80177EA4(uint *param_1, int param_2, uint param_3, int param_4); extern void func_80177F84(s32 param_1, s32 param_2); extern u32 * func_80178298(u32 *param_1, u8 *param_2, short param_3, short param_4); -extern M2C_UNK D_801E2950; +extern M2C_UNK D_801B8670; extern void func_80178438(u16 *arg0); extern void func_801787D4(void); extern void func_8012A908(void); @@ -2556,14 +2527,14 @@ extern void func_8012E8E0(s32 a0, s32 a1); extern void func_8012B2CC(s32 a0); extern s32 func_801788B8(s32 arg0, s32 arg1); extern s32 func_801789AC(s32 arg0); -extern s16 D_801E4BD8; +extern s16 D_801BA010; extern int func_80178970(void); extern s32 func_80178B18(s32 param_1, s32 param_2); extern s32 func_80178B70(s32 param_1, s32 param_2); extern void func_80178BB8(s32 a0, s32 a1); extern s32 func_80178BF8(); -extern s32 D_801E3E18; -extern short D_801E4C4C; +extern s32 D_801B9980; +extern short D_801BA084; extern void func_80178CBC(s32 arg0, s32 arg1); extern void func_80178D18(void); extern s32 func_80178D40(s32 arg0, s32 arg1); @@ -2584,12 +2555,12 @@ extern void func_80179F6C(short a0); extern void func_80179F98(u16 *a0); extern void func_80179FEC(u16 *a0); extern void func_8017A040(u16 *a0); -extern s32 D_801E4244; +extern s32 D_801B9DAC; extern void func_8017A094(s32 arg0); extern void func_8017A0C4(s32 arg0); extern void func_8017A0F4(void); extern void func_8017A11C(void); -extern s32 D_801E426C; +extern s32 D_801B9DD4; extern void func_8017A144(s32 a0); extern void func_8017A180(void); extern void func_8017A1A8(void); @@ -2605,14 +2576,8 @@ extern void func_8017A310(void); extern void func_8017A338(void); extern void func_8017A360(void); extern void func_8017A388(void); -extern s16 D_801E4228; +extern s16 D_801B9D90; extern s32 func_8017A3B0(void); -extern short D_801E4264; -extern short D_801E4260; -extern int func_800D0CA0(int); -extern int func_8001AAA0(void); -extern int func_800D0CE0(void); -extern int func_8017A3D8(void); extern void func_80172310(u8*); extern void func_80172780(void*); extern void func_80172894(void*); @@ -2633,25 +2598,14 @@ extern s32 func_8017AD0C(s32 arg0); extern s32 func_8017AD0C(s32); extern s32 func_8017ADE8(s32 a0); extern s32 func_8017AE08(void); -extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); -extern void func_8012B178(s32 a0, s32 a1); -extern void func_8012AD80(s32 a0); -extern s32 func_8012B030(u8 *a0); -extern s32 func_8012B744(void *a0, void *a1); -extern s32 func_8012BE98(s32 a0, u16 *a1); -extern s16 D_801E4BA8; -extern s16 D_801E4BAA; -extern s16 D_801E4BB4; -extern void func_8017AE2C(s32 param_1); extern void func_8017B0E4(int param_1, int param_2); -extern s16 D_801E422C; -extern u16 D_801E42AC; -extern u16 D_801E42AE; -extern u16 D_801E42B0; +extern s16 D_801B9D94; +extern u16 D_801B9E14; +extern u16 D_801B9E16; +extern u16 D_801B9E18; extern void func_8017B1D8(void); extern s32 func_8017B238(s32 param_1, s32 param_2); extern s32 func_8017B368(s32 param); -extern s32 func_8017B490(s32 param); extern s32 func_8017B614(s32 param_1, s32 param_2); extern s32 D_80114F30; extern s32 D_80114F34; @@ -2660,1666 +2614,548 @@ extern s32 D_80114F24; extern s32 D_80114F28; extern s32 D_80114F2C; extern u8 D_8012694C; -extern s16 D_801E42A4; -extern s16 D_801E42A6; -extern s16 D_801E42A8; -extern s16 D_801E429C; -extern s16 D_801E429E; -extern s16 D_801E42A0; +extern s16 D_801B9E0C; +extern s16 D_801B9E0E; +extern s16 D_801B9E10; +extern s16 D_801B9E04; +extern s16 D_801B9E06; +extern s16 D_801B9E08; extern void func_8017B7A8(void); -extern s16 D_801E42BC; -extern s16 D_801E42BE; -extern s16 D_801E42C0; -extern s16 D_801E42C4; -extern s16 D_801E42C6; -extern s16 D_801E42C8; +extern s16 D_801B9E24; +extern s16 D_801B9E26; +extern s16 D_801B9E28; +extern s16 D_801B9E2C; +extern s16 D_801B9E2E; +extern s16 D_801B9E30; extern void func_8017B824(void); extern void func_8017B880(void); extern s32 func_8017B8E8(s32 src); -extern short D_801E42B4; -extern short D_801E42B6; -extern short D_801E42B8; +extern short D_801B9E1C; +extern short D_801B9E1E; +extern short D_801B9E20; extern void func_8017B940(void); extern void func_8012F214(s32 a0, s32 a1, s32 a2); extern void func_80049CAC(s32 a0, s32 a1); extern void func_8004914C(void *a0); extern void func_800491AC(void *a0); extern void RotTransSV(void *a0, void *a1, void *a2); -extern SV4 D_801E424C; -extern SV4 D_801E4254; +extern SV4 D_801B9DB4; +extern SV4 D_801B9DBC; extern void func_8017BA3C(s32 param_1, s32 param_2); extern s32 func_8017BB34(s32 param_1, s32 param_2); -extern void (*D_801E4274[10])(int); +extern void (*D_801B9DDC[10])(int); extern void func_8017BC38(int param_1); extern void func_8017B0E4(int, int); extern void func_8017BCA0(int param_1); extern void func_8012A4BC(void); extern void func_8017BCF4(int param_1); -extern void (*D_801E4270)(void); +extern void (*D_801B9DD8)(void); extern void func_8017BD50(int param_1); -extern void (*D_801942C0[])(void); +extern void (*D_80185838[])(void); extern void func_8017BE60(void *a0); -extern void func_8017BF14(s32 arg0, s32 arg1, s32 arg2, s32 arg3); -extern void func_8017BEC0(s32 arg0, s32 arg1, s16 arg2); -extern void func_8017BEE8(void *a0, void *a1, s32 a2, s32 a3); -extern s32 func_8012C750(s32 a0); -extern void func_8017BF9C(s32 a0, s32 a1); -extern void func_8017BFF0(s32 a0, s32 a1, s32 a2); -extern void func_8017C048(void); -extern void (*D_80194320[])(void); -extern void func_8017C0F4(void *a0); -extern void func_8017C130(void *a0); -extern void func_800176F0(void *a0); -extern void func_8017C41C(void *a0); -extern void ReadRotMatrix(void *a0); -extern void PushMatrix(void); -extern void func_8004974C(void *a0, void *a1); -extern void PopMatrix(void); -extern void func_8017CC88(u16 *a0, void *a1); -extern int func_8017CD2C(short *param_1, short *param_2, short *param_3, int param_4); -extern void ReadGeomOffset(s32 *a0, s32 *a1); -extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); -extern void func_8004921C(s32 a0, s32 a1); -extern void func_8017CF24(s32 a0, s32 a1); -extern void func_8017CF90(s32 arg0); -extern void func_8017DF00(void); -extern void func_8017DF28(void); -extern void func_8017DF50(void); +extern void func_8017BE9C(void); +extern void func_8017BEA4(void); +extern void func_8017BEAC(void); +extern void func_8017BEB4(void); +extern void func_8017BF34(s32 arg0, s32 arg1, s32 arg2, s32 arg3); +extern void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3); +extern void (*D_80185898[])(void); +extern void func_8017C114(void *a0); +extern void func_8017C8D0(s32 arg0); +extern void (*D_801858F0[])(void); +extern void func_8017D7B0(void *a0); +extern void func_8017DA6C(void); +extern s32 func_8017D7EC(s32 a0); +extern s32 func_8017D830(void); +extern void (*D_801858F8[])(void); +extern void func_8017D854(void *a0); +extern void func_8017DA94(void); +extern s32 func_8017D890(s32 a0); +extern void func_8001BFD0(void); +extern void func_800D1E28(void); +extern s32 func_8017D8D0(u8 *a0); +extern void func_800D1EBC(void); +extern void func_8017D94C(void); +extern void (*D_80185904[])(void); +extern void func_8017D96C(void *a0); +extern s32 func_8017D9A8(void *a0); +extern void func_8002931C(void); +extern void func_80029514(s32 a0); +extern void func_8002AED0(void); +extern s32 func_8017DA24(void); extern void func_8012A094(s32 a0); -extern void func_8017E97C(void *a0); -extern void func_8017DF78(void); -extern Vec8_8017E0B4 D_801E2D70; -extern Vec8_8017E0B4 D_801E2D78; -extern s32 D_80126E60[]; -extern s32 D_80126E6C; -extern s32 D_80126E9C; -extern s32 D_80126EA0; -extern s32 D_80126EA4; -extern s32 D_80126EA8; -extern s32 D_80126EAC; -extern s32 D_80126EB0; -extern void func_8012A100(s8 a0); -extern void func_8017E0B4(void); -extern void func_8017E190(void); -extern void func_8017E26C(void); -extern void func_8017E348(void); -extern void func_8017E5AC(void); -extern void func_8017E5CC(void); -extern void func_8017E664(void); -extern void func_8017E8E4(void); -extern void func_8017EB30(void); -extern void (*D_8019439C[])(void); -extern void func_8017F010(void *a0); -extern void func_8017F428(void *arg0); -extern s32 func_8017F04C(s32 param_1); -extern s32 func_8017F09C(void); -extern void (*D_801943A4[])(void); -extern void func_8017F0C0(void *a0); -extern s32 func_8017F0FC(u8 *a0); -extern void (*D_80194454[])(void); -extern void func_8017F1DC(void *a0); -extern void func_8017F218(u8 *a0); -extern void func_8017F320(s32 param_1); -extern void (*D_80194464[])(void); -extern void func_8017F358(void *a0); -extern void func_8017F3C4(int param_1); -extern void func_8017F408(void); -extern void (*D_80194470[])(void); -extern void func_8017F428(void *a0); -extern s32 D_801270C8; -extern void func_8017F6A4(void); -extern void func_8017F674(void); -extern void func_8017FA3C(void); -extern void func_8017FA0C(void); -extern void (*D_801944E8[])(void); -extern void func_80180380(void *a0); -extern void func_801804AC(void); -extern void aF801804D4(); -extern void func_80180A7C(void); -extern void func_80180AA4(void *a0); -extern void func_80180AE0(void *a0); -extern void func_80180C04(void *a0); -extern void func_80180C64(void*); -extern void func_80180C3C(void); -extern void (*D_8019455C[])(void); -extern void func_80180C64(void *a0); -extern void func_8017E798(void *a0); -extern void func_80181028(void *a0); -extern void func_801812DC(void*); -extern void func_801812B4(void); -extern void (*D_8019458C[])(void); -extern void func_801812DC(void *a0); -extern void func_80181318(void *a0); -extern void func_80147060(u8*); -extern void func_8018166C(s32 a0); -extern s32 func_8018169C(s32 a0, s32 a1); -extern s32 func_801816CC(s32 a0, s32 a1); +extern void func_8017DB58(void *a0); +extern void func_8017DABC(void); +extern void (*D_80185920[])(void); +extern void func_8017DB94(s32 a0); +extern s32 func_80012ABC(s32 a0, s32 a1, s32 a2); +extern void func_8017DC70(s32 param_1, s16 *param_2); +extern void func_8012A828(s32 a0, void *a1); +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); +extern s32 func_8012B608(s32 a0, s32 a1, s32 a2); +extern s32 func_8012C588(s32 a0, s32 a1); +extern s32 func_8012BA10(s32 a0, s32 a1); +extern void func_800599B8(s32 a0, s32 a1); +extern u8 D_800AF648; +extern u8 D_8019F454; +extern u8 D_8019F51C; +extern u8 D_8019F32C; +extern u8 D_8019F644; +extern u8 D_8019EC8C; +extern u8 D_80185D70; +extern u8 D_80185AA8; +extern u8 D_80185928[]; +extern s32 D_8019F75C[]; +extern s32 D_8019F89C[]; +extern s32 D_8019FAD4[]; +extern s32 D_8019F9C4[]; +extern s16 D_80185B6C[]; +extern s16 D_80185B18[]; +extern s16 D_80185B1A[]; +extern void func_8017E120(s32 a0); +extern s32 func_8012B864(s32 a0); +extern u8 D_8019EF7C; +extern u8 D_80185D78; +extern void func_8017F0A0(s32 a0); /* ==== end §8b carried decl layer ==== */ -extern void func_80182998(void); -extern s32 func_80185D84(s32); -extern void func_80186304(); -extern void func_8018AD8C(s32, s32); -extern void func_801862E0(s32 *a0); extern void func_8002D4C8(s32 a0, s32 a1); -extern s32 func_8012BEE8(s32 a0); -extern void func_801862F0(void * arg0); -extern void func_8018ADF0(s32); -extern void func_801838A8(u8*); +extern void func_800D0C48(s32 a0); +extern void func_8012A828(s32 a0, void *a1); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_80178B18(s32 param_1, s32 param_2); +extern int func_80178970(); +extern void func_80178D18(void); +extern void func_8012CBCC(s32 a0); +extern void func_8012ADE4(s32 a0); +extern void func_8017DE08(s32 a0); +extern void func_8017C068(void); +extern s32 *D_80126B78; +extern u16 D_80126B5E; +extern u16 D_80126B62; +extern u8 D_801202A0[]; +extern s32 D_8019EB9C; +extern u8 D_8019FEFC; +extern u8 D_80185C9C; +extern s16 D_80185C0C; +extern s16 D_80185C10; +extern s16 D_80185C14; -void func_80181D30(u8* arg0) { - if (*(u32*)(arg0 + 0xE8) & 0x60000) { - func_80182998(); - return; - } - - switch (*(u16*)(arg0 + 0x34)) { - case 0: - if (((s32 (*)(u8*))func_80185D84)(arg0) != 0) { - func_80186304(arg0, 4, 2); - (*(u16*)(arg0 + 0x34))++; - } - break; - case 1: - if (*(s32*)(arg0 + 0x94) == 3) { - func_8018AD8C(*(s16*)(arg0 + 0xE0), 7); - ((void (*)(u8*))func_801862E0)(arg0); - *(s32*)(arg0 + 0x1C) = 4; - (*(u16*)(arg0 + 0x34))++; - func_8002D4C8(0x4F5, 0); - } - break; - case 2: - if (((s32 (*)(u8*))func_8012BEE8)(arg0) != 0) { - ((void (*)(u8*))func_801862F0)(arg0); - (*(u16*)(arg0 + 0x34))++; - func_8002D4C8(0x4F6, 0); - } - break; - case 3: - if (*(s16*)(arg0 + 0x98) == 0) { - func_80186304(arg0, 5, 2); - *(s32*)(arg0 + 0x1C) = 0x1A; - (*(u16*)(arg0 + 0x34))++; - } - break; - case 4: - if (((s32 (*)(u8*))func_8012BEE8)(arg0) != 0) { - func_80186304(arg0, 6, 2); - (*(u16*)(arg0 + 0x34))++; - } - break; - case 5: - if (*(s32*)(arg0 + 0x94) == 9) { - ((void (*)(u8*))func_801862E0)(arg0); - func_8018ADF0(*(s16*)(arg0 + 0xE0)); - *(s32*)(arg0 + 0x1C) = 0x10; - (*(u16*)(arg0 + 0x34))++; - } - break; - case 6: - if (((s32 (*)(u8*))func_8012BEE8)(arg0) != 0) { - ((void (*)(u8*))func_801862F0)(arg0); - (*(u16*)(arg0 + 0x34))++; - } - break; - case 7: - if (*(s16*)(arg0 + 0x98) == 0) { - func_801838A8(arg0); - } - break; - } -} - - -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_8012B200(u8 *a0); -extern void func_80181F68(void *a0); -extern s16 D_801E43A8; -extern s16 D_801E43B0; - -void func_80181F04(void *a0) { - s32 s0 = (s32)a0; - s32 temp; - u16 h1; - u16 h2; - - func_8012B200((u8 *)s0); - temp = *(s32 *)(s0 + 0xE8); - h1 = *(u16 *)(s0 + 6); - h2 = *(u16 *)(s0 + 0xE); - temp &= ~1; - D_801E43A8 = h1; - *(s32 *)(s0 + 0xE8) = temp; - D_801E43B0 = h2; - func_8012AD44((s32 *)s0, 6); - func_80181F68((void *)s0); -} - - -void func_80181F68(void *a0) { - *(s16 *)((s32)a0 + 0x34) = 0; - } - - -extern void func_80186304(); - -s32 func_80181F70(void *arg0) +void func_8017F65C(s32 a0) { - func_80186304((u8 *)arg0, 0x10, 0); - *(u16 *)((s32)arg0 + 0x34) = 1; -} - - -void func_80181FA8(u8 *arg0) { - func_80186304(arg0, 0x11, 0); - func_80186C70(arg0); - *(u16 *)((s32)arg0 + 0x34) = 2; -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_80181FE8); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_8018203C); - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_80182098); - -#include "common.h" - -extern u16 D_801E43B4; -extern s32 D_801270C8; -extern u8 D_80195AFA[]; -extern u8 D_8019103C; -extern void func_8018A1D8(s32 a0); -extern void func_8012B23C(s32 a0); -extern void func_8013C9C4(void *a0); -extern void func_80186304(); -extern s32 func_801873FC(s32 a0); -extern u16 D_80126B96; -extern s16 D_80126B98; -extern void func_8002D4C8(s32 a0, s32 a1); - -s32 func_801820E4(void *arg0) -{ - s16 idx; - register u16 cnt asm("v0"); - - idx = *(s16 *)((u8 *)arg0 + 0xE0); - if (idx >= 0) { - cnt = D_801E43B4; - D_801270C8 = *(s16 *)((u8 *)D_80195AFA + idx * 8); - D_801E43B4 = cnt + 1; - *(u32 *)((u8 *)arg0 + 0xE8) = (*(u32 *)((u8 *)arg0 + 0xE8) & ~0x400) | 0x800; - } - func_8018A1D8((s32)arg0); - func_8012B23C((s32)arg0); - func_8013C9C4(&D_8019103C); - func_80186304(arg0, 0x12, 0); - *(s16 *)((u8 *)arg0 + 0x34) = 6; - *(u32 *)((u8 *)arg0 + 0xE8) |= 0x20; - if (func_801873FC((s32)arg0) != 0) { - D_80126B96 = 0x4002; - D_80126B98 = 10; - } - func_8002D4C8(0x501, 0); -} - - -void func_801821C8(s32 *arg0) { - u16 t; - u32 s1; - - func_801862E0(arg0); - func_80186CA8((void *)arg0); - - t = *(u16 *)((s32)arg0 + 0xDC); - t = t - 1; - *(s16 *)((s32)arg0 + 0xDC) = t; - - if (*(s32 *)((s32)arg0 + 0xE8) & 0x800) { - goto L224; - } - if (*(s16 *)((s32)arg0 + 0x76) >= 0x81) { - goto L224; - } - if (t << 16) { - s1 = 0x10; - } else { - s1 = 0x20; - } - goto L244; - -L224: - s1 = 0x60; - if (*(s16 *)((s32)arg0 + 0xDC) != 0) { - s1 = 0x30; - } - func_801840E8(*(s32 *)((s32)arg0 + 0xD4)); - -L244: - if (*(s32 *)((s32)arg0 + 0xE8) & 0x2000) { - *(s32 *)((s32)arg0 + 0x1C) = s1 >> 1; - } else { - *(s32 *)((s32)arg0 + 0x1C) = s1; - } - *(u16 *)((s32)arg0 + 0x34) = 7; -} - - -extern void func_801862F0(void * arg0); - void func_80182284(s32 arg0) { - s32 temp_s0 = arg0; - ((void (*)(void))func_801862F0)(); - *(s16 *)(temp_s0 + 0x34) = 0x8; - } - - -extern void func_8012B23C(s32 a0); - -void func_801822B4(s32 arg0) { - func_8012B23C(arg0); - func_8017DF50(); - func_801838A8((u8 *)arg0); -} - - -#include "common.h" - -extern u16 D_801E4BBC; -extern u8 D_80062BDC; -extern u8 D_80195B2C[]; - -extern void func_80019064(void *a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_8012B23C(s32 a0); -extern void func_80183B0C(void); -extern void func_80186304(); -extern void func_80186C0C(void *a0); -extern void func_80186C70(void *a0); -extern void func_80186CA8(); -extern void func_80186D74(void); -extern void func_80186F14(void *a0); - -void func_801822EC(u8 *arg0) { - s32 done = 0; - - switch (*(u16 *)(arg0 + 0x34)) { - case 0: - if (*(s16 *)(arg0 + 0x98) == 0) { - if (D_801E4BBC == 1) { - func_80186304(arg0, 0x14, 1); - func_80186C70(arg0); - (*(u16 *)(arg0 + 0x34))++; - } else { - done = 1; - } - } - break; - case 1: - *(u16 *)(*(s32 *)(*(s32 *)(arg0 + 0xCC) + 0x20) + 0x12) -= 0x55; - *(u32 *)(arg0 + 0xE8) &= ~0x20; - if ((*(s32 *)(arg0 + 0x94) & 3) == 0) { - if (*(s16 *)(arg0 + 0x98) == 1) { - func_80019064(&D_80062BDC); - func_8002D4C8(0x4F1, 0); - *(u32 *)(arg0 + 0xE8) |= 0x20; - } - } - if (*(s16 *)(arg0 + 0x98) == 0) { - done = 1; - func_80183B0C(); - func_80186CA8(arg0); - *(u32 *)(arg0 + 0xE8) &= ~0x20; - } - break; - } - - if (done) { - u32 temp; - s32 v0_val; - - func_8012B23C((s32)arg0); - - *(u32 *)(arg0 + 0xE8) |= 1; - func_80186304(arg0, 0, 0); - - temp = *(u32 *)(arg0 + 0xE8); - if (temp & 0x2000) { - *(u32 *)(arg0 + 0x1C) = 0x10; - } else { - *(u32 *)(arg0 + 0x1C) = 0x20; - } - - v0_val = (s32)D_80195B2C | 0x40000000; - *(u32 *)(arg0 + 0x58) = v0_val; - *(s16 *)(arg0 + 0x5C) = 0; - *(s16 *)(arg0 + 0xAE) = -1; - - func_8012AD44((s32 *)arg0, 1); - func_80186F14((void *)arg0); - - *(u32 *)(arg0 + 0xE8) &= ~4; - func_80186C0C((void *)arg0); - func_80186D74(); - } -} - - -#include "common.h" - -extern s32 func_8012CBCC(s32 a0); -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_8012B23C(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80186304(); -extern void func_8018A3B4(void *a0); -extern s32 func_8018ACB4(void *a0); -extern void func_8018AEB4(s32 a0, s32 a1); -extern s32 func_8018675C(void *a0); -extern void func_80186F58(void *a0); -extern void func_80184C20(s32 a0); -extern void func_80186BB8(); -extern void func_80186CA8(); -extern void func_80186D00(void); -extern void func_801900F4(void); -extern void func_80184184(s32 a0); -extern u16 D_801E4BBC; -extern u8 D_80195B3C[]; - -void func_801824D0(s32 s0) { - u32 flags; - s16 mode; - - if ((*(u32 *)(s0 + 0xE8) & 0x408) == 0) { - if (*(s16 *)(s0 + 0xDC) != 0) { - if (((s32 (*)(void))func_8012CBCC)() != 0) { - mode = *(s16 *)(s0 + 0xDC); - if (mode != 1) { - if (mode == 2) { - *(s32 *)(s0 + 0x14) = 0xFFF80000; - } - } else { - *(s32 *)(s0 + 0x14) = 0; - *(s32 *)(s0 + 0x1C) = 0; - } - *(u16 *)(s0 + 0xDC) = *(u16 *)(s0 + 0xDC) - 1; - func_8018A3B4((void *)s0); - } - } else { - func_8012CBCC(s0); - if ((*(s32 *)(s0 + 0x1C) & 3) == 0) { - func_8018A3B4((void *)s0); - } - *(s32 *)(s0 + 0x1C) = *(s32 *)(s0 + 0x1C) + 1; - } - - if (D_801E4BBC == 1) { - s32 ret = func_8018ACB4((void *)s0); - if (ret > 0) { - func_8018AEB4(ret, 1); - } - } - if (func_8018675C((void *)s0) != 0) { - *(s32 *)(s0 + 0x18) = 0; - *(s32 *)(s0 + 0x10) = 0; - } - return; - } - - if (func_8012CBCC(s0) == 0) { - return; - } - - flags = *(u32 *)(s0 + 0xE8); - if (flags & 0x400) { - *(u32 *)(s0 + 0xE8) = flags & ~1; - func_80186304((u8 *)s0, 0xD, 2); - func_8012AD44((s32 *)s0, 9); - *(u8 *)(s0 + 0xC1) = 0; - *(s16 *)(s0 + 0xFE) = 0; - func_80186CA8((void *)s0); - *(s16 *)(s0 + 0x102) = 0xD; - } else { - func_8012B23C(s0); - *(u32 *)(s0 + 0xE8) = *(u32 *)(s0 + 0xE8) & ~1; - func_80186F58((void *)s0); - *(s16 *)(*(s32 *)(*(s32 *)(s0 + 0xCC) + 0x20) + 0x12) = 0; - func_80184C20(*(s32 *)(s0 + 0xD0)); - *(u32 *)(s0 + 0x58) = (s32)D_80195B3C | 0x40000000; - *(s16 *)(s0 + 0x5C) = 0xA00; - *(u32 *)(s0 + 0xE8) |= 4; - func_8012AD44((s32 *)s0, 8); - func_80186304((u8 *)s0, 0x13, 2); - func_80186BB8((void *)s0); - func_80186D00(); - switch (D_801E4BBC) { - case 1: - func_801900F4(); - break; - case 2: - func_80184184(*(s32 *)(s0 + 0xD4)); - *(s16 *)(s0 + 0x5C) = 0x800; - break; - } - } - func_8002D4C8(4, 0x50F); - func_8002D4C8(0x507, 0); -} - - -extern void func_80186304(); - -void func_80182740(void *arg0) { - s32 s0; - - __asm__ __volatile__("" : "=r"(s0) : "0"((s32)arg0)); - *(u32 *)(s0 + 0x18) = 0; - if (*(u32 *)(s0 + 0xE8) & 0x2000) { - *(u32 *)(s0 + 0x10) = 0x38000; - } else { - *(u32 *)(s0 + 0x10) = 0x1C000; - } - func_80186304((u8 *)s0, 1, 0); - *(s16 *)(s0 + 0xE0) = -1; -} - - -#include "common.h" - -extern void func_80186304(); - -void func_801827A8(void *a0) { - s32 s0 = (s32)a0; - - *(u32 *)(s0 + 0x18) = 0; - - if (*(u32 *)(s0 + 0xE8) & 0x2000) { - *(u32 *)(s0 + 0x10) = 0xFFFC8000; - } else { - *(u32 *)(s0 + 0x10) = 0xFFFE4000; - } - - func_80186304((u8 *)s0, 2, 0); - *(s16 *)(s0 + 0xE0) = -1; -} - - -#include "common.h" - -extern void func_80186304(); -extern s32 func_80186144(void *a0, s32 a1); -extern u16 D_801E4BBC; - -void func_80182810(void *arg0) { - s32 p = (s32)arg0; s32 v1; s32 t; + u16 *p; + s32 i; + extern s16 D_80126B66; - v1 = *(s32 *)(p + 0xE8); - if (v1 & 0x800) { - if (v1 & 0x2000) { - *(s32 *)(p + 0x10) = 0xFFFC8000; - } else { - *(s32 *)(p + 0x10) = 0xFFFE4000; - } - *(s32 *)(p + 0x18) = 0; - *(s16 *)(p + 0xE0) = func_80186144((void *)p, 5); - } else { - if (v1 & 0x2000) { - *(s32 *)(p + 0x18) = 0x38000u; - } else { - *(s32 *)(p + 0x18) = 0x1C000u; - } - *(s32 *)(p + 0x10) = 0; - *(s16 *)(p + 0xE0) = -1; - } - t = D_801E4BBC; - *(s32 *)(p + 0xE8) = *(s32 *)(p + 0xE8) | 0x1000; - if (t == 1) { - func_80186304((u8 *)p, -3, 0); - } else { - func_80186304((u8 *)p, 3, 0); - } -} - - -#include "common.h" - -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_80186F14(void *a0); - -void func_801828D8(void *arg0) { - s32 s0 = (s32)arg0; - u32 v; - - v = *(u32 *)(s0 + 0xE8); - *(u32 *)(s0 + 0xE8) = v | 1; - func_8012AD44((s32 *)s0, 2); - func_80186F14((void *)s0); -} - - -#include "common.h" - -extern void (*D_80191060[])(void); -extern s32 func_8012CBA4(s32 a0); -extern void func_8013C9C4(void *a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8018655C(s32 a0); - -void func_80182918(s32 a0) { - s32 *s0 = (s32 *)a0; - - func_8012CBA4(a0); - - if (s0[0x94/4] == 1 || s0[0x94/4] == 0xD) { - if (((s16 *)s0)[0x98/2] == 1) { - func_8013C9C4(D_80191060); - func_8002D4C8(0x4F1, 0); - func_8002D4C8(0x50B, 0); - } - } - - func_8018655C((s32)s0); -} - - -#include "common.h" - -extern void func_8012B23C(s32 a0); -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_80186304(); -extern void func_80184C20(s32 a0); -extern void func_80186F58(void *a0); -extern void func_8018AAAC(void); - -/* DECL RECONCILIATION (§183 TYPE-adopted-TU, wave Z): the TU already declares - * `extern void func_80182998(void);` (line 2799) and calls it with no argument - * (line 2812, inside func_80181D30, where $a0 still holds the caller's arg0). - * The body genuinely reads its incoming $a0, so the parameter is recovered at - * the USE SITE with a $4-pinned register variable copied ONCE into a normal - * local (the copy is what lets gcc park it in $s0 across the calls — reading - * `a0r` directly would re-read $4 after every jal). Byte-identical to the - * `void func_80182998(void *arg0)` spelling: MATCH (61 ins), so the TU needs - * no edit and func_80181D30 needs no re-verification. */ -void func_80182998(void) { - register void *a0r __asm__("$4"); - void *arg0 = a0r; - s32 flags; - - func_8012B23C((s32)arg0); - *(u32 *)((s32)arg0 + 0xE8) &= ~1; - func_80186F58(arg0); - *(s16 *)(*(s32 *)(*(s32 *)((s32)arg0 + 0xCC) + 0x20) + 0x12) = 0; - func_80184C20(*(s32 *)((s32)arg0 + 0xD0)); - func_8018AAAC(); - func_8012AD44((s32 *)arg0, 0xB); - - if (*(u32 *)((s32)arg0 + 0xE8) & 0x1000) { - *(s16 *)((s32)arg0 + 0x104) = *(s32 *)((s32)arg0 + 0x1C); - } - - flags = *(u32 *)((s32)arg0 + 0xE8); - if ((flags & 0x60000) == 0x60000) { - func_80186304((u8 *)arg0, 0x19, 2); - *(s16 *)((s32)arg0 + 0x34) = 2; - } else if (flags & 0x20000) { - func_80186304((u8 *)arg0, 0x15, 2); - *(s16 *)((s32)arg0 + 0x34) = 0; - } else { - func_80186304((u8 *)arg0, 0x17, 2); - *(s16 *)((s32)arg0 + 0x34) = 1; - } -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_80182A8C); - -extern void func_80186178(s32 *a0); -extern void func_8012B23C(s32 a0); -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_80186304(); - -void func_80182D80(s32 arg0) { - func_80186178((s32 *)arg0); - func_8012B23C(arg0); - func_8012AD44((s32 *)arg0, 0xC); - func_80186304((u8 *)arg0, 0, 2); -} - - -extern void func_8018622C(); - -void func_80182DCC(void *a0) { - func_8018622C(a0); - *(u32 *)((s32)a0 + 0x14) = 0x100000; - *(u16 *)((s32)a0 + 0x34) = 1; -} - - -#include "common.h" - -extern void func_8012B23C(s32 a0); -extern void func_8013C9C4(void *a0); -extern void func_80186304(); -extern void func_8018A1D8(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern s32 D_801270C8; -extern u8 D_8019103C; - -void func_80182E04(s32 arg0) -{ - func_8012B23C(arg0); - func_8013C9C4(&D_8019103C); - func_80186304((u8 *)arg0, 0, 2); - *(s16 *)(arg0 + 0x34) = 2; - D_801270C8 = 0x15; - func_8018A1D8(arg0); - func_8002D4C8(0x4FB, 0); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_80182E78); - -#include "common.h" - -extern void func_8012B23C(s32 a0); -extern void func_80186304(); -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_80186F14(void *a0); -extern u8 D_80195B2C[]; -extern void func_8017BEE8(void *a0, void *a1, s32 a2, s32 a3); -extern u16 D_801E4398; -extern u16 D_801E439C; -extern s32 D_801E43C0; -extern s32 D_801E43C4; -extern void func_80185764(); - -void func_80182EB0(void) { - register void *a0r __asm__("$4"); - s32 s0 = (s32)a0r; - u32 temp; - s32 v0_val; - - func_8012B23C(s0); - - *(u32 *)(s0 + 0xE8) |= 1; - func_80186304((u8 *)s0, 0, 0); - - temp = *(u32 *)(s0 + 0xE8); - if (temp & 0x2000) { - *(u32 *)(s0 + 0x1C) = 0x10; - } else { - *(u32 *)(s0 + 0x1C) = 0x20; - } - - v0_val = (s32)D_80195B2C | 0x40000000; - *(u32 *)(s0 + 0x58) = v0_val; - *(s16 *)(s0 + 0x5C) = 0; - *(s16 *)(s0 + 0xAE) = -1; - - func_8012AD44((s32 *)s0, 1); - func_80186F14((void *)s0); - - func_8017BEE8(&D_801E4398, &D_801E439C, 0, 0x60); - D_801E43C0 = 0; - D_801E43C4 = 0; - func_80185764(); -} - - -extern void func_8012B23C(s32 a0); - -void func_80182F78(s32 arg0) -{ - func_8012B23C(arg0); - *(s32 *)(arg0 + 0x10) = 0xFFE80000; - *(s16 *)(arg0 + 0x34) = 0; -} - - -extern void func_8012B23C(s32 a0); -extern s16 D_801E43A8; -extern s16 D_801E43AC; -extern s16 D_801E43B0; - -void func_80182FAC(s32 *s0) -{ - u16 var_a8; - u16 var_ac; - u16 var_b0; - - var_a8 = D_801E43A8; - var_ac = D_801E43AC; - var_b0 = D_801E43B0; - - *(u16 *)((u8 *)s0 + 6) = var_a8; - *(u16 *)((u8 *)s0 + 0xA) = var_ac; - *(u16 *)((u8 *)s0 + 0xE) = var_b0; - func_8012B23C((s32)s0); - - *(s32 *)((u8 *)s0 + 0x10) = 0xFFE80000; - *(u16 *)((u8 *)s0 + 0x34) = 1; -} - - -extern void func_8012B200(u8 *a0); -extern void func_801862E0(s32 *a0); -extern void func_80189FC4(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); - -void func_8018300C(void *arg0) { - func_8012B200((u8 *)arg0); - func_801862E0((s32 *)arg0); - *(s16 *)((u8 *)arg0 + 0x34) = 2; - *(s32 *)((u8 *)arg0 + 0x1C) = 0x10; - func_80189FC4((s32)arg0); - func_8002D4C8(0x503, 0); -} - - -void func_80183060(void *a0) { - *(short *)((char *)a0 + 0x34) = 0x3; - *(int *)((char *)a0 + 0x1c) = 0x20; - } - - -void func_80183074(s32 *a0) { - extern s32 D_801270C8; - extern s32 D_80196288[]; - D_801270C8 = 0x20; - *(s16 *)((s32)a0 + 0x34) = 0x5; - *(s32 *)((s32)a0 + 0x1C) = 0x70; - *(s32 *)((s32)a0 + 0xE8) &= ~0x4000; - func_8012C588(0x75, (s32)a0); - func_80189FA4(a0); - func_80019064(&D_80196288); - func_8002D4C8(0x50D, 0); -} - - -extern u16 D_801E43C8; -extern void func_8018A7D8(u16 *a0, u16 *a1, s16 *a2, s32 a3); - -func_801830F4(s32 a0, s32 a1) -{ - u16 a1arr[4]; - s16 a2arr[3]; - - a1arr[0] = *(u16 *)(a0 + 6) - 0x40; - a1arr[1] = *(u16 *)(a0 + 0xA) - 0x80; - a1arr[2] = *(u16 *)(a0 + 0xE); - a1arr[3] = 0x6000; - a2arr[2] = 0x80; - a2arr[0] = 0x80; - a2arr[1] = 0x40; - - func_8018A7D8(&D_801E43C8, a1arr, a2arr, a1 & 0xFFFF); -} - - -void func_80183160(void *a0) { - *(s32 *)((char *)a0 + 0x1c) = 0x8; - *(s16 *)((char *)a0 + 0x34) = 0x6; - } - - -extern s32 D_801270C8; -extern void func_8002AB64(void); - -s32 func_80183174(void *arg0) { - D_801270C8 = 0x22; - *(s16 *)((s32)arg0 + 0x34) = 7; - func_8002AB64(); -} - - -extern void func_80183218(void *arg0); -extern void func_80186600(s32 a0); -extern void func_80186DE8(s32 a0); -extern void (*D_801962C0[])(void *); - -void func_801831A4(void *a0) -{ - func_80186600(a0); - func_80183218(a0); - ((void (**)(void *))D_801962C0)[*(u16 *)((s32)a0 + 2)](a0); - func_80186DE8(a0); -} - - -void func_80183200(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(u16 *)((s32)a0 + 0x5c) &= 0xfffe; - } - - -#include "common.h" - -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8018415C(void *a0); -extern void func_8012B23C(s32 a0); -extern void func_80186F58(void *a0); -extern void func_80184C20(s32 a0); -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_80186304(); -extern void func_80186BB8(); -extern void func_80186D00(void); -extern void func_801900F4(void); -extern void func_80184184(s32 a0); -extern void func_8018AAAC(void); -extern void func_8017DF50(void); -extern s32 func_80186144(void *a0, s32 a1); -extern void func_80186ADC(s32 a0); -extern u16 D_801E4398; -extern u16 D_801E4BBC; -extern u8 D_80195B3C[]; - -void func_80183218(void *arg0) { - s32 p = (s32)arg0; - s32 flags; - s32 t; - s32 w; - - if (*(u16 *)(p + 0x2) != 0) { - flags = *(s32 *)(p + 0xE8); - if (flags & 0x10) { - t = *(u16 *)(p + 0x76) - *(u16 *)(p + 0x60); - *(u16 *)(p + 0x76) = t; - *(s32 *)(p + 0xE8) = flags & ~0x10; - w = *(s16 *)(p + 0x76); - D_801E4398 = t; - if (w < 0) { - D_801E4398 = 0; - *(s16 *)(p + 0x76) = 0; - } - *(s16 *)(p + 0x60) = 0; - func_8002D4C8(0x4F3, 0); - - if (*(s16 *)(p + 0x76) == 0) { - *(u32 *)(p + 0xE8) &= 0xFFF1FFFF; - func_8018415C(*(void **)(p + 0xD4)); - - if (*(u32 *)(p + 0xE8) & 0x8) { - func_8012B23C(p); - *(u32 *)(p + 0xE8) &= ~1; - func_80186F58((void *)p); - *(s16 *)(*(s32 *)(*(s32 *)(p + 0xCC) + 0x20) + 0x12) = 0; - func_80184C20(*(s32 *)(p + 0xD0)); - *(s32 *)(p + 0x58) = (s32)D_80195B3C | 0x40000000; - *(s16 *)(p + 0x5C) = 0xA00; - *(u32 *)(p + 0xE8) |= 4; - func_8012AD44((s32 *)p, 8); - func_80186304((u8 *)p, 0xA, 2); - func_80186BB8((void *)p); - func_80186D00(); - switch (D_801E4BBC) { - case 1: - func_801900F4(); - break; - case 2: - func_80184184(*(s32 *)(p + 0xD4)); - *(s16 *)(p + 0x5C) = 0x800; - break; - } - } else { - *(u32 *)(p + 0xE8) &= ~1; - *(s16 *)(*(s32 *)(*(s32 *)(p + 0xCC) + 0x20) + 0x12) = 0; - func_80184C20(*(s32 *)(p + 0xD0)); - func_8018AAAC(); - func_80186F58((void *)p); - func_8012B23C(p); - *(s32 *)(p + 0x18) = 0xA8000; - *(s16 *)(p + 0xDC) = 2; - *(s32 *)(p + 0x14) = 0xFFF40000; - func_80186304((u8 *)p, 0xC, 3); - func_8012AD44((s32 *)p, 0xA); - if (D_801E4BBC == 2) { - func_8017DF50(); - if (*(u32 *)(p + 0xE8) & 0x800) { - s32 t = *(s32 *)(p + 0x18); - *(s32 *)(p + 0x18) = 0; - *(s32 *)(p + 0x10) = -t; - *(s16 *)(p + 0xE0) = func_80186144((void *)p, 5); - } - } - func_80186BB8((void *)p); - func_8002D4C8(0x50F, 0); - } - } - } - } - - if (*(s16 *)(p + 0xDE) != 0) { - if (--*(s16 *)(p + 0xDE) == 0) { - func_80186ADC(p); - } - } -} - - -extern void func_801804AC(void); -extern void func_801858C4(); - -void func_801834C8(void *arg0) -{ - *(u8 *)((s32)arg0 + 0xC1) = 3; - *(s32 *)((s32)arg0 + 0x1C) = 0x10; - *(u16 *)((s32)arg0 + 0x5C) &= 0xF5FE; - *(s16 *)((s32)arg0 + 0x98) = 0; - *(s32 *)((s32)arg0 + 0x58) = 0; - *(u32 *)((s32)arg0 + 0xE8) &= 0xFFFEFFFF; - func_801804AC(); - ((void (*)(void))func_801858C4)(); -} - - -#include "common.h" - -extern void func_8002D4C8(s32 a0, s32 a1); -extern s32 func_8012BEE8(s32 a0); -extern void func_80186304(); - -void func_80183524(s32 arg0) { - func_8012BEE8(arg0); - if (*(s32 *)(arg0 + 0x1C) == 1) { - func_80186304((u8 *)arg0, 0xB, 2); - } - if (*(u16 *)(arg0 + 0x72) & 0x4000) { - func_8002D4C8(0x4ED, 0); - } -} - - -extern void func_80186304(); -extern void func_8012B200(u8 *a0); -extern void func_80132DC4(s32 a0, s32 a1, s32 a2); -extern u16 D_801E4BBC; -extern u16 D_80195ADC[]; -extern void func_8018A968(s32 a0); - -void func_80183584(void *arg0) { - s32 s0 = (s32)arg0; - u16 t; - - func_80186304((u8 *)arg0, 0xC, 2); - func_8012B200((u8 *)s0); - func_80132DC4(s0, (s32)&D_80195ADC[D_801E4BBC * 4], 0x300); - *(u8 *)(s0 + 0xC1) = 4; - *(u8 *)(s0 + 0xC2) = 0; - t = D_801E4BBC; - *(u16 *)(s0 + 0x5C) &= ~1; - if (t == 0) { - func_8018A968(*(s32 *)(s0 + 0xCC)); - } -} - - -#include "common.h" - -extern u16 D_801E4BBC; -extern s32 D_801E43A0; -extern s16 D_801E43A8; -extern s16 D_801E43AC; -extern s16 D_801E43B0; - -extern s16 D_80195AC6[]; -extern u16 D_80195ADC[]; -extern s16 D_80195AE0[]; -extern s16 D_80195AEC; -extern s32 D_80195B1C[]; - -extern void func_8012CBF4(s32 a0); -extern s32 func_8012CBA4(s32 a0); -extern void func_8012B23C(s32 a0); -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_8002D4C8(s32 a0, s32 a1); -extern s32 func_8012BEE8(s32 a0); -extern void func_80186304(); -extern void func_80182F78(); -extern void func_8018A3B4(void *a0); -extern void func_80186CA8(); -extern void func_8018592C(u8 *arg0); - -void func_80183610(u8 *arg0) { - s16 temp; - u16 t6; - u16 tA; - u16 tE; - - switch (arg0[0xC2]) { + *(u8 *)(a0 + 0xC2) = 0x10; + switch (*(u16 *)(a0 + 0x34)) { case 0: - func_8012CBF4((s32)arg0); - if (D_801E4BBC == 2) { - if (*(s16 *)(arg0 + 6) <= D_80195AEC) { - arg0[0xC1] = 0; - *(s16 *)(*(s32 *)(arg0 + 0x20) + 0x12) = -0x400; - func_8012AD44((s32 *)arg0, 0xD); - t6 = *(u16 *)(arg0 + 6); - tA = *(u16 *)(arg0 + 0xA); - tE = *(u16 *)(arg0 + 0xE); - D_801E43A8 = t6; - D_801E43AC = tA; - D_801E43B0 = tE; - func_80182F78(arg0); - } - } else if (*(s16 *)(arg0 + 0xE) >= D_80195AE0[D_801E4BBC * 4]) { - func_8012B23C((s32)arg0); - ((s16 *)arg0)[3] = D_80195ADC[D_801E4BBC * 4]; - *(s32 *)(arg0 + 0x18) = 0x180000; - ((s16 *)(*(s32 *)(arg0 + 0x20)))[9] = 0; - D_801E43A0 |= D_80195B1C[D_801E4BBC]; - arg0[0xC2]++; - } + v1 = func_8004787C(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) + 0x100); + D_80185C0C = *(u16 *)(a0 + 6) - (v1 >> 4); + v1 = func_80047948(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) + 0x100); + D_80185C10 = *(u16 *)(a0 + 0xE) - (v1 >> 4); + D_80185C14 = *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + 0x100; + *(s32 *)(*(s32 *)(a0 + 0x20) + 0x20) = D_8019EB9C; + *(s16 *)(a0 + 0x98) = 0; + *(s32 *)(*(s32 *)(a0 + 0xCC) + 4) |= 0x80000000; + func_80178B18(a0, (s32)&D_80185C9C); + *(s16 *)(a0 + 0x34) = 1; + *(s16 *)(a0 + 0x16) = -4; + *(s32 *)(a0 + 0x48) = 0xC00; + *(s32 *)(a0 + 0x44) = 0; + *(s32 *)(a0 + 0x4C) = 0; + *(s32 *)(a0 + 0x10) = func_8004787C(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12)) << 3; + *(s32 *)(a0 + 0x18) = func_80047948(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12)) << 3; + *(s32 *)(a0 + 0x1C) = 0; + func_800D0C48(1); break; + case 1: - if ((((s32 (*)(s32))func_8012CBF4)((s32)arg0) & 0x2000) != 0) { - *(s32 *)(arg0 + 0x14) = 0; - *(s32 *)(arg0 + 0x4C) = -0x4000; - *(s16 *)(arg0 + 0x98) = 0; - *(s32 *)(arg0 + 0x1C) = 0; - arg0[0xC2]++; - func_8002D4C8(0x507, 0); + ((void (*)(s32))func_80178970)(a0); + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x10) - 0x10; + if (((s32 (*)(s32))func_8012CBCC)(a0) != 0) { + ((void (*)(s32))func_8012ADE4)(a0); + } + *(s32 *)(a0 + 0x1C) += 4; + func_8017DE08(a0); + if (*(s32 *)(a0 + 0x1C) >= 0xFC) { + *(s32 *)(a0 + 0x1C) = 0xFF; + *(s16 *)(a0 + 0x34) = 2; + func_8012A828(a0, &D_8019FEFC); + t = -0x182; + *(s16 *)(a0 + 6) = 0; + *(s16 *)(a0 + 0xA) = t; + *(s16 *)(a0 + 0xE) = 0x80; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x10) = 0; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = 0; + *(s16 *)(a0 + 0x10A) = 3; + *(s16 *)(a0 + 0x108) = 0x1E; + v1 = (s32)D_80126B78; + D_80126B66 = -0x80; + D_80126B5E = 0; + D_80126B62 = t; + *(s16 *)(v1 + 0x12) = 0x800; + func_8017C068(); } break; + case 2: - func_8012CBA4((s32)arg0); - *(s32 *)(arg0 + 0x1C) += 1; - if ((*(s32 *)(arg0 + 0x1C) & 1) == 0) { - func_8018A3B4(arg0); - } - temp = D_80195AC6[D_801E4BBC * 2]; - if (*(s16 *)(arg0 + 0xE) >= temp) { - *(s16 *)(arg0 + 0xE) = temp; - *(s16 *)(arg0 + 6) = -0x80; - arg0[0xC2]++; - func_8012B23C((s32)arg0); - *(s32 *)(arg0 + 0x1C) = 0x10; + ((void (*)(s32))func_80178970)(a0); + func_8017DE08(a0); + if (--*(s16 *)(a0 + 0x108) == 0) { + *(s16 *)(a0 + 0x34) = 3; } break; + case 3: - if (func_8012BEE8((s32)arg0) != 0) { - *(s32 *)(arg0 + 0xE8) &= ~1; - func_80186304(arg0, 0xD, 2); - func_8012AD44((s32 *)arg0, 9); - arg0[0xC1] = 0; - *(s16 *)(arg0 + 0xFE) = 0; - func_80186CA8(arg0); - func_8018592C(arg0); + ((void (*)(s32))func_80178970)(a0); + func_8017DE08(a0); + if ((*(s32 *)(a0 + 0x1C) -= 0x10) <= 0) { + *(s16 *)(a0 + 0x10A) = 4; + *(s16 *)(a0 + 0x34) = 4; } break; + + case 4: + if (((s32 (*)(s32))func_80178970)(a0) != 0) { + ((void (*)(s32))func_80178D18)(a0); + *(s16 *)(a0 + 0x34) = 5; + p = (u16 *)D_801202A0; + for (i = 0; i < 0x60; i++) { + if (*p == 0x26E) { + p[0x2E] = 0x9000; + p[0x1A] = 0; + } + p += 0x86; + } + } else { + if (*(s32 *)(a0 + 0x94) == 0x35) { + func_8002D4C8(0xA47, 0); + } + } + break; + + case 5: + break; } } -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_801838A8); +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017F65C", func_8017F98C); -#include "common.h" +extern u8 * func_8012913C(s32 a0); +extern s32 rand(void); -extern void func_80187348(s32 a0, s32 a1); -extern void func_80187280(s32 a0, s32 a1); -extern void func_801851E0(s32 a0); - -extern s32 D_801E43DC; -extern s32 D_801E43E0; -extern s32 D_801E43E4; -extern s32 D_801E43E8; -extern volatile s32 D_801E43EC; -extern volatile s32 D_801E43F0; -extern volatile s32 D_801E43F4; -extern volatile s32 D_801E43F8; - -extern u16 D_80195E44[]; -extern u16 D_80195E78[]; -extern u16 D_80195EAC[]; -extern u16 D_80195EE0[]; - -void func_80183B0C(void) +void func_8017FBA4(s32 param_1) { - func_80187348(D_801E43EC, 9); - func_80187348(D_801E43F0, 10); - func_80187348(D_801E43F4, 11); - func_80187348(D_801E43F8, 12); + u8 *obj; + s32 i; - func_80187280(D_801E43DC, 5); - func_80187280(D_801E43E0, 6); - func_80187280(D_801E43E4, 7); - func_80187280(D_801E43E8, 8); - - func_801851E0(D_801E43DC); - func_801851E0(D_801E43E0); - func_801851E0(D_801E43E4); - func_801851E0(D_801E43E8); - - *(u16 *)(D_801E43EC + 0x76) = D_80195E44[0]; - *(u16 *)(D_801E43F0 + 0x76) = D_80195E78[0]; - *(u16 *)(D_801E43F4 + 0x76) = D_80195EAC[0]; - *(u16 *)(D_801E43F8 + 0x76) = D_80195EE0[0]; - - *(u16 *)(D_801E43EC + 0x5C) = 0x8400; - *(u16 *)(D_801E43F0 + 0x5C) = 0; - *(u16 *)(D_801E43F4 + 0x5C) = 0x8400; - *(u16 *)(D_801E43F8 + 0x5C) = 0; -} - - -extern u16 D_80126614; -extern s32 func_8012C890(s32 a0, s32 a1, s32 a2); -extern void func_8001C1E4(s32); - -s32 func_80183C7C(void *a0) { - struct { - u16 f00, f02, f04, f06, f08, f0A, f0C, f0E; - u32 f10; - } buf; - u16 *s0 = &D_80126614; - s32 s1 = (s32)a0; - - if (*s0 != 0) { - return 0; + for (i = 0; i < 4; i++) { + obj = func_8012913C(0x23); + if (obj != NULL) { + *(s16 *)(obj + 6) = *(u16 *)(param_1 + 6) + (rand() % 160) - 0x50; + *(s16 *)(obj + 0xA) = *(u16 *)(param_1 + 0xA) - (rand() % 160); + *(s16 *)(obj + 0xE) = *(u16 *)(param_1 + 0xE) + (rand() % 160) - 0x50; + *(s16 *)(obj + 0x34) = 0x7000; + *(s32 *)(obj + 0x18) = 0; + *(s32 *)(obj + 0x14) = 0; + *(s32 *)(obj + 0x10) = 0; + } } - buf.f04 = 0; - buf.f02 = 0; - buf.f00 = 0; - buf.f06 = 0x40; - buf.f0A = 0; - buf.f08 = 0; - buf.f0E = 0; - buf.f10 = 0; + *(s32 *)(*(s32 *)(param_1 + 0x20) + 4) |= 0x80000000; + *(s32 *)(param_1 + 0x1C) = 6; + *(s16 *)(param_1 + 2) = 5; +} - s0 = (u16 *)func_8012C890((s32)&buf, (s32)s0, s1); - if (s0 != 0) { - ((void (*)(s32, s32))func_8001C1E4)(*(s32 *)((u8 *)s0 + 0x20), *(s32 *)((u8 *)s1 + 0x20)); + +extern void (*D_80185DDC[])(void); +extern u16 D_80126B96; +extern s32 func_8012D624(s16*, s32, s32); +extern void func_8002D4C8(s32, s32); + +void func_8017FCF4(void *param_1) { + u16 *q; + D_80185DDC[*(u16 *)((s32)param_1 + 0x2)](); + if (*(u16 *)((s32)param_1 + 0x0) != 0) { + *(s16 *)((s32)param_1 + 0xa) = *(u16 *)((s32)param_1 + 0xa) - 0x40; + if (*(u16 *)((s32)param_1 + 0x2) >= 5) { + if (((s32 (*)(void *, s32, s32))func_8012D624)(param_1, 0xA0, 0x78) == 1) { + q = &D_80126B96; + *q |= 0x4000; + } + } else { + if (((s32 (*)(void *, s32, s32))func_8012D624)(param_1, 0x10, 0x78) == 1) { + *(u16 *)((s32)param_1 + 0x2) = 4; + func_8002D4C8(0x941, 0); + q = &D_80126B96; + *q |= 0x4000; + } + } + *(s16 *)((s32)param_1 + 0xa) = *(u16 *)((s32)param_1 + 0xa) + 0x40; } - return (s32)s0; } +extern void (*D_80185E08[])(void *); +extern void func_8012B370(s32 a0); +extern s32 func_8004787C(s32 a0); +extern s32 func_80047948(s32 a0); +extern s32 func_8012D5E4(s32 a0, s32 a1, s32 a2, s32 a3); -extern void (*D_80196320[])(void); +void func_8017FDDC(void *a0) { + s32 i; + s16 pos[3]; + s16 vel[3]; -void func_80183D18(void *a0) { - D_80196320[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern void (*D_80196328[])(void); -extern void func_8012AD44(s32 *a0, s16 a1); - -void func_80183D54(s32 a0) { - *(u8 *)(a0 + 0xC1) = 0; - *(u16 *)(a0 + 0x5E) = 0; - *(u32 *)(a0 + 0x58) = (s32)D_80196328 | 0x40000000; - func_8012AD44((s32 *)a0, 1); + D_80185E08[*(u16 *)((s32)a0 + 2)](a0); + if (*(u16 *)a0 != 0) { + func_8012B370((s32)a0); + i = 0; + pos[0] = 0; + vel[1] = 0; + pos[1] = 0; + pos[2] = 0; + while (i < 0x1000) { + vel[0] = func_8004787C(i) >> 7; + vel[2] = func_80047948(i) >> 7; + func_8012D5E4((s32)a0, (s32)pos, (s32)vel, 0x40); + i += 0x200; + } + } } #include "common.h" -extern u16 D_801D323A; -extern u16 D_800B99D8; -extern u16 D_801E4BBC; -extern u8 D_801E44A0; -extern u8 D_801E44A1; - -extern void func_80132784(s32 a0, s32 a1, u32 a2); extern void func_8004914C(void *a0); extern void func_800491AC(void *a0); -extern void RotTransSV(void *a0, void *a1, void *a2); - -void func_80183D90(void *arg0) { - s16 sv0[4]; - s16 sv1[4]; - u8 *p = (u8 *)arg0; - s32 s1; - u16 f; - s32 t; - s32 x, y; - u16 g; - - D_801D323A += 0x40; - func_80132784((s32)arg0, *(s32 *)(p + 0x64), 0x15); - - f = *(u16 *)(p + 0xFC); - if (f & 3) { - if (f & 1) { - if (*(s16 *)(p + 0xE) > 0) { - *(s16 *)(p + 0xE) = *(s16 *)(p + 0xE) - 4; - } else { - *(u16 *)(p + 0xFC) = f & 0xFFFE; - *(s16 *)(p + 0xAE) = 0; - } - } else { - if (*(s16 *)(p + 0xE) < 0x18) { - *(s16 *)(p + 0xE) = *(s16 *)(p + 0xE) + 4; - } else { - *(u16 *)(p + 0xFC) = f & 0xFFFD; - } - } - } - - s1 = *(s32 *)(p + 0xCC); - if (s1 == 0) { - return; - } - - if (*(s16 *)(p + 0xE) >= 0x13 || *(s32 *)(*(s32 *)(p + 0x20) + 4) < 0) { - *(s32 *)(s1 + 4) |= 0x80000000; - } else { - *(s32 *)(s1 + 4) &= 0x7FFFFFFF; - func_8004914C((void *)(*(s32 *)(p + 0x20) + 0x34)); - func_800491AC((void *)(*(s32 *)(p + 0x20) + 0x34)); - - sv0[0] = 0; - sv0[1] = 0x18; - sv0[2] = -0x68; - RotTransSV(sv0, (void *)(s1 + 8), sv1); - - t = *(s16 *)(p + 0xE); - if (t < 8) { - *(s16 *)(s1 + 0x1A) = (8 - t) * 0x240; - *(s16 *)(s1 + 0x18) = (8 - t) * 0x240; - } else { - *(s16 *)(s1 + 0x1A) = 0; - *(s16 *)(s1 + 0x18) = 0; - } - - g = D_800B99D8; - if (g & 0x20) { - s32 v = g & 0x1F; - y = v | 0x20; - x = v * 4 + 0x70; - } else { - s32 v = g & 0x1F; - y = 0x40 - v; - x = 0xF0 - v * 4; - } - - if (D_801E4BBC == 2) { - s32 q = *(s16 *)(*(s32 *)(p + 0x64) + 0x76); - if (q < 0x41) { - if (q < 0x19) { - D_801E44A0 = x; - D_801E44A1 = y; - } else { - D_801E44A0 = x; - D_801E44A1 = x; - } - return; - } - } - D_801E44A0 = y; - D_801E44A1 = x; - } -} - - -#include "common.h" - -typedef struct { u8 b[4]; } Blk4_80183FCC; - -extern void func_8001C924(s32 a0, void *a1); -extern void func_80132784(s32 a0, s32 a1, u32 a2); -extern void func_800233CC(void *a0, unsigned short a1); -extern void func_8001CD9C(int a0, void *a1); -extern void func_8001D074(s32 a0, s32 a1); -extern void func_801840E8(s32 a0); - -extern u8 D_801F12E8; -extern u8 D_801D3230; -extern u16 D_801D323A; -extern u8 D_801E44A0; -extern u8 D_801E44A4; -extern u8 D_801E2E70; -extern u8 D_801E2E74; - -void func_80183FCC(s32 param_1) -{ - u8 *s2; - s32 s0; - - func_8001C924(*(s32 *)(param_1 + 0x20), &D_801F12E8); - - *(s32 *)(*(s32 *)(param_1 + 0x20) + 0x20) = (s32)&D_801D3230; - D_801D323A = 0; - - *(u16 *)(param_1 + 0xE) = 0x18; - if (*(u16 *)(param_1 + 0xFC) & 1) { - func_801840E8(param_1); - } - - func_80132784(param_1, *(s32 *)(param_1 + 0x64), 0x15); - - s2 = &D_801E44A0; - func_800233CC(s2, 0x28); - - *(Blk4_80183FCC *)s2 = *(Blk4_80183FCC *)&D_801E2E70; - *(Blk4_80183FCC *)&D_801E44A4 = *(Blk4_80183FCC *)&D_801E2E74; - - s0 = ((s32 (*)(s32, s32))func_8001D074)(0x7E, 0x100); - *(s32 *)(param_1 + 0xCC) = s0; - if (s0 != 0) { - func_8001CD9C(s0, s2); - *(u16 *)(s0 + 0x2C) = 0xC010; - *(u32 *)(s0 + 4) |= 0xD0000000; - } -} - - +extern s32 RotTransPers(s32 a0, s32 a1, s32 *a2, s32 *a3); extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8012CBCC(s32 a0); +extern void func_8012C218(s32 a0); -void func_801840E8(s32 a0) -{ - if (*(u32 *)(*(s32 *)(a0 + 0x64) + 0xE8) & 2) { - if (*(s16 *)(a0 + 0xE) == 0x18) { - *(u16 *)(a0 + 0xFC) |= 1; - func_8002D4C8(0x50A, 0); - } +extern u8 D_800AF648; + +void func_8017FE9C(s32 a0) { + struct { + s16 v[3]; /* sp+0x10 */ + s16 pad0; /* sp+0x16 */ + u16 sxy[2]; /* sp+0x18 */ + s32 z; /* sp+0x1C */ + s32 flag; /* sp+0x20 */ + s32 padend; /* frame padding: vars must be 0x28 */ + } L; + + if (*(s16 *)(a0 + 0x84) != 0) { + *(s16 *)(a0 + 0x84) = *(s16 *)(a0 + 0x84) - 1; } else { - *(u16 *)(a0 + 0xFC) |= 1; - } -} - - -void func_8018415C(void *a0) { - s32 v0; - if (*(s16 *)((s32)a0 + 0xe) == 0) { - *(s16 *)((s32)a0 + 0xae) = -1; - v0 = *(u16 *)((s32)a0 + 0xfc); - *(u16 *)((s32)a0 + 0xfc) = v0 | 2; - } - } - - -void func_80184184(s32 a0) { - s32 a1; - - a1 = *(s32 *)(a0 + 0x20); - *(u8 *)(a0 + 0xC1) = 0; - *(u16 *)(a0 + 0x5E) = 0; - *(s32 *)(a0 + 0x1C) = 0x18; - *(u32 *)(a1 + 4) |= 0x80000000; - *(u16 *)(a0 + 2) = 4; - if (*(s32 *)(a0 + 0xCC) != 0) { - *(u16 *)*(s32 *)(a0 + 0xCC) = 0; - } - func_8002D4C8(0x509, 0); -} - - -#include "common.h" - -extern s32 func_8012BEE8(s32 a0); -extern void func_80132784(s32 a0, s32 a1, u32 a2); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_8018A7D8(u16 *a0, u16 *a1, s16 *a2, s32 a3); - -extern u16 D_801E43C8; -extern s16 D_8019633C; -extern s16 D_8019633E; -extern s16 D_80196340; -extern s16 D_80196342; -extern s16 D_80196344; -extern s16 D_80196346; - -void func_801841E0(void *a0) { - if (*(u16 *)((u8 *)a0 + 0x34) == 0) { - if (func_8012BEE8((s32)a0) != 0) { - *(u16 *)((u8 *)a0 + 0x34) = *(u16 *)((u8 *)a0 + 0x34) + 1; - } else { - void *p20; - u16 flags; - u16 a1arr[4]; - s16 a2arr[3]; - - p20 = *(void **)((u8 *)a0 + 0x20); - flags = *(u16 *)((u8 *)p20 + 0x2C); - *(u16 *)((u8 *)p20 + 0x2C) = flags & 0xFFFE; - - func_80132784((s32)a0, *(s32 *)((u8 *)a0 + 0x64), 0x15); - - a1arr[0] = *(s32 *)((u8 *)*(void **)((u8 *)a0 + 0x20) + 0x48) + 0x70; - a1arr[1] = *(s32 *)((u8 *)*(void **)((u8 *)a0 + 0x20) + 0x4C) - 0x10; - a1arr[2] = *(s32 *)((u8 *)*(void **)((u8 *)a0 + 0x20) + 0x50); - a1arr[3] = 0x3000; - - a2arr[0] = (D_8019633E - D_8019633C) >> 1; - a2arr[1] = (D_80196342 - D_80196340) >> 1; - a2arr[2] = (D_80196346 - D_80196344) >> 1; - - func_8018A7D8(&D_801E43C8, a1arr, a2arr, 0); - - if ((D_801E43C8 & 3) != 0) { - return; + *(s16 *)(a0 + 0x84) = 0xF; + L.v[0] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x48); + L.v[1] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x4C); + L.v[2] = *(s32 *)(*(s32 *)(a0 + 0x20) + 0x50); + { 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 x = (s16)L.sxy[0]; + register s32 ax __asm__("$5"); + s32 vol; + ax = x; + if (x < 0) { + ax = -x; + } + vol = ((0xA0 - ax) * 0x7F) / 0xA0; + __asm__("" : "=r"(vol) : "0"(vol)); + x = (x + 0xA0) / 0x14; + if (x == 0x10) { + x = 0xF; + } + x = x << 8; + { + s32 flg = 0x3000; + func_8002D4C8(0x93E, ((vol | flg) | x) & 0xFFFF); } - func_8002D4C8(0x4F4, 0); } } -} - - -extern void (*D_801963E8[])(void); - -void func_8018431C(void *a0) { - D_801963E8[*(u16 *)((s32)a0 + 0x2)](); -} - - -extern s32 D_801E44E0; -extern s32 D_801963D0; -extern s32 *D_801D6D94; -extern void func_801858C4(); -void func_80184358(u8 *arg0) { - register u8 *a0 __asm__("$4") = arg0; - register s32 v0 __asm__("$2"); - register s32 v1 __asm__("$3"); - v0 = *(u16 *)(a0 + 0x5C); - v1 = *(s32 *)(a0 + 0x64); - *(u16 *)(a0 + 0x5C) = v0 & 0xFFFE; - v0 = *(s32 *)(v1 + 0xE8); - if (v0 & 2) { - *(u8 *)(a0 + 0xC1) = 1; - *(s32 *)(a0 + 0x1C) = 8; - func_80185A04(a0, *(s32 *)(a0 + 0x64), *(s16 *)(a0 + 0x60)); - func_801858C4(a0); - } else { - *(u8 *)(a0 + 0xC1) = 0; - *(s16 *)(a0 + 0xAE) = -1; - func_8012AD44((s32 *)a0, 3); - func_80132288(&D_801E44E0, &D_801963D0, (s32)D_801D6D94); - func_801858C4(a0); - func_8002D4C8(0x4F2, 0); + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) + 0x300; + if (((s32 (*)(s32))func_8012CBCC)(a0) != 0) { + func_8012C218(a0); } + + if ((*(s32 *)(a0 + 0x1C) -= 1) == 0) { + func_8012C218(a0); + } +} + + + +extern void (*D_80185E24[])(void); +extern s16 D_80126B9A; +extern s32 func_8012D624(s16 *a0, s32 a1, s32 a2); +extern s32 func_8012B8A4(s16 *a0); + +void func_80180058(s16 *param_1) { + D_80185E24[*(u16 *)(param_1 + 1)](); + if (*(u16 *)param_1 != 0 && func_8012D624(param_1, 0x1E, 100) != 0) { + D_80126B9A = func_8012B8A4(param_1); + } +} + + + +extern void (*D_80185E2C[])(void); + +void func_801800D4(void *a0) { + D_80185E2C[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern u16 D_801B9F00; +extern u16 D_801B9F02; +extern u16 D_801B9F04; +extern u16 D_801B9F08; +extern u16 D_801B9F0A; +extern u16 D_801B9F0C; + +void func_80180110(void *a0) { + u16 var_v1; + u16 var_a1; + *(u16 *)((s32)a0 + 0xDC) = D_801B9F00; + *(u16 *)((s32)a0 + 0xDE) = D_801B9F02; + *(u16 *)((s32)a0 + 0xE0) = D_801B9F04; + *(u16 *)((s32)a0 + 0xE4) = D_801B9F08; + *(u16 *)((s32)a0 + 0xE6) = D_801B9F0A; + var_v1 = *(u16 *)((s32)a0 + 2); + var_a1 = D_801B9F0C; + *(u16 *)((s32)a0 + 2) = var_v1 + 1; + *(u16 *)((s32)a0 + 0xE8) = var_a1; } #include "common.h" +extern u16 D_801B9F00; +extern u16 D_801B9F02; +extern u16 D_801B9F04; +extern u16 D_801B9F08; +extern u16 D_801B9F0A; +extern u16 D_801B9F0C; + +void func_8018017C(void *a0) { + u16 v1; + u16 a1; + *(u16 *)((s32)a0 + 0xFC) = D_801B9F00; + v1 = *(u16 *)((s32)a0 + 2); + *(u16 *)((s32)a0 + 0xFE) = D_801B9F02; + *(u16 *)((s32)a0 + 0x100) = D_801B9F04; + *(u16 *)((s32)a0 + 0x104) = D_801B9F08; + *(u16 *)((s32)a0 + 0x106) = D_801B9F0A; + a1 = D_801B9F0C; + *(u32 *)((s32)a0 + 0x1C) = 0x10; + *(u16 *)((s32)a0 + 2) = v1 + 1; + *(u16 *)((s32)a0 + 0x108) = a1; +} + + +extern void func_80180228(s32 a0); extern s32 func_8012BEE8(s32 a0); -extern void func_80132784(s32 a0, s32 a1, u32 a2); -extern void func_8013240C(s32 a0, s32 a1, u32 a2); -extern s32 D_801E44E0; - -void func_80184404(s32 a0) { - register s32 s0 __asm__("$16") = a0; - register s32 temp_a0 __asm__("$4") = a0; - s32 a1; - s32 v0; - u32 a2 = 0x15; - - a1 = *(s32 *)(s0 + 0x64); - v0 = *(s32 *)(a1 + 0xE8); - - if ((v0 & 0x2) == 0) { - func_8013240C((s32)&D_801E44E0, a1, 0x15); - temp_a0 = s0; - a1 = *(s32 *)(s0 + 0x64); - a2 = 0; - } - - func_80132784(temp_a0, a1, a2); - - v0 = func_8012BEE8(s0); - if (v0 != 0) { - *(u8 *)(s0 + 0xC1) = 0; - *(u16 *)(s0 + 0x5E) = 0; - } -} - - -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_8012B200(u8 *a0); -extern s32 D_801963FC; - -void func_80184480(s32 arg0) { - s32 s0 = arg0; - - *(s32 *)(s0 + 0x58) = (s32)&D_801963FC; - *(u16 *)(s0 + 0x5C) = 0x8C00; - func_8012AD44((s32 *)s0, 1); - func_8012B200((u8 *)s0); - *(s32 *)(s0 + 0xC) = 0; - *(s32 *)(s0 + 8) = 0; - *(s32 *)(s0 + 4) = 0; -} - - -void func_801844D4(s32 arg0) { - s32 self = arg0; - s32 v0; - s32 v1; - - func_8012AD44((s32 *)self, 2); - v0 = *(s32 *)(self + 0x64); - v0 = *(s32 *)(v0 + 0x20); - v0 = *(u16 *)(v0 + 0x12); - *(s16 *)(self + 0xFE) = 0x10; - *(s16 *)(self + 0xFC) = v0 + 0x200; - v1 = func_8012C658(0x53, 6, self); - *(s32 *)(self + 0xCC) = v1; - if (v1 != 0) { - *(s32 *)(v1 + 0xCC) = *(s32 *)(*(s32 *)(self + 0x64) + 0xCC); +extern void func_8012C218(s32 a0); +void func_801801E8(s32 a0) { + func_80180228(a0); + if (func_8012BEE8(a0)) { + func_8012C218(a0); } } #include "common.h" -/* File-local mirror types: match_one compiles standalone with -Iinclude - * only, so the TU's real Blk20 (src/shared/engine_types.h) is not - * reachable here. These mirror its exact byte layout. */ -typedef struct { s32 w[8]; } Blk20_8018454C; -typedef struct { s16 vx, vy, vz, pad; } SVec3_8018454C; +/* func_80180228 — ov_SC06_030 / ov_SC06_030_jr_8017C8D0 (132 ins) + * + * Remap variant of the banked family func_80187EE8 (ov_SC03_014_jr_801848E4, + * MATCH): builds ONE 4-vertex gouraud packet on the stack (verts sp+0x10, + * colours sp+0x30, code sp+0x40), colour ramp derived from the s32 at a0+0x1C + * (*15, >>1, -0x10 clamped-at-0 for the far pair), then loads the camera matrix + * cached at D_800AF630+0x18 and runs one rtpt+rtps+avsz4 group over the + * SVECTORs at a0+0xFC / a0+0x104 / a0+0xDC / a0+0xE4, with the shared + * OT-range guard (otz>0, flag>=0, OT slot < &D_800AE610, (flag&~0x1000)==0). + * + * REMAP vs twin: the HALVED channel is BLUE here (twin: green). Target store + * order per vertex pair is b1,b0,r1,r0,g1,g0 — reproduced by three chained + * statements (right-to-left evaluation), b/r/g. + */ -extern Blk20 D_800AE620; -extern void func_80132784(s32 a0, s32 a1, u32 a2); -extern void RotMatrixY(s32 a0, void *a1); +extern u8 D_800AF630[]; /* TU line 53, verbatim */ -#define gte_SetRotMatrix(r0) __asm__ volatile ( \ +typedef struct { s16 vx, vy, vz, pad; } SV_80180228; +typedef struct { u8 r, g, b, cd; } CV_80180228; +typedef struct { + SV_80180228 v[4]; /* +0x00 : sxy0..3 (v[0].vz doubles as the otz slot) */ + CV_80180228 rgb[4]; /* +0x20 */ + u32 code; /* +0x30 */ + u32 pad; /* +0x34 */ +} PKT_80180228; + +/* every macro is suffixed: this TU already #defines the unsuffixed gte_* family + * (func_8017C8D0 region), so an unsuffixed name would clash. */ +#define gte_ldv0_80180228(r0) __asm__ volatile ( \ + "lwc2 $0, 0( %0 );" \ + "lwc2 $1, 4( %0 )" \ + : \ + : "r"( r0 ) ) + +#define gte_ldv3_80180228(r0, r1, r2) __asm__ volatile ( \ + "lwc2 $0, 0( %0 );" \ + "lwc2 $1, 4( %0 );" \ + "lwc2 $2, 0( %1 );" \ + "lwc2 $3, 4( %1 );" \ + "lwc2 $4, 0( %2 );" \ + "lwc2 $5, 4( %2 )" \ + : \ + : "r"( r0 ), "r"( r1 ), "r"( r2 ) ) + +#define gte_rtps_80180228() __asm__ volatile ("nop;nop;rtps") +#define gte_rtpt_80180228() __asm__ volatile ("nop;nop;rtpt") +#define gte_avsz4_80180228() __asm__ volatile ("nop;nop;avsz4") + +#define gte_stsxy_80180228(r0) __asm__ volatile ( \ + "swc2 $14, 0( %0 )" \ + : \ + : "r"( r0 ) \ + : "memory" ) + +#define gte_stsxy3_80180228(r0, r1, r2) __asm__ volatile ( \ + "swc2 $12, 0( %0 );" \ + "swc2 $13, 0( %1 );" \ + "swc2 $14, 0( %2 )" \ + : \ + : "r"( r0 ), "r"( r1 ), "r"( r2 ) \ + : "memory" ) + +#define gte_stotz_80180228(r0) __asm__ volatile ( \ + "swc2 $7, 0( %0 )" \ + : \ + : "r"( r0 ) \ + : "memory" ) + +#define gte_stflg_80180228(r0) __asm__ volatile ( \ + "cfc2 $12, $31;" \ + "nop;" \ + "sw $12, 0( %0 )" \ + : \ + : "r"( r0 ) \ + : "$12", "memory" ) + +#define gte_SetRotMatrix_80180228(r0) __asm__ volatile ( \ "lw $12, 0( %0 );" \ "lw $13, 4( %0 );" \ "ctc2 $12, $0;" \ @@ -4334,883 +3170,788 @@ extern void RotMatrixY(s32 a0, void *a1); : "r"( r0 ) \ : "$12", "$13", "$14" ) -#define gte_ldv0(r0) __asm__ __volatile__( \ - "lwc2 $0, 0(%0)\n" \ - "lwc2 $1, 4(%0)\n" \ - : : "r"(r0) : "memory") +#define gte_SetTransMatrix_80180228(r0) __asm__ volatile ( \ + "lw $12, 20( %0 );" \ + "lw $13, 24( %0 );" \ + "ctc2 $12, $5;" \ + "lw $14, 28( %0 );" \ + "ctc2 $13, $6;" \ + "ctc2 $14, $7" \ + : \ + : "r"( r0 ) \ + : "$12", "$13", "$14" ) -#define gte_rtv0() __asm__ __volatile__( \ - "nop\n" \ - "nop\n" \ - "mvmva 1, 0, 0, 3, 0\n" \ - : : : "memory") - -#define gte_stlvnl(r0) __asm__ __volatile__( \ - "swc2 $25, 0(%0)\n" \ - "swc2 $26, 4(%0)\n" \ - "swc2 $27, 8(%0)\n" \ - : : "r"(r0) : "memory") - -void func_8018454C(s32 a0) +void func_80180228(s32 a0) { - s32 self; - Blk20_8018454C mat; - SVec3_8018454C vec; - s32 res[3]; - u16 counter; - s16 angle; + extern void func_80017714(void *); + extern s16 D_800B9A02; + /* §183 TYPE-shadowed-block-scope: adopt the twin's spelling for D_800A651C. + * The typedef is declared BLOCK-SCOPE here so it shadows (never redefines) + * the file-scope copy in src/shared/engine_types.h, which is byte-identical. */ + typedef struct { s32 a; s32 b[4]; } Ot_8018B23C; + extern Ot_8018B23C D_800A651C[]; + extern u8 D_800AE610[]; - self = a0; - mat = (*(Blk20_8018454C *)&D_800AE620); + PKT_80180228 pkt; /* sp+0x10 .. sp+0x47 */ + s32 flag1; /* sp+0x48 */ + s32 flag2; /* sp+0x4C */ + s32 otz; /* sp+0x50 */ + u8 *base; + s32 *m; + s16 c, p, q; + s32 d; - func_80132784(self, *(s32 *)(*(s32 *)(self + 0x64) + 0xCC), 6); + c = *(s32 *)(a0 + 0x1C) * 15; + base = D_800AF630; + p = c; + d = c >> 1; + q = d; - counter = *(u16 *)(self + 0x34); - if (counter == 0) { - angle = *(s16 *)(self + 0xFE); - if (angle < 0xA0) { - *(s16 *)(self + 0xFE) = angle + 5; - } else { - *(u16 *)(self + 0x34) = counter + 1; - } + /* REMAP: halved channel is BLUE (twin func_80187EE8: green). + Store order b1,b0,r1,r0,g1,g0 == target's sb sequence. */ + pkt.rgb[0].b = pkt.rgb[1].b = q; + pkt.rgb[0].r = pkt.rgb[1].r = p; + pkt.rgb[0].g = pkt.rgb[1].g = p; + + c -= 0x10; + p = c; + if (c < 0) { + p = 0; } - { - s32 facing = (*(u16 *)(self + 0xFC) - 0x100) & 0xFFF; - *(u16 *)(self + 0xFC) = facing; - RotMatrixY(facing, &mat); - } - - vec.vy = 0; - vec.vx = 0; - vec.vz = *(u16 *)(self + 0xFE); - - gte_SetRotMatrix(&mat); - gte_ldv0(&vec); - gte_rtv0(); - gte_stlvnl(res); - - *(s32 *)(*(s32 *)(self + 0x20) + 0x48) += res[0]; - *(s32 *)(*(s32 *)(self + 0x20) + 0x4C) += res[1]; - *(s32 *)(*(s32 *)(self + 0x20) + 0x50) += res[2]; -} - - -#include "common.h" - -typedef struct { - s16 f0; - s16 f2; - s16 f4; - s16 f6; -} D_80195AF4_t; -extern D_80195AF4_t D_80195AF4[]; - - -extern D_80195AF6_t D_80195AF6[]; - -extern s16 D_80126CB4; -extern s16 D_80126CB8; -extern u16 D_801E4BBC; -extern void *func_8018ABE0(s32 a0); -extern void func_80132DC4(s32 a0, s32 a1, s32 a2); -extern void func_8012AD44(s32 *a0, s16 a1); - -void func_801846CC(void *a0) -{ - struct { - s16 f0; - s16 f2; - s16 f4; - u8 pad[8]; - } local; - - *(u16 *)((u8 *)a0 + 0x100) = *(u16 *)((u8 *)(*(void **)((u8 *)a0 + 0x64)) + 0xE0); - *(s16 *)((u8 *)a0 + 0x6) = *(s32 *)((u8 *)(*(void **)((u8 *)a0 + 0x20)) + 0x48); - *(s16 *)((u8 *)a0 + 0xA) = *(s32 *)((u8 *)(*(void **)((u8 *)a0 + 0x20)) + 0x4C); - *(s16 *)((u8 *)a0 + 0xE) = *(s32 *)((u8 *)(*(void **)((u8 *)a0 + 0x20)) + 0x50); - - if (*(s16 *)((u8 *)a0 + 0x100) < 0) { - local.f0 = D_80126CB4; - local.f2 = *(u16 *)((u8 *)(*(void **)((u8 *)a0 + 0x64)) + 0xA); - local.f4 = D_80126CB8; - } else { - if (D_801E4BBC == 1) { - void *p = func_8018ABE0(*(s16 *)((u8 *)a0 + 0x100)); - local.f0 = *(u16 *)((u8 *)p + 0x6); - local.f2 = *(u16 *)((u8 *)p + 0xA) + 0x80; - local.f4 = *(u16 *)((u8 *)p + 0xE); - } else { - local.f0 = D_80195AF4[*(s16 *)((u8 *)a0 + 0x100)].f0; - local.f2 = *(u16 *)((u8 *)(*(void **)((u8 *)a0 + 0x64)) + 0xA); - local.f4 = D_80195AF6[*(s16 *)((u8 *)a0 + 0x100)].f0; + s16 e; /* block-scoped: one pseudo (§136/L1) */ + e = d - 0x10; + q = e; + if (e < 0) { + q = 0; } } + pkt.rgb[2].b = pkt.rgb[3].b = q; + pkt.rgb[2].r = pkt.rgb[3].r = p; + pkt.rgb[2].g = pkt.rgb[3].g = p; - if (*(s32 *)((u8 *)(*(void **)((u8 *)a0 + 0x64)) + 0xE8) & 0x2000) { - func_80132DC4((s32)a0, (s32)&local, 0x480); - } else { - func_80132DC4((s32)a0, (s32)&local, 0x400); + pkt.code = 0x50000000; + + m = (s32 *)(base + 0x18); + gte_SetRotMatrix_80180228(m); + gte_SetTransMatrix_80180228(m); + + gte_ldv3_80180228((SV_80180228 *)(a0 + 0xFC), (SV_80180228 *)(a0 + 0x104), + (SV_80180228 *)(a0 + 0xDC)); + gte_rtpt_80180228(); + gte_stflg_80180228(&flag1); + gte_stsxy3_80180228(&pkt.v[0], &pkt.v[1], &pkt.v[2]); + gte_ldv0_80180228((SV_80180228 *)(a0 + 0xE4)); + gte_rtps_80180228(); + gte_stflg_80180228(&flag2); + flag1 = flag1 | flag2; + gte_stsxy_80180228(&pkt.v[3]); + gte_avsz4_80180228(); + gte_stotz_80180228(&otz); + + if (otz > 0 && flag1 >= 0 && + !((u32)&D_800AE610 < + (u32)(*(s32 *)((u8 *)&D_800A651C + (*(u16 *)&D_800B9A02) * 0x14) + + otz * 4)) && + (flag1 & 0xFFFFEFFF) == 0) { + pkt.v[0].vz = (s16)otz; + func_80017714(&pkt.v[0]); } - func_8012AD44((s32 *)a0, 3); } -/* func_80184828 (ov_SC02_005, TU src/ov_SC02_005/ov_SC02_005_jr_80181D30.c) — MATCH 111/111. - * - * Second-pass repair of the pass-1 NEAR (closeness 33, "schedule-load-gap"). The pass-1 draft - * had the whole structure right; the residual was 33 ins in the final else-arm tail (2 gas - * load-delay nops + everything downstream of them). Three levers, applied in this order: - * - * 1. STATEMENT ORDER (sched.md S1) — the `D_801270C8 = ...f4` store must come BEFORE - * `D_801E43B4 += 1`. Pass-1 had them the other way, which serialised the two independent - * chains onto ONE scratch register ($v0) and cost both load-delay nops. 33 -> 5. - * (Swept all 30 legal permutations of {s1=1, sh 0xE, f4 store, D_801E43B4 RMW} incl. a - * split read/write of the RMW: the whole family plateaus at 5. Order alone cannot finish.) - * - * 2. MEM_IN_STRUCT_P ON THE 0xE STORE (sched.md §1 item 1 / §30 store-vs-load flag) — the - * residual-4 was a clean 2-block swap: target 79..83 = lh 0x100 / lui+lhu D_801E43B4 / - * li $s1 / sh 0xE, mine had {li,sh} and {lui,lhu} transposed. No statement order can - * reach it (LUID model is self-contradictory: the 0x100 reload only EXISTS because the - * 0xE store precedes it and defeats cse, yet the schedule wants the store's LUID higher). - * Spelling the 0xE store as a struct-field write — `((struct S0E *)((u8*)a0+0xE))->v` — - * sets MEM_IN_STRUCT_P on that MEM, which changes the sched dependence/hazard classing - * against the plain-cast `lh 0x100` load and lands the target's exact order. 5 -> 1. - * NOTE both arms of `D_801E4BBC == 1` use the struct spelling; the other arm is unaffected. - * - * 3. THE ADDU OPERAND ORDER (cookbook §164-03 + §164-02/§153) — last residual was - * `addu $v0,$v0,$a1` vs target `addu $v0,$a1,$v0` (sides wrong, registers right). - * BOTH halves are needed and neither works alone: - * (a) §164-03: hoist the scale into its own local (`off = idx * 8;`) so expand's - * `both_summands` "put a multiplication first" canonicalisation cannot fire; - * (b) §164-02/§153: `__asm__("" : "=r"(p) : "0"(p))` launders `p` out of cse's - * constant-equivalence class. `p = D_80195AF6` is a bare `la sym`, so `insert` - * gives its quantity qty_const and `fold_rtx` (cse.c:5282-5289) swaps any - * commutative rtx whose operand 0 is constant-equivalent — i.e. it forces - * index-first for EITHER source spelling. Killing qty_const restores Fix A1. - * The launder is an #APP scheduling barrier, so its PLACEMENT is load-bearing: it must be - * inside the innermost if-body, at or above `s1 = 1` (swept 90 order x position combos; - * 12 MATCH, all with the launder in the body and `H` (the 0xE store) before `off`). - * 1 -> MATCH. - * - * Symbols: all 15 relocations spelled from the target .s. TU-conformance checked: - * func_8012AD80(s32) :2610, func_8013C9C4(void*) :1308, func_8012B2CC(s32) :2528, - * D_801270C8 s32 :2741, D_80126B96 u16 :3142 — copied verbatim. The TU has no prior - * declaration of func_80184828, so the void* signature is free (no DEF-side wall). - * Local typedefs are address-suffixed to avoid colliding with the TU's carried decl layer. - */ -#include "common.h" +extern void func_8001AAA0(s32 arg); + s32 func_80180438(void) { + return ((s32 (*)(s32))func_8001AAA0)(0x7C) != 0; + } -typedef struct { - s16 vx, vy, vz, pad; -} SVec_80184828; -struct S0E_80184828 { s16 v; }; +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017F65C", func_80180458); -extern void func_8012AD80(s32 a0); -extern s32 func_80187508(); -extern u16 D_80126B96; -extern s16 D_80126B98; -extern u16 D_801E4BBC; -extern void *func_8018ABE0(s32 a0); -extern void func_8018AEB4(s32 a0, s32 a1); -extern u16 D_801E43B4; -extern s32 D_801270C8; -extern void func_801849E4(void *a0); -extern void func_8013C9C4(void *a0); -extern void (*D_80191060[])(void); +extern void func_800D0C48(s32 arg); + void func_8018047C(void) { + func_800D0C48(0x1); + } + + +extern s32 func_80180C5C(void); + s32 func_8018049C(void) { + return func_80180C5C() != 0; + } + + +extern void func_80016714(void *a0, s32 a1); +extern void func_8002A04C(s32 a0); +extern void func_8012C218(s32 a0); + +void func_801804BC(void *a0) { + if (*(u32 *)(a0 + 0xCC) != 0) { + func_80016714(*(void **)(a0 + 0xCC), 0x84); + } + func_8002A04C((s32)a0); + func_8012C218((s32)a0); +} + + +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8012A828(s32 a0, void *a1); extern void func_8012B2CC(s32 a0); +extern s32 func_80143970(s32 a0); -extern D_80195AF6_t D_80195AF6[]; - -void func_80184828(void *a0) -{ - struct { - SVec_80184828 v1; - SVec_80184828 v2; - u8 pad[8]; - } local; - s32 s2; - s32 off; +void func_80180508(void *a0) { + extern u8 D_80185D14[]; + extern u8 D_8018E4E4[]; + extern u8 D_80182184[]; + extern u8 D_8019EC8C; + extern u8 D_80185D48; s32 s1; - local.v1.vx = *(u16 *)((u8 *)a0 + 0x3A); - local.v1.vy = *(u16 *)((u8 *)a0 + 0x3E); - local.v1.vz = *(u16 *)((u8 *)a0 + 0x42); - func_8012AD80((s32)a0); - local.v2.vx = *(u16 *)((u8 *)a0 + 0x6); - local.v2.vy = *(u16 *)((u8 *)a0 + 0xA); - local.v2.vz = *(u16 *)((u8 *)a0 + 0xE); - - if (*(s16 *)((u8 *)a0 + 0xA) < -0x800) { - s2 = 0; - } else { - s2 = 1; - *(s16 *)((u8 *)a0 + 0xA) = -0x800; - *(s32 *)((u8 *)a0 + 0x14) = 0; - } - - s1 = 0; - if (*(s16 *)((u8 *)a0 + 0x100) < 0) { - if (func_80187508(a0) != 0) { - u16 *p96 = &D_80126B96; - *p96 |= 0x4000; - D_80126B98 = 10; - } - } else { - if (D_801E4BBC == 1) { - s16 newval = *(s16 *)((u8 *)func_8018ABE0(*(s16 *)((u8 *)a0 + 0x100)) + 0xE); - if (newval >= *(s16 *)((u8 *)a0 + 0xE)) { - ((struct S0E_80184828 *)((u8 *)a0 + 0xE))->v = newval; - s1 = 1; - func_8018AEB4(*(s16 *)((u8 *)a0 + 0x100), 0); - } + if (func_8012C354((s32)a0, (s32)D_80185D14) != 0) { + s1 = ((s32 (*)(void))func_8012C1B8)(); + if (s1 == 0) { + func_8012CAE4(a0); } else { - D_80195AF6_t *p = D_80195AF6; - s16 newval = D_80195AF6[*(s16 *)((u8 *)a0 + 0x100)].f0; - - if (newval >= *(s16 *)((u8 *)a0 + 0xE)) { - __asm__("" : "=r"(p) : "0"(p)); - s1 = 1; - ((struct S0E_80184828 *)((u8 *)a0 + 0xE))->v = newval; - off = *(s16 *)((u8 *)a0 + 0x100) * 8; - D_801270C8 = *(s16 *)((u8 *)p + off + 4); - D_801E43B4 += 1; - } + *(s32 *)((s32)a0 + 0xCC) = s1; + func_8001C214(s1, (s32)D_8018E4E4); + *(s32 *)(s1 + 0x20) = *(s32 *)D_80182184; + *(s32 *)(s1 + 4) |= 0x80000000; + *(u8 *)((s32)a0 + 0xC0) = 1; + *(s32 *)((s32)a0 + 0xC4) = 3; + *(s32 *)((s32)a0 + 0xB4) = 0; + *(u16 *)((s32)a0 + 2) = 1; + func_8012A828((s32)a0, (void *)&D_8019EC8C); + *(u8 *)((s32)a0 + 0x75) = 0; + *(s32 *)((s32)a0 + 0xBC) = (s32)&D_80185D48; + func_80143970((s32)a0); + *(s32 *)((s32)a0 + 0x48) = 0xFFFE8000; + func_8012B2CC((s32)a0); + *(s32 *)((s32)a0 + 0x1C) = 0xF; } } - - if (s2 || s1) { - func_801849E4(a0); - func_8013C9C4(&(*(s32 *)D_80191060)); - } - func_8012B2CC((s32)a0); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_801849E4); - -extern void func_8012AD44(s32 *a0, s16 a1); - -void func_80184A34(void *arg0) { - *(u16 *)((s32)arg0 + 0xDC) = *(u16 *)((s32)arg0 + 0x6); - *(u16 *)((s32)arg0 + 0xDE) = *(u16 *)((s32)arg0 + 0xA); - *(u16 *)((s32)arg0 + 0xE0) = *(u16 *)((s32)arg0 + 0xE); - func_8012AD44((s32 *)arg0, 5); - *(u16 *)((s32)arg0 + 0x34) = 4; - *(s32 *)((s32)arg0 + 0x1C) = 5; } #include "common.h" -extern s32 func_8012BEE8(s32 a0); -extern void func_80132784(s32 a0, s32 a1, u32 a2); -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_8012B200(u8 *a0); -extern s32 D_801963FC; +extern u8 D_80185C2C[]; +extern u8 D_8019FFA4; +extern s32 func_80178B18(s32, s32); +extern void func_8012A828(s32 a0, void *a1); +extern s32 func_80178970(void); +extern void func_80178D18(void); +extern void func_8017BF08(void *a0, void *a1, s32 a2, s32 a3); +extern void func_8002D4C8(s32 a0, s32 a1); -struct S34_80184A8C { u16 v; }; - -void func_80184A8C(void *a0) { - s32 s0; - s32 ret; - s32 p64; - - ret = func_8012BEE8((s32)a0); - s0 = (s32)a0; - if (ret != 0) { - u16 timer; - - p64 = *(s32 *)(s0 + 0x64); - *(s32 *)(s0 + 0xC) = 0; - *(s32 *)(s0 + 0x8) = 0; - *(s32 *)(s0 + 0x4) = 0; - func_80132784(s0, *(s32 *)(p64 + 0xCC), 6); - - timer = *(u16 *)(s0 + 0x34); - if (timer != 0) { - s32 ptr; - s32 tmp[3]; - - timer -= 1; - ((struct S34_80184A8C *)(s0 + 0x34))->v = timer; - __asm__ __volatile__("" ::: "memory"); - - tmp[0] = (*(s16 *)(s0 + 0xDC) - *(s32 *)(*(s32 *)(s0 + 0x20) + 0x48)) >> 2; - - ptr = *(s32 *)(s0 + 0x20); - tmp[1] = (*(s16 *)(s0 + 0xDE) - *(s32 *)(ptr + 0x4C)) >> 2; - - ptr = *(s32 *)(s0 + 0x20); - tmp[2] = (*(s16 *)(s0 + 0xE0) - *(s32 *)(ptr + 0x50)) >> 2; - - timer = *(u16 *)(s0 + 0x34); - ptr = *(s32 *)(s0 + 0x20); - *(s32 *)(ptr + 0x48) = *(s32 *)(ptr + 0x48) + tmp[0] * timer; - - timer = *(u16 *)(s0 + 0x34); - ptr = *(s32 *)(s0 + 0x20); - *(s32 *)(ptr + 0x4C) = *(s32 *)(ptr + 0x4C) + tmp[1] * timer; - - timer = *(u16 *)(s0 + 0x34); - ptr = *(s32 *)(s0 + 0x20); - *(s32 *)(ptr + 0x50) = *(s32 *)(ptr + 0x50) + tmp[2] * timer; - } else { - s32 cbptr; - - cbptr = *(s32 *)(s0 + 0xCC); - if (cbptr != 0) { - *(u16 *)(cbptr + 0xFC) = 1; - *(s32 *)(s0 + 0xCC) = 0; - } - *(s32 *)(s0 + 0x58) = (s32)&D_801963FC; - *(u16 *)(s0 + 0x5C) = 0x8C00; - func_8012AD44((s32 *)s0, 1); - func_8012B200((u8 *)s0); - *(s32 *)(s0 + 0xC) = 0; - *(s32 *)(s0 + 0x8) = 0; - *(s32 *)(s0 + 0x4) = 0; +void func_801805F8(s32 a0) { + switch (*(u16 *)(a0 + 0x34)) { + case 0: + if (--*(s32 *)(a0 + 0x1C) == 0) { + ((void (*)(s32, s32))func_80178B18)(a0, (s32)D_80185C2C); + *(u16 *)(a0 + 0x34) = 1; + func_8012A828(a0, &D_8019FFA4); } + break; + + case 1: + if (((s32 (*)(s32))func_80178970)(a0) != 0) { + ((void (*)(s32))func_80178D18)(a0); + *(u16 *)(a0 + 2) = 2; + func_8017BF08((void *)(a0 + 0x76), (void *)(a0 + 0x76), 6, 0xD2); + } else if (*(s32 *)(a0 + 0x94) == 0x22) { + func_8002D4C8(0xC7C, 0); + } + break; + } +} + + +void func_801806D4(s32 a0) { + s32 v0; + + v0 = *(s32 *)(a0 + 0x1C); + if (v0 != 0) { + *(s32 *)(a0 + 0x1C) = v0 - 1; + *(s16 *)(*(s32 *)(a0 + 0x20) + 0x12) = + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) + func_8012BA10(a0, 8); } else { - s32 flagptr; - u16 flagval; - - flagptr = *(s32 *)(s0 + 0x20); - flagval = *(u16 *)(flagptr + 0x2C); - *(u16 *)(flagptr + 0x2C) = flagval | 1; + *(s16 *)(a0 + 0x34) = 0; + switch (*(s16 *)(a0 + 0xFC)) { + case 0: + *(s16 *)(a0 + 2) = 3; + return; + case 1: + *(s16 *)(a0 + 2) = 4; + *(s16 *)(a0 + 0x106) = *(u16 *)(a0 + 0x76); + return; + case 2: + *(s16 *)(a0 + 2) = 5; + return; + case 3: + if (*(s16 *)(a0 + 0x76) < *(s16 *)(a0 + 0x106)) { + *(s16 *)(a0 + 2) = 6; + } else { + *(s16 *)(a0 + 2) = 3; + } + return; + } } } -extern void func_80132784(s32 a0, s32 a1, u32 a2); -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_8012B200(u8 *a0); -extern s32 D_801963FC; - -void func_80184C20(s32 a0) { - s32 s0; - - s0 = a0; - a0 = *(s32 *)(s0 + 0xCC); - if (a0 != 0) { - *(u16 *)(a0 + 0xFC) = 1; - *(s32 *)(s0 + 0xCC) = 0; - } - *(s32 *)(s0 + 0x58) = (s32)&D_801963FC; - *(u16 *)(s0 + 0x5C) = 0x8C00; - func_8012AD44((s32 *)s0, 1); - func_8012B200((u8 *)s0); - { - s32 p64; - - p64 = *(s32 *)(s0 + 0x64); - *(s32 *)(s0 + 0xC) = 0; - *(s32 *)(s0 + 0x8) = 0; - *(s32 *)(s0 + 0x4) = 0; - func_80132784(s0, *(s32 *)(p64 + 0xCC), 6); - } -} - - -#include "common.h" - -extern void func_8012B23C(s32 a0); -extern void func_8012AD44(s32 *a0, s16 a1); -extern u8 D_80196414[]; - -s32 func_80184CA4(void *arg0) -{ - s32 s0 = (s32)arg0; - - *(s16 *)(s0 + 6) = *(s32 *)(*(s32 *)(s0 + 0x20) + 0x48); - *(s16 *)(s0 + 0xA) = *(s32 *)(*(s32 *)(s0 + 0x20) + 0x4C); - *(s16 *)(s0 + 0xE) = *(s32 *)(*(s32 *)(s0 + 0x20) + 0x50); - func_8012B23C(s0); - *(s32 *)(s0 + 0x10) = 0x00040000; - *(s32 *)(s0 + 0x14) = 0xFFF80000; - *(s32 *)(s0 + 0x18) = 0xFFFC0000; - *(s32 *)(s0 + 0x78) = (s32)&D_80196414; - func_8012AD44((s32 *)s0, 6); -} - - -extern void func_8012AD44(s32 *a0, s16 a1); - void func_80184D24(void *arg0) { - ((void (*)(s32, s32))func_8012AD44)((s32)arg0, 0x7); - } - - - -extern void (*D_80196470[])(void); - -void func_80184D44(void *a0) { - D_80196470[*(u16 *)((s32)a0 + 0x2)](); -} - - - -void func_80184D80(void *a0) { - *(s8 *)((s32)a0 + 0xc1) = 0; - *(s16 *)((s32)a0 + 0x5e) = 0; - *(u16 *)((s32)a0 + 0x5c) &= 0xfffe; - } - - -#include "common.h" - -extern void func_8012B200(u8 *a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern void func_80132DC4(s32 a0, s32 a1, s32 a2); - -void func_80184D98(void *arg0) { - s32 s0 = (s32)arg0; - s16 t; - struct { - s16 x; - s16 y; - s16 z; - } local; - - func_8012B200((u8 *)s0); - local.x = *(u16 *)(*(s32 *)(s0 + 0x64) + 6) - 0x40; - t = *(u16 *)(*(s32 *)(s0 + 0x64) + 0xA) - 0x80; - *(u16 *)(s0 + 0x100) = t; - local.y = t; - local.z = *(u16 *)(*(s32 *)(s0 + 0x64) + 0xE); - func_80132DC4(s0, (s32)&local, 0x500); - *(u16 *)(s0 + 0x5C) &= ~1; - *(u8 *)(s0 + 0xC1) = 4; - *(u8 *)(s0 + 0xC2) = 0; - func_8002D4C8(0x505, 0); -} - - -extern void func_8012CBF4(s32 a0); -extern void func_8013C9C4(void *a0); -extern void func_8012B200(u8 *a0); -extern void func_8018AF58(s32 a0); -extern void func_8002D4C8(s32 a0, s32 a1); -extern u16 D_801E4398; -extern u8 D_8019103C; - -void func_80184E30(s32 arg0) { - s32 s0 = arg0; - s16 t; - s32 p64; - - func_8012CBF4(arg0); - t = *(s16 *)(s0 + 0x100); - if (t < *(s16 *)(s0 + 0xA)) { - p64 = *(s32 *)(s0 + 0x64); - *(s16 *)(s0 + 0xA) = t; - D_801E4398 = 0; - *(s16 *)(p64 + 0x34) = 4; - *(s32 *)(p64 + 0x1C) = 0x30; - *(u16 *)(p64 + 0x76) = 0; - func_8013C9C4(&D_8019103C); - func_8012B200((u8 *)s0); - *(u8 *)(s0 + 0xC1) = 0; - *(u16 *)(s0 + 0x5E) = 0; - func_8018AF58(s0); - func_8002D4C8(0x506, 0); - } -} - - -#include "common.h" - -extern void func_8012CAE4(void *a0); +extern M2C_UNK D_80185DB8; +extern u8 D_80185DA0[]; +extern void func_8001CA1C(s32, s32); +extern void func_8012A828(s32, void*); extern void func_8012C1B8(void); -extern void func_8001C2C4(s32 a0); -extern s32 func_8012AD50(void *a0); +extern void func_8012CAE4(void *a0); -extern u16 D_80195B4C[]; -extern u16 D_80195B68[]; - -typedef struct { - u8 pad[0x34]; -} D_80195D74_Entry; -extern D_80195D74_Entry D_80195D74[]; - -extern void (*D_80196490[])(void); - -void func_80184EC0(void *a0) -{ - u16 f70; - s16 idx; - u16 *tbl; - s32 flags; - s32 c1b8; - s32 f64; - u16 traw; - u16 tval; - - f70 = *(u16 *)((u8 *)a0 + 0x70); - if (f70 >= 0x13) { - func_8012CAE4(a0); - return; - } - - if ((s16)f70 >= 0xD) { - tbl = D_80195B68; - f70 -= 0xD; - } else { - tbl = D_80195B4C; - } - - idx = *(s16 *)((u8 *)a0 + 0x70); - if (func_8012C354((s32)a0, (s32)&D_80195D74[idx]) == 0) { - return; - } - - flags = *(s32 *)((u8 *)a0 + 0xC4); - *(u8 *)((u8 *)a0 + 0xC0) = 1; - *(s32 *)((u8 *)a0 + 0xBC) = (s32)D_80196490; - *(s32 *)((u8 *)a0 + 0xC) = 0; - *(s32 *)((u8 *)a0 + 0x8) = 0; - *(s32 *)((u8 *)a0 + 0x4) = 0; - *(s32 *)((u8 *)a0 + 0xB4) = 0; - *(u8 *)((u8 *)a0 + 0xC1) = 0; - *(u8 *)((u8 *)a0 + 0x75) = 8; - *(s32 *)((u8 *)a0 + 0xDC) = 0; - *(s16 *)((u8 *)a0 + 0x100) = 0; - *(s32 *)((u8 *)a0 + 0xC4) = flags | 2; - - c1b8 = ((s32 (*)(void))func_8012C1B8)(); - *(s32 *)((u8 *)a0 + 0x20) = c1b8; - if (c1b8 == 0) { - func_8012CAE4(a0); - return; - } - - func_8001C2C4(c1b8); - - f64 = *(s32 *)((u8 *)a0 + 0x64); - *(s32 *)((u8 *)a0 + 0xCC) = f64; - - traw = tbl[f70]; - tval = traw & 0xFFFF; - - if (tval >= 0x16) { - s32 f64b = *(s32 *)((u8 *)a0 + 0x64); - s32 inner; - *(s16 *)((u8 *)a0 + 0xFC) = traw - 0x16; - inner = *(s32 *)((u8 *)f64b + 0xCC); - *(s16 *)((u8 *)a0 + 0xFE) = 1; - *(s32 *)((u8 *)a0 + 0x64) = inner; - } else { - *(s16 *)((u8 *)a0 + 0xFC) = traw; - *(s16 *)((u8 *)a0 + 0xFE) = 0; - if (tval == 4 || tval == 9 || tval == 0xE || tval == 0x13) { - *(s16 *)((u8 *)a0 + 0xFE) = 2; - } - } - - func_8012AD50(a0); -} - - -INCLUDE_ASM("asm/ov_SC02_005/nonmatchings/ov_SC02_005_jr_80181D30", func_80185060); - -extern void func_8012AD44(s32 *a0, s16 a1); - -void func_801851E0(s32 a0) -{ - *(s32 *)(a0 + 0xDC) = 1; - *(u8 *)(a0 + 0xC1) = 0; - *(s16 *)(a0 + 0xAE) = -1; - func_8012AD44((s32 *)a0, 2); -} - - -#include "common.h" - -/* func_80185214 — ov_SC02_005 (jr_80181D30 TU), 110 ins, byte-exact. - * - * Second-pass crack. Structure was already right in pass 1; the whole residual - * (25 ins) was register-allocation + list-scheduling. Four levers, in order of - * how much each bought: - * - * 1. state pinned to $4, and the `state << 3` result pinned to $2 (`idx`). - * With ONLY the $4 pin, gcc reuses the dead hard reg for the shift result - * (`sll $a0,$a0,3`); the target wants a fresh `$v0`. Pinning the shift - * destination is what forces `sll $v0,$a0,3` + `addu $at,$at,$v0`. - * (Dropping the $4 pin instead moves `state` to $a1 — worse.) - * - * 2. `lo`/`hi` temps around each subtraction, and — load-bearing — a SEPARATE - * pair (`lo2`/`hi2`) for the second block. Reusing lo/hi merges the pseudo - * webs and flips the subu operands to `subu $v1,$a2,$v1` (+11 ins). The - * `hi` (pointer-chased) load is written BEFORE the `lo` load in block 2 — - * that ordering is what yields `lh $v1,0xE($a0)` / `lh $a2,0xE($v0)`. - * - * 3. `p = self` placed between the two operand loads and the subtraction: the - * target materialises `addu $a0,$s0,$zero` only at its first use, so the - * 0x14 store and the 0xCC/0x6 loads still address off $s0. - * - * 4. §17 scheduling barrier (`__asm__ __volatile__("")`) between the 0x10 - * fixed-point block and its store. Without it sched1 hoists block-2's - * `lhu 0x70` / `lh 0xE` up into the load-delay slots of block 1 and the - * whole tail drifts (20 ins wrong). Zero bytes emitted. - */ - -extern s32 D_801E4474[]; -extern s32 D_801E4418[]; -extern u8 D_801E4AA0[]; -extern u8 D_801E4AA4[]; -extern u8 D_80063548[]; - -extern void func_80132784(s32 a0, s32 a1, u32 a2); -extern void func_8012B21C(void *a0); -extern void func_8012AD44(s32 *a0, s16 a1); -extern void func_801853CC(s32 a0); - -void func_80185214(s32 arg0) { - register s32 self __asm__("$16"); - register s32 state __asm__("$4"); - register s32 idx __asm__("$2"); - s32 acc; - s32 lo; - s32 hi; - s32 lo2; - s32 hi2; - void *tgt; - - self = arg0; - state = *(s16 *)(self + 0x70); - - if (state < 12) { - s32 p; - - if (*(s16 *)(self + 0xFE) == 1) { - acc = D_801E4474[*(s16 *)(self + 0xFC)]; + void func_801807B4(void *a0) { + s32 v0 = ((s32 (*)(void *))func_8012C1B8)(a0); + *(int *)((char *)a0 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(a0); } else { - acc = D_801E4418[*(s16 *)(self + 0xFC)]; + ((void (*)(s32, u8 *))func_8001CA1C)(v0, D_80185DA0); + ((void (*)(void *, u8 *))func_8012A828)(a0, ((u8 *)&D_80185DB8)); + *(short *)((char *)a0 + 0x2) = 1; } + } - idx = state << 3; - *(s32 *)(D_801E4AA0 + idx) = acc; - *(s32 *)(D_801E4AA4 + (*(s16 *)(self + 0x70) << 3)) = 0; - *(s32 *)(*(void **)(self + 0x20) + 0x24) = - (s32)(D_801E4AA0 + (*(s16 *)(self + 0x70) << 3)); - - *(s32 *)(*(void **)(self + 0x20) + 0x20) = (s32)D_80063548; - - func_80132784(self, *(s32 *)(self + 0x64), *(u16 *)(self + 0xFC)); - - *(s16 *)(self + 0x6) = *(s32 *)(*(void **)(self + 0x20) + 0x48); - *(s16 *)(self + 0xA) = *(s32 *)(*(void **)(self + 0x20) + 0x4C); - *(s16 *)(self + 0xE) = *(s32 *)(*(void **)(self + 0x20) + 0x50); - *(s16 *)(self + 0x102) = *(u16 *)(self + 0xA); - - func_8012B21C((void *)self); - - *(s32 *)(self + 0x14) = 0xFFE80000; - - lo = *(s16 *)(self + 0x6); - hi = *(s16 *)(*(s32 *)(self + 0xCC) + 0x6); - p = self; - acc = lo - hi; - acc = (acc << 12) + ((*(u16 *)(p + 0x70) & 7) << 16) + 0x40000; - __asm__ __volatile__(""); - *(s32 *)(p + 0x10) = acc; - - tgt = *(void **)(p + 0xCC); - hi2 = *(s16 *)((s32)tgt + 0xE); - lo2 = *(s16 *)(p + 0xE); - acc = lo2 - hi2; - *(s16 *)(p + 0x100) = *(u16 *)(p + 0x70); - acc = (acc << 12) - ((*(u16 *)(p + 0x70) & 7) << 16) + 0x20000; - *(s32 *)(p + 0x18) = acc; - - func_8012AD44((s32 *)p, 3); - } else { - *(s32 *)(*(void **)(self + 0x20) + 4) |= 0x80000000; - func_801853CC(self); +void func_8018081C(s32 a0) { + *(s32 *)(a0 + 0x1C) = *(s32 *)(a0 + 0x1C) + 1; + *(s32 *)(a0 + 4) = (*(s16 *)(a0 + 0x88) * 0x10000) + *(s32 *)(a0 + 0x10) * *(s32 *)(a0 + 0x1C); + *(s32 *)(a0 + 8) = (*(s16 *)(a0 + 0x8A) * 0x10000) + *(s32 *)(a0 + 0x14) * *(s32 *)(a0 + 0x1C); + *(s32 *)(a0 + 0xC) = (*(s16 *)(a0 + 0x8C) * 0x10000) + *(s32 *)(a0 + 0x18) * *(s32 *)(a0 + 0x1C); + *(s32 *)(a0 + 8) = *(s32 *)(a0 + 8) - (func_8004787C(*(s32 *)(a0 + 0x1C) << 6) << 11); + if (*(s32 *)(a0 + 0x1C) == 0x20) { + *(s16 *)(a0 + 2) = 2; + *(s32 *)(a0 + 0x1C) = 0x80; + func_8002D4C8(0x943, 0); } } -void func_801853CC(s32 a0) { - func_8012AD44((s32 *)a0, 4); -} +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017F65C", func_801808F0); - -extern void func_80186A04(s32 arg0); -extern void func_8016AA50(s32 param_1, s32 param_2); -extern void func_80185060(s32 a0, s32 a1); -extern void func_80186B08(s32 param_1); extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_800599B8(s32 a0, s32 a1); +extern u8 D_80185AB0[]; +extern s16 D_80185DC8[]; +extern u8 D_80185928[]; -void func_801853EC(s32 arg0) { - register s32 s0 __asm__("$16"); - register s32 r76 __asm__("$2"); - register s32 r60 __asm__("$6"); - register s32 flags __asm__("$3"); - s32 cnt; - - s0 = arg0; - r76 = *(u16 *)(s0 + 0x76); - r60 = *(u16 *)(s0 + 0x60); - cnt = r76 - r60; - flags = *(u16 *)(s0 + 0x5C) & 0xFFFE; - *(u16 *)(s0 + 0x76) = cnt; - *(u16 *)(s0 + 0x5C) = flags; - func_8016AA50(arg0, *(s16 *)(s0 + 0x60)); - - if (*(s16 *)(s0 + 0x76) <= 0) { - *(u16 *)(s0 + 0x5E) = 0; - func_80185060(arg0, 1); - func_80186B08(arg0); +void func_80180940(s32 param_1) { + s32 iVar1; + iVar1 = *(s32 *)(param_1 + 0x1C) - 1; + *(s32 *)(param_1 + 0x1C) = iVar1; + if (iVar1 <= 0) { + *(s16 *)(param_1 + 2) = 4; + func_8002D4C8(0x941, 0); } else { - *(u8 *)(s0 + 0xC1) = 1; - *(s32 *)(s0 + 0x1C) = 8; - func_80186A04(arg0); - } - - if (*(u16 *)(s0 + 0x5E) != 0x1D) { - func_8002D4C8(0x4F3, 0); + func_800599B8((s32)&D_80185AB0, (s32)&D_80185928[D_80185DC8[iVar1 % 10]]); } } -#include "common.h" +extern u8 D_801202A0[]; +extern void func_8012C218(s32 a0); +extern s32 func_80013350(s32 *a0, s32 *a1); -extern s32 func_8012BEE8(s32 a0); -extern void func_80186B08(s32 param_1); -extern void func_80186424(s32 arg0); -extern u16 D_801E43BC; - -void func_8018548C(void *a0) +void func_801809DC(s32 a0) { - u8 flags; + s32 v1; + u16 *p; + s32 i; - if (func_8012BEE8((s32)a0) != 0) { - *(u8 *)((s32)a0 + 0xC1) = 0; - *(u16 *)((s32)a0 + 0x5E) = 0; - func_80186B08((s32)a0); - } - - func_80186424((s32)a0); - - flags = *(u8 *)((s32)a0 + 0x74); - if (flags != 0) { - if (*(u16 *)((s32)a0 + 0xFE) & 1) { - D_801E43BC = D_801E43BC | flags; + v1 = *(s32 *)(a0 + 0x1C) - 1; + *(s32 *)(a0 + 0x1C) = v1; + if (v1 == 0) { + func_8012C218(a0); + } else if (v1 == 3) { + i = 0; + p = (u16 *)D_801202A0; + for (; i < 0x60; i++) { + if (*p == 0x30B && p[1] < 5 && + func_80013350((s32 *)(a0 + 4), (s32 *)(p + 2)) < 0x6400) { + p[1] = 4; + } + p += 0x86; } } } -#include "common.h" +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern s32 func_80143970(s32 a0); -extern void (*D_801964A8[])(void); -extern void func_80186424(s32 arg0); -extern void func_80132F40(s32 arg0); -extern void func_80186F60(s32 arg0); -extern void func_801865D0(void *arg0); -extern void func_80189E34(s32 arg0, s32 arg1); -extern void func_8018A0E4(s32 arg0); -extern u16 D_801E43BC; -extern u16 D_801E4BBC; -extern u16 D_800B99D8; +void func_80180ABC(s32 a0) { + extern u8 D_8018F280[]; + s32 v1; -void func_8018550C(void *a0) + v1 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(a0 + 0x20) = v1; + if (v1 == 0) { + func_8012CAE4((void *)a0); + } else { + func_8001C214(v1, (s32)D_8018F280); + *(u8 *)(a0 + 0xC0) = 1; + *(u16 *)(a0 + 2) = 1; + func_80143970(a0); + *(s32 *)(*(s32 *)(a0 + 0x20) + 4) |= 0x8000000; + *(u16 *)(*(s32 *)(a0 + 0x20) + 0x14) = 0x400; + *(s32 *)(a0 + 0x1C) = 0x78; + } +} + + +extern void func_8012CBCC(s32 a0); +extern void func_8012C218(s32 a0); + +void func_80180B50(s32 a0) { + s32 v1; + s32 v0; + + v1 = *(s32 *)(a0 + 0x20); + *(u16 *)(v1 + 0x10) = *(u16 *)(v1 + 0x10) + 0x300; + if (((s32 (*)(s32))func_8012CBCC)(a0) != 0) { + func_8012C218(a0); + } + v0 = *(s32 *)(a0 + 0x1c) - 1; + *(s32 *)(a0 + 0x1c) = v0; + if (v0 == 0) { + func_8012C218(a0); + } +} + + +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern s32 func_80143970(s32 a0); + +void func_80180BBC(s32 a0) { + extern u8 D_8018F000[]; + s32 v1; + + v1 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)(a0 + 0x20) = v1; + if (v1 == 0) { + func_8012CAE4((void *)a0); + } else { + func_8001C214(v1, (s32)D_8018F000); + *(u16 *)(a0 + 2) = 1; + *(u8 *)(a0 + 0xC0) = 1; + func_80143970(a0); + *(s32 *)(*(s32 *)(a0 + 0x20) + 4) |= 0x8000000; + *(s32 *)(a0 + 0x1C) = 0x78; + } +} + + + + + + + + + + + + + + + + + + + + +s32 func_80180C44(s32 arg0) { - s32 flags; - u8 v1; + s32 ret; + ret = 0x6F; if (0x514 > arg0) { ret = 0x8A; + } + else + { + } + return ret; +} - D_801964A8[*(u16 *)((u8 *)a0 + 0x2)](); - flags = *(s32 *)(*(s32 *)((u8 *)a0 + 0xCC) + 0xE8); +extern void func_8001AAA0(s32 arg); + s32 func_80180C5C(void) +{ + func_8001AAA0(0x6F); + } - if ((flags & 0x8000) == 0) { - func_80186424((s32)a0); - v1 = *(u8 *)((u8 *)a0 + 0x74); - if (v1 != 0) { - if (*(u16 *)((u8 *)a0 + 0xFE) & 0x1) { - D_801E43BC = D_801E43BC | v1; +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +void func_80180C7C(void) { + + extern s32 D_801B4C6C(void *a0); + ((void (*)(void *, s32))func_8016EE40)((void *)D_801B4C6C, 0x1000000); +} + + + +extern void (*D_801B4C84[])(void); + +void func_80180CA4(void *a0) { + D_801B4C84[*(u8 *)((s32)a0 + 0x216)](); +} + + +void func_80180CE0(void *a0) { + void *s0 = a0; + + func_80180FF4(a0); + if (*(s16 *)((s32)s0 + 0x210) >= 0) { + *(s16 *)((s32)s0 + 0x210) = 0x30; + } else { + *(s16 *)((s32)s0 + 0x210) = -0x30; + } + func_80171990((u8 *)s0); +} + + + +extern s32 func_801810D0(); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_80171928(void *a0); + +void func_80180D28(void *param) +{ + void *s0 = param; + + if (func_801810D0() != 0) { + func_8002D4C8(0x8B1, 0); + func_80171928(s0); + } +} + + +extern void func_8016EE40(s32 a0, s32 a1, s32 a2); +extern s32 D_801B4C8C; + +void func_80180D68(void) { + ((void (*)(void *, s32))func_8016EE40)(&D_801B4C8C, 0x1000000); +} + + + +extern void (*D_801B4C98[])(void); + +void func_80180D90(void *a0) { + D_801B4C98[*(u8 *)((s32)a0 + 0x216)](); +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017F65C", func_80180DCC); + + +extern s32 func_801810D0(); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80171990(u8*); + +void func_80180ED4(void *param) +{ + void *s0 = param; + + if (func_801810D0() != 0) { + func_8002D4C8(0x8B1, 0); + ((void (*)(void *))func_80171990)(s0); + } +} + + +extern s32 func_80013328(s32 a0, s32 a1); +extern u8 D_801202A0[]; +extern void func_800D1724(s32 a0); +extern void func_80171928(void *a0); + +void func_80180F14(arg0) +void *arg0; +{ + u8 *p; + u8 *found; + s32 i; + s32 best; + s16 t; + + found = 0; + best = 0x7FFFFFFF; + for (i = 0; i < 0x60; i++) { + p = &D_801202A0[i * 0x10C]; + if ((*(u16 *)(p + 0) != 0) && ((*(u16 *)(p + 0x5C) & 0x80) != 0)) { + t = (s16)func_80013328((s32)arg0 + 4, (s32)p + 4); + if (t < best) { + best = t; + found = p; } } + } + if (found != 0) { + func_800D1724(*(s32 *)(found + 0xDC)); + } + func_80171928(arg0); +} - if (*(s16 *)((u8 *)a0 + 0x70) == 0x11) { - if (*(u16 *)((u8 *)a0 + 0x5C) & 0x400) { - func_80132F40((s32)a0); + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017F65C", func_80180FF4); + +extern void func_80015954(s32 a0, s32 a1); +extern void func_8012F14C(s32 a0, s32 a1, s32 a2); + +s32 func_801810D0(param_1) +s32 param_1; +{ + s32 sp10[2]; + s32 p; + s32 q; + short v; + + p = *(s32 *)(param_1 + 0x204); + q = *(s32 *)(p + 0x20); + if (p != 0) { + *(u16 *)(q + 0x12) = *(u16 *)(q + 0x12) + 0x80; + func_8012F14C(q + 0x34, param_1 + 0x20C, (s32)sp10); + func_80015954((s32)sp10, param_1 + 4); + } + q = *(s32 *)(param_1 + 0x20); + *(u16 *)(q + 0x12) = *(u16 *)(q + 0x12) + 0x80; + v = *(u16 *)(param_1 + 0x208) + 0x80; + *(u16 *)(param_1 + 0x208) = v; + return v == 0x800; +} + + +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017F65C", func_80181164); + + + +extern s32 rand(void); +extern s32 func_800CF8B4(); +extern s32 func_8014CB8C(void); +extern s32 func_801726C4(s32 *a0); +extern void func_8002D4C8(s32 a0, s32 a1); +extern s32 func_80143C74(s32 a0, s32 a1); + +void func_80181588(s32 param_1) +{ + + extern u16 D_80126B62; + extern u16 D_80126B66; + s32 diff; + s32 obj; + s32 quotient; + s16 sVar1; + u16 uVar2; + + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) = + *(u16 *)(*(s32 *)(param_1 + 0x20) + 0x14) + *(u16 *)(param_1 + 0xFC); + + obj = (s32)&D_80126B62; + /* §137 zero-byte barrier: closes the $s2<->$s3 REGALLOC-PERM. global.c:allocno_compare + * ranks pri = floor_log2(R)*R/L*1e4*size; without this, diff (R=7,L=46) = 3043 outranks + * obj (R=11,L=109) = 3027 and takes $s2. This adds ONE reference to obj (R 11->12, + * L 109->110 => 3272) with no emitted bytes, so obj wins $s2 and diff falls to $s3. */ + __asm__ __volatile__("" :: "r"(obj)); + if (*(s16 *)obj < -0x4E0) { + diff = (s32)(s16)D_80126B66 - *(s16 *)(param_1 + 0xE); + if (diff < 0x140) { + uVar2 = *(u16 *)(param_1 + 0xFC) - 0x10; + *(u16 *)(param_1 + 0xFC) = uVar2; + if ((s16)uVar2 < 0) { + *(u16 *)(param_1 + 0xFC) = 0; } - } - - if ((*(u16 *)((u8 *)a0 + 0xFE) & 0x2) && (flags & 0x20)) { - func_80186F60((s32)a0); - } else if ((*(u16 *)((u8 *)a0 + 0xFE) & 0x1) && (flags & 0x100)) { - func_801865D0(a0); - } - - if (flags & 0x10000) { - if ((D_800B99D8 & 0x3) == 0) { - if ((rand() & 0x1F) == (*(s16 *)((u8 *)a0 + 0x70) & 0x1F)) { - func_80189E34((s32)a0, D_801E4BBC); + } else { + sVar1 = *(u16 *)(param_1 + 0xFC) + 0x10; + *(u16 *)(param_1 + 0xFC) = sVar1; + if (sVar1 > 0x300) { + *(u16 *)(param_1 + 0xFC) = 0x300; + } + if ((diff < 0x900) && (func_800CF8B4() != 0) && (func_8014CB8C() == 0)) { + quotient = (*(s16 *)(param_1 + 0xFC) * 0xD) / 0x300; + quotient = (quotient * (0x900 - diff)) / 0x900; + if (func_801726C4((s32 *)(obj - 0xA)) != 0) { + quotient = quotient * 2; } - } - } else if (flags & 0x4000) { - if ((D_800B99D8 % 60) == (*(s16 *)((u8 *)a0 + 0x70) * 2)) { - func_8018A0E4((s32)a0); + D_80126B66 = D_80126B66 + quotient; + func_8002D4C8(0x978, ((quotient * 0x7F / 0xD) | 0x1000) & 0xFFFF); + *(u16 *)(param_1 + 0xFE) = 1; } } + } else { + sVar1 = *(u16 *)(param_1 + 0xFC) + 0x10; + *(u16 *)(param_1 + 0xFC) = sVar1; + if (sVar1 > 0x300) { + *(u16 *)(param_1 + 0xFC) = 0x300; + } + } + + if (*(s32 *)(param_1 + 0x1C) != 0) { + *(s32 *)(param_1 + 0x1C) = *(s32 *)(param_1 + 0x1C) - 1; + } else { + if (*(s16 *)(param_1 + 0xFC) > 0x40) { + *(s32 *)(param_1 + 0x1C) = 3; + obj = func_80143C74(param_1, 0); + if (obj != 0) { + *(s16 *)(obj + 6) = rand() % 0x120 - 0xE0; + *(u16 *)(obj + 0xA) = -(rand() & 0x3F) - 0x502; + diff = rand() % 0x560 + 0x140; + *(u16 *)(obj + 0xE) = *(u16 *)(obj + 0xE) + diff; + quotient = (*(s16 *)(param_1 + 0xFC) * 0xD) / 0x300; + quotient = (quotient * (0x800 - diff)) / 0x800; + *(s16 *)(obj + 0x1A) = quotient * 2; + *(s32 *)(obj + 0x48) = -((rand() & 0x1FF) << 7); + } + } + } + + if (*(s16 *)(param_1 + 0xFE) == 2) { + *(u16 *)(param_1 + 0xFE) = 0; + func_8002D4C8(4, 0x978); + } + if (*(s16 *)(param_1 + 0xFE) == 1) { + *(u16 *)(param_1 + 0xFE) = 2; } } -#include "common.h" +extern void (*D_801B4D2C[])(void); - -extern void func_801858C4(); -extern void func_80185858(s32 a0, void *a1, void *a2); - -extern Blk8 D_801E2E9C; -extern Blk8 D_801E2EA4; - -void func_801856E4(void) -{ - Blk8 blk1; - Blk8 blk2; - - blk1 = D_801E2E9C; - blk2 = D_801E2EA4; - - ((void (*)(void))func_801858C4)(); - func_80185858(0x11, &blk1, &blk2); +void func_801818FC(void *a0) { + D_801B4D2C[*(u16 *)((s32)a0 + 0x2)](); } -#include "common.h" +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8001C214(s32 a0, s32 a1); +extern void func_8012A828(s32, void*); +extern void func_8012B23C(void *a0); -extern void func_801858C4(); -extern void func_80185858(s32 a0, void *a1, void *a2); -extern Blk8 D_801E2EAC; -extern Blk8 D_801E2EB4; -extern Blk8 D_801E2EBC; -extern Blk8 D_801E2EC4; +void func_80181938(void *a0) { -void func_80185764(void *a0) -{ - Blk8 blk1; - Blk8 blk2; + extern u8 D_801B4D44[]; + extern s32 D_801B4D78[]; + extern u8 D_80182184[]; + if (func_8012C354((s32)a0, (s32)D_801B4D44) != 0) { + u16 v1 = *(u16 *)((s32)a0 + 0x70); - func_801858C4(a0); + if (v1 & 0x10) { + u16 v0 = v1 & ~0x10; + *(u16 *)((s32)a0 + 0x70) = v0; + func_8001C214(*(s32 *)((s32)a0 + 0x20), D_801B4D78[(s16)v0]); + *(s32 *)(*(s32 *)((s32)a0 + 0x20) + 0x4) |= 0x60000040; + } else { + func_8001C214(*(s32 *)((s32)a0 + 0x20), D_801B4D78[(s16)v1]); + } - blk1 = D_801E2EAC; - blk2 = D_801E2EB4; - func_80185858(8, &blk1, &blk2); + if (*(s16 *)((s32)a0 + 0x70) == 8 || *(s16 *)((s32)a0 + 0x70) == 0xA) { + *(s16 *)((s32)a0 + 0x34) = 3; + *(u16 *)((s32)a0 + 0x5C) = 0x8800; + } + if (*(s16 *)((s32)a0 + 0x70) == 9) { + *(s16 *)((s32)a0 + 0x34) = 2; + *(u16 *)((s32)a0 + 0x5C) = 0x8800; + } + if (*(s16 *)((s32)a0 + 0x70) == 0xB) { + *(s16 *)((s32)a0 + 0x34) = 4; + } - blk1 = D_801E2EBC; - blk2 = D_801E2EC4; - func_80185858(0xA, &blk1, &blk2); + *(u8 *)((s32)a0 + 0xC0) = 1; + *(s32 *)((s32)a0 + 0xB4) = -1; + *(u8 *)((s32)a0 + 0x75) = 8; + ((void (*)(s32 *, s32))func_8012A828)((s32 *)a0, (s32)D_80182184); + + *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; + func_8012B23C(a0); + *(s16 *)((s32)a0 + 0xAE) = -1; + } } +INCLUDE_ASM("asm/ov_SC06_030/nonmatchings/ov_SC06_030_jr_8017F65C", func_80181A80); + + +extern void (*D_801B4DA8[])(void); + +void func_80181C30(void *a0) { + D_801B4DA8[*(u16 *)((s32)a0 + 0x2)](); +} + + + +extern void (*D_801B4DE4[])(void); + +void func_80181C6C(void *a0) { + D_801B4DE4[*(u16 *)((s32)a0 + 0x2)](); +} + + +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); + +void func_80181CA8(void *a0) { + + extern u8 D_801B4CF8[]; + extern u8 D_80182184[]; + + if (func_8012C354((s32)a0, (s32)D_801B4CF8) != 0) { + *(u8 *)((s32)a0 + 0xC0) = 1; + *(s16 *)((s32)a0 + 0xAE) = -1; + func_8012A828(a0, D_80182184); + + *(u16 *)((s32)a0 + 0x2) = *(u16 *)((s32)a0 + 0x2) + 1; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) = + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) | 0x10; + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x18) = 0xE00; + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x1A) = 0xE00; + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x1C) = 0xE00; + *(u16 *)((s32)a0 + 0xFC) = 0x300; + *(u8 *)((s32)a0 + 0x75) = 8; + } +} + + +extern s32 func_8012C354(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); + +void func_80181D50(void *a0) { + + extern u8 D_801B4DB0[]; + extern u8 D_80182184[]; + + if (func_8012C354((s32)a0, (s32)D_801B4DB0) != 0) { + *(u8 *)((s32)a0 + 0xC0) = 1; + func_8012A828(a0, D_80182184); + *(u16 *)((s32)a0 + 2) = *(u16 *)((s32)a0 + 2) + 1; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) = + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) | 0x10; + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x18) = 0xAAA; + *(s16 *)(*(s32 *)((s32)a0 + 0x20) + 0x1C) = 0xAAA; + } +} + + +extern void func_80181164(void); + void func_80181DD4(s32 arg0) { + s32 temp_v0; + func_80181164(); + temp_v0 = *(s32 *)(arg0 + 0x1c) + 1; + *(s32 *)(arg0 + 0x1c) = temp_v0; + } + + + + + diff --git a/src/ov_SC07_000/ov_SC07_000_jr_8017BEBC.c b/src/ov_SC07_000/ov_SC07_000_jr_8017BEBC.c index 25c2eb3361..379165c9f1 100644 --- a/src/ov_SC07_000/ov_SC07_000_jr_8017BEBC.c +++ b/src/ov_SC07_000/ov_SC07_000_jr_8017BEBC.c @@ -4662,7 +4662,44 @@ void func_8017FE5C(void *a0) { INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8017FE9C); -INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8017FEEC); +extern void func_8012C1B8(void); +extern void func_8012CAE4(void *a0); +extern void func_8001C2C4(s32 a0); +extern s32 func_8012AD50(void *a0); + +extern u8 D_801865D8[]; +extern u8 D_801865DA[]; +extern u8 D_801865DC[]; +extern u8 D_801865DE[]; +extern s16 D_80186728[]; +extern u8 D_801866C8[]; + +void func_8017FEEC(void *a0) { + s32 v0; + s16 v1; + + v0 = ((s32 (*)(void))func_8012C1B8)(); + *(s32 *)((u8 *)a0 + 0x20) = v0; + if (v0 == 0) { + func_8012CAE4(a0); + return; + } + func_8001C2C4(v0); + *(u16 *)((u8 *)a0 + 0xFE) = *(u16 *)(D_801865D8 + *(s16 *)((u8 *)a0 + 0x70) * 8) & 0xFF00; + v1 = *(u16 *)(D_801865D8 + *(s16 *)((u8 *)a0 + 0x70) * 8); + *(u16 *)((u8 *)a0 + 0x5C) = 0x8C00; + *(u16 *)((u8 *)a0 + 6) = 0; + *(s16 *)((u8 *)a0 + 0x102) = v1 & 7; + *(u32 *)((u8 *)a0 + 0x58) = (v1 & 7) * 0x10 + (s32)D_801866C8 | 0x40000000; + *(u16 *)((u8 *)a0 + 0xA) = *(u16 *)(D_801865DA + *(s16 *)((u8 *)a0 + 0x70) * 8); + *(u16 *)((u8 *)a0 + 0xE) = *(u16 *)(D_801865DC + *(s16 *)((u8 *)a0 + 0x70) * 8); + *(u16 *)(*(s32 *)((u8 *)a0 + 0x20) + 0x10) = + *(u16 *)(D_801865DE + *(s16 *)((u8 *)a0 + 0x70) * 8) & 0xFF0; + *(u16 *)((u8 *)a0 + 0x104) = 0; + *(s32 *)((u8 *)a0 + 0x1C) = D_80186728[*(s16 *)((u8 *)a0 + 0x70)]; + func_8012AD50(a0); +} + INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_8017BEBC", func_8018000C); diff --git a/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c b/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c index c46f0a005f..bb9d621bf6 100644 --- a/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c +++ b/src/ov_SC07_002/ov_SC07_002_jr_8017C8D0.c @@ -4873,7 +4873,100 @@ void func_80180044(s32 a0) { INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80180090); -INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_80180248); +void func_80180248(s32 s0) +{ + typedef struct { s16 vx, vy, vz, pad; } SVfbd0; + extern s16 D_80126940[4]; + extern s32 func_8012E544(s32 a0); + extern void func_80015978(s32 a0, s32 *a1); + extern void func_801804D4(s32 a0, s32 a1); + extern void func_801808E0(s32 a0, s32 a1); + extern s32 func_8018059C(s32 a0); + extern void func_80186758(void); + extern void func_8018672C(s32 a0); + extern void func_801A2330(void); + extern void func_80180F7C(s32 a0, void *a1); + extern s32 D_8019F038; + extern s32 D_8019F03C; + + SVfbd0 pos; + s32 ret; + + ret = func_8012E544(0x306); + if (ret != 0) { + func_80015978(ret + 4, (s32 *)&pos); + } else { + pos = (*(SVfbd0 *)D_80126940); + } + switch (D_8019F038) { + case 0: + case 9: + break; + case 1: + D_8019F03C = 0x1E; + D_8019F038 = D_8019F038 + 1; + break; + case 2: + D_8019F03C = D_8019F03C - 1; + if (D_8019F03C == -1) { + func_801804D4(s0, 0); + func_801804D4(s0, 1); + func_801808E0(s0, 3); + D_8019F038 = D_8019F038 + 1; + } + break; + case 3: + func_801808E0(s0, 3); + if (func_8018059C(s0) != 0) { + D_8019F03C = 0xA; + D_8019F038 = D_8019F038 + 1; + } + break; + case 4: + D_8019F03C = D_8019F03C - 1; + if (D_8019F03C == -1) { + func_801804D4(s0, 2); + func_801804D4(s0, 3); + func_801808E0(s0, 3); + D_8019F038 = D_8019F038 + 1; + } + break; + case 5: + func_801808E0(s0, 3); + if (func_8018059C(s0) != 0) { + D_8019F03C = 0xA; + D_8019F038 = D_8019F038 + 1; + } + break; + case 6: + D_8019F03C = D_8019F03C - 1; + if (D_8019F03C == -1) { + func_801804D4(s0, 4); + func_801804D4(s0, 5); + func_801808E0(s0, 3); + D_8019F038 = D_8019F038 + 1; + } + break; + case 7: + func_801808E0(s0, 3); + if (func_8018059C(s0) != 0) { + func_8018672C(0xA); + D_8019F03C = 0x5A; + D_8019F038 = D_8019F038 + 1; + } + break; + case 8: + D_8019F03C = D_8019F03C - 1; + if (D_8019F03C == -1) { + func_80186758(); + func_801A2330(); + D_8019F038 = D_8019F038 + 1; + } + break; + } + func_80180F7C(s0, &pos); +} + INCLUDE_ASM("asm/ov_SC07_002/nonmatchings/ov_SC07_002_jr_8017C8D0", func_801804D4); diff --git a/src/ov_SC07_006/ov_SC07_006_jr_80183814.c b/src/ov_SC07_006/ov_SC07_006_jr_80183814.c index 9b621d2074..614570ff42 100644 --- a/src/ov_SC07_006/ov_SC07_006_jr_80183814.c +++ b/src/ov_SC07_006/ov_SC07_006_jr_80183814.c @@ -5509,7 +5509,196 @@ void func_80189098(void *a0) { } -INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80183814", func_801890FC); +extern u8 D_8018E950; +extern u8 D_8018E968; +extern u8 D_8018E95C; +extern u8 D_8018E970; +extern u8 D_8018E978; +extern u8 D_8018E9D8; +extern u8 D_8018EA20; +extern u8 D_8018EA68; +extern u8 D_8018EAA0; +extern u8 D_8018EAE8; +extern u8 D_801BF710; +extern u8 D_801BF718; +extern u8 D_801BF728; +extern u8 D_801BFCF4; +extern u8 D_801BFCFC; +extern u8 D_801BFD04; +extern void func_8001CA1C(s32 a0, s32 a1); +extern void func_8012A828(s32 a0, void *a1); +extern void func_8012B23C(s32 a0); +extern void func_8012B2CC(s32 a0); +extern void func_8012B21C(void *a0); +extern void func_8001C214(s32 a0, s32 a1); +extern int func_8004787C(int a0); +extern int func_80047948(int a0); +extern s32 rand(void); + +typedef struct { + s8 pad00[0x0A]; + u16 f0A; +} EntA; + +void func_801890FC(void *a0) { + s32 s1; + s32 s2; + + *(s32 *)((s32)a0 + 0x20) = func_8012C1B8(); + if (*(s32 *)((s32)a0 + 0x20) == 0) { + func_8012CAE4(a0); + return; + } + + switch (*(s16 *)((s32)a0 + 0x70)) { + case 0: + func_8001CA1C(*(s32 *)((s32)a0 + 0x20), &D_8018E950); + func_8012A828((s32)a0, &D_8018E968); + *(u32 *)(*(s32 *)((s32)a0 + 0x20) + 4) |= 0x8000000; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) |= 0x10; + func_8012B23C((s32)a0); + func_8012B2CC((s32)a0); + *(u16 *)((s32)a0 + 2) = 1; + *(s32 *)((s32)a0 + 0x1C) = 0x1E; + *(u16 *)((s32)a0 + 0x16) = (rand() & 7) - 4; + s2 = rand(); + s1 = (rand() & 7) + 8; + *(s16 *)((s32)a0 + 0x12) = (func_8004787C(s2) * s1) >> 12; + *(s16 *)((s32)a0 + 0x1A) = (func_80047948(s2) * s1) >> 12; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x10) = rand(); + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = rand(); + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x14) = rand(); + break; + case 1: + func_8001C214(*(s32 *)((s32)a0 + 0x20), &D_801BF710); + func_8001D0E8(*(s32 *)((s32)a0 + 0x20), 0x280, 0x1E0); + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400; + func_8012A828((s32)a0, &D_801BFCF4); + func_8012B21C((s32)a0); + *(u16 *)((s32)a0 + 2) = 2; + *(s32 *)((s32)a0 + 0x1C) = 3; + *(u16 *)((s32)a0 + 0xFC) = 0; + *(s32 *)((s32)a0 + 0x48) = *(s32 *)((s32)a0 + 0x48) >> 2; + *(u16 *)((s32)a0 + 0xA) = *(u16 *)((s32)a0 + 0xA) - 0xAA; + break; + case 2: { + s32 t1; + s32 t2; + s32 t3; + s32 t4; + s32 t5; + func_8001C214(*(s32 *)((s32)a0 + 0x20), &D_801BF718); + func_8001D0E8(*(s32 *)((s32)a0 + 0x20), 0x280, 0x1E0); + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400; + func_8012A828((s32)a0, &D_801BFCFC); + func_8012B21C((s32)a0); + *(u16 *)((s32)a0 + 2) = 4; + *(u16 *)((s32)a0 + 0x1A) = -((rand() & 3) + 2); + *(u16 *)((s32)a0 + 0xFC) = 0x30; + *(s32 *)((s32)a0 + 0x1C) = 6; + t1 = *(u16 *)((s32)a0 + 0xE); + *(u16 *)((s32)a0 + 0xFE) = 0xB; + t2 = *(u16 *)((s32)a0 + 6); + *(u16 *)((s32)a0 + 0xE) = t1 - 0x40; + t3 = *(u16 *)((s32)a0 + 0xA); + *(u16 *)((s32)a0 + 0x88) = t2 - 0x20; + ((EntA *)a0)->f0A = t3 - 0xEE; + t4 = *(u16 *)((s32)a0 + 0xE); + t5 = *(u16 *)((s32)a0 + 0xA); + *(u16 *)((s32)a0 + 0x8C) = t4 - 0x37; + *(u16 *)((s32)a0 + 0x8A) = t5 - 0x44; + break; + } + case 3: + func_8001C214(*(s32 *)((s32)a0 + 0x20), &D_801BF728); + func_8001D0E8(*(s32 *)((s32)a0 + 0x20), 0x280, 0x1E0); + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x12) = 0x400; + func_8012A828((s32)a0, &D_801BFD04); + func_8012B21C((s32)a0); + *(u16 *)((s32)a0 + 2) = 4; + *(u16 *)((s32)a0 + 0x1A) = (rand() & 3) + 2; + *(s16 *)((s32)a0 + 0xFC) = -0x30; + *(s32 *)((s32)a0 + 0x1C) = 6; + *(u16 *)((s32)a0 + 0xE) = *(u16 *)((s32)a0 + 0xE) + 0x40; + *(u16 *)((s32)a0 + 0xA) = *(u16 *)((s32)a0 + 0xA) - 0xEE; + break; + case 4: { + s32 m; + s32 p; + func_8001CA1C(*(s32 *)((s32)a0 + 0x20), &D_8018E95C); + func_8012A828((s32)a0, &D_8018E970); + *(u32 *)(*(s32 *)((s32)a0 + 0x20) + 4) |= 0x8000000; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) |= 0x10; + func_8012B23C((s32)a0); + *(u16 *)((s32)a0 + 2) = 3; + *(s32 *)((s32)a0 + 0x1C) = 0x78; + *(u16 *)((s32)a0 + 0x16) = (rand() & 7) - 4; + *(u16 *)((s32)a0 + 0xFC) = (rand() & 0x3FF) - 0x200; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x14) = rand(); + m = rand() & 0xFF; + p = *(s32 *)((s32)a0 + 0x20); + m = m | 0x100; + *(u16 *)(p + 0x1A) = m; + *(u16 *)(p + 0x18) = m; + break; + } + case 5: { + s32 q; + func_8001CA1C(*(s32 *)((s32)a0 + 0x20), &D_8018E978); + func_8012A828((s32)a0, &D_8018E9D8); + *(u32 *)(*(s32 *)((s32)a0 + 0x20) + 4) |= 0x8000000; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) |= 0x10; + *(u32 *)(*(s32 *)((s32)a0 + 0x20) + 4) |= 0x50000000; + *(u16 *)((s32)a0 + 2) = 5; + *(s32 *)((s32)a0 + 0x1C) = 0xF; + s2 = rand(); + s1 = rand() % 0x60; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x14) = rand(); + *(u32 *)((s32)a0 + 0x94) = rand() & 7; + *(s32 *)((s32)a0 + 0x14) = func_8004787C(s2) * s1 * 0x10 - 0xA80000; + *(s32 *)((s32)a0 + 0x18) = func_80047948(s2) * s1 * 0x10; + *(u16 *)((s32)a0 + 6) = *(u16 *)((s32)a0 + 6) - 0x28; + q = *(s32 *)((s32)a0 + 0x20); + *(u16 *)(q + 0x1A) = 0x1999; + *(u16 *)(q + 0x18) = 0x1999; + break; + } + case 6: + if ((rand() & 1) != 0) { + s32 m; + s32 p; + func_8001CA1C(*(s32 *)((s32)a0 + 0x20), &D_8018EA20); + func_8012A828((s32)a0, &D_8018EA68); + m = rand(); + p = *(s32 *)((s32)a0 + 0x20); + m = (m & 0x1FF) | 0x200; + *(u16 *)(p + 0x1A) = m; + *(u16 *)(p + 0x18) = m; + } else { + s32 m; + s32 p; + func_8001CA1C(*(s32 *)((s32)a0 + 0x20), &D_8018EAA0); + func_8012A828((s32)a0, &D_8018EAE8); + *(u32 *)(*(s32 *)((s32)a0 + 0x20) + 4) |= 0x8000000; + *(u16 *)((s32)a0 + 0xFC) = rand() & 0x3F; + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x14) = rand(); + m = rand(); + p = *(s32 *)((s32)a0 + 0x20); + m = (m & 0x3FF) + 0x600; + *(u16 *)(p + 0x1A) = m; + *(u16 *)(p + 0x18) = m; + } + *(u16 *)(*(s32 *)((s32)a0 + 0x20) + 0x2C) |= 0x10; + func_8012B23C((s32)a0); + *(u16 *)((s32)a0 + 2) = 3; + *(s32 *)((s32)a0 + 0x1C) = 0x78; + *(u16 *)((s32)a0 + 0x16) = rand() | 0xFFFC; + *(s32 *)((s32)a0 + 0x10) = *(u32 *)(*(s32 *)((s32)a0 + 0x64) + 0x10) << 2; + *(s32 *)((s32)a0 + 0x18) = *(u32 *)(*(s32 *)((s32)a0 + 0x64) + 0x18) << 2; + break; + } +} + extern s32 rand(void); extern void func_80128EA8(s32, s32, s32); diff --git a/src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c b/src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c index 693fd4985b..e10f74b4be 100644 --- a/src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c +++ b/src/ov_SC07_007/ov_SC07_007_jr_8017BEBC.c @@ -7395,7 +7395,20 @@ void func_801827A4(void *a0) { } -INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8017BEBC", func_801827E0); +void func_801827E0(void) { + s32 i; + s32 end; + + i = 0x801F0000; + end = 0x801F944A; + while (i <= end) { + *(u8 *)i = *(u8 *)(-0x562B4 + i); + i++; + } + func_8002D844(0x801F0000); + func_8002D4C8(0x18E, 0); +} + INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8017BEBC", func_8018283C);