diff --git a/src/ov_SC02_003/ov_SC02_003_jr_8018173C.c b/src/ov_SC02_003/ov_SC02_003_jr_8018173C.c index 968c6bbf4..3e5562bc8 100644 --- a/src/ov_SC02_003/ov_SC02_003_jr_8018173C.c +++ b/src/ov_SC02_003/ov_SC02_003_jr_8018173C.c @@ -5359,7 +5359,7 @@ typedef struct { extern s32 func_8012BEE8(s32 a0); extern s32 func_8012AD50(void *a0); -extern void *func_80189DB8(void *a0, s32 color); +extern u32 func_80189DB8(); extern void func_80189B1C(void *a0, Range_80189B1C *a1, void *a2, void *a3); extern u8 D_8018F71C[]; @@ -5384,7 +5384,7 @@ typedef struct { extern u8 D_8018F71C[]; extern s16 D_8018F71E; -extern void *func_80189DB8(); +extern u32 func_80189DB8(); void func_80189A70(s32 *a0) { @@ -5417,7 +5417,26 @@ INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8018173C", func_80189C6 INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8018173C", func_80189D10); -INCLUDE_ASM("asm/ov_SC02_003/nonmatchings/ov_SC02_003_jr_8018173C", func_80189DB8); +extern u16 D_800B99DA; + +u32 func_80189DB8(param_1, param_2) +u32 param_1; +u32 param_2; +{ + if (D_800B99DA & 1) { + u8 b[4]; + *(u32*)b = param_2; + b[0] = (u8)(b[0] - 8); + if (b[0] >= 0xF8) b[0] = 0; + b[1] = (u8)(b[1] - 8); + if (b[1] >= 0xF8) b[1] = 0; + b[2] = (u8)(b[2] - 8); + if (b[2] >= 0xF8) b[2] = 0; + param_2 = *(u32*)b; + } + return param_2; +} + // @class: struct diff --git a/src/ov_SC02_017/ov_SC02_017_jr_8017DF34.c b/src/ov_SC02_017/ov_SC02_017_jr_8017DF34.c index 0c9f2d8a7..738112489 100644 --- a/src/ov_SC02_017/ov_SC02_017_jr_8017DF34.c +++ b/src/ov_SC02_017/ov_SC02_017_jr_8017DF34.c @@ -8904,7 +8904,23 @@ void func_8018838C(void *a0) { } -INCLUDE_ASM("asm/ov_SC02_017/nonmatchings/ov_SC02_017_jr_8017DF34", func_801883A0); +extern void D_801E9CCC; +extern void func_8012A828(s32 a0, void *a1); + +s32 func_801883A0(a0) +void *a0; +{ + u16 v; + *(u16 *)((s32)a0 + 2) = 3; + func_8012A828((s32)a0, &D_801E9CCC); + v = *(u16 *)(*(s32 *)((s32)a0 + 0x78) + 2); + *(u16 *)((s32)a0 + 0x5E) = 0; + *(u16 *)((s32)a0 + 0xDC) = 0; + *(s32 *)((s32)a0 + 0x1C) = 0x3C; + *(u16 *)((s32)a0 + 0xFE) = 0; + *(u16 *)((s32)a0 + 0x5C) = v; +} + extern s32 (*D_801E2130[])(void); extern s32 func_8012C044(s32 a0); @@ -9047,7 +9063,7 @@ void func_8018875C(s32 a0) { extern s32 func_8012BEE8(s32 arg); - extern void func_801883A0(s32 *a0); + extern s32 func_801883A0(); void func_801887C8(s32 *a0) { if (func_8012BEE8((s32)a0)) { func_801883A0(a0); diff --git a/src/ov_SC02_027/ov_SC02_027_jr_8017D898.c b/src/ov_SC02_027/ov_SC02_027_jr_8017D898.c index 772ebc79c..d57051a83 100644 --- a/src/ov_SC02_027/ov_SC02_027_jr_8017D898.c +++ b/src/ov_SC02_027/ov_SC02_027_jr_8017D898.c @@ -5032,7 +5032,17 @@ extern void func_8012AD44(s32 *a0, s16 a1); } -INCLUDE_ASM("asm/ov_SC02_027/nonmatchings/ov_SC02_027_jr_8017D898", func_801825D8); +extern void func_8002D4C8(s32 a0, s32 a1); +extern void func_8012AD44(s32 *a0, s16 a1); + +s32 func_801825D8(arg0) +void *arg0; +{ + *(s32 *)((char *)arg0 + 0x10) = 0x18000; + func_8012AD44(arg0, 2); + func_8002D4C8(0x675, 0); +} + extern void (*D_8018B99C)(void *); diff --git a/src/ov_SC03_002/ov_SC03_002_jr_8017D604.c b/src/ov_SC03_002/ov_SC03_002_jr_8017D604.c index 6fa6cf565..e09f47037 100644 --- a/src/ov_SC03_002/ov_SC03_002_jr_8017D604.c +++ b/src/ov_SC03_002/ov_SC03_002_jr_8017D604.c @@ -4678,7 +4678,7 @@ extern void func_8012E8E0(s32, s32); extern void func_8012E8A8(u8 *a0); extern s32 func_80183158(s32 arg0, s32 arg1); extern s32 func_801788B8(s32 arg0, s32 arg1); -extern void func_8018118C(); +extern s32 func_8018118C(); void func_80180F1C(void *a0) { diff --git a/src/ov_SC03_003/ov_SC03_003_jr_8017D5C0.c b/src/ov_SC03_003/ov_SC03_003_jr_8017D5C0.c index 71f897bcf..6fe6d29e0 100644 --- a/src/ov_SC03_003/ov_SC03_003_jr_8017D5C0.c +++ b/src/ov_SC03_003/ov_SC03_003_jr_8017D5C0.c @@ -3407,7 +3407,23 @@ void func_8017EBF4(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_003/nonmatchings/ov_SC03_003_jr_8017D5C0", func_8017EC64); +extern s32 D_801151D4; + +s32 func_8017EC64(arg0) +s32 arg0; +{ + s32 *ptr = (s32 *) D_801151D4; + + *(s32 *) (arg0 + 0x204) += 0x30000; + ptr[4] -= *(s16 *) (arg0 + 0x206); + ptr[5] = ptr[4]; + if (ptr[4] < 0x12C) { + ptr[4] = 0x12C; + ptr[5] = 0x12C; + } + return ptr[4]; +} + extern void (*D_80182FB4[])(void); diff --git a/src/ov_SC03_006/ov_SC03_006_jr_8017AE2C.c b/src/ov_SC03_006/ov_SC03_006_jr_8017AE2C.c index 8d80fa52f..b4aa022eb 100644 --- a/src/ov_SC03_006/ov_SC03_006_jr_8017AE2C.c +++ b/src/ov_SC03_006/ov_SC03_006_jr_8017AE2C.c @@ -13542,7 +13542,23 @@ void func_8018B210(void *a0) { } -INCLUDE_ASM("asm/ov_SC03_006/nonmatchings/ov_SC03_006_jr_8017AE2C", func_8018B224); +extern void D_801E7D24; +extern void func_8012A828(s32 a0, void *a1); + +s32 func_8018B224(a0) +void *a0; +{ + u16 v; + *(u16 *)((s32)a0 + 2) = 3; + func_8012A828((s32)a0, &D_801E7D24); + v = *(u16 *)(*(s32 *)((s32)a0 + 0x78) + 2); + *(u16 *)((s32)a0 + 0x5E) = 0; + *(u16 *)((s32)a0 + 0xDC) = 0; + *(s32 *)((s32)a0 + 0x1C) = 0x3C; + *(u16 *)((s32)a0 + 0xFE) = 0; + *(u16 *)((s32)a0 + 0x5C) = v; +} + extern s32 (*D_801E0188[])(void); extern s32 func_8012C044(s32 a0); diff --git a/src/ov_SC03_030/ov_SC03_030_jr_8017AE2C.c b/src/ov_SC03_030/ov_SC03_030_jr_8017AE2C.c index 30116468b..7daa5efcf 100644 --- a/src/ov_SC03_030/ov_SC03_030_jr_8017AE2C.c +++ b/src/ov_SC03_030/ov_SC03_030_jr_8017AE2C.c @@ -4345,7 +4345,21 @@ extern s32 func_80012DBC(s32 arg0, s32 arg1, s32 arg2, s32 arg3); } -INCLUDE_ASM("asm/ov_SC03_030/nonmatchings/ov_SC03_030_jr_8017AE2C", func_8017E240); +void func_8017E240(void* a0) +{ + s32 temp; + + if (func_801489E8(a0) != 0) { + temp = *(u16 *)(a0 + 0x132) + 0x71; + } else { + if (func_80148A48(a0) == 0) { + return; + } + temp = *(u16 *)(a0 + 0x132) - 0x71; + } + *(u16 *)(a0 + 0x132) = temp & 0xFFF; +} + extern void func_8016EE40(s32 a0, s32 a1, s32 a2); extern M2C_UNK D_8018592C; diff --git a/src/ov_SC03_101/ov_SC03_101_jr_8017CA80.c b/src/ov_SC03_101/ov_SC03_101_jr_8017CA80.c index 028c91654..e443a8f10 100644 --- a/src/ov_SC03_101/ov_SC03_101_jr_8017CA80.c +++ b/src/ov_SC03_101/ov_SC03_101_jr_8017CA80.c @@ -7088,7 +7088,7 @@ void func_80183084(void *a0) { } -extern u16 func_8018330C(void *a0); +extern s32 func_8018330C(); void func_80183284(s32 a0) { @@ -7106,7 +7106,30 @@ void func_80183284(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_101/nonmatchings/ov_SC03_101_jr_8017CA80", func_8018330C); +extern void func_80015978(s32 a0, s32 *a1); +extern void func_8012EFB8(s32 a0); + +s32 func_8018330C(a0) +s32 a0; +{ + extern void func_8012EFB8(s32 a0); + s32 sp10; + s32 v1; + + func_80015978(a0 + 4, &sp10); + if ((((s32 (*)(s32, s32))func_8012EFB8)((s32)&sp10, (s32)&sp10) & 0xFFFFEFFF) != 0) { + v1 = 1; + } else { + v1 = (*(s16 *)&sp10 * 64) / 160 + 0x40; + } + if (v1 <= 0) { + v1 = 1; + } else if (v1 >= 0x80) { + v1 = 0x7F; + } + return v1; +} + extern void (*D_8019B2AC[])(void); diff --git a/src/ov_SC03_103/ov_SC03_103_jr_8017C294.c b/src/ov_SC03_103/ov_SC03_103_jr_8017C294.c index 88944c6a5..e9d876566 100644 --- a/src/ov_SC03_103/ov_SC03_103_jr_8017C294.c +++ b/src/ov_SC03_103/ov_SC03_103_jr_8017C294.c @@ -7601,7 +7601,30 @@ void func_80183AEC(s32 a0) } -INCLUDE_ASM("asm/ov_SC03_103/nonmatchings/ov_SC03_103_jr_8017C294", func_80183B74); +extern void func_80015978(s32 a0, s32 *a1); +extern void func_8012EFB8(s32 a0); + +s32 func_80183B74(a0) +s32 a0; +{ + extern void func_8012EFB8(s32 a0); + s32 sp10; + s32 v1; + + func_80015978(a0 + 4, &sp10); + if ((((s32 (*)(s32, s32))func_8012EFB8)((s32)&sp10, (s32)&sp10) & 0xFFFFEFFF) != 0) { + v1 = 1; + } else { + v1 = (*(s16 *)&sp10 * 64) / 160 + 0x40; + } + if (v1 <= 0) { + v1 = 1; + } else if (v1 >= 0x80) { + v1 = 0x7F; + } + return v1; +} + extern void (*D_801C20DC[])(void); diff --git a/src/ov_SC03_119/ov_SC03_119_jr_8017FB84.c b/src/ov_SC03_119/ov_SC03_119_jr_8017FB84.c index 9e2d36cdd..91adc77fe 100644 --- a/src/ov_SC03_119/ov_SC03_119_jr_8017FB84.c +++ b/src/ov_SC03_119/ov_SC03_119_jr_8017FB84.c @@ -4793,7 +4793,7 @@ extern void func_800D0C48(s32 a0); /* TU:1469 */ extern s32 func_8014CB2C(void); /* TU:560 */ extern void func_8012A018(s32 a, s32 b); /* TU:2412 */ extern void func_801842DC(s32 a0); /* TU:4023 INCLUDE_ASM (no decl) */ -extern s32 func_80183830(); /* TU:3930 INCLUDE_ASM (no decl) */ +extern s32 func_80183830(void); /* TU:3930 INCLUDE_ASM (no decl) */ extern void func_80029124(s32, s32); /* TU:50 */ extern s32 func_8016F0AC(); /* TU:1945 */ extern void func_8012C588(s32 a0, s32 a1); /* not in TU */ diff --git a/src/ov_SC03_125/ov_SC03_125_jr_8017D604.c b/src/ov_SC03_125/ov_SC03_125_jr_8017D604.c index 1c5647678..03e9e6e95 100644 --- a/src/ov_SC03_125/ov_SC03_125_jr_8017D604.c +++ b/src/ov_SC03_125/ov_SC03_125_jr_8017D604.c @@ -3712,7 +3712,7 @@ extern void func_8012CAE4(void *a0); extern void func_8012E88C(s32 a0); extern void func_8012E8A8(u8 *a0); extern void func_8012E8E0(s32 a0, s32 a1); -extern void func_8017F68C(); +extern s32 func_8017F68C(); void func_8017F41C(a0) void *a0; @@ -3790,7 +3790,38 @@ void func_8017F62C(void *arg0) { } -INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_8017D604", func_8017F68C); +extern s32 func_8012BD14(s32 a0); +extern s32 func_80178BF8(); +extern void func_80172710(void); + +s32 func_8017F68C(a0) +void *a0; +{ + s32 ptr; + u16 st; + + ptr = *(s32 *)((s32)a0 + 0x64); + st = *(u16 *)((s32)ptr + 0x2); + if (st != 2) { + return 0; + } + + if (func_8012BD14((s32)a0) >= 0x4000) { + return 0; + } + + { + s32 p; + u16 st2; + p = *(s32 *)((s32)a0 + 0x64); + st2 = *(u16 *)((s32)p + 0x2); + st2++; + *(u16 *)((s32)p + 0x2) = st2; + } + func_80178BF8(); + return (s32)func_80172710; +} + /* func_8017F700 — guarded dispatch: ask func_801819DC(9, 0x12); if it answers diff --git a/src/ov_SC04_020/ov_SC04_020_jr_8017D604.c b/src/ov_SC04_020/ov_SC04_020_jr_8017D604.c index 0b33cc270..599384c5e 100644 --- a/src/ov_SC04_020/ov_SC04_020_jr_8017D604.c +++ b/src/ov_SC04_020/ov_SC04_020_jr_8017D604.c @@ -4321,7 +4321,7 @@ void func_8018067C(void *arg0) { extern void func_8012CAE4(void *a0); -extern void func_80180978(void); +extern s32 func_80180978(); void func_80180708(void *a0) { @@ -4424,7 +4424,38 @@ void func_80180918(void *arg0) { } -INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_8017D604", func_80180978); +extern s32 func_8012BD14(s32 a0); +extern s32 func_80178BF8(); +extern void func_80172710(void); + +s32 func_80180978(a0) +void *a0; +{ + s32 ptr; + u16 st; + + ptr = *(s32 *)((s32)a0 + 0x64); + st = *(u16 *)((s32)ptr + 0x2); + if (st != 2) { + return 0; + } + + if (func_8012BD14((s32)a0) >= 0x4000) { + return 0; + } + + { + s32 p; + u16 st2; + p = *(s32 *)((s32)a0 + 0x64); + st2 = *(u16 *)((s32)p + 0x2); + st2++; + *(u16 *)((s32)p + 0x2) = st2; + } + func_80178BF8(); + return (s32)func_80172710; +} + /* func_801809EC — guarded dispatch: ask func_80181388(9, 0x12); if it answers diff --git a/src/ov_SC06_018/ov_SC06_018_jr_8017C24C.c b/src/ov_SC06_018/ov_SC06_018_jr_8017C24C.c index 2897a918e..7589fdc7f 100644 --- a/src/ov_SC06_018/ov_SC06_018_jr_8017C24C.c +++ b/src/ov_SC06_018/ov_SC06_018_jr_8017C24C.c @@ -5016,7 +5016,42 @@ extern void func_8017EB8C(s32 arg0); } -INCLUDE_ASM("asm/ov_SC06_018/nonmatchings/ov_SC06_018_jr_8017C24C", func_8017FD80); +#include "common.h" + +/* func_8017FD80 (ov_SC06_018_jr_8017C24C) — card twin ov_SC06_008:func_8017FF74 (banked), + * mirrored spelling: block-scope externs, direct BEE8 test, bare & 0x2000, cast idiom. + * Tail callee is func_8017EB8C in THIS binary (twin's func_8017ED80 == same source fn, + * cf. this TU's aF8017ED80 __asm__("func_8017EB8C") alias); kept (s32)-proto for + * compatibility with this TU's earlier decls. + */ + +void func_8017FD80(s32 a0) +{ + extern void func_801319E0(s32 a0); + extern s32 func_8012BEE8(s32 a0); + extern void func_8012CBF4(s32 a0); + extern void func_80131C78(s32 a0); + extern void func_80131E00(int a0, int a1); + extern void func_8017EB8C(s32 a0); + s16 field_a; + s32 result; + + field_a = *(s16 *)(a0 + 0xA); + if (field_a >= 0x10) { + func_801319E0(a0); + } else { + if (func_8012BEE8(a0) != 0) { + func_80131E00(a0, 6); + } else { + result = ((s32 (*)(s32))func_8012CBF4)(a0); + if (result & 0x2000) { + func_80131C78(a0); + } + ((void (*)(s32))func_8017EB8C)(a0); + } + } +} + void func_8017FE0C(s32 a0) {