From 51ed7367295a1cfc60be0adf2d16dcb84f2c0821 Mon Sep 17 00:00:00 2001 From: Olivia!! Date: Thu, 14 May 2026 02:36:39 +0200 Subject: [PATCH] Adds a new cheat to let you transform from the start of the game, without Midna or the Shadow Crystal --- include/dusk/settings.h | 1 + src/d/actor/d_a_alink_dusk.cpp | 6 +++--- src/d/actor/d_a_midna.cpp | 5 +++-- src/dusk/settings.cpp | 2 ++ src/dusk/ui/settings.cpp | 2 ++ 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/include/dusk/settings.h b/include/dusk/settings.h index 43e565ed5e..a84b9621e6 100644 --- a/include/dusk/settings.h +++ b/include/dusk/settings.h @@ -173,6 +173,7 @@ struct UserSettings { ConfigVar fastSpinner; ConfigVar freeMagicArmor; ConfigVar invincibleEnemies; + ConfigVar transformWithoutShadowCrystal; // Technical ConfigVar restoreWiiGlitches; diff --git a/src/d/actor/d_a_alink_dusk.cpp b/src/d/actor/d_a_alink_dusk.cpp index 8c1d415ae0..d2a155b3e7 100644 --- a/src/d/actor/d_a_alink_dusk.cpp +++ b/src/d/actor/d_a_alink_dusk.cpp @@ -72,7 +72,7 @@ void daAlink_c::handleQuickTransform() { } // Check to see if Link has the ability to transform. - if (!dComIfGs_isEventBit(dSv_event_flag_c::M_077)) { + if (!dComIfGs_isEventBit(dSv_event_flag_c::M_077) and !dusk::getSettings().game.transformWithoutShadowCrystal) { return; } @@ -102,7 +102,7 @@ void daAlink_c::handleQuickTransform() { } // Ensure that the Z Button is not dimmed - if (meterDrawPtr->getButtonZAlpha() != 1.f) { + if (meterDrawPtr->getButtonZAlpha() != 1.f and !dusk::getSettings().game.transformWithoutShadowCrystal) { Z2GetAudioMgr()->seStart(Z2SE_SYS_ERROR, NULL, 0, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); return; } @@ -122,7 +122,7 @@ void daAlink_c::handleQuickTransform() { bool canTransform = false; if (mLinkAcch.ChkGroundHit() && !checkModeFlg(MODE_PLAYER_FLY) && !checkMagneBootsOn()) { - if (checkMidnaRide()) { + if (checkMidnaRide() or dusk::getSettings().game.transformWithoutShadowCrystal) { if ((checkWolf() && (checkModeFlg(MODE_UNK_1000) || dComIfGp_checkPlayerStatus0(0, 0x10))) || (!checkWolf() && diff --git a/src/d/actor/d_a_midna.cpp b/src/d/actor/d_a_midna.cpp index 3bc500991d..8559d20429 100644 --- a/src/d/actor/d_a_midna.cpp +++ b/src/d/actor/d_a_midna.cpp @@ -3106,9 +3106,10 @@ void daMidna_c::setMidnaNoDrawFlg() { BOOL daMidna_c::checkMetamorphoseEnableBase() { BOOL tmp; - if (!daAlink_getAlinkActorClass()->checkMidnaRide() || (g_env_light.mEvilInitialized & 0x80) || + if (((!daAlink_getAlinkActorClass()->checkMidnaRide() || (g_env_light.mEvilInitialized & 0x80) || /* dSv_event_flag_c::M_077 - Main Event - Get shadow crystal (can now transform) */ - !dComIfGs_isEventBit(0xD04) || + !dComIfGs_isEventBit(0xD04)) && + !dusk::getSettings().game.transformWithoutShadowCrystal) || #if TARGET_PC (fopAcIt_Judge((fopAcIt_JudgeFunc)daMidna_searchNpc, &tmp) && !dusk::getSettings().game.canTransformAnywhere) diff --git a/src/dusk/settings.cpp b/src/dusk/settings.cpp index dbe27db8aa..3a18077e0a 100644 --- a/src/dusk/settings.cpp +++ b/src/dusk/settings.cpp @@ -108,6 +108,7 @@ UserSettings g_userSettings = { .fastSpinner {"game.fastSpinner", false}, .freeMagicArmor {"game.freeMagicArmor", false}, .invincibleEnemies {"game.invincibleEnemies", false}, + .transformWithoutShadowCrystal {"game.transformWithoutShadowCrystal", false}, // Technical .restoreWiiGlitches {"game.restoreWiiGlitches", false}, @@ -191,6 +192,7 @@ void registerSettings() { // Game Register(g_userSettings.game.language); Register(g_userSettings.game.enableQuickTransform); + Register(g_userSettings.game.transformWithoutShadowCrystal); Register(g_userSettings.game.hideTvSettingsScreen); Register(g_userSettings.game.biggerWallets); Register(g_userSettings.game.noReturnRupees); diff --git a/src/dusk/ui/settings.cpp b/src/dusk/ui/settings.cpp index c54b3784be..13b1729789 100644 --- a/src/dusk/ui/settings.cpp +++ b/src/dusk/ui/settings.cpp @@ -1177,6 +1177,8 @@ SettingsWindow::SettingsWindow(bool prelaunch) : mPrelaunch(prelaunch) { "Lets the magic armor work without consuming rupees."); addCheat("Invincible Enemies", getSettings().game.invincibleEnemies, "Prevents enemies from taking damage."); + addCheat("Transform without Shadow Crystal", getSettings().game.transformWithoutShadowCrystal, + "Allows Link to transform without the Shadow Crystal (Only using Quick Transform.)"); }); add_tab("Interface", [this](Rml::Element* content) {