mirror of
https://github.com/izzy2lost/2ship2harkinian-Android.git
synced 2026-06-19 01:20:08 -07:00
z_sram_NES with 2 NON_MATCHINGs and 1 NON_EQUIVALENTs (#531)
* Rename Sram_InitDebugSave * Sram_InitDebugSave * err * Sram_IncrementDay * non_matchings * func_80146F5C and protos * func_80146EE8 * func_80145698 * func_80143A54 * Split SaveContext * problems with bss * Fix bss * more * a small bunch * Fix warnings * almost everything * two attempts * at least compiles * import data * bss * format * stuff? * Progress? * More progress * clean up data a little * More progress * disaster * re split data * A bit less of a disaster * Fix renamed stuff * data stuff * fix conflicts * format * CycleSceneFlags * some enums * cleanup * Fix merge issues * format * some changes * format * Lots of progress on z_sram_NES, but no matches yet * SaveContent Documentation * Oops * Oops2 * Document more SaveContext * Oops, don't need that anymore * add small comment * Another comment * dekuPlaygroundPlayerName * Fix merge issues * format * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * remove magic number * format * fix merge issues * bss * format * macro cleanup * review * merge issues * review * cleanup * UNK_TYPE1 * Fix * Remove comment * small change * conflicts * review * fix * fixes * format * Update actorCtx renames part * Match func_80143B0C thanks to Petrie and Anon * minor cleaning pass * format * cleanup * more minor cleanups * Macros for accessing gSaveContext.save.stolenItems * Introduce STOLEN_ITEM_NONE and remove CLEAR_STOLEN_ITEM_ * format * Update include/macros.h Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Update src/code/z_sram_NES.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Update src/code/z_sram_NES.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Update src/code/z_sram_NES.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Update src/code/z_sram_NES.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Update src/code/z_sram_NES.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Update src/code/z_sram_NES.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * Update src/code/z_sram_NES.c Co-authored-by: Derek Hensley <hensley.derek58@gmail.com> * @hensldm review * Update include/functions.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update include/functions.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Rename QUEST_SONG_NEW_WAVE * Add scene name comments to D_801C5FC0 * rename horseData.yaw * Update include/functions.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sram_NES.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * // = CUR_UPG_VALUE(UPG_WALLET); * run actorfixer and format * fix bss * Fix merge problems and run format * Some improvements to func_801457CC by anon * bss * format * run actorfixer * actorfixer, bss and format * Use original names for the RESPAWN_MODE enum because the current ones are bad * QUEST_SONG_BOSSA_NOVA * some minor fixes on the SaveContext struct according to the debug rom * Merge Inventory.items and Inventory.masks * a * simplify saveBuf accesses * A few func renames * actorfixer * bss * fixes * bss * actorfixer * actorfixer and format * actorfixer * whoops * whops * bss Co-authored-by: engineer124 <engineer124engineer124@gmail.com> Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>
This commit is contained in:
co-authored by
engineer124
engineer124
Derek Hensley
parent
95c6ddbcc8
commit
b08880f7a7
@@ -21,6 +21,7 @@ ifeq ($(NON_MATCHING),1)
|
||||
COMPARE := 0
|
||||
endif
|
||||
|
||||
DISASM_FLAGS ?=
|
||||
ifneq ($(FULL_DISASM), 0)
|
||||
DISASM_FLAGS += --full
|
||||
endif
|
||||
|
||||
@@ -81,7 +81,7 @@ void EnMs_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
void func_80952734(EnMs* this, GlobalContext* globalCtx) {
|
||||
s16 temp_v1 = this->actor.yawTowardsPlayer - this->actor.shape.rot.y;
|
||||
|
||||
if (gSaveContext.inventory.items[10] == ITEM_NONE) {
|
||||
if (gSaveContext.save.inventory.items[10] == ITEM_NONE) {
|
||||
this->actor.textId = 0x92E;
|
||||
} else {
|
||||
this->actor.textId = 0x932;
|
||||
@@ -187,12 +187,12 @@ void func_809527F8(EnMs *this, GlobalContext *globalCtx) {
|
||||
return;
|
||||
}
|
||||
func_801477B4(globalCtx);
|
||||
if ((s32) gSaveContext.rupees < 0xA) {
|
||||
if ((s32) gSaveContext.save.playerData.rupees < 0xA) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x935U);
|
||||
return;
|
||||
}
|
||||
if ((s32) gSaveContext.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
if ((s32) gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x937U);
|
||||
return;
|
||||
@@ -275,14 +275,14 @@ block_7:
|
||||
goto block_16;
|
||||
block_11:
|
||||
func_801477B4(globalCtx);
|
||||
if ((s32) gSaveContext.rupees >= 0xA) {
|
||||
if ((s32) gSaveContext.save.playerData.rupees >= 0xA) {
|
||||
goto block_13;
|
||||
}
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x935U);
|
||||
return;
|
||||
block_13:
|
||||
if ((s32) gSaveContext.inventory.ammo[gItemSlots[0xA]] < 0x14) {
|
||||
if ((s32) gSaveContext.save.inventory.ammo[gItemSlots[0xA]] < 0x14) {
|
||||
goto block_15;
|
||||
}
|
||||
play_sound(0x4806U);
|
||||
@@ -312,7 +312,7 @@ which in many ways looks worse: you can see why the use of gotos in code is stro
|
||||
The simplest sort of block label to eliminate is one that is only used once, and where the corresponding goto jumps over a simple block of code with no extra internal control flow structure. There are two obvious examples of this here, the first being
|
||||
|
||||
```C
|
||||
if ((s32) gSaveContext.rupees >= 0xA) {
|
||||
if ((s32) gSaveContext.save.playerData.rupees >= 0xA) {
|
||||
goto block_13;
|
||||
}
|
||||
play_sound(0x4806U);
|
||||
@@ -324,7 +324,7 @@ block_13:
|
||||
Currently, this says to jump over the code block `play_sound...` if the condition in the if is satisfied. In non-goto terms, this means that the block should be run if the condition is *not* satisfied. This also illustrates a general property of goto-only mode: you have to reverse the senses of all of the ifs. Therefore the appropriate approach is to swap the if round, put the code block inside, and remove the goto and the label:
|
||||
|
||||
```C
|
||||
if (gSaveContext.rupees < 0xA) {
|
||||
if (gSaveContext.save.playerData.rupees < 0xA) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x935U);
|
||||
return;
|
||||
@@ -378,12 +378,12 @@ block_7:
|
||||
block_11:
|
||||
func_801477B4(globalCtx);
|
||||
|
||||
if (gSaveContext.rupees < 0xA) {
|
||||
if (gSaveContext.save.playerData.rupees < 0xA) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x935U);
|
||||
return;
|
||||
}
|
||||
if (gSaveContext.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x937U);
|
||||
return;
|
||||
@@ -448,12 +448,12 @@ block_7:
|
||||
block_11:
|
||||
func_801477B4(globalCtx);
|
||||
|
||||
if (gSaveContext.rupees < 0xA) {
|
||||
if (gSaveContext.save.playerData.rupees < 0xA) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x935U);
|
||||
return;
|
||||
}
|
||||
if (gSaveContext.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x937U);
|
||||
return;
|
||||
@@ -497,12 +497,12 @@ So let us rewrite the entire second half as a switch:
|
||||
case 0:
|
||||
func_801477B4(globalCtx);
|
||||
|
||||
if (gSaveContext.rupees < 0xA) {
|
||||
if (gSaveContext.save.playerData.rupees < 0xA) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x935U);
|
||||
return;
|
||||
}
|
||||
if (gSaveContext.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x937U);
|
||||
return;
|
||||
@@ -532,10 +532,10 @@ There's a couple of other obvious things here:
|
||||
case 0:
|
||||
func_801477B4(globalCtx);
|
||||
|
||||
if (gSaveContext.rupees < 0xA) {
|
||||
if (gSaveContext.save.playerData.rupees < 0xA) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x935U);
|
||||
} else if (gSaveContext.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
} else if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x937U);
|
||||
} else {
|
||||
@@ -597,10 +597,10 @@ block_7:
|
||||
case 0:
|
||||
func_801477B4(globalCtx);
|
||||
|
||||
if (gSaveContext.rupees < 0xA) {
|
||||
if (gSaveContext.save.playerData.rupees < 0xA) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x935U);
|
||||
} else if (gSaveContext.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
} else if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x937U);
|
||||
} else {
|
||||
@@ -661,10 +661,10 @@ void func_809527F8(EnMs *this, GlobalContext *globalCtx) {
|
||||
case 0:
|
||||
func_801477B4(globalCtx);
|
||||
|
||||
if (gSaveContext.rupees < 0xA) {
|
||||
if (gSaveContext.save.playerData.rupees < 0xA) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x935U);
|
||||
} else if (gSaveContext.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
} else if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x937U);
|
||||
} else {
|
||||
@@ -713,10 +713,10 @@ void func_809527F8(EnMs *this, GlobalContext *globalCtx) {
|
||||
case 0:
|
||||
func_801477B4(globalCtx);
|
||||
|
||||
if (gSaveContext.rupees < 0xA) {
|
||||
if (gSaveContext.save.playerData.rupees < 0xA) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x935U);
|
||||
} else if (gSaveContext.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
} else if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) {
|
||||
play_sound(0x4806U);
|
||||
func_80151938(globalCtx, 0x937U);
|
||||
} else {
|
||||
|
||||
@@ -182,12 +182,12 @@ void func_80C102D4(EnRecepgirl *this, GlobalContext *globalCtx) {
|
||||
func_80C10148(this);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if ((temp_v0_2 == 5) && (Message_ShouldAdvance(globalCtx) != 0)) {
|
||||
if (this->actor.textId == 0x2AD9) {
|
||||
Flags_SetSwitch(globalCtx, this->actor.params);
|
||||
Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f);
|
||||
if ((gSaveContext.weekEventReg[63] & 0x80)) {
|
||||
if ((gSaveContext.save.weekEventReg[63] & 0x80)) {
|
||||
this->actor.textId = 0x2ADF;
|
||||
} else {
|
||||
this->actor.textId = 0x2ADA;
|
||||
@@ -504,7 +504,7 @@ void func_80C102D4(EnRecepgirl* this, GlobalContext* globalCtx) {
|
||||
if (this->actor.textId == 0x2AD9) { // "Welcome..."
|
||||
Flags_SetSwitch(globalCtx, this->actor.params);
|
||||
Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f);
|
||||
if (gSaveContext.weekEventReg[63] & 0x80) { // showed Couple's Mask to meeting
|
||||
if (gSaveContext.save.weekEventReg[63] & 0x80) { // showed Couple's Mask to meeting
|
||||
this->actor.textId = 0x2ADF; // Mayor's office is on the left (meeting ended)
|
||||
} else {
|
||||
this->actor.textId = 0x2ADA; // Mayor's office is on the left (meeting ongoing)
|
||||
|
||||
@@ -378,7 +378,7 @@ There remains one thing we need to fix before trying to compile it, namely `*(&g
|
||||
/* 0x0EF8 */ u8 weekEventReg[100]; // "week_event_reg"
|
||||
/* 0x0F5C */ u32 mapsVisited; // "area_arrival"
|
||||
```
|
||||
so it's somewhere in `weekEventReg`. `0xF37 - 0xEF8 = 0x3F = 63`, and it's a byte array, so the access is actually `gSaveContext.weekEventReg[63] & 0x80`. Now it will compile. We also don't use `!= 0` for flag comparisons: just `if (gSaveContext.weekEventReg[63] & 0x80)` will do.
|
||||
so it's somewhere in `weekEventReg`. `0xF37 - 0xEF8 = 0x3F = 63`, and it's a byte array, so the access is actually `gSaveContext.save.weekEventReg[63] & 0x80`. Now it will compile. We also don't use `!= 0` for flag comparisons: just `if (gSaveContext.save.weekEventReg[63] & 0x80)` will do.
|
||||
|
||||
Running `./diff.py -mwo3 func_80C102D4` and scrolling down, we discover that this doesn't match!
|
||||
|
||||
|
||||
+10
-42
@@ -1495,7 +1495,7 @@ void FireObj_Update(GlobalContext* globalCtx, FireObj* fire, Actor* actor);
|
||||
// void func_800F3940(void);
|
||||
// void func_800F39B4(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
|
||||
// void func_800F3A64(void);
|
||||
// void func_800F3B2C(void);
|
||||
void func_800F3B2C(GlobalContext* globalCtx);
|
||||
// void func_800F3B68(void);
|
||||
// void func_800F3C44(void);
|
||||
// void func_800F3ED4(void);
|
||||
@@ -1913,13 +1913,13 @@ void Interface_ChangeAlpha(u16 param_1);
|
||||
// void func_80111CB4(void);
|
||||
// void func_801129E4(void);
|
||||
void func_80112AFC(GlobalContext* globalCtx);
|
||||
void func_80112B40(GlobalContext* globalCtx, s32 arg1);
|
||||
void func_80112B40(GlobalContext* globalCtx, u8 arg1);
|
||||
// void func_80112BE4(void);
|
||||
// void func_80112C0C(void);
|
||||
u32 Item_Give(GlobalContext* globalCtx, u8 param_2);
|
||||
// void func_801143CC(void);
|
||||
UNK_TYPE func_80114978(UNK_TYPE arg0);
|
||||
void func_801149A0(s32 arg0, s16 arg1);
|
||||
void func_801149A0(s32 itemId, s16 slotId);
|
||||
// void func_80114A9C(void);
|
||||
// void func_80114B84(void);
|
||||
// void func_80114CA0(void);
|
||||
@@ -2574,39 +2574,7 @@ Mtx* SkyboxDraw_UpdateMatrix(SkyboxContext* skyboxCtx, f32 x, f32 y, f32 z);
|
||||
void SkyboxDraw_SetColors(SkyboxContext* skyboxCtx, u8 primR, u8 primG, u8 primB, u8 envR, u8 envG, u8 envB);
|
||||
void SkyboxDraw_Draw(SkyboxContext* skyboxCtx, GraphicsContext* gfxCtx, s16 skyboxId, s16 blend, f32 x, f32 y, f32 z);
|
||||
void SkyboxDraw_Noop(SkyboxContext* skyboxCtx);
|
||||
void func_80143A10(u8 owlId);
|
||||
// void func_80143A54(void);
|
||||
void func_80143AC4(void);
|
||||
void func_80143B0C(GlobalContext* globalCtx);
|
||||
void Sram_IncrementDay(void);
|
||||
u32 Sram_CalcChecksum(u8* data, u32 length);
|
||||
// void func_80144628(void);
|
||||
// void Sram_GenerateRandomSaveFields(void);
|
||||
void func_80144890(void);
|
||||
void Sram_InitDebugSave(void);
|
||||
void func_80144A94(SramContext* sramCtx);
|
||||
// void func_80144E78(void);
|
||||
// void func_8014546C(void);
|
||||
// void func_80145698(void);
|
||||
void func_801457CC(GameState* gameState, SramContext* param_2);
|
||||
void func_80146580(s32 param_1, SramContext* param_2, s32 param_3);
|
||||
// void func_80146628(void);
|
||||
// void func_80146AA0(void);
|
||||
// void func_80146DF8(void);
|
||||
void func_80146E40(GameState* gameState, SramContext* sramCtx);
|
||||
void Sram_Alloc(GameState* gameState, SramContext* sramCtx);
|
||||
// void func_80146EBC(SramContext* param_1, UNK_TYPE4 param_2, UNK_TYPE4 param_3);
|
||||
void func_80146EE8(GlobalContext* globalCtx);
|
||||
void func_80146F5C(GlobalContext* globalCtx);
|
||||
// void func_80147008(void);
|
||||
void func_80147020(SramContext* param_1);
|
||||
void func_80147068(SramContext* param_1);
|
||||
// void func_80147138(SramContext* param_1, UNK_TYPE4 param_2, UNK_TYPE4 param_3);
|
||||
void func_80147150(SramContext* param_1);
|
||||
void func_80147198(SramContext* param_1);
|
||||
// void func_80147314(void);
|
||||
// void func_80147414(void);
|
||||
// void Sram_nop8014750C(UNK_TYPE4 param_1);
|
||||
|
||||
// void func_80147520(void);
|
||||
void func_80147564(GlobalContext* globalCtx);
|
||||
s32 Message_ShouldAdvance(GlobalContext* globalCtx);
|
||||
@@ -3234,17 +3202,17 @@ void Slowly_Stop(SlowlyTask* slowly);
|
||||
// char* func_801857D0(void);
|
||||
// void func_80185864(void);
|
||||
u32 func_80185908(void);
|
||||
// void func_80185968(void);
|
||||
UNK_TYPE func_80185968(void* arg0, UNK_TYPE arg1, UNK_TYPE arg2);
|
||||
// void func_801859F0(void);
|
||||
// void func_80185A2C(void);
|
||||
// void func_80185B1C(void);
|
||||
// void func_80185BE4(void);
|
||||
// void func_80185C24(void);
|
||||
void SysFlashrom_ThreadEntry(s80185D40* param_1);
|
||||
// void func_80185DDC(void);
|
||||
// void func_80185EC4(void);
|
||||
// void func_80185F04(void);
|
||||
// void func_80185F64(void);
|
||||
void func_80185DDC(u8* arg0, u32 arg1, u32 arg2);
|
||||
s32 func_80185EC4(void);
|
||||
s32 func_80185F04(void);
|
||||
void func_80185F64(void* arg0, UNK_TYPE arg1, UNK_TYPE arg2);
|
||||
s32 func_80185F90(u32 param_1);
|
||||
u32 osFlashGetAddr(u32 pageNum);
|
||||
OSPiHandle* osFlashReInit(u8 latency, u8 pulse, u8 pageSize, u8 relDuration, u32 start);
|
||||
@@ -3606,7 +3574,7 @@ void func_801A3B48(UNK_TYPE arg0);
|
||||
// void func_801A3B90(void);
|
||||
void func_801A3CD8(s8 param_1);
|
||||
// void func_801A3CF4(void);
|
||||
// void func_801A3D98(void);
|
||||
void func_801A3D98(s8 audioSetting);
|
||||
// void func_801A3E38(void);
|
||||
// void func_801A3EC0(void);
|
||||
void Audio_SetCutsceneFlag(u8 flag);
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
#ifndef _ICHAIN_H_
|
||||
#define _ICHAIN_H_
|
||||
#ifndef ICHAIN_H
|
||||
#define ICHAIN_H
|
||||
|
||||
#include "libc/stddef.h"
|
||||
|
||||
|
||||
+48
-23
@@ -44,10 +44,10 @@
|
||||
|
||||
// linkAge still exists in MM, but is always set to 0 (always adult)
|
||||
// There are remnants of these macros from OOT, but they are essentially useless
|
||||
#define LINK_IS_CHILD (gSaveContext.linkAge == 1)
|
||||
#define LINK_IS_ADULT (gSaveContext.linkAge == 0)
|
||||
#define LINK_IS_CHILD (gSaveContext.save.linkAge == 1)
|
||||
#define LINK_IS_ADULT (gSaveContext.save.linkAge == 0)
|
||||
|
||||
#define CURRENT_DAY (((void)0, gSaveContext.day) % 5)
|
||||
#define CURRENT_DAY (((void)0, gSaveContext.save.day) % 5)
|
||||
|
||||
#define TIME_TO_MINUTES(time) (s32)((time) * ((24 * 60) / 0x10000))
|
||||
#define CLOCK_TIME(hr, min) (s32)(((hr) * 60 + (min)) * 0x10000 / (24 * 60))
|
||||
@@ -60,28 +60,53 @@
|
||||
#define CLOCK_TIME_ALT_F(hr, min) (((hr) * 60.0f + (min)) / (24.0f * 60.0f / 0x10000))
|
||||
|
||||
#define SLOT(item) gItemSlots[item]
|
||||
#define AMMO(item) gSaveContext.inventory.ammo[SLOT(item)]
|
||||
#define INV_CONTENT(item) gSaveContext.inventory.items[SLOT(item)]
|
||||
#define AMMO(item) gSaveContext.save.inventory.ammo[SLOT(item)]
|
||||
#define INV_CONTENT(item) gSaveContext.save.inventory.items[SLOT(item)]
|
||||
#define GET_INV_CONTENT(item) ((void)0, gSaveContext.save.inventory.items)[SLOT(item)]
|
||||
|
||||
#define ALL_EQUIP_VALUE_VOID(equip) \
|
||||
((((void)0, gSaveContext.inventory.equipment) & gEquipMasks[equip]) >> gEquipShifts[equip])
|
||||
#define CUR_EQUIP_VALUE_VOID(equip) \
|
||||
((((void)0, gSaveContext.equips.equipment) & gEquipMasks[equip]) >> gEquipShifts[equip])
|
||||
#define CUR_UPG_VALUE_VOID(upg) \
|
||||
((((void)0, gSaveContext.inventory.upgrades) & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
|
||||
#define INV_CONTENT_VOID(item) ((void)0, gSaveContext.inventory.items)[SLOT(item)]
|
||||
#define CUR_FORM ((gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) ? 0 : gSaveContext.save.playerForm)
|
||||
|
||||
#define CUR_FORM ((gSaveContext.playerForm == PLAYER_FORM_HUMAN) ? 0 : gSaveContext.playerForm)
|
||||
#define GET_SAVE_EQUIPS_EQUIPMENT ((void)0, gSaveContext.save.equips.equipment)
|
||||
#define GET_SAVE_INVENTORY_UPGRADES ((void)0, gSaveContext.save.inventory.upgrades)
|
||||
#define GET_SAVE_INVENTORY_QUEST_ITEMS ((void)0, gSaveContext.save.inventory.questItems)
|
||||
|
||||
#define ALL_EQUIP_VALUE(equip) ((gSaveContext.inventory.equipment & gEquipMasks[equip]) >> gEquipShifts[equip])
|
||||
#define CUR_EQUIP_VALUE(equip) ((gSaveContext.equips.equipment & gEquipMasks[equip]) >> gEquipShifts[equip])
|
||||
#define CUR_UPG_VALUE(upg) ((gSaveContext.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
|
||||
#define SET_EQUIP_VALUE(equip, value) (gSaveContext.equips.equipment = ((((void)0, gSaveContext.equips.equipment) & (gEquipNegMasks[equip])) | (u16)((u16)(value) << gEquipShifts[equip])))
|
||||
#define CUR_FORM_EQUIP(button) (gSaveContext.equips.buttonItems[CUR_FORM][button])
|
||||
#define CHECK_QUEST_ITEM(item) (((void)0, gSaveContext.inventory.questItems) & gBitFlags[item])
|
||||
#define REMOVE_QUEST_ITEM(item) (gSaveContext.inventory.questItems = (((void)0, gSaveContext.inventory.questItems) & (-1 - gBitFlags[item])))
|
||||
#define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.inventory.dungeonItems[(void)0, dungeonIndex] & gBitFlags[item])
|
||||
#define DUNGEON_KEY_COUNT(dungeonIndex) (gSaveContext.inventory.dungeonKeys[(void)0, dungeonIndex])
|
||||
#define GET_CUR_EQUIP_VALUE(equip) ((GET_SAVE_EQUIPS_EQUIPMENT & gEquipMasks[equip]) >> gEquipShifts[equip])
|
||||
|
||||
#define CUR_UPG_VALUE(upg) ((gSaveContext.save.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
|
||||
#define GET_CUR_UPG_VALUE(upg) ((GET_SAVE_INVENTORY_UPGRADES & gUpgradeMasks[upg]) >> gUpgradeShifts[upg])
|
||||
|
||||
#define SET_EQUIP_VALUE(equip, value) (gSaveContext.save.equips.equipment = ((GET_SAVE_EQUIPS_EQUIPMENT & gEquipNegMasks[equip]) | (u16)((u16)(value) << gEquipShifts[equip])))
|
||||
|
||||
#define BUTTON_ITEM_EQUIP(form, button) (gSaveContext.save.equips.buttonItems[form][button])
|
||||
#define CUR_FORM_EQUIP(button) BUTTON_ITEM_EQUIP(CUR_FORM, button)
|
||||
|
||||
#define C_SLOT_EQUIP(form, button) (gSaveContext.save.equips.cButtonSlots[form][button])
|
||||
#define CHECK_QUEST_ITEM(item) (GET_SAVE_INVENTORY_QUEST_ITEMS & gBitFlags[item])
|
||||
#define REMOVE_QUEST_ITEM(item) (gSaveContext.save.inventory.questItems = (GET_SAVE_INVENTORY_QUEST_ITEMS & (-1 - gBitFlags[item])))
|
||||
|
||||
#define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.inventory.dungeonItems[(void)0, dungeonIndex] & gBitFlags[item])
|
||||
#define DUNGEON_KEY_COUNT(dungeonIndex) (gSaveContext.save.inventory.dungeonKeys[(void)0, dungeonIndex])
|
||||
|
||||
#define GET_CUR_FORM_BTN_ITEM(btn) ((u8)((btn) == EQUIP_SLOT_B ? BUTTON_ITEM_EQUIP(CUR_FORM, btn) : BUTTON_ITEM_EQUIP(0, btn)))
|
||||
|
||||
#define SET_CUR_FORM_BTN_ITEM(btn, item) \
|
||||
do { \
|
||||
if ((btn) == EQUIP_SLOT_B) { \
|
||||
BUTTON_ITEM_EQUIP(CUR_FORM, (btn)) = (item); \
|
||||
} else { \
|
||||
BUTTON_ITEM_EQUIP(0, (btn)) = (item); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define STOLEN_ITEM_NONE (0)
|
||||
|
||||
#define STOLEN_ITEM_1 ((gSaveContext.save.stolenItems & 0xFF000000) >> 0x18)
|
||||
#define STOLEN_ITEM_2 ((gSaveContext.save.stolenItems & 0x00FF0000) >> 0x10)
|
||||
|
||||
#define SET_STOLEN_ITEM_1(itemId) \
|
||||
(gSaveContext.save.stolenItems = (gSaveContext.save.stolenItems & ~0xFF000000) | ((itemId & 0xFF) << 0x18))
|
||||
#define SET_STOLEN_ITEM_2(itemId) \
|
||||
(gSaveContext.save.stolenItems = (gSaveContext.save.stolenItems & ~0x00FF0000) | ((itemId & 0xFF) << 0x10))
|
||||
|
||||
#define CAPACITY(upg, value) gUpgradeCapacities[upg][value]
|
||||
#define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg))
|
||||
@@ -182,4 +207,4 @@ extern GraphicsContext* __gfxCtx;
|
||||
#define ALIGNED8
|
||||
#endif
|
||||
|
||||
#endif // _MACROS_H_
|
||||
#endif // MACROS_H
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
#ifndef _SEGMENT_SYMBOLS_H_
|
||||
#define _SEGMENT_SYMBOLS_H_
|
||||
#ifndef SEGMENT_SYMBOLS_H
|
||||
#define SEGMENT_SYMBOLS_H
|
||||
|
||||
#include "z64.h"
|
||||
#include "libc/stddef.h"
|
||||
#include "PR/ultratypes.h"
|
||||
|
||||
#define DECLARE_SEGMENT(name) \
|
||||
extern u8 _##name##SegmentStart[]; \
|
||||
|
||||
+1
-30
@@ -1369,36 +1369,7 @@ extern s32 D_801C5E9C[]; // D_801C5E9C
|
||||
extern s32 D_801C5EB0[]; // D_801C5EB0
|
||||
extern s16 D_801C5EC4[]; // D_801C5EC4
|
||||
extern struct_801C5F44 D_801C5F44[]; // D_801C5F44
|
||||
// extern UNK_TYPE4 D_801C5FC0;
|
||||
// extern UNK_TYPE4 D_801C5FC4;
|
||||
// extern UNK_TYPE4 D_801C5FC8;
|
||||
// extern UNK_TYPE4 D_801C5FCC;
|
||||
// extern UNK_TYPE4 D_801C5FD0;
|
||||
// extern UNK_TYPE2 D_801C66D0;
|
||||
// extern UNK_TYPE4 D_801C6798;
|
||||
// extern UNK_TYPE1 D_801C67B0;
|
||||
// extern UNK_TYPE4 D_801C67C8;
|
||||
// extern UNK_TYPE4 D_801C67CC;
|
||||
// extern UNK_TYPE4 D_801C67E8;
|
||||
// extern UNK_TYPE4 D_801C67F0;
|
||||
// extern UNK_TYPE4 D_801C67F4;
|
||||
// extern UNK_TYPE1 D_801C6818;
|
||||
// extern UNK_TYPE4 D_801C6838;
|
||||
// extern UNK_TYPE1 D_801C6840;
|
||||
// extern UNK_TYPE1 D_801C6850;
|
||||
// extern UNK_TYPE1 D_801C6870;
|
||||
// extern UNK_TYPE1 D_801C6890;
|
||||
// extern UNK_TYPE1 D_801C6898;
|
||||
// extern UNK_TYPE1 D_801C68C0;
|
||||
extern Inventory gSaveDefaultInventory;
|
||||
extern u16 gSaveDefaultChecksum;
|
||||
// extern UNK_TYPE1 D_801C6970;
|
||||
// extern UNK_TYPE1 D_801C6998;
|
||||
extern Inventory D_801C69BC;
|
||||
extern u16 D_801C6A44;
|
||||
// extern UNK_TYPE1 D_801C6A48;
|
||||
// extern UNK_TYPE1 D_801C6A50;
|
||||
// extern UNK_TYPE1 D_801C6A58;
|
||||
|
||||
// extern UNK_TYPE1 D_801C6A70;
|
||||
// extern UNK_TYPE2 D_801C6A74;
|
||||
// extern UNK_TYPE2 D_801C6A78;
|
||||
|
||||
@@ -315,19 +315,6 @@ typedef struct {
|
||||
/* 0x3 */ s8 pillarboxMagnitude;
|
||||
} ShrinkWindowContext; // size = 0x4
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8* readBuff;
|
||||
/* 0x04 */ u32* flashReadBuff;
|
||||
/* 0x08 */ char unk_08[4];
|
||||
/* 0x0C */ s16 status;
|
||||
/* 0x10 */ u32 curPage;
|
||||
/* 0x14 */ u32 numPages;
|
||||
/* 0x18 */ OSTime unk_18;
|
||||
/* 0x20 */ s16 unk_20;
|
||||
/* 0x22 */ s16 unk_22;
|
||||
/* 0x24 */ s16 unk_24;
|
||||
} SramContext; // size = 0x28
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ s32 topY;
|
||||
/* 0x4 */ s32 bottomY;
|
||||
|
||||
+2
-1
@@ -31,7 +31,7 @@ typedef enum {
|
||||
/* 0x05 */ QUEST_SWORD,
|
||||
/* 0x06 */ QUEST_SONG_SONATA,
|
||||
/* 0x07 */ QUEST_SONG_LULLABY,
|
||||
/* 0x08 */ QUEST_SONG_NOVA,
|
||||
/* 0x08 */ QUEST_SONG_BOSSA_NOVA,
|
||||
/* 0x09 */ QUEST_SONG_ELEGY,
|
||||
/* 0x0A */ QUEST_SONG_OATH,
|
||||
/* 0x0B */ QUEST_SONG_SARIA,
|
||||
@@ -261,6 +261,7 @@ typedef enum {
|
||||
/* 0xA1 */ ITEM_GOLD_DUST_2,
|
||||
/* 0xA2 */ ITEM_HYLIAN_LOACH_2,
|
||||
/* 0xA3 */ ITEM_SEA_HORSE_CAUGHT,
|
||||
/* 0xFD */ ITEM_UNK_FD = 0xFD,
|
||||
/* 0xFF */ ITEM_NONE = 0xFF
|
||||
} ItemID;
|
||||
|
||||
|
||||
+248
-182
@@ -1,99 +1,142 @@
|
||||
#ifndef _Z64SAVE_H_
|
||||
#define _Z64SAVE_H_
|
||||
#ifndef Z64SAVE_H
|
||||
#define Z64SAVE_H
|
||||
|
||||
#include "ultra64.h"
|
||||
#include "z64math.h"
|
||||
#include "os.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 buttonItems[4][4];
|
||||
/* 0x10 */ u8 cButtonSlots[4][4];
|
||||
/* 0x20 */ u16 equipment;
|
||||
} ItemEquips; // size = 0x0A
|
||||
struct GameState;
|
||||
struct GlobalContext;
|
||||
struct FileChooseContext;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 items[24];
|
||||
/* 0x18 */ u8 masks[24];
|
||||
/* 0x30 */ s8 ammo[24];
|
||||
/* 0x48 */ u32 upgrades; // some bits are wallet upgrades
|
||||
/* 0x4C */ u32 questItems;
|
||||
/* 0x50 */ u8 dungeonItems[10];
|
||||
/* 0x5A */ s8 dungeonKeys[10];
|
||||
/* 0x64 */ s8 strayFairies[10]; // "orange_fairy"
|
||||
/* 0x6E */ char dekuPlaygroundPlayerName[3][8]; // Stores playerName (8 char) over (3 days) when getting a new high score. original name: degnuts_memory_name
|
||||
// TODO: properly name DOWN, RETURN and TOP
|
||||
typedef enum RespawnMode {
|
||||
/* 0 */ RESTART_MODE_DOWN, // "RESTART_MODE_DOWN"
|
||||
/* 1 */ RESTART_MODE_RETURN, // "RESTART_MODE_RETURN"
|
||||
/* 2 */ RESTART_MODE_TOP, // "RESTART_MODE_TOP"
|
||||
/* 3 */ RESPAWN_MODE_UNK_3, // Maybe related to grottos
|
||||
/* 4 */ RESPAWN_MODE_GORON, // "RESTART_MODE_GORON"
|
||||
/* 5 */ RESPAWN_MODE_ZORA, // "RESTART_MODE_ZORA"
|
||||
/* 6 */ RESPAWN_MODE_DEKU, // "RESTART_MODE_NUTS"
|
||||
/* 7 */ RESPAWN_MODE_HUMAN, // "RESTART_MODE_CHILD"
|
||||
/* 8 */ RESPAWN_MODE_MAX
|
||||
} RespawnMode;
|
||||
|
||||
#define SAVE_BUFFER_SIZE 0x4000
|
||||
|
||||
typedef struct SramContext {
|
||||
/* 0x00 */ u8* readBuff;
|
||||
/* 0x04 */ u8 *saveBuf;
|
||||
/* 0x08 */ char unk_08[4];
|
||||
/* 0x0C */ s16 status;
|
||||
/* 0x10 */ u32 curPage;
|
||||
/* 0x14 */ u32 numPages;
|
||||
/* 0x18 */ OSTime unk_18;
|
||||
/* 0x20 */ s16 unk_20;
|
||||
/* 0x22 */ s16 unk_22;
|
||||
/* 0x24 */ s16 unk_24;
|
||||
} SramContext; // size = 0x28
|
||||
|
||||
typedef struct ItemEquips {
|
||||
/* 0x00 */ u8 buttonItems[4][4]; // "register_item"
|
||||
/* 0x10 */ u8 cButtonSlots[4][4]; // "register_item_pt"
|
||||
/* 0x20 */ u16 equipment;
|
||||
} ItemEquips; // size = 0x22
|
||||
|
||||
typedef struct Inventory {
|
||||
/* 0x00 */ u8 items[48]; // "item_register", first 24 elements are normal items and the other 24 are masks
|
||||
/* 0x30 */ s8 ammo[24]; // "item_count"
|
||||
/* 0x48 */ u32 upgrades; // "non_equip_register" some bits are wallet upgrades
|
||||
/* 0x4C */ u32 questItems; // "collect_register"
|
||||
/* 0x50 */ u8 dungeonItems[10]; // "key_compass_map"
|
||||
/* 0x5A */ s8 dungeonKeys[10]; // "key_register"
|
||||
/* 0x64 */ s8 strayFairies[10]; // "orange_fairy"
|
||||
/* 0x6E */ char dekuPlaygroundPlayerName[3][8]; // "degnuts_memory_name" Stores playerName (8 char) over (3 days) when getting a new high score
|
||||
} Inventory; // size = 0x88
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s16 scene;
|
||||
/* 0x02 */ Vec3s pos;
|
||||
/* 0x08 */ s16 angle;
|
||||
typedef struct HorseData {
|
||||
/* 0x00 */ s16 scene; // "spot_no"
|
||||
/* 0x02 */ Vec3s pos; // "horse_x", "horse_y" and "horse_z"
|
||||
/* 0x08 */ s16 yaw; // "horse_a"
|
||||
} HorseData; // size = 0x0A
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ Vec3f pos;
|
||||
/* 0xC */ s16 yaw;
|
||||
/* 0xE */ s16 playerParams;
|
||||
typedef struct RespawnData {
|
||||
/* 0x00 */ Vec3f pos;
|
||||
/* 0x0C */ s16 yaw;
|
||||
/* 0x0E */ s16 playerParams;
|
||||
/* 0x10 */ u16 entranceIndex;
|
||||
/* 0x12 */ u8 roomIndex;
|
||||
/* 0x13 */ s8 data;
|
||||
/* 0x14 */ u32 tempSwchFlags;
|
||||
/* 0x14 */ u32 tempSwitchFlags;
|
||||
/* 0x18 */ u32 unk_18;
|
||||
/* 0x1C */ u32 tempCollectFlags;
|
||||
} RespawnData; // size = 0x20
|
||||
|
||||
typedef struct {
|
||||
typedef struct PermanentSceneFlags {
|
||||
/* 0x00 */ u32 chest;
|
||||
/* 0x04 */ u32 swch0;
|
||||
/* 0x08 */ u32 swch1;
|
||||
/* 0x04 */ u32 switch0;
|
||||
/* 0x08 */ u32 switch1;
|
||||
/* 0x0C */ u32 clearedRoom;
|
||||
/* 0x10 */ u32 collectible;
|
||||
/* 0x14 */ u32 unk_14;
|
||||
/* 0x18 */ u32 unk_18;
|
||||
} PermanentSceneFlags; // size = 0x1C
|
||||
|
||||
typedef struct {
|
||||
typedef struct CycleSceneFlags {
|
||||
/* 0x00 */ u32 chest;
|
||||
/* 0x04 */ u32 swch0;
|
||||
/* 0x08 */ u32 swch1;
|
||||
/* 0x04 */ u32 switch0;
|
||||
/* 0x08 */ u32 switch1;
|
||||
/* 0x0C */ u32 clearedRoom;
|
||||
/* 0x10 */ u32 collectible;
|
||||
} CycleSceneFlags; // size = 0x14
|
||||
|
||||
typedef struct {
|
||||
/* 0x0000 */ u32 entranceIndex; // "scene_no"
|
||||
/* 0x0004 */ u8 equippedMask; // "player_mask"
|
||||
/* 0x0005 */ u8 unk_05; // "opening_flag"
|
||||
typedef struct SaveOptions {
|
||||
/* 0x00 */ u16 optionId; // "option_id"
|
||||
/* 0x02 */ u8 language; // "j_n"
|
||||
/* 0x03 */ s8 audioSetting; // "s_sound"
|
||||
/* 0x04 */ u8 languageSetting; // "language"
|
||||
/* 0x05 */ u8 zTargetSetting; // "z_attention", 0: Switch; 1: Hold
|
||||
} SaveOptions; // size = 0x06
|
||||
|
||||
typedef struct SavePlayerData {
|
||||
/* 0x0000 */ char newf[6]; // "newf" Will always be "ZELDA3 for a valid save
|
||||
/* 0x0006 */ u16 deaths; // "savect"
|
||||
/* 0x0008 */ char playerName[8]; // "player_name"
|
||||
/* 0x0010 */ s16 healthCapacity; // "max_life"
|
||||
/* 0x0012 */ s16 health; // "now_life"
|
||||
/* 0x0014 */ s8 magicLevel; // "magic_max"
|
||||
/* 0x0015 */ s8 magic; // "magic_now"
|
||||
/* 0x0016 */ s16 rupees; // "lupy_count"
|
||||
/* 0x0018 */ u16 swordHealth; // "long_sword_hp"
|
||||
/* 0x001A */ u16 tatlTimer; // "navi_timer"
|
||||
/* 0x001C */ u8 magicAcquired; // "magic_mode"
|
||||
/* 0x001D */ u8 doubleMagic; // "magic_ability"
|
||||
/* 0x001E */ u8 doubleDefense; // "life_ability"
|
||||
/* 0x001F */ u8 unk_1F; // "ocarina_round"
|
||||
/* 0x0020 */ u8 unk_20; // "first_memory"
|
||||
/* 0x0022 */ u16 owlActivationFlags; // "memory_warp_point"
|
||||
/* 0x0024 */ u8 unk_24; // "last_warp_pt"
|
||||
/* 0x0026 */ s16 savedSceneNum; // "scene_data_ID"
|
||||
} SavePlayerData; // size = 0x28
|
||||
|
||||
typedef struct Save {
|
||||
/* 0x0000 */ u32 entranceIndex; // "scene_no"
|
||||
/* 0x0004 */ u8 equippedMask; // "player_mask"
|
||||
/* 0x0005 */ u8 isFirstCycle; // "opening_flag"
|
||||
/* 0x0006 */ u8 unk_06;
|
||||
/* 0x0007 */ u8 linkAge; // "link_age"
|
||||
/* 0x0008 */ s32 cutscene; // "day_time"
|
||||
/* 0x000C */ u16 time; // "zelda_time"
|
||||
/* 0x0007 */ u8 linkAge; // "link_age"
|
||||
/* 0x0008 */ s32 cutscene; // "day_time"
|
||||
/* 0x000C */ u16 time; // "zelda_time"
|
||||
/* 0x000E */ u16 owlSaveLocation;
|
||||
/* 0x0010 */ s32 isNight; // "asahiru_fg"
|
||||
/* 0x0014 */ u32 unk_14; // "change_zelda_time"
|
||||
/* 0x0018 */ s32 day; // "totalday"
|
||||
/* 0x001C */ u32 daysElapsed; // "eventday"
|
||||
/* 0x0020 */ u8 playerForm; // "player_character"
|
||||
/* 0x0021 */ u8 snowheadCleared; // "spring_flag"
|
||||
/* 0x0022 */ u8 hasTatl; // "bell_flag"
|
||||
/* 0x0010 */ s32 isNight; // "asahiru_fg"
|
||||
/* 0x0014 */ u32 daySpeed; // "change_zelda_time"
|
||||
/* 0x0018 */ s32 day; // "totalday"
|
||||
/* 0x001C */ u32 daysElapsed; // "eventday"
|
||||
/* 0x0020 */ u8 playerForm; // "player_character"
|
||||
/* 0x0021 */ u8 snowheadCleared; // "spring_flag"
|
||||
/* 0x0022 */ u8 hasTatl; // "bell_flag"
|
||||
/* 0x0023 */ u8 isOwlSave;
|
||||
/* 0x0024 */ char newf[6]; // Will always be "ZELDA3" for a valid save
|
||||
/* 0x002B */ u16 deaths; // "savect"
|
||||
/* 0x002C */ char playerName[8]; // "player_name"
|
||||
/* 0x0034 */ s16 healthCapacity; // "max_life"
|
||||
/* 0x0036 */ s16 health; // "now_life"
|
||||
/* 0x0038 */ s8 magicLevel; // "magic_max"
|
||||
/* 0x0039 */ s8 magic; // "magic_now"
|
||||
/* 0x003A */ s16 rupees; // "lupy_count"
|
||||
/* 0x003C */ u16 swordHealth; // "long_sword_hp"
|
||||
/* 0x003E */ u16 tatlTimer; // "navi_timer"
|
||||
/* 0x0040 */ u8 magicAcquired; // "magic_mode"
|
||||
/* 0x0041 */ u8 doubleMagic; // "magic_ability"
|
||||
/* 0x0042 */ u8 doubleDefense; // "life_ability"
|
||||
/* 0x0043 */ u8 unk_43; // "ocarina_round"
|
||||
/* 0x0044 */ u8 unk_44; // "first_memory"
|
||||
/* 0x0046 */ u16 owlActivationFlags; // "memory_warp_point"
|
||||
/* 0x0048 */ u8 unk_48; // "last_warp_pt"
|
||||
/* 0x004A */ s16 savedSceneNum; // "scene_data_ID"
|
||||
/* 0x0024 */ SavePlayerData playerData;
|
||||
/* 0x004C */ ItemEquips equips;
|
||||
/* 0x0070 */ Inventory inventory;
|
||||
/* 0x00F8 */ PermanentSceneFlags permanentSceneFlags[120];
|
||||
@@ -103,144 +146,167 @@ typedef struct {
|
||||
/* 0x0E7C */ u32 pictoFlags1;
|
||||
/* 0x0E80 */ u32 unk_E80;
|
||||
/* 0x0E84 */ u32 unk_E84;
|
||||
/* 0x0E88 */ u32 unk_E88[7]; // Invadepoh flags
|
||||
/* 0x0EA4 */ u32 scenesVisible[7]; // tingle maps and clouded regions on pause map. Stores scenes bitwise for up to 224 scenes even though there are not that many scenes
|
||||
/* 0x0EC0 */ u32 skullTokenCount; // upper 16 bits store Swamp skulls, lower 16 bits store Ocean skulls
|
||||
/* 0x0EC4 */ u32 unk_EC4; // Gossic stone heart piece flags
|
||||
/* 0x0E88 */ u32 unk_E88[7]; // Invadepoh flags
|
||||
/* 0x0EA4 */ u32 scenesVisible[7]; // tingle maps and clouded regions on pause map. Stores scenes bitwise for up to 224 scenes even though there are not that many scenes
|
||||
/* 0x0EC0 */ u32 skullTokenCount; // upper 16 bits store Swamp skulls, lower 16 bits store Ocean skulls
|
||||
/* 0x0EC4 */ u32 unk_EC4; // Gossic stone heart piece flags
|
||||
/* 0x0EC8 */ u32 unk_EC8;
|
||||
/* 0x0ECC */ u32 unk_ECC[2]; // Related to blue warps
|
||||
/* 0x0ED4 */ u32 stolenItems; // Items stolen by Takkuri and given to Curiosity Shop Man
|
||||
/* 0x0ECC */ u32 unk_ECC[2]; // Related to blue warps
|
||||
/* 0x0ED4 */ u32 stolenItems; // Items stolen by Takkuri and given to Curiosity Shop Man
|
||||
/* 0x0ED8 */ u32 unk_DD8;
|
||||
/* 0x0EDC */ u32 bankRupees;
|
||||
/* 0x0EE0 */ u32 unk_EE0;
|
||||
/* 0x0EE4 */ u32 unk_EE4; // Fishing flags
|
||||
/* 0x0EE4 */ u32 unk_EE4; // Fishing flags
|
||||
/* 0x0EE8 */ u32 unk_EE8;
|
||||
/* 0x0EEC */ u32 horseBackBalloonHighScore;
|
||||
/* 0x0EF0 */ u32 lotteryCodeGuess; // Lottery code chosen by player (only uses lower three hex digits)
|
||||
/* 0x0EF4 */ u32 unk_EF4; // Shooting Gallery Man Flags
|
||||
/* 0x0EF8 */ u8 weekEventReg[100]; // "week_event_reg"
|
||||
/* 0x0F5C */ u32 mapsVisited; // "area_arrival"
|
||||
/* 0x0F60 */ u32 mapsVisible; // "cloud_clear"
|
||||
/* 0x0F64 */ u8 unk_F64; // "oca_rec_flag"
|
||||
/* 0x0F65 */ u8 unk_F65; // "oca_rec_flag8"
|
||||
/* 0x0F66 */ u8 unk_F66[128]; // "oca_rec_buff8"
|
||||
/* 0x0FE6 */ s8 unk_FE6; // "aikotoba_index"
|
||||
/* 0x0FE7 */ s8 unk_FE7[5]; // "aikotoba_table"
|
||||
/* 0x0FEC */ s8 lotteryCodes[3][3]; // Preset lottery codes "numbers_table"
|
||||
/* 0x0FF5 */ s8 spiderHouseMaskOrder[6]; // "kinsta_color_table"
|
||||
/* 0x0FFB */ s8 bomberCode[5]; // "bombers_aikotoba_table"
|
||||
/* 0x0EF0 */ u32 lotteryCodeGuess; // Lottery code chosen by player (only uses lower three hex digits)
|
||||
/* 0x0EF4 */ u32 unk_EF4; // Shooting Gallery Man Flags
|
||||
/* 0x0EF8 */ u8 weekEventReg[100]; // "week_event_reg"
|
||||
/* 0x0F5C */ u32 mapsVisited; // "area_arrival"
|
||||
/* 0x0F60 */ u32 mapsVisible; // "cloud_clear"
|
||||
/* 0x0F64 */ u8 unk_F64; // "oca_rec_flag" has scarecrows song
|
||||
/* 0x0F65 */ u8 unk_F65; // "oca_rec_flag8" scarecrows song set?
|
||||
/* 0x0F66 */ u8 scarecrowsSong[128];
|
||||
/* 0x0FE6 */ s8 bombersCaughtNum; // "aikotoba_index"
|
||||
/* 0x0FE7 */ s8 bombersCaughtOrder[5]; // "aikotoba_table"
|
||||
/* 0x0FEC */ s8 lotteryCodes[3][3]; // "numbers_table", Preset lottery codes
|
||||
/* 0x0FF5 */ s8 spiderHouseMaskOrder[6]; // "kinsta_color_table"
|
||||
/* 0x0FFB */ s8 bomberCode[5]; // "bombers_aikotoba_table"
|
||||
/* 0x1000 */ HorseData horseData;
|
||||
/* 0x100A */ u16 checksum; // "check_sum"
|
||||
/* 0x100C */ u8 eventInf[8];
|
||||
/* 0x1014 */ u8 unk_1014; // "stone_set_flag"
|
||||
/* 0x100A */ u16 checksum; // "check_sum"
|
||||
} Save; // size = 0x100C
|
||||
|
||||
typedef struct SaveContext {
|
||||
/* 0x0000 */ Save save;
|
||||
/* 0x100C */ u8 eventInf[8]; // "event_inf"
|
||||
/* 0x1014 */ u8 unk_1014; // "stone_set_flag"
|
||||
/* 0x1015 */ u8 unk_1015;
|
||||
/* 0x1016 */ u16 jinxTimer;
|
||||
/* 0x1018 */ s16 rupeeAccumulator; // "lupy_udct"
|
||||
/* 0x101A */ u8 unk_101A[6]; // "bottle_status", one entry for each bottle
|
||||
/* 0x1020 */ OSTime unk_1020[6]; // "bottle_ostime", one entry for each bottle
|
||||
/* 0x1050 */ OSTime unk_1050[6]; // "bottle_sub", one entry for each bottle
|
||||
/* 0x1080 */ OSTime unk_1080[6]; // "bottle_time", one entry for each bottle
|
||||
/* 0x10B0 */ OSTime unk_10B0[6]; // "bottle_stop_time", one entry for each bottle
|
||||
/* 0x10E0 */ u64 pictoPhoto[1400]; // buffer containing the pictograph photo
|
||||
/* 0x3CA0 */ s32 fileNum; // "file_no"
|
||||
/* 0x3CA4 */ s16 powderKegTimer; // "big_bom_timer"
|
||||
/* 0x1018 */ s16 rupeeAccumulator; // "lupy_udct"
|
||||
/* 0x101A */ u8 unk_101A[6]; // "bottle_status", one entry for each bottle
|
||||
/* 0x1020 */ OSTime unk_1020[6]; // "bottle_ostime", one entry for each bottle
|
||||
/* 0x1050 */ OSTime unk_1050[6]; // "bottle_sub", one entry for each bottle
|
||||
/* 0x1080 */ OSTime unk_1080[6]; // "bottle_time", one entry for each bottle
|
||||
/* 0x10B0 */ OSTime unk_10B0[6]; // "bottle_stop_time", one entry for each bottle
|
||||
/* 0x10E0 */ u64 pictoPhoto[1400]; // buffer containing the pictograph photo
|
||||
/* 0x3CA0 */ s32 fileNum; // "file_no"
|
||||
/* 0x3CA4 */ s16 powderKegTimer; // "big_bom_timer"
|
||||
/* 0x3CA6 */ u8 unk_3CA6;
|
||||
/* 0x3CA7 */ u8 unk_3CA7; // "day_night_flag"
|
||||
/* 0x3CA8 */ s32 gameMode; // "mode"
|
||||
/* 0x3CAC */ s32 sceneSetupIndex; // "counter"
|
||||
/* 0x3CB0 */ s32 respawnFlag; // "restart_flag"
|
||||
/* 0x3CB4 */ RespawnData respawn[8]; // "restart_data"
|
||||
/* 0x3DB4 */ f32 entranceSpeed; // "player_wipe_speedF"
|
||||
/* 0x3DB8 */ u16 entranceSound; // "player_wipe_door_SE"
|
||||
/* 0x3DBA */ u8 unk_3DBA; // "player_wipe_item"
|
||||
/* 0x3DBB */ u8 unk_3DBB; // "next_walk"
|
||||
/* 0x3DBC */ u16 dogParams; // "dog_flag"
|
||||
/* 0x3DBE */ u8 textTriggerFlags; // "guide_status"
|
||||
/* 0x3DBF */ u8 showTitleCard; // "name_display"
|
||||
/* 0x3DC0 */ s16 unk_3DC0; // "shield_magic_timer"
|
||||
/* 0x3DC2 */ u8 unk_3DC2; // "pad1"
|
||||
/* 0x3DC8 */ OSTime unk_3DC8; // "get_time"
|
||||
/* 0x3DD0 */ u8 unk_3DD0[7]; // "event_fg"
|
||||
/* 0x3DD7 */ u8 unk_3DD7[7]; // "calc_flag"
|
||||
/* 0x3DE0 */ OSTime unk_3DE0[7]; // "event_ostime"
|
||||
/* 0x3E18 */ OSTime unk_3E18[7]; // "event_sub"
|
||||
/* 0x3E50 */ OSTime unk_3E50[7]; // "func_time"
|
||||
/* 0x3E88 */ OSTime unk_3E88[7]; // "func_end_time"
|
||||
/* 0x3EC0 */ OSTime unk_3EC0[7]; // "func_stop_time"
|
||||
/* 0x3EF8 */ s16 timerX[7]; // "event_xp"
|
||||
/* 0x3F06 */ s16 timerY[7]; // "event_yp"
|
||||
/* 0x3F14 */ s16 unk_3F14; // "character_change"
|
||||
/* 0x3F16 */ u8 seqIndex; // "old_bgm"
|
||||
/* 0x3F17 */ u8 nightSeqIndex; // "old_env"
|
||||
/* 0x3F18 */ u8 buttonStatus[6]; // "button_item"
|
||||
/* 0x3F1E */ u8 unk_3F1E; // "ck_fg"
|
||||
/* 0x3F20 */ u16 unk_3F20; // "alpha_type"
|
||||
/* 0x3F22 */ u16 unk_3F22; // "prev_alpha_type"
|
||||
/* 0x3F24 */ u16 unk_3F24; // "alpha_count"
|
||||
/* 0x3F26 */ u16 unk_3F26; // "last_time_type"
|
||||
/* 0x3F28 */ s16 unk_3F28; // "magic_flag"
|
||||
/* 0x3F2A */ s16 unk_3F2A; // "recovery_magic_flag"
|
||||
/* 0x3F2C */ s16 unk_3F2C; // "keep_magic_flag"
|
||||
/* 0x3F2E */ s16 unk_3F2E; // "magic_now_max"
|
||||
/* 0x3F30 */ s16 unk_3F30; // "magic_now_now"
|
||||
/* 0x3F32 */ s16 unk_3F32; // "magic_used"
|
||||
/* 0x3F34 */ s16 unk_3F34; // "magic_recovery"
|
||||
/* 0x3F36 */ u16 mapIndex; // "scene_ID"
|
||||
/* 0x3F38 */ u16 minigameState; // "yabusame_mode"
|
||||
/* 0x3F3A */ u16 minigameScore; // "yabusame_total"
|
||||
/* 0x3F3C */ u16 unk_3F3C; // "yabusame_out_ct"
|
||||
/* 0x3F3E */ u8 unk_3F3E; // "no_save"
|
||||
/* 0x3F3F */ u8 unk_3F3F; // "flash_flag"
|
||||
/* 0x3F40 */ u16 option_id; // "option_id"
|
||||
/* 0x3F42 */ u8 language; // "j_n"
|
||||
/* 0x3F43 */ u8 audioSetting; // "s_sound"
|
||||
/* 0x3F44 */ u8 unk_3F44; // "language"
|
||||
/* 0x3F45 */ u8 zTargetSetting; // 0: Switch; 1: Hold
|
||||
/* 0x3F46 */ u16 unk_3F46; // "NottoriBgm"
|
||||
/* 0x3F48 */ u8 unk_3F48; // "fade_go"
|
||||
/* 0x3F4A */ u16 nextCutsceneIndex; // "next_daytime"
|
||||
/* 0x3F4C */ u8 cutsceneTrigger; // "doukidemo"
|
||||
/* 0x3F4D */ u8 unk_3F4D; // "Kenjya_no"
|
||||
/* 0x3F4E */ u16 nextDayTime; // "next_zelda_time"
|
||||
/* 0x3F50 */ u8 fadeDuration; // "fade_speed"
|
||||
/* 0x3F51 */ u8 unk_3F51; // "wipe_speed"
|
||||
/* 0x3F52 */ u16 environmentTime; // "kankyo_time"
|
||||
/* 0x3F54 */ u8 dogIsLost; // "dog_event_flag"
|
||||
/* 0x3F55 */ u8 nextTransition; // "next_wipe"
|
||||
/* 0x3F56 */ s16 worldMapArea; // "area_type"
|
||||
/* 0x3F58 */ s16 sunsSongState; // "sunmoon_flag"
|
||||
/* 0x3F5A */ s16 healthAccumulator; // "life_mode"
|
||||
/* 0x3F5C */ s32 unk_3F5C; // "bet_rupees"
|
||||
/* 0x3F60 */ u8 unk_3F60; // "framescale_flag"
|
||||
/* 0x3F64 */ f32 unk_3F64; // "framescale_scale"
|
||||
/* 0x3F68 */ CycleSceneFlags cycleSceneFlags[120]; // Scene flags that are temporarily stored over the duration of a single 3-day cycle
|
||||
/* 0x48C8 */ u16 unk_48C8; // "scene_id_mix"
|
||||
/* 0x48CA */ u8 maskMaskBit[3]; // masks given away on the Moon
|
||||
/* 0x48CD */ char unk_48CD[24];
|
||||
/* 0x3CA7 */ u8 unk_3CA7; // "day_night_flag"
|
||||
/* 0x3CA8 */ s32 gameMode; // "mode"
|
||||
/* 0x3CAC */ s32 sceneSetupIndex; // "counter"
|
||||
/* 0x3CB0 */ s32 respawnFlag; // "restart_flag"
|
||||
/* 0x3CB4 */ RespawnData respawn[RESPAWN_MODE_MAX]; // "restart_data"
|
||||
/* 0x3DB4 */ f32 entranceSpeed; // "player_wipe_speedF"
|
||||
/* 0x3DB8 */ u16 entranceSound; // "player_wipe_door_SE"
|
||||
/* 0x3DBA */ u8 unk_3DBA; // "player_wipe_item"
|
||||
/* 0x3DBB */ u8 unk_3DBB; // "next_walk"
|
||||
/* 0x3DBC */ u16 dogParams; // "dog_flag"
|
||||
/* 0x3DBE */ u8 textTriggerFlags; // "guide_status"
|
||||
/* 0x3DBF */ u8 showTitleCard; // "name_display"
|
||||
/* 0x3DC0 */ s16 unk_3DC0; // "shield_magic_timer"
|
||||
/* 0x3DC2 */ u8 unk_3DC2; // "pad1"
|
||||
/* 0x3DC8 */ OSTime unk_3DC8; // "get_time"
|
||||
/* 0x3DD0 */ u8 unk_3DD0[7]; // "event_fg"
|
||||
/* 0x3DD7 */ u8 unk_3DD7[7]; // "calc_flag"
|
||||
/* 0x3DE0 */ OSTime unk_3DE0[7]; // "event_ostime"
|
||||
/* 0x3E18 */ OSTime unk_3E18[7]; // "event_sub"
|
||||
/* 0x3E50 */ OSTime unk_3E50[7]; // "func_time"
|
||||
/* 0x3E88 */ OSTime unk_3E88[7]; // "func_end_time"
|
||||
/* 0x3EC0 */ OSTime unk_3EC0[7]; // "func_stop_time"
|
||||
/* 0x3EF8 */ s16 timerX[7]; // "event_xp"
|
||||
/* 0x3F06 */ s16 timerY[7]; // "event_yp"
|
||||
/* 0x3F14 */ s16 unk_3F14; // "character_change"
|
||||
/* 0x3F16 */ u8 seqIndex; // "old_bgm"
|
||||
/* 0x3F17 */ u8 nightSeqIndex; // "old_env"
|
||||
/* 0x3F18 */ u8 buttonStatus[6]; // "button_item"
|
||||
/* 0x3F1E */ u8 unk_3F1E; // "ck_fg"
|
||||
/* 0x3F20 */ u16 unk_3F20; // "alpha_type"
|
||||
/* 0x3F22 */ u16 unk_3F22; // "prev_alpha_type"
|
||||
/* 0x3F24 */ u16 unk_3F24; // "alpha_count"
|
||||
/* 0x3F26 */ u16 unk_3F26; // "last_time_type"
|
||||
/* 0x3F28 */ s16 unk_3F28; // "magic_flag"
|
||||
/* 0x3F2A */ s16 unk_3F2A; // "recovery_magic_flag"
|
||||
/* 0x3F2C */ s16 unk_3F2C; // "keep_magic_flag"
|
||||
/* 0x3F2E */ s16 unk_3F2E; // "magic_now_max"
|
||||
/* 0x3F30 */ s16 unk_3F30; // "magic_now_now"
|
||||
/* 0x3F32 */ s16 unk_3F32; // "magic_used"
|
||||
/* 0x3F34 */ s16 unk_3F34; // "magic_recovery"
|
||||
/* 0x3F36 */ u16 mapIndex; // "scene_ID"
|
||||
/* 0x3F38 */ u16 minigameState; // "yabusame_mode"
|
||||
/* 0x3F3A */ u16 minigameScore; // "yabusame_total"
|
||||
/* 0x3F3C */ u16 unk_3F3C; // "yabusame_out_ct"
|
||||
/* 0x3F3E */ u8 unk_3F3E; // "no_save"
|
||||
/* 0x3F3F */ u8 unk_3F3F; // "flash_flag"
|
||||
/* 0x3F40 */ SaveOptions options;
|
||||
/* 0x3F46 */ u16 unk_3F46; // "NottoriBgm"
|
||||
/* 0x3F48 */ u8 unk_3F48; // "fade_go"
|
||||
/* 0x3F4A */ u16 nextCutsceneIndex; // "next_daytime"
|
||||
/* 0x3F4C */ u8 cutsceneTrigger; // "doukidemo"
|
||||
/* 0x3F4D */ u8 unk_3F4D; // "Kenjya_no"
|
||||
/* 0x3F4E */ u16 nextDayTime; // "next_zelda_time"
|
||||
/* 0x3F50 */ u8 fadeDuration; // "fade_speed"
|
||||
/* 0x3F51 */ u8 fadeSpeed; // "wipe_speed" transition related
|
||||
/* 0x3F52 */ u16 environmentTime; // "kankyo_time"
|
||||
/* 0x3F54 */ u8 dogIsLost; // "dog_event_flag"
|
||||
/* 0x3F55 */ u8 nextTransition; // "next_wipe"
|
||||
/* 0x3F56 */ s16 worldMapArea; // "area_type"
|
||||
/* 0x3F58 */ s16 sunsSongState; // "sunmoon_flag"
|
||||
/* 0x3F5A */ s16 healthAccumulator; // "life_mode"
|
||||
/* 0x3F5C */ s32 unk_3F5C; // "bet_rupees"
|
||||
/* 0x3F60 */ u8 screenScaleFlag; // "framescale_flag"
|
||||
/* 0x3F64 */ f32 screenScale; // "framescale_scale"
|
||||
/* 0x3F68 */ CycleSceneFlags cycleSceneFlags[120]; // Scene flags that are temporarily stored over the duration of a single 3-day cycle
|
||||
/* 0x48C8 */ u16 unk_48C8; // "scene_id_mix"
|
||||
/* 0x48CA */ u8 maskMaskBit[27]; // "mask_mask_bit", masks given away on the Moon
|
||||
} SaveContext; // size = 0x48C8
|
||||
|
||||
typedef enum {
|
||||
/* 0x00 */ RESPAWN_MODE_VOID_OUT,
|
||||
/* 0x01 */ RESPAWN_MODE_GROTTO, // Exiting a grotto
|
||||
/* 0x02 */ RESPAWN_MODE_FARORES_WIND, // Unused in MM
|
||||
/* 0x03 */ RESPAWN_MODE_GORON,
|
||||
/* 0x04 */ RESPAWN_MODE_ZORA,
|
||||
/* 0x05 */ RESPAWN_MODE_DEKU,
|
||||
/* 0x06 */ RESPAWN_MODE_CHILD_LINK,
|
||||
/* 0x07 */ RESPAWN_MODE_UNK_7,
|
||||
/* 0x07 */ RESPAWN_MODE_UNK_8
|
||||
} RespawnMode;
|
||||
|
||||
typedef enum {
|
||||
typedef enum ButtonStatus {
|
||||
/* 0x00 */ BTN_ENABLED,
|
||||
/* 0xFF */ BTN_DISABLED = 0xFF
|
||||
} ButtonStatus;
|
||||
|
||||
typedef enum {
|
||||
typedef enum SunsSongState {
|
||||
/* 0 */ SUNSSONG_INACTIVE,
|
||||
/* 1 */ SUNSSONG_START, // the suns ocarina effect signals that the song has finished playing
|
||||
/* 2 */ SUNSSONG_SPEED_TIME, // suns was played where time passes, speed up the advancement of time
|
||||
/* 3 */ SUNSSONG_SPECIAL // time does not advance, but signals the song was played. used for freezing redeads
|
||||
} SunsSongState;
|
||||
|
||||
void Sram_ActivateOwl(u8 owlId);
|
||||
void Sram_ClearFlagsAtDawnOfTheFirstDay(void);
|
||||
void Sram_SaveEndOfCycle(struct GlobalContext* globalCtx);
|
||||
void Sram_IncrementDay(void);
|
||||
u16 Sram_CalcChecksum(void* data, size_t count);
|
||||
void Sram_InitNewSave(void);
|
||||
void Sram_InitDebugSave(void);
|
||||
void func_80144A94(SramContext* sramCtx);
|
||||
void Sram_OpenSave(struct FileChooseContext* fileChooseCtx, SramContext* sramCtx);
|
||||
void func_8014546C(SramContext* sramCtx);
|
||||
void func_801457CC(struct FileChooseContext* fileChooseCtx, SramContext* sramCtx);
|
||||
void func_80146580(struct FileChooseContext* fileChooseCtx, SramContext* sramCtx, s32 fileNum);
|
||||
void func_80146628(struct FileChooseContext* fileChooseCtx, SramContext* sramCtx);
|
||||
void Sram_InitSave(struct FileChooseContext* fileChooseCtx, SramContext* sramCtx);
|
||||
void func_80146DF8(SramContext* sramCtx);
|
||||
void Sram_InitSram(struct GameState* gameState, SramContext* sramCtx);
|
||||
void Sram_Alloc(struct GameState* gamestate, SramContext* sramCtx);
|
||||
void Sram_SaveSpecialEnterClockTown(struct GlobalContext* globalCtx);
|
||||
void Sram_SaveSpecialNewDay(struct GlobalContext* globalCtx);
|
||||
void func_80147008(SramContext* sramCtx, u32 curPage, u32 numPages);
|
||||
void func_80147020(SramContext* sramCtx);
|
||||
void func_80147068(SramContext* sramCtx);
|
||||
void func_80147138(SramContext* sramCtx, s32 curPage, s32 numPages);
|
||||
void func_80147150(SramContext* sramCtx);
|
||||
void func_80147198(SramContext* sramCtx);
|
||||
|
||||
extern s32 D_801C6798[];
|
||||
extern u8 D_801C67B0[24];
|
||||
extern s32 D_801C67C8[];
|
||||
extern s32 D_801C67E8[];
|
||||
extern s32 D_801C67F0[];
|
||||
extern s32 D_801C6818[];
|
||||
extern s32 D_801C6838[];
|
||||
extern s32 D_801C6840[];
|
||||
extern s32 D_801C6850[];
|
||||
|
||||
#endif
|
||||
|
||||
+2
-1
@@ -645,7 +645,8 @@ typedef enum {
|
||||
/* 0x6D */ SCENE_ICHIBA,
|
||||
/* 0x6E */ SCENE_BACKTOWN,
|
||||
/* 0x6F */ SCENE_CLOCKTOWER,
|
||||
/* 0x70 */ SCENE_ALLEY
|
||||
/* 0x70 */ SCENE_ALLEY,
|
||||
/* 0x71 */ SCENE_MAX
|
||||
} SceneID;
|
||||
|
||||
// SceneTableEntry draw configs
|
||||
|
||||
@@ -544,9 +544,8 @@ beginseg
|
||||
include "build/src/code/z_vr_box.o"
|
||||
include "build/src/code/z_vr_box_draw.o"
|
||||
include "build/src/code/z_sram_NES.o"
|
||||
include "build/data/code/z_sram_NES.data.o"
|
||||
include "build/data/code/z_sram_NES.bss.o"
|
||||
include "build/src/code/z_message.o"
|
||||
include "build/data/code/z_message.data.o"
|
||||
include "build/data/code/z_message.bss.o"
|
||||
include "build/src/code/z_message_nes.o"
|
||||
include "build/data/code/z_message_nes.data.o"
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "global.h"
|
||||
#include "PR/ultratypes.h"
|
||||
#include "ultra64/vi.h"
|
||||
|
||||
// This file is currently required to fix bss reordering in idle.c. It is not resolved by prevent_bss_reordering.h .
|
||||
// Hopefully it will not be permanent.
|
||||
|
||||
+24
-21
@@ -504,7 +504,7 @@ void Inventory_ChangeEquipment(s16 value) {
|
||||
u8 Inventory_DeleteEquipment(GlobalContext* globalCtx, s16 equipment) {
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
|
||||
if (CUR_EQUIP_VALUE_VOID(EQUIP_SHIELD) != 0) {
|
||||
if (GET_CUR_EQUIP_VALUE(EQUIP_SHIELD) != 0) {
|
||||
SET_EQUIP_VALUE(EQUIP_SHIELD, 0);
|
||||
Player_SetEquipmentData(globalCtx, player);
|
||||
return true;
|
||||
@@ -514,12 +514,12 @@ u8 Inventory_DeleteEquipment(GlobalContext* globalCtx, s16 equipment) {
|
||||
}
|
||||
|
||||
void Inventory_ChangeUpgrade(s16 upgrade, u32 value) {
|
||||
u32 upgrades = gSaveContext.inventory.upgrades;
|
||||
u32 upgrades = gSaveContext.save.inventory.upgrades;
|
||||
|
||||
upgrades &= gUpgradeNegMasks[upgrade];
|
||||
upgrades |= value << gUpgradeShifts[upgrade];
|
||||
|
||||
gSaveContext.inventory.upgrades = upgrades;
|
||||
gSaveContext.save.inventory.upgrades = upgrades;
|
||||
}
|
||||
|
||||
s32 Inventory_IsMapVisible(s16 sceneNum) {
|
||||
@@ -546,7 +546,7 @@ s32 Inventory_IsMapVisible(s16 sceneNum) {
|
||||
}
|
||||
}
|
||||
|
||||
if (gSaveContext.scenesVisible[index] & gBitFlags[sceneNum - (index << 5)]) {
|
||||
if (gSaveContext.save.scenesVisible[index] & gBitFlags[sceneNum - (index << 5)]) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -659,23 +659,23 @@ void Inventory_SetMapVisibility(s16 tingleIndex) {
|
||||
index = 6;
|
||||
}
|
||||
|
||||
gSaveContext.scenesVisible[index] =
|
||||
gSaveContext.scenesVisible[index] | gBitFlags[(s16)(*tingleMapSceneIndices)[i] - (index << 5)];
|
||||
gSaveContext.save.scenesVisible[index] =
|
||||
gSaveContext.save.scenesVisible[index] | gBitFlags[(s16)(*tingleMapSceneIndices)[i] - (index << 5)];
|
||||
i++;
|
||||
}
|
||||
|
||||
if ((*tingleMapSceneIndices) == sScenesPerTingleMap[0]) {
|
||||
gSaveContext.mapsVisible |= 3;
|
||||
gSaveContext.save.mapsVisible |= 3;
|
||||
} else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[1]) {
|
||||
gSaveContext.mapsVisible |= 0x1C;
|
||||
gSaveContext.save.mapsVisible |= 0x1C;
|
||||
} else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[2]) {
|
||||
gSaveContext.mapsVisible |= 0xE0;
|
||||
gSaveContext.save.mapsVisible |= 0xE0;
|
||||
} else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[3]) {
|
||||
gSaveContext.mapsVisible |= 0x100;
|
||||
gSaveContext.save.mapsVisible |= 0x100;
|
||||
} else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[4]) {
|
||||
gSaveContext.mapsVisible |= 0x1E00;
|
||||
gSaveContext.save.mapsVisible |= 0x1E00;
|
||||
} else if ((*tingleMapSceneIndices) == sScenesPerTingleMap[5]) {
|
||||
gSaveContext.mapsVisible |= 0x6000;
|
||||
gSaveContext.save.mapsVisible |= 0x6000;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -688,32 +688,34 @@ void Inventory_SetMapVisibility(s16 tingleIndex) {
|
||||
void Inventory_SaveDekuPlaygroundHighScore(s16 timerId) {
|
||||
s16 i;
|
||||
|
||||
gSaveContext.dekuPlaygroundHighScores[CURRENT_DAY - 1] = gSaveContext.unk_3DE0[timerId];
|
||||
gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1] = gSaveContext.unk_3DE0[timerId];
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
gSaveContext.inventory.dekuPlaygroundPlayerName[CURRENT_DAY - 1][i] = gSaveContext.playerName[i];
|
||||
gSaveContext.save.inventory.dekuPlaygroundPlayerName[CURRENT_DAY - 1][i] =
|
||||
gSaveContext.save.playerData.playerName[i];
|
||||
}
|
||||
}
|
||||
|
||||
void Inventory_IncrementSkullTokenCount(s16 sceneIndex) {
|
||||
if (sceneIndex == SCENE_KINSTA1) {
|
||||
// Swamp Spider House (increment high bits of skullTokenCount)
|
||||
gSaveContext.skullTokenCount = ((u16)(((gSaveContext.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) |
|
||||
(gSaveContext.skullTokenCount & 0xFFFF);
|
||||
gSaveContext.save.skullTokenCount =
|
||||
((u16)(((gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) |
|
||||
(gSaveContext.save.skullTokenCount & 0xFFFF);
|
||||
} else {
|
||||
// Ocean Spider House (increment low bits of skullTokenCount)
|
||||
gSaveContext.skullTokenCount =
|
||||
(((u16)gSaveContext.skullTokenCount + 1) & 0xFFFF) | (gSaveContext.skullTokenCount & 0xFFFF0000);
|
||||
gSaveContext.save.skullTokenCount =
|
||||
(((u16)gSaveContext.save.skullTokenCount + 1) & 0xFFFF) | (gSaveContext.save.skullTokenCount & 0xFFFF0000);
|
||||
}
|
||||
}
|
||||
|
||||
s16 Inventory_GetSkullTokenCount(s16 sceneIndex) {
|
||||
if (sceneIndex == SCENE_KINSTA1) {
|
||||
// Swamp Spider House
|
||||
return (gSaveContext.skullTokenCount & 0xFFFF0000) >> 0x10;
|
||||
return (gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10;
|
||||
} else {
|
||||
// Ocean Spider House
|
||||
return gSaveContext.skullTokenCount & 0xFFFF;
|
||||
return gSaveContext.save.skullTokenCount & 0xFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -723,5 +725,6 @@ void Inventory_SaveLotteryCodeGuess(GlobalContext* globalCtx) {
|
||||
lotteryCodeGuess = ((globalCtx->msgCtx.unk12054[0] & 0xF) << 8); // First Digit
|
||||
lotteryCodeGuess |= ((globalCtx->msgCtx.unk12054[1] & 0xF) << 4); // Second Digit
|
||||
lotteryCodeGuess |= (globalCtx->msgCtx.unk12054[2] & 0xF); // Third Digit
|
||||
gSaveContext.lotteryCodeGuess = (gSaveContext.lotteryCodeGuess & 0xFFFF0000) | (lotteryCodeGuess & 0xFFFF);
|
||||
gSaveContext.save.lotteryCodeGuess =
|
||||
(gSaveContext.save.lotteryCodeGuess & 0xFFFF0000) | (lotteryCodeGuess & 0xFFFF);
|
||||
}
|
||||
|
||||
+102
-102
@@ -12,106 +12,106 @@
|
||||
#include "global.h"
|
||||
|
||||
static FlagSetEntry sFlagEntries[] = {
|
||||
{ &gSaveContext.weekEventReg[0], "week_event_reg[0]" },
|
||||
{ &gSaveContext.weekEventReg[1], "week_event_reg[1]" },
|
||||
{ &gSaveContext.weekEventReg[2], "week_event_reg[2]" },
|
||||
{ &gSaveContext.weekEventReg[3], "week_event_reg[3]" },
|
||||
{ &gSaveContext.weekEventReg[4], "week_event_reg[4]" },
|
||||
{ &gSaveContext.weekEventReg[5], "week_event_reg[5]" },
|
||||
{ &gSaveContext.weekEventReg[6], "week_event_reg[6]" },
|
||||
{ &gSaveContext.weekEventReg[7], "week_event_reg[7]" },
|
||||
{ &gSaveContext.weekEventReg[8], "week_event_reg[8]" },
|
||||
{ &gSaveContext.weekEventReg[9], "week_event_reg[9]" },
|
||||
{ &gSaveContext.weekEventReg[10], "week_event_reg[10]" },
|
||||
{ &gSaveContext.weekEventReg[11], "week_event_reg[11]" },
|
||||
{ &gSaveContext.weekEventReg[12], "week_event_reg[12]" },
|
||||
{ &gSaveContext.weekEventReg[13], "week_event_reg[13]" },
|
||||
{ &gSaveContext.weekEventReg[14], "week_event_reg[14]" },
|
||||
{ &gSaveContext.weekEventReg[15], "week_event_reg[15]" },
|
||||
{ &gSaveContext.weekEventReg[16], "week_event_reg[16]" },
|
||||
{ &gSaveContext.weekEventReg[17], "week_event_reg[17]" },
|
||||
{ &gSaveContext.weekEventReg[18], "week_event_reg[18]" },
|
||||
{ &gSaveContext.weekEventReg[19], "week_event_reg[19]" },
|
||||
{ &gSaveContext.weekEventReg[20], "week_event_reg[20]" },
|
||||
{ &gSaveContext.weekEventReg[21], "week_event_reg[21]" },
|
||||
{ &gSaveContext.weekEventReg[22], "week_event_reg[22]" },
|
||||
{ &gSaveContext.weekEventReg[23], "week_event_reg[23]" },
|
||||
{ &gSaveContext.weekEventReg[24], "week_event_reg[24]" },
|
||||
{ &gSaveContext.weekEventReg[25], "week_event_reg[25]" },
|
||||
{ &gSaveContext.weekEventReg[26], "week_event_reg[26]" },
|
||||
{ &gSaveContext.weekEventReg[27], "week_event_reg[27]" },
|
||||
{ &gSaveContext.weekEventReg[28], "week_event_reg[28]" },
|
||||
{ &gSaveContext.weekEventReg[29], "week_event_reg[29]" },
|
||||
{ &gSaveContext.weekEventReg[30], "week_event_reg[30]" },
|
||||
{ &gSaveContext.weekEventReg[31], "week_event_reg[31]" },
|
||||
{ &gSaveContext.weekEventReg[32], "week_event_reg[32]" },
|
||||
{ &gSaveContext.weekEventReg[33], "week_event_reg[33]" },
|
||||
{ &gSaveContext.weekEventReg[34], "week_event_reg[34]" },
|
||||
{ &gSaveContext.weekEventReg[35], "week_event_reg[35]" },
|
||||
{ &gSaveContext.weekEventReg[36], "week_event_reg[36]" },
|
||||
{ &gSaveContext.weekEventReg[37], "week_event_reg[37]" },
|
||||
{ &gSaveContext.weekEventReg[38], "week_event_reg[38]" },
|
||||
{ &gSaveContext.weekEventReg[39], "week_event_reg[39]" },
|
||||
{ &gSaveContext.weekEventReg[40], "week_event_reg[40]" },
|
||||
{ &gSaveContext.weekEventReg[41], "week_event_reg[41]" },
|
||||
{ &gSaveContext.weekEventReg[42], "week_event_reg[42]" },
|
||||
{ &gSaveContext.weekEventReg[43], "week_event_reg[43]" },
|
||||
{ &gSaveContext.weekEventReg[44], "week_event_reg[44]" },
|
||||
{ &gSaveContext.weekEventReg[45], "week_event_reg[45]" },
|
||||
{ &gSaveContext.weekEventReg[46], "week_event_reg[46]" },
|
||||
{ &gSaveContext.weekEventReg[47], "week_event_reg[47]" },
|
||||
{ &gSaveContext.weekEventReg[48], "week_event_reg[48]" },
|
||||
{ &gSaveContext.weekEventReg[49], "week_event_reg[49]" },
|
||||
{ &gSaveContext.weekEventReg[50], "week_event_reg[50]" },
|
||||
{ &gSaveContext.weekEventReg[51], "week_event_reg[51]" },
|
||||
{ &gSaveContext.weekEventReg[52], "week_event_reg[52]" },
|
||||
{ &gSaveContext.weekEventReg[53], "week_event_reg[53]" },
|
||||
{ &gSaveContext.weekEventReg[54], "week_event_reg[54]" },
|
||||
{ &gSaveContext.weekEventReg[55], "week_event_reg[55]" },
|
||||
{ &gSaveContext.weekEventReg[56], "week_event_reg[56]" },
|
||||
{ &gSaveContext.weekEventReg[57], "week_event_reg[57]" },
|
||||
{ &gSaveContext.weekEventReg[58], "week_event_reg[58]" },
|
||||
{ &gSaveContext.weekEventReg[59], "week_event_reg[59]" },
|
||||
{ &gSaveContext.weekEventReg[60], "week_event_reg[60]" },
|
||||
{ &gSaveContext.weekEventReg[61], "week_event_reg[61]" },
|
||||
{ &gSaveContext.weekEventReg[62], "week_event_reg[62]" },
|
||||
{ &gSaveContext.weekEventReg[63], "week_event_reg[63]" },
|
||||
{ &gSaveContext.weekEventReg[64], "week_event_reg[64]" },
|
||||
{ &gSaveContext.weekEventReg[65], "week_event_reg[65]" },
|
||||
{ &gSaveContext.weekEventReg[66], "week_event_reg[66]" },
|
||||
{ &gSaveContext.weekEventReg[67], "week_event_reg[67]" },
|
||||
{ &gSaveContext.weekEventReg[68], "week_event_reg[68]" },
|
||||
{ &gSaveContext.weekEventReg[69], "week_event_reg[69]" },
|
||||
{ &gSaveContext.weekEventReg[70], "week_event_reg[70]" },
|
||||
{ &gSaveContext.weekEventReg[71], "week_event_reg[71]" },
|
||||
{ &gSaveContext.weekEventReg[72], "week_event_reg[72]" },
|
||||
{ &gSaveContext.weekEventReg[73], "week_event_reg[73]" },
|
||||
{ &gSaveContext.weekEventReg[74], "week_event_reg[74]" },
|
||||
{ &gSaveContext.weekEventReg[75], "week_event_reg[75]" },
|
||||
{ &gSaveContext.weekEventReg[76], "week_event_reg[76]" },
|
||||
{ &gSaveContext.weekEventReg[77], "week_event_reg[77]" },
|
||||
{ &gSaveContext.weekEventReg[78], "week_event_reg[78]" },
|
||||
{ &gSaveContext.weekEventReg[79], "week_event_reg[79]" },
|
||||
{ &gSaveContext.weekEventReg[80], "week_event_reg[80]" },
|
||||
{ &gSaveContext.weekEventReg[81], "week_event_reg[81]" },
|
||||
{ &gSaveContext.weekEventReg[82], "week_event_reg[82]" },
|
||||
{ &gSaveContext.weekEventReg[83], "week_event_reg[83]" },
|
||||
{ &gSaveContext.weekEventReg[84], "week_event_reg[84]" },
|
||||
{ &gSaveContext.weekEventReg[85], "week_event_reg[85]" },
|
||||
{ &gSaveContext.weekEventReg[86], "week_event_reg[86]" },
|
||||
{ &gSaveContext.weekEventReg[87], "week_event_reg[87]" },
|
||||
{ &gSaveContext.weekEventReg[88], "week_event_reg[88]" },
|
||||
{ &gSaveContext.weekEventReg[89], "week_event_reg[89]" },
|
||||
{ &gSaveContext.weekEventReg[90], "week_event_reg[90]" },
|
||||
{ &gSaveContext.weekEventReg[91], "week_event_reg[91]" },
|
||||
{ &gSaveContext.weekEventReg[92], "week_event_reg[92]" },
|
||||
{ &gSaveContext.weekEventReg[93], "week_event_reg[93]" },
|
||||
{ &gSaveContext.weekEventReg[94], "week_event_reg[94]" },
|
||||
{ &gSaveContext.weekEventReg[95], "week_event_reg[95]" },
|
||||
{ &gSaveContext.weekEventReg[96], "week_event_reg[96]" },
|
||||
{ &gSaveContext.weekEventReg[97], "week_event_reg[97]" },
|
||||
{ &gSaveContext.weekEventReg[98], "week_event_reg[98]" },
|
||||
{ &gSaveContext.weekEventReg[99], "week_event_reg[99]" },
|
||||
{ &gSaveContext.save.weekEventReg[0], "week_event_reg[0]" },
|
||||
{ &gSaveContext.save.weekEventReg[1], "week_event_reg[1]" },
|
||||
{ &gSaveContext.save.weekEventReg[2], "week_event_reg[2]" },
|
||||
{ &gSaveContext.save.weekEventReg[3], "week_event_reg[3]" },
|
||||
{ &gSaveContext.save.weekEventReg[4], "week_event_reg[4]" },
|
||||
{ &gSaveContext.save.weekEventReg[5], "week_event_reg[5]" },
|
||||
{ &gSaveContext.save.weekEventReg[6], "week_event_reg[6]" },
|
||||
{ &gSaveContext.save.weekEventReg[7], "week_event_reg[7]" },
|
||||
{ &gSaveContext.save.weekEventReg[8], "week_event_reg[8]" },
|
||||
{ &gSaveContext.save.weekEventReg[9], "week_event_reg[9]" },
|
||||
{ &gSaveContext.save.weekEventReg[10], "week_event_reg[10]" },
|
||||
{ &gSaveContext.save.weekEventReg[11], "week_event_reg[11]" },
|
||||
{ &gSaveContext.save.weekEventReg[12], "week_event_reg[12]" },
|
||||
{ &gSaveContext.save.weekEventReg[13], "week_event_reg[13]" },
|
||||
{ &gSaveContext.save.weekEventReg[14], "week_event_reg[14]" },
|
||||
{ &gSaveContext.save.weekEventReg[15], "week_event_reg[15]" },
|
||||
{ &gSaveContext.save.weekEventReg[16], "week_event_reg[16]" },
|
||||
{ &gSaveContext.save.weekEventReg[17], "week_event_reg[17]" },
|
||||
{ &gSaveContext.save.weekEventReg[18], "week_event_reg[18]" },
|
||||
{ &gSaveContext.save.weekEventReg[19], "week_event_reg[19]" },
|
||||
{ &gSaveContext.save.weekEventReg[20], "week_event_reg[20]" },
|
||||
{ &gSaveContext.save.weekEventReg[21], "week_event_reg[21]" },
|
||||
{ &gSaveContext.save.weekEventReg[22], "week_event_reg[22]" },
|
||||
{ &gSaveContext.save.weekEventReg[23], "week_event_reg[23]" },
|
||||
{ &gSaveContext.save.weekEventReg[24], "week_event_reg[24]" },
|
||||
{ &gSaveContext.save.weekEventReg[25], "week_event_reg[25]" },
|
||||
{ &gSaveContext.save.weekEventReg[26], "week_event_reg[26]" },
|
||||
{ &gSaveContext.save.weekEventReg[27], "week_event_reg[27]" },
|
||||
{ &gSaveContext.save.weekEventReg[28], "week_event_reg[28]" },
|
||||
{ &gSaveContext.save.weekEventReg[29], "week_event_reg[29]" },
|
||||
{ &gSaveContext.save.weekEventReg[30], "week_event_reg[30]" },
|
||||
{ &gSaveContext.save.weekEventReg[31], "week_event_reg[31]" },
|
||||
{ &gSaveContext.save.weekEventReg[32], "week_event_reg[32]" },
|
||||
{ &gSaveContext.save.weekEventReg[33], "week_event_reg[33]" },
|
||||
{ &gSaveContext.save.weekEventReg[34], "week_event_reg[34]" },
|
||||
{ &gSaveContext.save.weekEventReg[35], "week_event_reg[35]" },
|
||||
{ &gSaveContext.save.weekEventReg[36], "week_event_reg[36]" },
|
||||
{ &gSaveContext.save.weekEventReg[37], "week_event_reg[37]" },
|
||||
{ &gSaveContext.save.weekEventReg[38], "week_event_reg[38]" },
|
||||
{ &gSaveContext.save.weekEventReg[39], "week_event_reg[39]" },
|
||||
{ &gSaveContext.save.weekEventReg[40], "week_event_reg[40]" },
|
||||
{ &gSaveContext.save.weekEventReg[41], "week_event_reg[41]" },
|
||||
{ &gSaveContext.save.weekEventReg[42], "week_event_reg[42]" },
|
||||
{ &gSaveContext.save.weekEventReg[43], "week_event_reg[43]" },
|
||||
{ &gSaveContext.save.weekEventReg[44], "week_event_reg[44]" },
|
||||
{ &gSaveContext.save.weekEventReg[45], "week_event_reg[45]" },
|
||||
{ &gSaveContext.save.weekEventReg[46], "week_event_reg[46]" },
|
||||
{ &gSaveContext.save.weekEventReg[47], "week_event_reg[47]" },
|
||||
{ &gSaveContext.save.weekEventReg[48], "week_event_reg[48]" },
|
||||
{ &gSaveContext.save.weekEventReg[49], "week_event_reg[49]" },
|
||||
{ &gSaveContext.save.weekEventReg[50], "week_event_reg[50]" },
|
||||
{ &gSaveContext.save.weekEventReg[51], "week_event_reg[51]" },
|
||||
{ &gSaveContext.save.weekEventReg[52], "week_event_reg[52]" },
|
||||
{ &gSaveContext.save.weekEventReg[53], "week_event_reg[53]" },
|
||||
{ &gSaveContext.save.weekEventReg[54], "week_event_reg[54]" },
|
||||
{ &gSaveContext.save.weekEventReg[55], "week_event_reg[55]" },
|
||||
{ &gSaveContext.save.weekEventReg[56], "week_event_reg[56]" },
|
||||
{ &gSaveContext.save.weekEventReg[57], "week_event_reg[57]" },
|
||||
{ &gSaveContext.save.weekEventReg[58], "week_event_reg[58]" },
|
||||
{ &gSaveContext.save.weekEventReg[59], "week_event_reg[59]" },
|
||||
{ &gSaveContext.save.weekEventReg[60], "week_event_reg[60]" },
|
||||
{ &gSaveContext.save.weekEventReg[61], "week_event_reg[61]" },
|
||||
{ &gSaveContext.save.weekEventReg[62], "week_event_reg[62]" },
|
||||
{ &gSaveContext.save.weekEventReg[63], "week_event_reg[63]" },
|
||||
{ &gSaveContext.save.weekEventReg[64], "week_event_reg[64]" },
|
||||
{ &gSaveContext.save.weekEventReg[65], "week_event_reg[65]" },
|
||||
{ &gSaveContext.save.weekEventReg[66], "week_event_reg[66]" },
|
||||
{ &gSaveContext.save.weekEventReg[67], "week_event_reg[67]" },
|
||||
{ &gSaveContext.save.weekEventReg[68], "week_event_reg[68]" },
|
||||
{ &gSaveContext.save.weekEventReg[69], "week_event_reg[69]" },
|
||||
{ &gSaveContext.save.weekEventReg[70], "week_event_reg[70]" },
|
||||
{ &gSaveContext.save.weekEventReg[71], "week_event_reg[71]" },
|
||||
{ &gSaveContext.save.weekEventReg[72], "week_event_reg[72]" },
|
||||
{ &gSaveContext.save.weekEventReg[73], "week_event_reg[73]" },
|
||||
{ &gSaveContext.save.weekEventReg[74], "week_event_reg[74]" },
|
||||
{ &gSaveContext.save.weekEventReg[75], "week_event_reg[75]" },
|
||||
{ &gSaveContext.save.weekEventReg[76], "week_event_reg[76]" },
|
||||
{ &gSaveContext.save.weekEventReg[77], "week_event_reg[77]" },
|
||||
{ &gSaveContext.save.weekEventReg[78], "week_event_reg[78]" },
|
||||
{ &gSaveContext.save.weekEventReg[79], "week_event_reg[79]" },
|
||||
{ &gSaveContext.save.weekEventReg[80], "week_event_reg[80]" },
|
||||
{ &gSaveContext.save.weekEventReg[81], "week_event_reg[81]" },
|
||||
{ &gSaveContext.save.weekEventReg[82], "week_event_reg[82]" },
|
||||
{ &gSaveContext.save.weekEventReg[83], "week_event_reg[83]" },
|
||||
{ &gSaveContext.save.weekEventReg[84], "week_event_reg[84]" },
|
||||
{ &gSaveContext.save.weekEventReg[85], "week_event_reg[85]" },
|
||||
{ &gSaveContext.save.weekEventReg[86], "week_event_reg[86]" },
|
||||
{ &gSaveContext.save.weekEventReg[87], "week_event_reg[87]" },
|
||||
{ &gSaveContext.save.weekEventReg[88], "week_event_reg[88]" },
|
||||
{ &gSaveContext.save.weekEventReg[89], "week_event_reg[89]" },
|
||||
{ &gSaveContext.save.weekEventReg[90], "week_event_reg[90]" },
|
||||
{ &gSaveContext.save.weekEventReg[91], "week_event_reg[91]" },
|
||||
{ &gSaveContext.save.weekEventReg[92], "week_event_reg[92]" },
|
||||
{ &gSaveContext.save.weekEventReg[93], "week_event_reg[93]" },
|
||||
{ &gSaveContext.save.weekEventReg[94], "week_event_reg[94]" },
|
||||
{ &gSaveContext.save.weekEventReg[95], "week_event_reg[95]" },
|
||||
{ &gSaveContext.save.weekEventReg[96], "week_event_reg[96]" },
|
||||
{ &gSaveContext.save.weekEventReg[97], "week_event_reg[97]" },
|
||||
{ &gSaveContext.save.weekEventReg[98], "week_event_reg[98]" },
|
||||
{ &gSaveContext.save.weekEventReg[99], "week_event_reg[99]" },
|
||||
|
||||
{ &gSaveContext.eventInf[0], "event_inf[0]" },
|
||||
{ &gSaveContext.eventInf[1], "event_inf[1]" },
|
||||
@@ -245,8 +245,8 @@ void FlagSet_Update(GameState* gameState) {
|
||||
if (CHECK_BTN_ALL(input->cur.button, BTN_START)) {
|
||||
if (CHECK_BTN_ALL(input->press.button, BTN_B)) {
|
||||
s16 i;
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.weekEventReg); i++) {
|
||||
gSaveContext.weekEventReg[i] = 0;
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.weekEventReg); i++) {
|
||||
gSaveContext.save.weekEventReg[i] = 0;
|
||||
}
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.eventInf); i++) {
|
||||
gSaveContext.eventInf[i] = 0;
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#include "prevent_bss_reordering.h"
|
||||
#include "global.h"
|
||||
|
||||
#define RSP_DONE_MSG 667
|
||||
|
||||
+4
-4
@@ -2224,7 +2224,7 @@ void func_800B90F4(GlobalContext* globalCtx) {
|
||||
void func_800B9120(ActorContext* actorCtx) {
|
||||
s32 phi_v0 = CURRENT_DAY * 2;
|
||||
|
||||
if (gSaveContext.time < CLOCK_TIME(6, 0) || gSaveContext.time > CLOCK_TIME(18, 0)) {
|
||||
if (gSaveContext.save.time < CLOCK_TIME(6, 0) || gSaveContext.save.time > CLOCK_TIME(18, 0)) {
|
||||
phi_v0++;
|
||||
}
|
||||
|
||||
@@ -2236,7 +2236,7 @@ void Actor_InitContext(GlobalContext* globalCtx, ActorContext* actorCtx, ActorEn
|
||||
CycleSceneFlags* cycleFlags;
|
||||
s32 i;
|
||||
|
||||
gSaveContext.weekEventReg[92] |= 0x80;
|
||||
gSaveContext.save.weekEventReg[92] |= 0x80;
|
||||
cycleFlags = &gSaveContext.cycleSceneFlags[Play_GetOriginalSceneNumber(globalCtx->sceneNum)];
|
||||
|
||||
bzero(actorCtx, sizeof(ActorContext));
|
||||
@@ -2252,8 +2252,8 @@ void Actor_InitContext(GlobalContext* globalCtx, ActorContext* actorCtx, ActorEn
|
||||
}
|
||||
|
||||
actorCtx->flags.chest = cycleFlags->chest;
|
||||
actorCtx->flags.switches[0] = cycleFlags->swch0;
|
||||
actorCtx->flags.switches[1] = cycleFlags->swch1;
|
||||
actorCtx->flags.switches[0] = cycleFlags->switch0;
|
||||
actorCtx->flags.switches[1] = cycleFlags->switch1;
|
||||
if (globalCtx->sceneNum == SCENE_INISIE_R) {
|
||||
cycleFlags = &gSaveContext.cycleSceneFlags[globalCtx->sceneNum];
|
||||
}
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
#define DYNA_RAYCAST_WALLS 2
|
||||
#define DYNA_RAYCAST_CEILINGS 4
|
||||
|
||||
static u32 sWallFlags[32] = {
|
||||
u32 sWallFlags[32] = {
|
||||
0, 1, 3, 5, 8, 16, 32, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
};
|
||||
|
||||
static u16 sSurfaceTypeSfx[] = {
|
||||
u16 sSurfaceTypeSfx[] = {
|
||||
/* 0x00 */ NA_SE_PL_WALK_GROUND - SFX_FLAG,
|
||||
/* 0x01 */ NA_SE_PL_WALK_SAND - SFX_FLAG,
|
||||
/* 0x02 */ NA_SE_PL_WALK_CONCRETE - SFX_FLAG,
|
||||
@@ -28,7 +28,7 @@ static u16 sSurfaceTypeSfx[] = {
|
||||
/* 0x0E */ NA_SE_PL_WALK_SNOW - SFX_FLAG
|
||||
};
|
||||
|
||||
static u8 D_801B46C0[] = {
|
||||
u8 D_801B46C0[] = {
|
||||
/* 0x00 */ 1,
|
||||
/* 0x01 */ 1,
|
||||
/* 0x02 */ 0,
|
||||
@@ -46,7 +46,7 @@ static u8 D_801B46C0[] = {
|
||||
/* 0x0E */ 1
|
||||
};
|
||||
|
||||
static s16 sSmallMemScenes[] = {
|
||||
s16 sSmallMemScenes[] = {
|
||||
SCENE_F01,
|
||||
};
|
||||
|
||||
@@ -55,7 +55,7 @@ typedef struct {
|
||||
u32 memSize;
|
||||
} BgCheckSceneMemEntry;
|
||||
|
||||
static BgCheckSceneMemEntry sSceneMemList[] = {
|
||||
BgCheckSceneMemEntry sSceneMemList[] = {
|
||||
{ SCENE_00KEIKOKU, 0xC800 },
|
||||
};
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user