diff --git a/src/game/data/data_02da90.c b/src/game/data/data_02da90.c index 886dc5a6b..e8a92d8a3 100644 --- a/src/game/data/data_02da90.c +++ b/src/game/data/data_02da90.c @@ -708,7 +708,7 @@ u32 place_bios[] = { }; u8 var80088ad8 = 0x00000000; -u32 var80088adc = 0x00000000; +u8 var80088adc = 0; u32 var80088ae0 = 0x39383736; u32 var80088ae4 = 0x35343332; u32 var80088ae8 = 0x31300000; diff --git a/src/game/game_167ae0.c b/src/game/game_167ae0.c index fab7a5844..c1b306de0 100644 --- a/src/game/game_167ae0.c +++ b/src/game/game_167ae0.c @@ -5470,7 +5470,7 @@ glabel func0f16b96c /* f16cac4: 8e8f0034 */ lw $t7,0x34($s4) /* f16cac8: 51e00006 */ beqzl $t7,.L0f16cae4 /* f16cacc: 8fbf0044 */ lw $ra,0x44($sp) -/* f16cad0: 0fc68666 */ jal func0f1a1998 +/* f16cad0: 0fc68666 */ jal dtTick /* f16cad4: 00000000 */ sll $zero,$zero,0x0 /* f16cad8: 0fc6881c */ jal func0f1a2070 /* f16cadc: 00000000 */ sll $zero,$zero,0x0 @@ -5845,7 +5845,7 @@ glabel func0f16b96c // func0f19f994(); // // if (g_Vars.lvupdate240 != 0) { -// func0f1a1998(); +// dtTick(); // func0f1a2070(); // } // } diff --git a/src/game/game_19c990.c b/src/game/game_19c990.c index ef2f97bfe..b8185d74a 100644 --- a/src/game/game_19c990.c +++ b/src/game/game_19c990.c @@ -5846,96 +5846,43 @@ void dtPushEndscreen(void) func0f0f85e0(&g_DeviceTrainingStatsFailedMenuDialog, MENUROOT_TRAINING); } - g_DeviceTrainingData.unk01 = 0; + g_DeviceTrainingData.timeleft = 0; g_DeviceTrainingData.completed = false; g_DeviceTrainingData.failed = false; g_DeviceTrainingData.finished = false; g_DeviceTrainingData.holographedpc = false; } -GLOBAL_ASM( -glabel func0f1a1998 -/* f1a1998: 3c0e8009 */ lui $t6,%hi(var80088adc) -/* f1a199c: 91ce8adc */ lbu $t6,%lo(var80088adc)($t6) -/* f1a19a0: 27bdffe8 */ addiu $sp,$sp,-24 -/* f1a19a4: afbf0014 */ sw $ra,0x14($sp) -/* f1a19a8: 11c00041 */ beqz $t6,.L0f1a1ab0 -/* f1a19ac: 3c03800b */ lui $v1,%hi(g_DeviceTrainingData) -/* f1a19b0: 2463d1a0 */ addiu $v1,$v1,%lo(g_DeviceTrainingData) -/* f1a19b4: 8c620000 */ lw $v0,0x0($v1) -/* f1a19b8: 3c04800a */ lui $a0,%hi(g_Vars) -/* f1a19bc: 24849fc0 */ addiu $a0,$a0,%lo(g_Vars) -/* f1a19c0: 00027fc2 */ srl $t7,$v0,0x1f -/* f1a19c4: 11e0002c */ beqz $t7,.L0f1a1a78 -/* f1a19c8: 0002c0c0 */ sll $t8,$v0,0x3 -/* f1a19cc: 8c780004 */ lw $t8,0x4($v1) -/* f1a19d0: 8c990038 */ lw $t9,0x38($a0) -/* f1a19d4: 8c890284 */ lw $t1,0x284($a0) -/* f1a19d8: 03194021 */ addu $t0,$t8,$t9 -/* f1a19dc: ac680004 */ sw $t0,0x4($v1) -/* f1a19e0: 8d2a00d8 */ lw $t2,0xd8($t1) -/* f1a19e4: 51400004 */ beqzl $t2,.L0f1a19f8 -/* f1a19e8: 00002025 */ or $a0,$zero,$zero -/* f1a19ec: 0fc686fb */ jal func0f1a1bec -/* f1a19f0: 00000000 */ sll $zero,$zero,0x0 -/* f1a19f4: 00002025 */ or $a0,$zero,$zero -.L0f1a19f8: -/* f1a19f8: 0fc127da */ jal chrHasStageFlag -/* f1a19fc: 24050010 */ addiu $a1,$zero,0x10 -/* f1a1a00: 1040000d */ beqz $v0,.L0f1a1a38 -/* f1a1a04: 00002025 */ or $a0,$zero,$zero -/* f1a1a08: 0fc686fb */ jal func0f1a1bec -/* f1a1a0c: 00000000 */ sll $zero,$zero,0x0 -/* f1a1a10: 3c03800b */ lui $v1,%hi(g_DeviceTrainingData) -/* f1a1a14: 2463d1a0 */ addiu $v1,$v1,%lo(g_DeviceTrainingData) -/* f1a1a18: 906c0000 */ lbu $t4,0x0($v1) -/* f1a1a1c: 240e0001 */ addiu $t6,$zero,0x1 -/* f1a1a20: a06e0001 */ sb $t6,0x1($v1) -/* f1a1a24: 35980040 */ ori $t8,$t4,0x40 -/* f1a1a28: a0780000 */ sb $t8,0x0($v1) -/* f1a1a2c: 37190010 */ ori $t9,$t8,0x10 -/* f1a1a30: 1000001f */ beqz $zero,.L0f1a1ab0 -/* f1a1a34: a0790000 */ sb $t9,0x0($v1) -.L0f1a1a38: -/* f1a1a38: 0fc127da */ jal chrHasStageFlag -/* f1a1a3c: 24050008 */ addiu $a1,$zero,0x8 -/* f1a1a40: 5040001c */ beqzl $v0,.L0f1a1ab4 -/* f1a1a44: 8fbf0014 */ lw $ra,0x14($sp) -/* f1a1a48: 0fc686fb */ jal func0f1a1bec -/* f1a1a4c: 00000000 */ sll $zero,$zero,0x0 -/* f1a1a50: 3c03800b */ lui $v1,%hi(g_DeviceTrainingData) -/* f1a1a54: 2463d1a0 */ addiu $v1,$v1,%lo(g_DeviceTrainingData) -/* f1a1a58: 90690000 */ lbu $t1,0x0($v1) -/* f1a1a5c: 240b0001 */ addiu $t3,$zero,0x1 -/* f1a1a60: a06b0001 */ sb $t3,0x1($v1) -/* f1a1a64: 352d0020 */ ori $t5,$t1,0x20 -/* f1a1a68: a06d0000 */ sb $t5,0x0($v1) -/* f1a1a6c: 35ae0010 */ ori $t6,$t5,0x10 -/* f1a1a70: 1000000f */ beqz $zero,.L0f1a1ab0 -/* f1a1a74: a06e0000 */ sb $t6,0x0($v1) -.L0f1a1a78: -/* f1a1a78: 0703000e */ bgezl $t8,.L0f1a1ab4 -/* f1a1a7c: 8fbf0014 */ lw $ra,0x14($sp) -/* f1a1a80: 80620001 */ lb $v0,0x1($v1) -/* f1a1a84: 3c04800a */ lui $a0,%hi(g_Vars) -/* f1a1a88: 24849fc0 */ addiu $a0,$a0,%lo(g_Vars) -/* f1a1a8c: 5c400006 */ bgtzl $v0,.L0f1a1aa8 -/* f1a1a90: 8c990038 */ lw $t9,0x38($a0) -/* f1a1a94: 0fc68643 */ jal dtPushEndscreen -/* f1a1a98: 00000000 */ sll $zero,$zero,0x0 -/* f1a1a9c: 10000005 */ beqz $zero,.L0f1a1ab4 -/* f1a1aa0: 8fbf0014 */ lw $ra,0x14($sp) -/* f1a1aa4: 8c990038 */ lw $t9,0x38($a0) -.L0f1a1aa8: -/* f1a1aa8: 00594023 */ subu $t0,$v0,$t9 -/* f1a1aac: a0680001 */ sb $t0,0x1($v1) -.L0f1a1ab0: -/* f1a1ab0: 8fbf0014 */ lw $ra,0x14($sp) -.L0f1a1ab4: -/* f1a1ab4: 27bd0018 */ addiu $sp,$sp,0x18 -/* f1a1ab8: 03e00008 */ jr $ra -/* f1a1abc: 00000000 */ sll $zero,$zero,0x0 -); +void dtTick(void) +{ + if (var80088adc) { + if (g_DeviceTrainingData.intraining) { + g_DeviceTrainingData.timetaken += g_Vars.lvupdate240_60; + + if (g_Vars.currentplayer->isdead) { + dtEnd(); + } + + if (chrHasStageFlag(NULL, STAGEFLAG_CI_TRIGGER_DEVICE_FAILURE)) { + dtEnd(); + g_DeviceTrainingData.failed = true; + g_DeviceTrainingData.timeleft = 1; + g_DeviceTrainingData.finished = true; + } else if (chrHasStageFlag(NULL, STAGEFLAG_CI_TRIGGER_DEVICE_SUCCESS)) { + dtEnd(); + g_DeviceTrainingData.completed = true; + g_DeviceTrainingData.timeleft = 1; + g_DeviceTrainingData.finished = true; + } + } else if (g_DeviceTrainingData.finished) { + if (g_DeviceTrainingData.timeleft <= 0) { + dtPushEndscreen(); + } else { + g_DeviceTrainingData.timeleft -= g_Vars.lvupdate240_60; + } + } + } +} GLOBAL_ASM( glabel func0f1a1ac0 @@ -5993,7 +5940,7 @@ void dtBegin(void) } GLOBAL_ASM( -glabel func0f1a1bec +glabel dtEnd /* f1a1bec: 3c02800b */ lui $v0,%hi(g_DeviceTrainingData) /* f1a1bf0: 2442d1a0 */ addiu $v0,$v0,%lo(g_DeviceTrainingData) /* f1a1bf4: 904e0000 */ lbu $t6,0x0($v0) @@ -6288,7 +6235,7 @@ void htPushEndscreen(void) func0f0f85e0(&g_HoloTrainingStatsFailedMenuDialog, MENUROOT_TRAINING); } - g_HoloTrainingData.unk01 = 0; + g_HoloTrainingData.timeleft = 0; g_HoloTrainingData.completed = false; g_HoloTrainingData.failed = false; g_HoloTrainingData.finished = false; diff --git a/src/game/game_1a3340.c b/src/game/game_1a3340.c index 4998f9f98..08593041a 100644 --- a/src/game/game_1a3340.c +++ b/src/game/game_1a3340.c @@ -3169,7 +3169,7 @@ s32 menuhandlerDtOkOrResume(u32 operation, struct menu_item *item, s32 *value) s32 menuhandler001a6514(u32 operation, struct menu_item *item, s32 *value) { if (operation == MENUOP_SET) { - func0f1a1bec(); + dtEnd(); } return 0; diff --git a/src/include/constants.h b/src/include/constants.h index ef655a4bf..ca0a5d53b 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -2111,16 +2111,18 @@ #define STAGE_CREDITS 0x5c #define STAGE_4MBMENU 0x5d -#define STAGEFLAG_CI_TRIGGER_UPLINK 0x00000100 -#define STAGEFLAG_CI_TRIGGER_ECMMINE 0x00000200 -#define STAGEFLAG_CI_TRIGGER_CAMSPY 0x00000400 -#define STAGEFLAG_CI_TRIGGER_NIGHTVISION 0x00000800 -#define STAGEFLAG_CI_TRIGGER_DOORDECODER 0x00001000 -#define STAGEFLAG_CI_TRIGGER_RTRACKER 0x00002000 -#define STAGEFLAG_CI_TRIGGER_IR 0x00004000 -#define STAGEFLAG_CI_TRIGGER_XRAY 0x00008000 -#define STAGEFLAG_CI_TRIGGER_DISGUISE 0x00010000 -#define STAGEFLAG_CI_TRIGGER_CLOAK 0x00020000 +#define STAGEFLAG_CI_TRIGGER_DEVICE_SUCCESS 0x00000008 +#define STAGEFLAG_CI_TRIGGER_DEVICE_FAILURE 0x00000010 +#define STAGEFLAG_CI_TRIGGER_UPLINK 0x00000100 +#define STAGEFLAG_CI_TRIGGER_ECMMINE 0x00000200 +#define STAGEFLAG_CI_TRIGGER_CAMSPY 0x00000400 +#define STAGEFLAG_CI_TRIGGER_NIGHTVISION 0x00000800 +#define STAGEFLAG_CI_TRIGGER_DOORDECODER 0x00001000 +#define STAGEFLAG_CI_TRIGGER_RTRACKER 0x00002000 +#define STAGEFLAG_CI_TRIGGER_IR 0x00004000 +#define STAGEFLAG_CI_TRIGGER_XRAY 0x00008000 +#define STAGEFLAG_CI_TRIGGER_DISGUISE 0x00010000 +#define STAGEFLAG_CI_TRIGGER_CLOAK 0x00020000 #define STAGEINDEX_MAIANSOS 0x00 #define STAGEINDEX_TEST_SILO 0x01 diff --git a/src/include/game/data/data_02da90.h b/src/include/game/data/data_02da90.h index 4b7833eb1..3a41d2dd3 100644 --- a/src/include/game/data/data_02da90.h +++ b/src/include/game/data/data_02da90.h @@ -32,7 +32,7 @@ extern u32 misc_bios[]; extern u32 var80088964; extern u32 place_bios[]; extern u8 var80088ad8; -extern u32 var80088adc; +extern u8 var80088adc; extern u32 var80088ae0; extern u32 var80088aec; extern u32 g_CiDeviceStageFlags[10]; diff --git a/src/include/game/game_19c990.h b/src/include/game/game_19c990.h index 361957ff9..3ba37896d 100644 --- a/src/include/game/game_19c990.h +++ b/src/include/game/game_19c990.h @@ -77,10 +77,10 @@ u32 func0f1a17e4(void); struct trainingdata *getDeviceTrainingData(void); void dtSetUpPlayer(void); void dtPushEndscreen(void); -void func0f1a1998(void); +void dtTick(void); u32 func0f1a1ac0(void); void dtBegin(void); -u32 func0f1a1bec(void); +void dtEnd(void); u32 func0f1a1c98(void); u32 func0f1a1d10(void); u32 func0f1a1d68(u32 arg0); diff --git a/src/include/types.h b/src/include/types.h index 655e9466e..e36368c82 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -4100,7 +4100,7 @@ struct trainingdata { u8 completed : 1; u8 finished : 1; u8 holographedpc : 1; - u8 unk01; + s8 timeleft; s32 timetaken; struct defaultobj *obj; u32 unk0c;