From e2f5db746d737c9e450be001cb64b3e1e4a24a10 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 10 Apr 2020 23:25:13 +1000 Subject: [PATCH] Decompile dtIsAvailable --- src/game/data/data_02da90.c | 16 ++++++-- src/game/game_19c990.c | 57 +++++++++-------------------- src/game/game_1a3340.c | 2 +- src/include/game/data/data_02da90.h | 2 +- src/include/game/game_19c990.h | 4 +- 5 files changed, 35 insertions(+), 46 deletions(-) diff --git a/src/game/data/data_02da90.c b/src/game/data/data_02da90.c index b1766a798..8e92b3722 100644 --- a/src/game/data/data_02da90.c +++ b/src/game/data/data_02da90.c @@ -709,9 +709,19 @@ u32 place_bios[] = { u8 var80088ad8 = 0x00000000; u8 var80088adc = 0; -u32 var80088ae0 = 0x39383736; -u32 var80088ae4 = 0x35343332; -u32 var80088ae8 = 0x31300000; + +u8 g_CiDeviceSaveFileFlags[] = { + SAVEFILEFLAG_CI_UPLINK_DONE, + SAVEFILEFLAG_CI_ECMMINE_DONE, + SAVEFILEFLAG_CI_CAMSPY_DONE, + SAVEFILEFLAG_CI_NIGHTVISION_DONE, + SAVEFILEFLAG_CI_DOORDECODER_DONE, + SAVEFILEFLAG_CI_RTRACKER_DONE, + SAVEFILEFLAG_CI_IR_DONE, + SAVEFILEFLAG_CI_XRAY_DONE, + SAVEFILEFLAG_CI_DISGUISE_DONE, + SAVEFILEFLAG_CI_CLOAK_DONE, +}; u32 g_CiDeviceWeapons[] = { WEAPON_DATAUPLINK, diff --git a/src/game/game_19c990.c b/src/game/game_19c990.c index 1f77b3d51..90d214545 100644 --- a/src/game/game_19c990.c +++ b/src/game/game_19c990.c @@ -5929,50 +5929,29 @@ void dtEnd(void) g_Vars.currentplayer->bondhealth = 1; } -GLOBAL_ASM( -glabel dtIsComplete -/* f1a1c98: 27bdffd8 */ addiu $sp,$sp,-40 -/* f1a1c9c: 3c0e8009 */ lui $t6,%hi(var80088ae0) -/* f1a1ca0: afbf0014 */ sw $ra,0x14($sp) -/* f1a1ca4: 25ce8ae0 */ addiu $t6,$t6,%lo(var80088ae0) -/* f1a1ca8: 8dc10000 */ lw $at,0x0($t6) -/* f1a1cac: 27a2001c */ addiu $v0,$sp,0x1c -/* f1a1cb0: 2485ffff */ addiu $a1,$a0,-1 -/* f1a1cb4: ac410000 */ sw $at,0x0($v0) -/* f1a1cb8: 8dd90004 */ lw $t9,0x4($t6) -/* f1a1cbc: ac590004 */ sw $t9,0x4($v0) -/* f1a1cc0: 95c10008 */ lhu $at,0x8($t6) -/* f1a1cc4: a4410008 */ sh $at,0x8($v0) -/* f1a1cc8: 28a1000a */ slti $at,$a1,0xa -/* f1a1ccc: 14200003 */ bnez $at,.L0f1a1cdc -/* f1a1cd0: 00000000 */ sll $zero,$zero,0x0 -/* f1a1cd4: 1000000a */ beqz $zero,.L0f1a1d00 -/* f1a1cd8: 24020001 */ addiu $v0,$zero,0x1 -.L0f1a1cdc: -/* f1a1cdc: 04a00005 */ bltz $a1,.L0f1a1cf4 -/* f1a1ce0: 00454021 */ addu $t0,$v0,$a1 -/* f1a1ce4: 0fc43c63 */ jal savefileHasFlag -/* f1a1ce8: 91040000 */ lbu $a0,0x0($t0) -/* f1a1cec: 50400004 */ beqzl $v0,.L0f1a1d00 -/* f1a1cf0: 00001025 */ or $v0,$zero,$zero -.L0f1a1cf4: -/* f1a1cf4: 10000002 */ beqz $zero,.L0f1a1d00 -/* f1a1cf8: 24020001 */ addiu $v0,$zero,0x1 -/* f1a1cfc: 00001025 */ or $v0,$zero,$zero -.L0f1a1d00: -/* f1a1d00: 8fbf0014 */ lw $ra,0x14($sp) -/* f1a1d04: 27bd0028 */ addiu $sp,$sp,0x28 -/* f1a1d08: 03e00008 */ jr $ra -/* f1a1d0c: 00000000 */ sll $zero,$zero,0x0 -); +bool dtIsAvailable(s32 deviceindex) +{ + u8 flags[10] = g_CiDeviceSaveFileFlags; + deviceindex--; -s32 dtGetNumCompleted(void) + if (deviceindex >= 10) { + return true; + } + + if (deviceindex < 0 || savefileHasFlag(flags[deviceindex])) { + return true; + } + + return false; +} + +s32 dtGetNumAvailable(void) { s32 count = 0; s32 i; for (i = 0; i < 10; i++) { - if (dtIsComplete(i)) { + if (dtIsAvailable(i)) { count++; } } @@ -5986,7 +5965,7 @@ s32 func0f1a1d68(s32 wantindex) s32 i; for (i = 0; i < 10; i++) { - if (dtIsComplete(i)) { + if (dtIsAvailable(i)) { index++; } diff --git a/src/game/game_1a3340.c b/src/game/game_1a3340.c index 1c44a66a4..1d70cd6de 100644 --- a/src/game/game_1a3340.c +++ b/src/game/game_1a3340.c @@ -3096,7 +3096,7 @@ glabel var7f1b9994 /* f1a6408: 8c2e997c */ lw $t6,%lo(var7f1b997c)($at) /* f1a640c: 01c00008 */ jr $t6 /* f1a6410: 00000000 */ sll $zero,$zero,0x0 -/* f1a6414: 0fc68744 */ jal dtGetNumCompleted +/* f1a6414: 0fc68744 */ jal dtGetNumAvailable /* f1a6418: afa60020 */ sw $a2,0x20($sp) /* f1a641c: 8fa60020 */ lw $a2,0x20($sp) /* f1a6420: 1000001a */ beqz $zero,.L0f1a648c diff --git a/src/include/game/data/data_02da90.h b/src/include/game/data/data_02da90.h index de877c4a2..4ac8e5fde 100644 --- a/src/include/game/data/data_02da90.h +++ b/src/include/game/data/data_02da90.h @@ -33,7 +33,7 @@ extern u32 var80088964; extern u32 place_bios[]; extern u8 var80088ad8; extern u8 var80088adc; -extern u32 var80088ae0; +extern u8 g_CiDeviceSaveFileFlags[10]; extern u32 g_CiDeviceWeapons[10]; extern u32 g_CiDeviceStageFlags[10]; extern u32 device_descriptions[10]; diff --git a/src/include/game/game_19c990.h b/src/include/game/game_19c990.h index 5792a0d16..530e5f5a9 100644 --- a/src/include/game/game_19c990.h +++ b/src/include/game/game_19c990.h @@ -81,8 +81,8 @@ void dtTick(void); void func0f1a1ac0(void); void dtBegin(void); void dtEnd(void); -bool dtIsComplete(s32 index); -s32 dtGetNumCompleted(void); +bool dtIsAvailable(s32 deviceindex); +s32 dtGetNumAvailable(void); s32 func0f1a1d68(s32 wantindex); u32 dtGetWeaponByDeviceIndex(s32 deviceindex); u32 ciGetStageFlagByDeviceIndex(u32 deviceindex);