mirror of
https://github.com/zeldaret/mm.git
synced 2026-07-09 13:45:23 -04:00
Gamestates Cleanup (#1047)
* Setup * ConsoleLogo * TitleSetup * MapSelect * FileSelect * Daytelop * Save file * PreNMI * Final cleanup and format * Update include/functions.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * DayTelop * Split off setup * split of prenmi * readd SET * shorten some gamestate member names * Add comment about init * Update include/z64.h Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com> * Small cleanup of comments * PR Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>
This commit is contained in:
+6
-6
@@ -200,8 +200,8 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g
|
||||
gfxCtx->viConfigFeatures = gViConfigFeatures;
|
||||
gfxCtx->xScale = gViConfigXScale;
|
||||
gfxCtx->yScale = gViConfigYScale;
|
||||
gameState->nextGameStateInit = NULL;
|
||||
gameState->nextGameStateSize = 0;
|
||||
gameState->init = NULL;
|
||||
gameState->size = 0;
|
||||
|
||||
{
|
||||
s32 requiredScopeTemp;
|
||||
@@ -242,12 +242,12 @@ void GameState_Destroy(GameState* gameState) {
|
||||
GameAlloc_Cleanup(&gameState->alloc);
|
||||
}
|
||||
|
||||
GameStateFunc GameState_GetNextStateInit(GameState* gameState) {
|
||||
return gameState->nextGameStateInit;
|
||||
GameStateFunc GameState_GetInit(GameState* gameState) {
|
||||
return gameState->init;
|
||||
}
|
||||
|
||||
size_t GameState_GetNextStateSize(GameState* gameState) {
|
||||
return gameState->nextGameStateSize;
|
||||
size_t GameState_GetSize(GameState* gameState) {
|
||||
return gameState->size;
|
||||
}
|
||||
|
||||
u32 GameState_IsRunning(GameState* gameState) {
|
||||
|
||||
+16
-14
@@ -6,6 +6,7 @@
|
||||
#include "overlays/gamestates/ovl_opening/z_opening.h"
|
||||
#include "overlays/gamestates/ovl_select/z_select.h"
|
||||
#include "overlays/gamestates/ovl_title/z_title.h"
|
||||
#include "z_title_setup.h"
|
||||
|
||||
FaultAddrConvClient sGraphFaultAddrConvClient;
|
||||
FaultClient sGraphFaultClient;
|
||||
@@ -63,44 +64,45 @@ void Graph_SetNextGfxPool(GraphicsContext* gfxCtx) {
|
||||
}
|
||||
|
||||
GameStateOverlay* Graph_GetNextGameState(GameState* gameState) {
|
||||
GameStateFunc gameStateInit = GameState_GetNextStateInit(gameState);
|
||||
GameStateFunc gameStateInit = GameState_GetInit(gameState);
|
||||
|
||||
if (gameStateInit == (GameStateFunc)TitleSetup_Init) {
|
||||
if (gameStateInit == Setup_Init) {
|
||||
return &gGameStateOverlayTable[0];
|
||||
}
|
||||
if (gameStateInit == (GameStateFunc)MapSelect_Init) {
|
||||
if (gameStateInit == MapSelect_Init) {
|
||||
return &gGameStateOverlayTable[1];
|
||||
}
|
||||
if (gameStateInit == (GameStateFunc)Title_Init) {
|
||||
if (gameStateInit == ConsoleLogo_Init) {
|
||||
return &gGameStateOverlayTable[2];
|
||||
}
|
||||
if (gameStateInit == (GameStateFunc)Play_Init) {
|
||||
if (gameStateInit == Play_Init) {
|
||||
return &gGameStateOverlayTable[3];
|
||||
}
|
||||
if (gameStateInit == (GameStateFunc)Opening_Init) {
|
||||
if (gameStateInit == TitleSetup_Init) {
|
||||
return &gGameStateOverlayTable[4];
|
||||
}
|
||||
if (gameStateInit == (GameStateFunc)FileChoose_Init) {
|
||||
if (gameStateInit == FileSelect_Init) {
|
||||
return &gGameStateOverlayTable[5];
|
||||
}
|
||||
if (gameStateInit == (GameStateFunc)Daytelop_Init) {
|
||||
if (gameStateInit == DayTelop_Init) {
|
||||
return &gGameStateOverlayTable[6];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void* Graph_FaultAddrConvFunc(void* address, void* param) {
|
||||
uintptr_t addr = address;
|
||||
GameStateOverlay* gamestateOvl = &gGameStateOverlayTable[0];
|
||||
GameStateOverlay* gameStateOvl = &gGameStateOverlayTable[0];
|
||||
uintptr_t ramConv;
|
||||
void* ramStart;
|
||||
uintptr_t diff;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < graphNumGameStates; i++, gamestateOvl++) {
|
||||
diff = VRAM_PTR_SIZE(gamestateOvl);
|
||||
ramStart = gamestateOvl->loadedRamAddr;
|
||||
ramConv = (uintptr_t)gamestateOvl->vramStart - (uintptr_t)ramStart;
|
||||
for (i = 0; i < graphNumGameStates; i++, gameStateOvl++) {
|
||||
diff = VRAM_PTR_SIZE(gameStateOvl);
|
||||
ramStart = gameStateOvl->loadedRamAddr;
|
||||
ramConv = (uintptr_t)gameStateOvl->vramStart - (uintptr_t)ramStart;
|
||||
|
||||
if (ramStart != NULL) {
|
||||
if (addr >= (uintptr_t)ramStart && addr < (uintptr_t)ramStart + diff) {
|
||||
@@ -235,7 +237,7 @@ void Graph_UpdateGame(GameState* gameState) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the gamestate logic, then finalize the gfx buffer
|
||||
* Run the game state logic, then finalize the gfx buffer
|
||||
* and run the graphics task for this frame.
|
||||
*/
|
||||
void Graph_ExecuteAndDraw(GraphicsContext* gfxCtx, GameState* gameState) {
|
||||
|
||||
+12
-14
@@ -1,7 +1,7 @@
|
||||
#include "global.h"
|
||||
#include "z_title_setup.h"
|
||||
#include "overlays/gamestates/ovl_title/z_title.h"
|
||||
|
||||
void TitleSetup_GameStateResetContext(void) {
|
||||
void Setup_SetRegs(void) {
|
||||
XREG(2) = 0;
|
||||
XREG(10) = 0x1A;
|
||||
XREG(11) = 0x14;
|
||||
@@ -45,23 +45,21 @@ void TitleSetup_GameStateResetContext(void) {
|
||||
YREG(43) = 0xB1;
|
||||
}
|
||||
|
||||
void TitleSetup_InitImpl(GameState* gameState) {
|
||||
void Setup_InitImpl(SetupState* this) {
|
||||
func_80185908();
|
||||
SaveContext_Init();
|
||||
TitleSetup_GameStateResetContext();
|
||||
Setup_SetRegs();
|
||||
|
||||
gameState->running = 0;
|
||||
|
||||
setNextGamestate
|
||||
:; // This label is probably a leftover of a debug ifdef, it's essential to not have gameState->running reordered!
|
||||
SET_NEXT_GAMESTATE(gameState, Title_Init, TitleContext);
|
||||
STOP_GAMESTATE(&this->state);
|
||||
SET_NEXT_GAMESTATE(&this->state, ConsoleLogo_Init, sizeof(ConsoleLogoState));
|
||||
}
|
||||
|
||||
void TitleSetup_Destroy(GameState* gameState) {
|
||||
;
|
||||
void Setup_Destroy(GameState* thisx) {
|
||||
}
|
||||
|
||||
void TitleSetup_Init(GameState* gameState) {
|
||||
gameState->destroy = TitleSetup_Destroy;
|
||||
TitleSetup_InitImpl(gameState);
|
||||
void Setup_Init(GameState* thisx) {
|
||||
SetupState* this = (SetupState*)thisx;
|
||||
|
||||
this->state.destroy = Setup_Destroy;
|
||||
Setup_InitImpl(this);
|
||||
}
|
||||
|
||||
+5
-9
@@ -126,12 +126,11 @@ void func_800EA2B8(PlayState* play, CutsceneContext* csCtx) {
|
||||
/* Start of command handling section */
|
||||
|
||||
// Command 0x96: Miscellaneous commands.
|
||||
void Cutscene_Command_Misc(PlayState* play2, CutsceneContext* csCtx, CsCmdBase* cmd) {
|
||||
void Cutscene_Command_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdBase* cmd) {
|
||||
static u16 D_801BB15C = 0xFFFF;
|
||||
Player* player = GET_PLAYER(play2);
|
||||
PlayState* play = play2;
|
||||
u8 isStartFrame = false;
|
||||
Player* player = GET_PLAYER(play);
|
||||
f32 progress;
|
||||
u8 isStartFrame = false;
|
||||
SceneTableEntry* loadedScene;
|
||||
|
||||
if ((csCtx->frames < cmd->startFrame) || ((csCtx->frames >= cmd->endFrame) && (cmd->endFrame != cmd->startFrame))) {
|
||||
@@ -346,11 +345,8 @@ void Cutscene_Command_Misc(PlayState* play2, CutsceneContext* csCtx, CsCmdBase*
|
||||
|
||||
gSaveContext.save.day = 9;
|
||||
|
||||
{
|
||||
GameState* gameState = &play->state;
|
||||
gameState->running = false;
|
||||
}
|
||||
SET_NEXT_GAMESTATE(&play->state, Daytelop_Init, DaytelopContext);
|
||||
STOP_GAMESTATE(&play->state);
|
||||
SET_NEXT_GAMESTATE(&play->state, DayTelop_Init, sizeof(DayTelopState));
|
||||
|
||||
Sram_SaveSpecialNewDay(play);
|
||||
break;
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "overlays/gamestates/ovl_opening/z_opening.h"
|
||||
#include "overlays/gamestates/ovl_select/z_select.h"
|
||||
#include "overlays/gamestates/ovl_title/z_title.h"
|
||||
#include "z_title_setup.h"
|
||||
|
||||
#define GAMESTATE_OVERLAY(name, init, destroy, size) \
|
||||
{ \
|
||||
@@ -14,13 +15,13 @@
|
||||
{ NULL, 0, 0, NULL, NULL, 0, init, destroy, 0, 0, 0, size }
|
||||
|
||||
GameStateOverlay gGameStateOverlayTable[] = {
|
||||
GAMESTATE_OVERLAY_INTERNAL(TitleSetup_Init, TitleSetup_Destroy, sizeof(GameState)),
|
||||
GAMESTATE_OVERLAY_INTERNAL(Setup_Init, Setup_Destroy, sizeof(SetupState)),
|
||||
GAMESTATE_OVERLAY(select, MapSelect_Init, MapSelect_Destroy, sizeof(MapSelectState)),
|
||||
GAMESTATE_OVERLAY(title, Title_Init, Title_Destroy, sizeof(TitleContext)),
|
||||
GAMESTATE_OVERLAY(title, ConsoleLogo_Init, ConsoleLogo_Destroy, sizeof(ConsoleLogoState)),
|
||||
GAMESTATE_OVERLAY_INTERNAL(Play_Init, Play_Destroy, sizeof(PlayState)),
|
||||
GAMESTATE_OVERLAY(opening, Opening_Init, Opening_Destroy, sizeof(OpeningContext)),
|
||||
GAMESTATE_OVERLAY(file_choose, FileChoose_Init, FileChoose_Destroy, sizeof(FileChooseContext)),
|
||||
GAMESTATE_OVERLAY(daytelop, Daytelop_Init, Daytelop_Destroy, sizeof(DaytelopContext)),
|
||||
GAMESTATE_OVERLAY(opening, TitleSetup_Init, TitleSetup_Destroy, sizeof(TitleSetupState)),
|
||||
GAMESTATE_OVERLAY(file_choose, FileSelect_Init, FileSelect_Destroy, sizeof(FileSelectState)),
|
||||
GAMESTATE_OVERLAY(daytelop, DayTelop_Init, DayTelop_Destroy, sizeof(DayTelopState)),
|
||||
};
|
||||
|
||||
s32 graphNumGameStates = ARRAY_COUNT(gGameStateOverlayTable);
|
||||
|
||||
+26
-23
@@ -1,23 +1,22 @@
|
||||
#include "global.h"
|
||||
#include "z_prenmi.h"
|
||||
|
||||
void PreNMI_Stop(PreNMIContext* prenmiCtx) {
|
||||
prenmiCtx->state.running = 0;
|
||||
prenmiCtx->state.nextGameStateInit = NULL;
|
||||
prenmiCtx->state.nextGameStateSize = 0;
|
||||
void PreNMI_Stop(PreNMIState* this) {
|
||||
STOP_GAMESTATE(&this->state);
|
||||
SET_NEXT_GAMESTATE(&this->state, NULL, 0);
|
||||
}
|
||||
|
||||
void PreNMI_Update(PreNMIContext* prenmiCtx) {
|
||||
if (prenmiCtx->timer == 0) {
|
||||
void PreNMI_Update(PreNMIState* this) {
|
||||
if (this->timer == 0) {
|
||||
ViConfig_UpdateVi(1);
|
||||
PreNMI_Stop(prenmiCtx);
|
||||
PreNMI_Stop(this);
|
||||
return;
|
||||
}
|
||||
|
||||
prenmiCtx->timer--;
|
||||
this->timer--;
|
||||
}
|
||||
|
||||
void PreNMI_Draw(PreNMIContext* prenmiCtx) {
|
||||
GraphicsContext* gfxCtx = prenmiCtx->state.gfxCtx;
|
||||
void PreNMI_Draw(PreNMIState* this) {
|
||||
GraphicsContext* gfxCtx = this->state.gfxCtx;
|
||||
|
||||
func_8012CF0C(gfxCtx, true, true, 0, 0, 0);
|
||||
|
||||
@@ -26,26 +25,30 @@ void PreNMI_Draw(PreNMIContext* prenmiCtx) {
|
||||
func_8012C470(gfxCtx);
|
||||
|
||||
gDPSetFillColor(POLY_OPA_DISP++, (GPACK_RGBA5551(255, 255, 255, 1) << 16) | GPACK_RGBA5551(255, 255, 255, 1));
|
||||
gDPFillRectangle(POLY_OPA_DISP++, 0, prenmiCtx->timer + 100, SCREEN_WIDTH - 1, prenmiCtx->timer + 100);
|
||||
gDPFillRectangle(POLY_OPA_DISP++, 0, this->timer + 100, SCREEN_WIDTH - 1, this->timer + 100);
|
||||
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
}
|
||||
|
||||
void PreNMI_Main(PreNMIContext* prenmiCtx) {
|
||||
PreNMI_Update(prenmiCtx);
|
||||
PreNMI_Draw(prenmiCtx);
|
||||
void PreNMI_Main(GameState* thisx) {
|
||||
PreNMIState* this = (PreNMIState*)thisx;
|
||||
|
||||
prenmiCtx->state.unk_A3 = 1;
|
||||
PreNMI_Update(this);
|
||||
PreNMI_Draw(this);
|
||||
|
||||
this->state.unk_A3 = 1;
|
||||
}
|
||||
|
||||
void PreNMI_Destroy(PreNMIContext* prenmiCtx) {
|
||||
void PreNMI_Destroy(GameState* thisx) {
|
||||
}
|
||||
|
||||
void PreNMI_Init(PreNMIContext* prenmiCtx) {
|
||||
prenmiCtx->state.main = (GameStateFunc)PreNMI_Main;
|
||||
prenmiCtx->state.destroy = (GameStateFunc)PreNMI_Destroy;
|
||||
prenmiCtx->timer = 30;
|
||||
prenmiCtx->unkA8 = 10;
|
||||
void PreNMI_Init(GameState* thisx) {
|
||||
PreNMIState* this = (PreNMIState*)thisx;
|
||||
|
||||
Game_SetFramerateDivisor(&prenmiCtx->state, 1);
|
||||
this->state.main = PreNMI_Main;
|
||||
this->state.destroy = PreNMI_Destroy;
|
||||
this->timer = 30;
|
||||
this->unkA8 = 10;
|
||||
|
||||
Game_SetFramerateDivisor(&this->state, 1);
|
||||
}
|
||||
|
||||
+94
-98
@@ -918,7 +918,7 @@ u16 D_801C6A58[] = {
|
||||
ENTRANCE(IKANA_CANYON, 4), ENTRANCE(STONE_TOWER, 3),
|
||||
};
|
||||
|
||||
void Sram_OpenSave(FileChooseContext* fileChooseCtx, SramContext* sramCtx) {
|
||||
void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) {
|
||||
s32 i;
|
||||
s32 pad;
|
||||
s32 phi_t1;
|
||||
@@ -930,7 +930,7 @@ void Sram_OpenSave(FileChooseContext* fileChooseCtx, SramContext* sramCtx) {
|
||||
|
||||
if (gSaveContext.fileNum == 0xFF) {
|
||||
func_80185968(sramCtx->saveBuf, D_801C67C8[0], D_801C67F0[0]);
|
||||
} else if (fileChooseCtx->unk_2446A[gSaveContext.fileNum] != 0) {
|
||||
} else if (fileSelect->unk_2446A[gSaveContext.fileNum] != 0) {
|
||||
phi_t1 = gSaveContext.fileNum + 2;
|
||||
phi_t1 *= 2;
|
||||
|
||||
@@ -1079,8 +1079,8 @@ void func_80145698(SramContext* sramCtx) {
|
||||
|
||||
// Verifies save and use backup if corrupted?
|
||||
#ifdef NON_EQUIVALENT
|
||||
void func_801457CC(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
|
||||
FileChooseContext* fileChooseCtx = fileChooseCtx2;
|
||||
void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) {
|
||||
FileSelectState* fileSelect = fileSelect2;
|
||||
u16 sp7A;
|
||||
// u16 sp78;
|
||||
u16 sp76;
|
||||
@@ -1119,7 +1119,7 @@ void func_801457CC(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
|
||||
}
|
||||
|
||||
if (sp76 < 2) {
|
||||
fileChooseCtx->unk_24468[sp76] = 0;
|
||||
fileSelect->unk_24468[sp76] = 0;
|
||||
if (phi_s2) {
|
||||
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
|
||||
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]);
|
||||
@@ -1157,34 +1157,33 @@ void func_801457CC(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
|
||||
Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64 & 0xFFFFFFFF]); // TODO: Needed?
|
||||
|
||||
for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.playerData.newf); sp7A++) {
|
||||
fileChooseCtx->newf[sp76][sp7A] = gSaveContext.save.playerData.newf[sp7A];
|
||||
fileSelect->newf[sp76][sp7A] = gSaveContext.save.playerData.newf[sp7A];
|
||||
}
|
||||
|
||||
if (!CHECK_NEWF(fileChooseCtx->newf[sp76])) {
|
||||
fileChooseCtx->unk_2440C[sp76] = gSaveContext.save.playerData.deaths;
|
||||
if (!CHECK_NEWF(fileSelect->newf[sp76])) {
|
||||
fileSelect->unk_2440C[sp76] = gSaveContext.save.playerData.deaths;
|
||||
|
||||
for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.playerData.playerName); sp7A++) {
|
||||
fileChooseCtx->unk_24414[sp76][sp7A] = gSaveContext.save.playerData.playerName[sp7A];
|
||||
fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.playerData.playerName[sp7A];
|
||||
}
|
||||
|
||||
fileChooseCtx->healthCapacity[sp76] = gSaveContext.save.playerData.healthCapacity;
|
||||
fileChooseCtx->health[sp76] = gSaveContext.save.playerData.health;
|
||||
fileChooseCtx->unk_24454[sp76] = gSaveContext.save.inventory.defenseHearts;
|
||||
fileChooseCtx->unk_24444[sp76] = gSaveContext.save.inventory.questItems;
|
||||
fileChooseCtx->unk_24458[sp76] = gSaveContext.save.time;
|
||||
fileChooseCtx->unk_24460[sp76] = gSaveContext.save.day;
|
||||
fileChooseCtx->unk_24468[sp76] = gSaveContext.save.isOwlSave;
|
||||
fileChooseCtx->rupees[sp76] = gSaveContext.save.playerData.rupees;
|
||||
fileChooseCtx->unk_24474[sp76] = CUR_UPG_VALUE(4);
|
||||
fileSelect->healthCapacity[sp76] = gSaveContext.save.playerData.healthCapacity;
|
||||
fileSelect->health[sp76] = gSaveContext.save.playerData.health;
|
||||
fileSelect->unk_24454[sp76] = gSaveContext.save.inventory.defenseHearts;
|
||||
fileSelect->unk_24444[sp76] = gSaveContext.save.inventory.questItems;
|
||||
fileSelect->unk_24458[sp76] = gSaveContext.save.time;
|
||||
fileSelect->unk_24460[sp76] = gSaveContext.save.day;
|
||||
fileSelect->unk_24468[sp76] = gSaveContext.save.isOwlSave;
|
||||
fileSelect->rupees[sp76] = gSaveContext.save.playerData.rupees;
|
||||
fileSelect->unk_24474[sp76] = CUR_UPG_VALUE(4);
|
||||
|
||||
for (sp7A = 0, phi_a0 = 0; sp7A < 24; sp7A++) {
|
||||
if (gSaveContext.save.inventory.items[sp7A + 24] != 0xFF) {
|
||||
phi_a0++;
|
||||
}
|
||||
}
|
||||
fileChooseCtx->maskCount[sp76] = phi_a0;
|
||||
fileChooseCtx->heartPieceCount[sp76] =
|
||||
((gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C);
|
||||
fileSelect->maskCount[sp76] = phi_a0;
|
||||
fileSelect->heartPieceCount[sp76] = ((gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C);
|
||||
}
|
||||
|
||||
if (sp6E == 1) {
|
||||
@@ -1209,9 +1208,9 @@ void func_801457CC(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
|
||||
}
|
||||
}
|
||||
} else if (sp76 < 4) {
|
||||
fileChooseCtx->unk_24468[sp76] = 0;
|
||||
fileSelect->unk_24468[sp76] = 0;
|
||||
|
||||
if (!CHECK_NEWF(fileChooseCtx->newf2[(s32)sp76])) { // TODO: Needed?
|
||||
if (!CHECK_NEWF(fileSelect->newf2[(s32)sp76])) { // TODO: Needed?
|
||||
if (phi_s2) {
|
||||
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
|
||||
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf,
|
||||
@@ -1251,34 +1250,34 @@ void func_801457CC(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
|
||||
Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64 & 0xFFFFFFFF]); // TODO: Needed?
|
||||
|
||||
for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.playerData.newf); sp7A++) {
|
||||
fileChooseCtx->newf[sp76][sp7A] = gSaveContext.save.playerData.newf[sp7A];
|
||||
fileSelect->newf[sp76][sp7A] = gSaveContext.save.playerData.newf[sp7A];
|
||||
}
|
||||
|
||||
if (!CHECK_NEWF(fileChooseCtx->newf[sp76])) {
|
||||
fileChooseCtx->unk_2440C[sp76] = gSaveContext.save.playerData.deaths;
|
||||
if (!CHECK_NEWF(fileSelect->newf[sp76])) {
|
||||
fileSelect->unk_2440C[sp76] = gSaveContext.save.playerData.deaths;
|
||||
|
||||
for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.playerData.playerName); sp7A++) {
|
||||
phi_s2 += 0; // TODO: Needed?
|
||||
fileChooseCtx->unk_24414[sp76][sp7A] = gSaveContext.save.playerData.playerName[sp7A];
|
||||
fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.playerData.playerName[sp7A];
|
||||
}
|
||||
|
||||
fileChooseCtx->healthCapacity[sp76] = gSaveContext.save.playerData.healthCapacity;
|
||||
fileChooseCtx->health[sp76] = gSaveContext.save.playerData.health;
|
||||
fileChooseCtx->unk_24454[sp76] = gSaveContext.save.inventory.defenseHearts;
|
||||
fileChooseCtx->unk_24444[sp76] = gSaveContext.save.inventory.questItems;
|
||||
fileChooseCtx->unk_24458[sp76] = gSaveContext.save.time;
|
||||
fileChooseCtx->unk_24460[sp76] = gSaveContext.save.day;
|
||||
fileChooseCtx->unk_24468[sp76] = gSaveContext.save.isOwlSave;
|
||||
fileChooseCtx->rupees[sp76] = gSaveContext.save.playerData.rupees;
|
||||
fileChooseCtx->unk_24474[sp76] = CUR_UPG_VALUE(4);
|
||||
fileSelect->healthCapacity[sp76] = gSaveContext.save.playerData.healthCapacity;
|
||||
fileSelect->health[sp76] = gSaveContext.save.playerData.health;
|
||||
fileSelect->unk_24454[sp76] = gSaveContext.save.inventory.defenseHearts;
|
||||
fileSelect->unk_24444[sp76] = gSaveContext.save.inventory.questItems;
|
||||
fileSelect->unk_24458[sp76] = gSaveContext.save.time;
|
||||
fileSelect->unk_24460[sp76] = gSaveContext.save.day;
|
||||
fileSelect->unk_24468[sp76] = gSaveContext.save.isOwlSave;
|
||||
fileSelect->rupees[sp76] = gSaveContext.save.playerData.rupees;
|
||||
fileSelect->unk_24474[sp76] = CUR_UPG_VALUE(4);
|
||||
|
||||
for (sp7A = 0, phi_a0 = 0; sp7A < 24; sp7A++) {
|
||||
if (gSaveContext.save.inventory.items[sp7A + 24] != 0xFF) {
|
||||
phi_a0++;
|
||||
}
|
||||
}
|
||||
fileChooseCtx->maskCount[sp76] = phi_a0;
|
||||
fileChooseCtx->heartPieceCount[sp76] =
|
||||
fileSelect->maskCount[sp76] = phi_a0;
|
||||
fileSelect->heartPieceCount[sp76] =
|
||||
((gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C);
|
||||
}
|
||||
|
||||
@@ -1342,14 +1341,14 @@ void func_801457CC(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/func_801457CC.s")
|
||||
#endif
|
||||
|
||||
void func_80146580(FileChooseContext* fileChooseCtx2, SramContext* sramCtx, s32 fileNum) {
|
||||
FileChooseContext* fileChooseCtx = fileChooseCtx2;
|
||||
void func_80146580(FileSelectState* fileSelect2, SramContext* sramCtx, s32 fileNum) {
|
||||
FileSelectState* fileSelect = fileSelect2;
|
||||
s32 pad;
|
||||
|
||||
if (gSaveContext.unk_3F3F) {
|
||||
if (fileChooseCtx->unk_2446A[fileNum]) {
|
||||
if (fileSelect->unk_2446A[fileNum]) {
|
||||
func_80147314(sramCtx, fileNum);
|
||||
fileChooseCtx->unk_2446A[fileNum] = 0;
|
||||
fileSelect->unk_2446A[fileNum] = 0;
|
||||
}
|
||||
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
|
||||
Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, sizeof(Save));
|
||||
@@ -1361,30 +1360,30 @@ void func_80146580(FileChooseContext* fileChooseCtx2, SramContext* sramCtx, s32
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
// v0/v1
|
||||
void func_80146628(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
|
||||
FileChooseContext* fileChooseCtx = fileChooseCtx2;
|
||||
void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) {
|
||||
FileSelectState* fileSelect = fileSelect2;
|
||||
u16 i;
|
||||
s16 maskCount;
|
||||
|
||||
if (gSaveContext.unk_3F3F) {
|
||||
if (fileChooseCtx->unk_2446A[fileChooseCtx->unk_2448E]) {
|
||||
func_80147414(sramCtx, fileChooseCtx->unk_2448E, fileChooseCtx->fileNum);
|
||||
fileChooseCtx->unk_24410[fileChooseCtx->fileNum] = gSaveContext.save.playerData.deaths;
|
||||
if (fileSelect->unk_2446A[fileSelect->unk_2448E]) {
|
||||
func_80147414(sramCtx, fileSelect->unk_2448E, fileSelect->fileNum);
|
||||
fileSelect->unk_24410[fileSelect->fileNum] = gSaveContext.save.playerData.deaths;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.playerData.playerName); i++) {
|
||||
fileChooseCtx->unk_24424[fileChooseCtx->fileNum][i] = gSaveContext.save.playerData.playerName[i];
|
||||
fileSelect->unk_24424[fileSelect->fileNum][i] = gSaveContext.save.playerData.playerName[i];
|
||||
}
|
||||
|
||||
fileChooseCtx->unk_24438[fileChooseCtx->fileNum] = gSaveContext.save.playerData.healthCapacity;
|
||||
fileChooseCtx->unk_24440[fileChooseCtx->fileNum] = gSaveContext.save.playerData.health;
|
||||
fileChooseCtx->unk_24456[fileChooseCtx->fileNum] = gSaveContext.save.inventory.defenseHearts;
|
||||
fileChooseCtx->unk_2444C[fileChooseCtx->fileNum] = gSaveContext.save.inventory.questItems;
|
||||
fileChooseCtx->unk_2445C[fileChooseCtx->fileNum] = gSaveContext.save.time;
|
||||
fileChooseCtx->unk_24464[fileChooseCtx->fileNum] = gSaveContext.save.day;
|
||||
fileChooseCtx->unk_2446A[fileChooseCtx->fileNum] = gSaveContext.save.isOwlSave;
|
||||
fileChooseCtx->unk_24470[fileChooseCtx->fileNum] = gSaveContext.save.playerData.rupees;
|
||||
fileSelect->unk_24438[fileSelect->fileNum] = gSaveContext.save.playerData.healthCapacity;
|
||||
fileSelect->unk_24440[fileSelect->fileNum] = gSaveContext.save.playerData.health;
|
||||
fileSelect->unk_24456[fileSelect->fileNum] = gSaveContext.save.inventory.defenseHearts;
|
||||
fileSelect->unk_2444C[fileSelect->fileNum] = gSaveContext.save.inventory.questItems;
|
||||
fileSelect->unk_2445C[fileSelect->fileNum] = gSaveContext.save.time;
|
||||
fileSelect->unk_24464[fileSelect->fileNum] = gSaveContext.save.day;
|
||||
fileSelect->unk_2446A[fileSelect->fileNum] = gSaveContext.save.isOwlSave;
|
||||
fileSelect->unk_24470[fileSelect->fileNum] = gSaveContext.save.playerData.rupees;
|
||||
// = CUR_UPG_VALUE(UPG_WALLET);
|
||||
fileChooseCtx->unk_24476[fileChooseCtx->fileNum] =
|
||||
fileSelect->unk_24476[fileSelect->fileNum] =
|
||||
(gSaveContext.save.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4];
|
||||
|
||||
for (i = 0, maskCount = 0; i < 24; i++) {
|
||||
@@ -1393,41 +1392,39 @@ void func_80146628(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
|
||||
}
|
||||
}
|
||||
|
||||
fileChooseCtx->unk_2447A[fileChooseCtx->fileNum] = maskCount;
|
||||
fileChooseCtx->unk_2447E[fileChooseCtx->fileNum] =
|
||||
(gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C;
|
||||
fileSelect->unk_2447A[fileSelect->fileNum] = maskCount;
|
||||
fileSelect->unk_2447E[fileSelect->fileNum] = (gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C;
|
||||
}
|
||||
|
||||
// clear buffer
|
||||
bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE);
|
||||
// read to buffer
|
||||
func_80185968(sramCtx->saveBuf, D_801C67C8[fileChooseCtx->unk_2448E * 2],
|
||||
D_801C67F0[fileChooseCtx->unk_2448E * 2]);
|
||||
func_80185968(sramCtx->saveBuf, D_801C67C8[fileSelect->unk_2448E * 2], D_801C67F0[fileSelect->unk_2448E * 2]);
|
||||
|
||||
if (1) {}
|
||||
func_80185968(&sramCtx->saveBuf[0x2000], D_801C67C8[fileChooseCtx->unk_2448E * 2 + 1],
|
||||
D_801C67F0[fileChooseCtx->unk_2448E * 2 + 1]);
|
||||
func_80185968(&sramCtx->saveBuf[0x2000], D_801C67C8[fileSelect->unk_2448E * 2 + 1],
|
||||
D_801C67F0[fileSelect->unk_2448E * 2 + 1]);
|
||||
if (1) {}
|
||||
|
||||
// copy buffer to save context
|
||||
Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save));
|
||||
|
||||
fileChooseCtx->unk_2440C[fileChooseCtx->fileNum] = gSaveContext.save.playerData.deaths;
|
||||
fileSelect->unk_2440C[fileSelect->fileNum] = gSaveContext.save.playerData.deaths;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.playerData.playerName); i++) {
|
||||
fileChooseCtx->unk_24414[fileChooseCtx->fileNum][i] = gSaveContext.save.playerData.playerName[i];
|
||||
fileSelect->unk_24414[fileSelect->fileNum][i] = gSaveContext.save.playerData.playerName[i];
|
||||
}
|
||||
|
||||
fileChooseCtx->healthCapacity[fileChooseCtx->fileNum] = gSaveContext.save.playerData.healthCapacity;
|
||||
fileChooseCtx->health[fileChooseCtx->fileNum] = gSaveContext.save.playerData.health;
|
||||
fileChooseCtx->unk_24454[fileChooseCtx->fileNum] = gSaveContext.save.inventory.defenseHearts;
|
||||
fileChooseCtx->unk_24444[fileChooseCtx->fileNum] = gSaveContext.save.inventory.questItems;
|
||||
fileChooseCtx->unk_24458[fileChooseCtx->fileNum] = gSaveContext.save.time;
|
||||
fileChooseCtx->unk_24460[fileChooseCtx->fileNum] = gSaveContext.save.day;
|
||||
fileChooseCtx->unk_24468[fileChooseCtx->fileNum] = gSaveContext.save.isOwlSave;
|
||||
fileChooseCtx->rupees[fileChooseCtx->fileNum] = gSaveContext.save.playerData.rupees;
|
||||
fileSelect->healthCapacity[fileSelect->fileNum] = gSaveContext.save.playerData.healthCapacity;
|
||||
fileSelect->health[fileSelect->fileNum] = gSaveContext.save.playerData.health;
|
||||
fileSelect->unk_24454[fileSelect->fileNum] = gSaveContext.save.inventory.defenseHearts;
|
||||
fileSelect->unk_24444[fileSelect->fileNum] = gSaveContext.save.inventory.questItems;
|
||||
fileSelect->unk_24458[fileSelect->fileNum] = gSaveContext.save.time;
|
||||
fileSelect->unk_24460[fileSelect->fileNum] = gSaveContext.save.day;
|
||||
fileSelect->unk_24468[fileSelect->fileNum] = gSaveContext.save.isOwlSave;
|
||||
fileSelect->rupees[fileSelect->fileNum] = gSaveContext.save.playerData.rupees;
|
||||
// = CUR_UPG_VALUE(UPG_WALLET);
|
||||
fileChooseCtx->unk_24474[fileChooseCtx->fileNum] =
|
||||
fileSelect->unk_24474[fileSelect->fileNum] =
|
||||
(gSaveContext.save.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4];
|
||||
|
||||
for (i = 0, maskCount = 0; i < 24; i++) {
|
||||
@@ -1436,8 +1433,8 @@ void func_80146628(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
|
||||
}
|
||||
}
|
||||
|
||||
fileChooseCtx->maskCount[fileChooseCtx->fileNum] = maskCount;
|
||||
fileChooseCtx->heartPieceCount[fileChooseCtx->fileNum] =
|
||||
fileSelect->maskCount[fileSelect->fileNum] = maskCount;
|
||||
fileSelect->heartPieceCount[fileSelect->fileNum] =
|
||||
(gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C;
|
||||
}
|
||||
|
||||
@@ -1448,21 +1445,20 @@ void func_80146628(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_sram_NES/func_80146628.s")
|
||||
#endif
|
||||
|
||||
void Sram_InitSave(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
|
||||
void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) {
|
||||
s32 phi_v0;
|
||||
u16 i;
|
||||
FileChooseContext* fileChooseCtx = fileChooseCtx2;
|
||||
FileSelectState* fileSelect = fileSelect2;
|
||||
s16 maskCount;
|
||||
|
||||
if (gSaveContext.unk_3F3F) {
|
||||
Sram_InitNewSave();
|
||||
if (fileChooseCtx->unk_24480 == 0) {
|
||||
if (fileSelect->unk_24480 == 0) {
|
||||
gSaveContext.save.cutscene = 0xFFF0;
|
||||
}
|
||||
|
||||
for (phi_v0 = 0; phi_v0 < ARRAY_COUNT(gSaveContext.save.playerData.playerName); phi_v0++) {
|
||||
gSaveContext.save.playerData.playerName[phi_v0] =
|
||||
fileChooseCtx->unk_24414[fileChooseCtx->unk_24480][phi_v0];
|
||||
gSaveContext.save.playerData.playerName[phi_v0] = fileSelect->unk_24414[fileSelect->unk_24480][phi_v0];
|
||||
}
|
||||
|
||||
gSaveContext.save.playerData.newf[0] = 'Z';
|
||||
@@ -1478,24 +1474,24 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
|
||||
Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save));
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.playerData.newf); i++) {
|
||||
fileChooseCtx->newf[fileChooseCtx->unk_24480][i] = gSaveContext.save.playerData.newf[i];
|
||||
fileSelect->newf[fileSelect->unk_24480][i] = gSaveContext.save.playerData.newf[i];
|
||||
}
|
||||
|
||||
fileChooseCtx->unk_2440C[fileChooseCtx->unk_24480] = gSaveContext.save.playerData.deaths;
|
||||
fileSelect->unk_2440C[fileSelect->unk_24480] = gSaveContext.save.playerData.deaths;
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.playerData.playerName); i++) {
|
||||
fileChooseCtx->unk_24414[fileChooseCtx->unk_24480][i] = gSaveContext.save.playerData.playerName[i];
|
||||
fileSelect->unk_24414[fileSelect->unk_24480][i] = gSaveContext.save.playerData.playerName[i];
|
||||
}
|
||||
|
||||
fileChooseCtx->healthCapacity[fileChooseCtx->unk_24480] = gSaveContext.save.playerData.healthCapacity;
|
||||
fileChooseCtx->health[fileChooseCtx->unk_24480] = gSaveContext.save.playerData.health;
|
||||
fileChooseCtx->unk_24454[fileChooseCtx->unk_24480] = gSaveContext.save.inventory.defenseHearts;
|
||||
fileChooseCtx->unk_24444[fileChooseCtx->unk_24480] = gSaveContext.save.inventory.questItems;
|
||||
fileChooseCtx->unk_24458[fileChooseCtx->unk_24480] = gSaveContext.save.time;
|
||||
fileChooseCtx->unk_24460[fileChooseCtx->unk_24480] = gSaveContext.save.day;
|
||||
fileChooseCtx->unk_24468[fileChooseCtx->unk_24480] = gSaveContext.save.isOwlSave;
|
||||
fileChooseCtx->rupees[fileChooseCtx->unk_24480] = gSaveContext.save.playerData.rupees;
|
||||
fileChooseCtx->unk_24474[fileChooseCtx->unk_24480] = CUR_UPG_VALUE(UPG_WALLET);
|
||||
fileSelect->healthCapacity[fileSelect->unk_24480] = gSaveContext.save.playerData.healthCapacity;
|
||||
fileSelect->health[fileSelect->unk_24480] = gSaveContext.save.playerData.health;
|
||||
fileSelect->unk_24454[fileSelect->unk_24480] = gSaveContext.save.inventory.defenseHearts;
|
||||
fileSelect->unk_24444[fileSelect->unk_24480] = gSaveContext.save.inventory.questItems;
|
||||
fileSelect->unk_24458[fileSelect->unk_24480] = gSaveContext.save.time;
|
||||
fileSelect->unk_24460[fileSelect->unk_24480] = gSaveContext.save.day;
|
||||
fileSelect->unk_24468[fileSelect->unk_24480] = gSaveContext.save.isOwlSave;
|
||||
fileSelect->rupees[fileSelect->unk_24480] = gSaveContext.save.playerData.rupees;
|
||||
fileSelect->unk_24474[fileSelect->unk_24480] = CUR_UPG_VALUE(UPG_WALLET);
|
||||
|
||||
for (i = 0, maskCount = 0; i < 24; i++) {
|
||||
if (gSaveContext.save.inventory.items[i + 24] != ITEM_NONE) {
|
||||
@@ -1503,8 +1499,8 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx2, SramContext* sramCtx) {
|
||||
}
|
||||
}
|
||||
|
||||
fileChooseCtx->maskCount[fileChooseCtx->unk_24480] = maskCount;
|
||||
fileChooseCtx->heartPieceCount[fileChooseCtx->unk_24480] =
|
||||
fileSelect->maskCount[fileSelect->unk_24480] = maskCount;
|
||||
fileSelect->heartPieceCount[fileSelect->unk_24480] =
|
||||
(gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C;
|
||||
}
|
||||
|
||||
@@ -1526,9 +1522,9 @@ void Sram_InitSram(GameState* gameState, SramContext* sramCtx) {
|
||||
func_801A3D98(gSaveContext.options.audioSetting);
|
||||
}
|
||||
|
||||
void Sram_Alloc(GameState* gamestate, SramContext* sramCtx) {
|
||||
void Sram_Alloc(GameState* gameState, SramContext* sramCtx) {
|
||||
if (gSaveContext.unk_3F3F) {
|
||||
sramCtx->saveBuf = THA_AllocEndAlign16(&gamestate->heap, SAVE_BUFFER_SIZE);
|
||||
sramCtx->saveBuf = THA_AllocEndAlign16(&gameState->heap, SAVE_BUFFER_SIZE);
|
||||
sramCtx->status = 0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user