From ff2cef63ce222dabd9e3dd346f11bdea4e81b2f8 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Fri, 10 Apr 2020 20:06:30 +1000 Subject: [PATCH] Decompile dtEnd --- src/game/game_19c990.c | 69 +++++++++------------------------- src/include/constants.h | 3 ++ src/include/game/game_0b63b0.h | 2 +- src/include/game/game_19c990.h | 2 +- 4 files changed, 23 insertions(+), 53 deletions(-) diff --git a/src/game/game_19c990.c b/src/game/game_19c990.c index b8185d74a..64037357f 100644 --- a/src/game/game_19c990.c +++ b/src/game/game_19c990.c @@ -5810,7 +5810,7 @@ struct trainingdata *getDeviceTrainingData(void) return &g_DeviceTrainingData; } -void dtSetUpPlayer(void) +void dtRestorePlayer(void) { playersSetPassiveMode(true); @@ -5930,61 +5930,28 @@ void dtBegin(void) { g_DeviceTrainingData.intraining = true; g_DeviceTrainingData.timetaken = 0; - chrUnsetStageFlag(NULL, 0x00000004); - chrUnsetStageFlag(NULL, 0x00000008); - chrUnsetStageFlag(NULL, 0x00000010); + chrUnsetStageFlag(NULL, STAGEFLAG_CI_DEVICE_ABORTING); + chrUnsetStageFlag(NULL, STAGEFLAG_CI_TRIGGER_DEVICE_SUCCESS); + chrUnsetStageFlag(NULL, STAGEFLAG_CI_TRIGGER_DEVICE_FAILURE); chrSetStageFlag(NULL, ciGetStageFlagByDeviceIndex(func0f1a1d68(var80088ad8))); g_Vars.currentplayer->deadtimer = 1; playersSetPassiveMode(false); - chrSetStageFlag(NULL, 0x00000001); + chrSetStageFlag(NULL, STAGEFLAG_CI_IN_TRAINING); } -GLOBAL_ASM( -glabel dtEnd -/* f1a1bec: 3c02800b */ lui $v0,%hi(g_DeviceTrainingData) -/* f1a1bf0: 2442d1a0 */ addiu $v0,$v0,%lo(g_DeviceTrainingData) -/* f1a1bf4: 904e0000 */ lbu $t6,0x0($v0) -/* f1a1bf8: 27bdffe8 */ addiu $sp,$sp,-24 -/* f1a1bfc: afbf0014 */ sw $ra,0x14($sp) -/* f1a1c00: 31cfff7f */ andi $t7,$t6,0xff7f -/* f1a1c04: 0fc68609 */ jal dtSetUpPlayer -/* f1a1c08: a04f0000 */ sb $t7,0x0($v0) -/* f1a1c0c: 24040014 */ addiu $a0,$zero,0x14 -/* f1a1c10: 0fc2a58a */ jal currentPlayerGiveAmmo -/* f1a1c14: 00002825 */ or $a1,$zero,$zero -/* f1a1c18: 00002025 */ or $a0,$zero,$zero -/* f1a1c1c: 0fc127cb */ jal chrSetStageFlag -/* f1a1c20: 24050004 */ addiu $a1,$zero,0x4 -/* f1a1c24: 00002025 */ or $a0,$zero,$zero -/* f1a1c28: 0fc127d2 */ jal chrUnsetStageFlag -/* f1a1c2c: 24050010 */ addiu $a1,$zero,0x10 -/* f1a1c30: 3c048009 */ lui $a0,%hi(var80088ad8) -/* f1a1c34: 0fc6875a */ jal func0f1a1d68 -/* f1a1c38: 90848ad8 */ lbu $a0,%lo(var80088ad8)($a0) -/* f1a1c3c: 0fc6878e */ jal ciGetStageFlagByDeviceIndex -/* f1a1c40: 00402025 */ or $a0,$v0,$zero -/* f1a1c44: 00002025 */ or $a0,$zero,$zero -/* f1a1c48: 0fc127d2 */ jal chrUnsetStageFlag -/* f1a1c4c: 00402825 */ or $a1,$v0,$zero -/* f1a1c50: 3c18800a */ lui $t8,%hi(g_Vars+0x284) -/* f1a1c54: 8f18a244 */ lw $t8,%lo(g_Vars+0x284)($t8) -/* f1a1c58: 00002025 */ or $a0,$zero,$zero -/* f1a1c5c: 24050001 */ addiu $a1,$zero,0x1 -/* f1a1c60: 0fc127d2 */ jal chrUnsetStageFlag -/* f1a1c64: af001c08 */ sw $zero,0x1c08($t8) -/* f1a1c68: 0fc2eda7 */ jal func0f0bb69c -/* f1a1c6c: 00000000 */ sll $zero,$zero,0x0 -/* f1a1c70: 3c013f80 */ lui $at,0x3f80 -/* f1a1c74: 3c19800a */ lui $t9,%hi(g_Vars+0x284) -/* f1a1c78: 8f39a244 */ lw $t9,%lo(g_Vars+0x284)($t9) -/* f1a1c7c: 44812000 */ mtc1 $at,$f4 -/* f1a1c80: 00000000 */ sll $zero,$zero,0x0 -/* f1a1c84: e72400dc */ swc1 $f4,0xdc($t9) -/* f1a1c88: 8fbf0014 */ lw $ra,0x14($sp) -/* f1a1c8c: 27bd0018 */ addiu $sp,$sp,0x18 -/* f1a1c90: 03e00008 */ jr $ra -/* f1a1c94: 00000000 */ sll $zero,$zero,0x0 -); +void dtEnd(void) +{ + g_DeviceTrainingData.intraining = false; + dtRestorePlayer(); + currentPlayerGiveAmmo(AMMOTYPE_CLOAK, 0); + chrSetStageFlag(NULL, STAGEFLAG_CI_DEVICE_ABORTING); + chrUnsetStageFlag(NULL, STAGEFLAG_CI_TRIGGER_DEVICE_FAILURE); + chrUnsetStageFlag(NULL, ciGetStageFlagByDeviceIndex(func0f1a1d68(var80088ad8))); + g_Vars.currentplayer->deadtimer = 0; + chrUnsetStageFlag(NULL, STAGEFLAG_CI_IN_TRAINING); + func0f0bb69c(); + g_Vars.currentplayer->bondhealth = 1; +} GLOBAL_ASM( glabel func0f1a1c98 diff --git a/src/include/constants.h b/src/include/constants.h index ca0a5d53b..371cfdd53 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -2111,6 +2111,9 @@ #define STAGE_CREDITS 0x5c #define STAGE_4MBMENU 0x5d +#define STAGEFLAG_CI_IN_TRAINING 0x00000001 +#define STAGEFLAG_CI_HOLO_FAILED 0x00000002 +#define STAGEFLAG_CI_DEVICE_ABORTING 0x00000004 #define STAGEFLAG_CI_TRIGGER_DEVICE_SUCCESS 0x00000008 #define STAGEFLAG_CI_TRIGGER_DEVICE_FAILURE 0x00000010 #define STAGEFLAG_CI_TRIGGER_UPLINK 0x00000100 diff --git a/src/include/game/game_0b63b0.h b/src/include/game/game_0b63b0.h index d2080af97..ae4f0e30f 100644 --- a/src/include/game/game_0b63b0.h +++ b/src/include/game/game_0b63b0.h @@ -41,7 +41,7 @@ void fadeDraw(Gfx *gdl, u32 r, u32 g, u32 b, f32 frac); void currentPlayerDrawFade(Gfx *gdl); u32 func0f0bb42c(void); u32 func0f0bb5ec(void); -u32 func0f0bb69c(void); +void func0f0bb69c(void); u32 func0f0bb814(void); u32 func0f0bbf14(void); u32 func0f0bbf78(void); diff --git a/src/include/game/game_19c990.h b/src/include/game/game_19c990.h index 3ba37896d..74020a11a 100644 --- a/src/include/game/game_19c990.h +++ b/src/include/game/game_19c990.h @@ -75,7 +75,7 @@ u32 func0f1a1714(void); u32 func0f1a176c(void); u32 func0f1a17e4(void); struct trainingdata *getDeviceTrainingData(void); -void dtSetUpPlayer(void); +void dtRestorePlayer(void); void dtPushEndscreen(void); void dtTick(void); u32 func0f1a1ac0(void);