Files
mm/src/code/z_game_over.c
T
engineer124 8cabbb1a2b File Select (1 Non-Matching) (#1158)
* Everything below Main OK,
and some small ones at the top

* 3 more short ones

* FileChoose_Main

* SelectModeUpdate/Draw

* SelectMode update functions done

* 2 more small ones

* ConfigModeDraw

* SetWindowVtx

* FileChoose_FadeInMenuElements

* Rest of the Config Mode Update Functions

* Minor cleanup

* FileChoose_UpdateMainMenu

* Make xml for title_static

* Minor correction

* One nasty draw, thanks Synray

Co-Authored-By: Synray <31429825+Synray@users.noreply.github.com>

* import data

* some cleanup

* import OoT docs

* missed some docs

* some progress

* FileSelect_SetWindowContentVtx WIP

* improve FileSelect_SetWindowContentVtx

* match z_file_nameset_NES

* cleanup and docs

* title static

* a few more functions

* even more functions

* small cleanup

* Data Cleanup

* 2 more matches

* z_file_choose_80807940 OK

* cleanup

* fix merge master

* FileSelect_DrawFileInfo wip

* small cleanup

* minor

* fix merge

* match FileSelect_DrawFileInfo

* cleanup

* fix merge

* fix merge

* sram cleanup

* document select mode

* many docs

* more docs

* more cleanup

* small nitpick

* consistency

* more cleanup

* more cleanup

* small

* small typos

* octal bad

* pr review

* noop

* elliptic review

* more review

* non-matching

* oops

* more suggestions

* keyboard formatting

* fix master

* sound

* padding

---------

Co-authored-by: Elliptic Ellipsis <elliptic.ellipsis@gmail.com>
Co-authored-by: Synray <31429825+Synray@users.noreply.github.com>
2023-06-05 15:03:02 -04:00

130 lines
4.8 KiB
C

#include "z64game_over.h"
#include "z64rumble.h"
#include "z64shrink_window.h"
#include "z64.h"
#include "functions.h"
#include "variables.h"
#include "macros.h"
void GameOver_Init(PlayState* play) {
play->gameOverCtx.state = GAMEOVER_INACTIVE;
}
void GameOver_FadeLights(PlayState* play) {
GameOverContext* gameOverCtx = &play->gameOverCtx;
if ((gameOverCtx->state >= GAMEOVER_DEATH_WAIT_GROUND && gameOverCtx->state < GAMEOVER_REVIVE_START) ||
(gameOverCtx->state >= GAMEOVER_REVIVE_RUMBLE && gameOverCtx->state < GAMEOVER_REVIVE_FADE_OUT)) {
Kankyo_FadeInGameOverLights(play);
}
}
static s16 sGameOverTimer = 0;
void GameOver_Update(PlayState* play) {
GameOverContext* gameOverCtx = &play->gameOverCtx;
s16 timerId;
switch (gameOverCtx->state) {
case GAMEOVER_DEATH_START:
Message_CloseTextbox(play);
for (timerId = 0; timerId < TIMER_ID_MAX; timerId++) {
gSaveContext.timerStates[timerId] = TIMER_STATE_OFF;
}
CLEAR_EVENTINF_ALT(EVENTINF_10);
if (CUR_FORM == 0) {
if (CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_KOKIRI &&
CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_RAZOR &&
CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_GILDED &&
CUR_FORM_EQUIP(EQUIP_SLOT_B) != ITEM_SWORD_DEITY) {
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_ENABLED) {
CUR_FORM_EQUIP(EQUIP_SLOT_B) = gSaveContext.buttonStatus[EQUIP_SLOT_B];
} else {
CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_NONE;
}
}
}
gSaveContext.nayrusLoveTimer = 2000;
gSaveContext.save.saveInfo.playerData.tatlTimer = 0;
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.ambienceId = AMBIENCE_ID_DISABLED;
gSaveContext.eventInf[0] = 0;
gSaveContext.eventInf[1] = 0;
gSaveContext.eventInf[2] = 0;
gSaveContext.eventInf[3] = 0;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED;
gSaveContext.hudVisibilityForceButtonAlphasByStatus = false;
gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE;
gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
gSaveContext.hudVisibilityTimer = 0;
Kankyo_InitGameOverLights(play);
sGameOverTimer = 20;
Rumble_Request(0.0f, 126, 124, 63);
gameOverCtx->state = GAMEOVER_DEATH_WAIT_GROUND;
break;
case GAMEOVER_DEATH_FADE_OUT:
if (AudioSeq_GetActiveSeqId(SEQ_PLAYER_FANFARE) != NA_BGM_GAME_OVER) {
func_80169F78(&play->state);
if (gSaveContext.respawnFlag != -7) {
gSaveContext.respawnFlag = -6;
}
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
gSaveContext.save.saveInfo.playerData.health = 0x30;
gameOverCtx->state++;
if (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU) {
gSaveContext.save.playerForm = PLAYER_FORM_HUMAN;
gSaveContext.save.equippedMask = PLAYER_MASK_NONE;
}
Rumble_StateReset();
}
break;
case GAMEOVER_REVIVE_START:
gameOverCtx->state++; // GAMEOVER_REVIVE_RUMBLE
sGameOverTimer = 0;
Kankyo_InitGameOverLights(play);
ShrinkWindow_Letterbox_SetSizeTarget(32);
break;
case GAMEOVER_REVIVE_RUMBLE:
sGameOverTimer = 50;
gameOverCtx->state++; // GAMEOVER_REVIVE_WAIT_GROUND
Rumble_Request(0.0f, 126, 124, 63);
break;
case GAMEOVER_REVIVE_WAIT_GROUND:
sGameOverTimer--;
if (sGameOverTimer == 0) {
sGameOverTimer = 64;
gameOverCtx->state++; // GAMEOVER_REVIVE_WAIT_FAIRY
}
break;
case GAMEOVER_REVIVE_WAIT_FAIRY:
sGameOverTimer--;
if (sGameOverTimer == 0) {
sGameOverTimer = 50;
gameOverCtx->state++; // GAMEOVER_REVIVE_FADE_OUT
}
break;
case GAMEOVER_REVIVE_FADE_OUT:
Kankyo_FadeOutGameOverLights(play);
sGameOverTimer--;
if (sGameOverTimer == 0) {
gameOverCtx->state = GAMEOVER_INACTIVE;
}
break;
}
}