Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 74 additions & 2 deletions code/include/game/context.h
Original file line number Diff line number Diff line change
Expand Up @@ -654,8 +654,80 @@ namespace game {
static_assert(sizeof(GlobalContext) == 0x11030);

struct PersistentSceneCycleFlags {
u32 switch0;
u32 switch1;
union switches0 {
u32 raw;

BitField<0, 1, u32> unk0;
BitField<1, 1, u32> unk1;
BitField<2, 1, u32> unk2;
BitField<3, 1, u32> unk3;
BitField<4, 1, u32> unk4;
BitField<5, 1, u32> unk5;
BitField<6, 1, u32> unk6;
BitField<7, 1, u32> unk7;
BitField<8, 1, u32> unk8;
BitField<9, 1, u32> unk9;
BitField<10, 1, u32> unk10;
BitField<11, 1, u32> unk11;
BitField<12, 1, u32> unk12;
BitField<13, 1, u32> unk13;
BitField<14, 1, u32> unk14;
BitField<15, 1, u32> unk15;
BitField<16, 1, u32> unk16;
BitField<17, 1, u32> unk17;
BitField<18, 1, u32> unk18;
BitField<19, 1, u32> unk19;
BitField<20, 1, u32> unk20;
BitField<21, 1, u32> unk21;
BitField<22, 1, u32> unk22;
BitField<23, 1, u32> unk23;
BitField<24, 1, u32> unk24;
BitField<25, 1, u32> unk25;
BitField<26, 1, u32> unk26;
BitField<27, 1, u32> unk27;
BitField<28, 1, u32> unk28;
BitField<29, 1, u32> unk29;
BitField<30, 1, u32> unk30;
BitField<31, 1, u32> unk31;
};
switches0 switch0;
union switches1 {
u32 raw;

BitField<0, 1, u32> unk0;
BitField<1, 1, u32> unk1;
BitField<2, 1, u32> unk2;
BitField<3, 1, u32> unk3;
BitField<4, 1, u32> unk4;
BitField<5, 1, u32> unk5;
BitField<6, 1, u32> unk6;
BitField<7, 1, u32> unk7;
BitField<8, 1, u32> unk8;
BitField<9, 1, u32> unk9;
BitField<10, 1, u32> unk10;
BitField<11, 1, u32> unk11;
BitField<12, 1, u32> unk12;
BitField<13, 1, u32> unk13;
BitField<14, 1, u32> unk14;
BitField<15, 1, u32> unk15;
BitField<16, 1, u32> unk16;
BitField<17, 1, u32> unk17;
BitField<18, 1, u32> unk18;
BitField<19, 1, u32> unk19;
BitField<20, 1, u32> unk20;
BitField<21, 1, u32> unk21;
BitField<22, 1, u32> unk22;
BitField<23, 1, u32> unk23;
BitField<24, 1, u32> unk24;
BitField<25, 1, u32> unk25;
BitField<26, 1, u32> unk26;
BitField<27, 1, u32> unk27;
BitField<28, 1, u32> unk28;
BitField<29, 1, u32> unk29;
BitField<30, 1, u32> unk30;
BitField<31, 1, u32> unk31;
};
switches1 switch1;
u32 chest;
u32 collectible;
};
Expand Down
8 changes: 0 additions & 8 deletions code/mm.ld
Original file line number Diff line number Diff line change
Expand Up @@ -121,14 +121,6 @@ SECTIONS{
*(.patch_GetCustomText)
}

.patch_DoNotResetTempleFlags 0x1C936C : {
*(.patch_DoNotResetTempleFlags)
}

.patch_DoNotResetCurrentSceneFlags 0x1C9348 : {
*(.patch_DoNotResetCurrentSceneFlags)
}

.patch_DoNotRemoveTradeItems 0x1C9AA8 : {
*(.patch_DoNotRemoveTradeItems)
}
Expand Down
8 changes: 0 additions & 8 deletions code/source/asm/entrance_hooks.s
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,6 @@ doNotOverrideCutscene:
bl 0x22A7F8
b 0x1B1838

.global hook_DoNotResetTempleFlags
hook_DoNotResetTempleFlags:
push {r0-r12, lr}
bl ForceTempleFlags
pop {r0-r12, lr}
mov r0,#0x0
bx lr

.global hook_AdjustMoonEntryRequirements
hook_AdjustMoonEntryRequirements:
ldr r2,[r3,#0x0]
Expand Down
9 changes: 0 additions & 9 deletions code/source/asm/entrance_patches.s
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,6 @@
patch_OverrideCutsceneNextEntrance:
bl hook_OverrideCutsceneNextEntrance

@ Skip past all the fairy and
@ door resetting if we are the temples
@ as we don't want to softlock users
@ if they have already used their keys.
.section .patch_DoNotResetTempleFlags
.global patch_DoNotResetTempleFlags
patch_DoNotResetTempleFlags:
bl hook_DoNotResetTempleFlags

.section .patch_AdjustMoonEntryRequirements
.global patch_AdjustMoonEntryRequirements
patch_AdjustMoonEntryRequirements:
Expand Down
9 changes: 0 additions & 9 deletions code/source/asm/patches.s
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,6 @@ patch_FixSurroundSound:
patch_ResetCycleFlagOnMoonCrash:
bl 0x1C92A8

@ nop gctx->field_22f8 from being potentially nulled. Disables stray fairy respawn and doors locking.
.section .patch_DoNotResetCurrentSceneFlags
.global patch_DoNotResetCurrentSceneFlags
patch_DoNotResetCurrentSceneFlags:
nop
nop
nop
nop

.section .patch_MainLoop
.global patch_MainLoop
patch_MainLoop:
Expand Down
14 changes: 8 additions & 6 deletions code/source/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "game/ui.h"
#include "game/ui/screens/gearscreen.h"
#include "rnd/boss.h"
#include "rnd/custom_entrances.h"
#include "rnd/extdata.h"
#include "rnd/icetrap.h"
#include "rnd/input.h"
Expand Down Expand Up @@ -37,6 +38,7 @@ namespace rnd {
// SaveFile_LoadExtSaveData(1);
// TODO: Maybe make this an option?
link::FixSpeedIssues();
ForceTempleFlags();
#if defined ENABLE_DEBUG || defined DEBUG_PRINT
util::Print("MM3DR Initialized (" __DATE__ " " __TIME__ ")\n");
game::sound::PlayEffect(game::sound::EffectId::NA_SE_SY_CHAT_ALLERT);
Expand Down Expand Up @@ -107,14 +109,14 @@ namespace rnd {
#if defined ENABLE_DEBUG || defined DEBUG_PRINT
if (pressedButtons == (u32)game::pad::Button::ZR) {
util::Print("%s: Hehe :)", __func__);
auto& save = game::GetCommonData().save;
save.week_event_reg_25.WEEKEVENTREG_OATH_CUTSCENE_SUCCEEDED = 1;
save.inventory.collect_register.odolwas_remains = 1;
save.inventory.collect_register.twinmolds_remains = 1;
} else if (pressedButtons == (u32)game::pad::Button::ZL) {
auto& save = game::GetCommonData().save;
save.inventory.woodfall_temple_keys = 0;
save.week_event_reg_01.WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE = 0;
save.inventory.woodfall_temple_keys = 2;
save.inventory.snowhead_temple_keys = 5;
save.inventory.great_bay_temple_keys = 5;
save.inventory.stone_tower_temple_keys = 5;
save.inventory.stone_tower_dungeon_items.map = 1;
// save.week_event_reg_01.WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE = 0;
}
#endif
if (gSettingsContext.customMaskButton != 0 && pressedButtons == gSettingsContext.customMaskButton) {
Expand Down
22 changes: 17 additions & 5 deletions code/source/rnd/custom_entrances.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,23 @@ namespace rnd {
void ForceTempleFlags() {
game::PersistentSceneCycleFlags* persistentCycleFlags = game::GetPersistentCycleStruct();
// Ensure persistent cycle flags do not reset doors. Bits are commonly stored in highest bit except for inverted.
persistentCycleFlags[(u32)game::SceneId::WoodfallTemple].switch1 = 0xF0000000; // Highest bit is the door
persistentCycleFlags[(u32)game::SceneId::SnowheadTemple].switch1 = 0xF0000000;
persistentCycleFlags[(u32)game::SceneId::GreatBayTemple].switch1 = 0xF0000000;
persistentCycleFlags[(u32)game::SceneId::StoneTowerTemple].switch1 = 0xF0000000;
persistentCycleFlags[(u32)game::SceneId::StoneTowerTempleInverted].switch1 = 0xFF000000;
persistentCycleFlags[(u32)game::SceneId::WoodfallTemple].switch1.unk29 = 0xF; // Keyed Door in Woodfall
persistentCycleFlags[(u32)game::SceneId::SnowheadTemple].switch1.unk28 =
0xF; // First keyed door in snowhead. switch0.unk1 is block at start, switch0.unk15 is clearing the ice
persistentCycleFlags[(u32)game::SceneId::SnowheadTemple].switch1.unk29 = 0xF; // Second Keyed door on second floor.
persistentCycleFlags[(u32)game::SceneId::GreatBayTemple].switch1.unk29 = 0xF;
persistentCycleFlags[(u32)game::SceneId::StoneTowerTemple].switch1.unk29 = 0xF; // First locked door draft room.
persistentCycleFlags[(u32)game::SceneId::StoneTowerTemple].switch1.unk28 =
0xF; // Second locked door after elegy puzzle.
persistentCycleFlags[(u32)game::SceneId::StoneTowerTemple].switch1.unk19 = 0xF; // ISTT Draft Room Top Right
persistentCycleFlags[(u32)game::SceneId::StoneTowerTemple].switch1.unk20 = 0xF; // ISTT Main Entrance Locked door
persistentCycleFlags[(u32)game::SceneId::StoneTowerTempleInverted].switch1.unk29 =
0xF; // First locked door draft room.
persistentCycleFlags[(u32)game::SceneId::StoneTowerTempleInverted].switch1.unk28 = 0xF;
persistentCycleFlags[(u32)game::SceneId::StoneTowerTempleInverted].switch1.unk19 =
0xF; // ISTT Draft Room Top Right
persistentCycleFlags[(u32)game::SceneId::StoneTowerTempleInverted].switch1.unk20 =
0xF; // ISTT Main Entrance Locked door
}

bool EnFall_CheckMoonRequirements() {
Expand Down
Loading