move speed modifier settings to cheats (#6277)

Combine into one speed modifier. Refactor config migrations. Add v6
This commit is contained in:
Philip Dubé
2026-03-02 18:26:37 +00:00
committed by GitHub
parent 6f01d68c3c
commit 2a335b1cd8
9 changed files with 1514 additions and 1663 deletions
@@ -344,8 +344,7 @@ void Player_Action_80850E84(Player* this, PlayState* play);
void Player_Action_CsAction(Player* this, PlayState* play);
#pragma region[SoH]
u8 gWalkSpeedToggle1;
u8 gWalkSpeedToggle2;
u8 gWalkSpeedToggle;
s32 spawn_boomerang_ivan(EnPartner* this, PlayState* play) {
if (!CVarGetInteger(CVAR_ENHANCEMENT("IvanCoopModeEnabled"), 0)) {
@@ -7138,22 +7137,17 @@ void func_8083DFE0(Player* this, f32* arg1, s16* arg2) {
maxSpeed *= 1.5f;
}
if (CVarGetInteger(CVAR_SETTING("WalkModifier.Enabled"), 0) &&
!CVarGetInteger(CVAR_SETTING("WalkModifier.DoesntChangeJump"), 0)) {
if (CVarGetInteger(CVAR_SETTING("WalkModifier.SpeedToggle"), 0)) {
if (gWalkSpeedToggle1) {
maxSpeed *= CVarGetFloat(CVAR_SETTING("WalkModifier.Mapping1"), 1.0f);
} else if (gWalkSpeedToggle2) {
maxSpeed *= CVarGetFloat(CVAR_SETTING("WalkModifier.Mapping2"), 1.0f);
if (CVarGetFloat(CVAR_CHEAT("SpeedModifier.Value"), 1.0f) != 1.0f &&
!CVarGetInteger(CVAR_CHEAT("SpeedModifier.DoesntChangeJump"), 0)) {
if (CVarGetInteger(CVAR_CHEAT("SpeedModifier.SpeedToggle"), 0)) {
if (gWalkSpeedToggle) {
maxSpeed *= CVarGetFloat(CVAR_CHEAT("SpeedModifier.Mapping"), 1.0f);
}
} else {
const s32 mod1Mask = CVarGetInteger(CVAR_SETTING("WalkModifier.Mod1Btn"), BTN_CUSTOM_MODIFIER1);
const s32 mod2Mask = CVarGetInteger(CVAR_SETTING("WalkModifier.Mod2Btn"), BTN_CUSTOM_MODIFIER2);
const s32 mod1Mask = CVarGetInteger(CVAR_CHEAT("SpeedModifier.Btn"), BTN_CUSTOM_MODIFIER1);
if (mod1Mask != 0 && CHECK_BTN_ALL(sControlInput->cur.button, mod1Mask)) {
maxSpeed *= CVarGetFloat(CVAR_SETTING("WalkModifier.Mapping1"), 1.0f);
} else if (mod2Mask != 0 && CHECK_BTN_ALL(sControlInput->cur.button, mod2Mask)) {
maxSpeed *= CVarGetFloat(CVAR_SETTING("WalkModifier.Mapping2"), 1.0f);
maxSpeed *= CVarGetFloat(CVAR_CHEAT("SpeedModifier.Value"), 1.0f);
}
}
}
@@ -8889,21 +8883,16 @@ void Player_Action_80842180(Player* this, PlayState* play) {
sp2C *= 1.5f;
}
if (CVarGetInteger(CVAR_SETTING("WalkModifier.Enabled"), 0)) {
if (CVarGetInteger(CVAR_SETTING("WalkModifier.SpeedToggle"), 0)) {
if (gWalkSpeedToggle1) {
sp2C *= CVarGetFloat(CVAR_SETTING("WalkModifier.Mapping1"), 1.0f);
} else if (gWalkSpeedToggle2) {
sp2C *= CVarGetFloat(CVAR_SETTING("WalkModifier.Mapping2"), 1.0f);
if (CVarGetFloat(CVAR_CHEAT("SpeedModifier.Value"), 1.0f) != 1.0f) {
if (CVarGetInteger(CVAR_CHEAT("SpeedModifier.SpeedToggle"), 0)) {
if (gWalkSpeedToggle) {
sp2C *= CVarGetFloat(CVAR_CHEAT("SpeedModifier.Value"), 1.0f);
}
} else {
const s32 mod1Mask = CVarGetInteger(CVAR_SETTING("WalkModifier.Mod1Btn"), BTN_CUSTOM_MODIFIER1);
const s32 mod2Mask = CVarGetInteger(CVAR_SETTING("WalkModifier.Mod2Btn"), BTN_CUSTOM_MODIFIER2);
const s32 mod1Mask = CVarGetInteger(CVAR_CHEAT("SpeedModifier.Btn"), BTN_CUSTOM_MODIFIER1);
if (mod1Mask != 0 && CHECK_BTN_ALL(sControlInput->cur.button, mod1Mask)) {
sp2C *= CVarGetFloat(CVAR_SETTING("WalkModifier.Mapping1"), 1.0f);
} else if (mod2Mask != 0 && CHECK_BTN_ALL(sControlInput->cur.button, mod2Mask)) {
sp2C *= CVarGetFloat(CVAR_SETTING("WalkModifier.Mapping2"), 1.0f);
sp2C *= CVarGetFloat(CVAR_CHEAT("SpeedModifier.Value"), 1.0f);
}
}
}
@@ -12317,18 +12306,13 @@ void Player_Update(Actor* thisx, PlayState* play) {
}
}
if (CVarGetInteger(CVAR_SETTING("WalkModifier.Enabled"), 0) &&
CVarGetInteger(CVAR_SETTING("WalkModifier.SpeedToggle"), 0)) {
const s32 mod1Mask = CVarGetInteger(CVAR_SETTING("WalkModifier.Mod1Btn"), BTN_CUSTOM_MODIFIER1);
const s32 mod2Mask = CVarGetInteger(CVAR_SETTING("WalkModifier.Mod2Btn"), BTN_CUSTOM_MODIFIER2);
if (CVarGetInteger(CVAR_CHEAT("SpeedModifier.Value"), 1.0f) != 1.0f &&
CVarGetInteger(CVAR_CHEAT("SpeedModifier.SpeedToggle"), 0)) {
const s32 mod1Mask = CVarGetInteger(CVAR_CHEAT("SpeedModifier.Btn"), BTN_CUSTOM_MODIFIER1);
if (mod1Mask != 0 && CHECK_BTN_ALL(sControlInput->cur.button, mod1Mask) &&
CHECK_BTN_ANY(sControlInput->press.button, mod1Mask)) {
gWalkSpeedToggle1 = !gWalkSpeedToggle1;
}
if (mod2Mask != 0 && CHECK_BTN_ALL(sControlInput->cur.button, mod2Mask) &&
CHECK_BTN_ANY(sControlInput->press.button, mod2Mask)) {
gWalkSpeedToggle2 = !gWalkSpeedToggle2;
gWalkSpeedToggle = !gWalkSpeedToggle;
}
}
@@ -12784,23 +12768,18 @@ void func_8084AEEC(Player* this, f32* arg1, f32 arg2, s16 arg3) {
// #region SOH [Enhancement]
f32 swimMod = 1.0f;
if (CVarGetInteger(CVAR_SETTING("WalkModifier.Enabled"), 0) == 1) {
if (CVarGetInteger(CVAR_SETTING("WalkModifier.SpeedToggle"), 0) == 1) {
if (gWalkSpeedToggle1) {
swimMod *= CVarGetFloat(CVAR_SETTING("WalkModifier.SwimMapping1"), 1.0f);
} else if (gWalkSpeedToggle2) {
swimMod *= CVarGetFloat(CVAR_SETTING("WalkModifier.SwimMapping2"), 1.0f);
if (CVarGetFloat(CVAR_CHEAT("SpeedModifier.Value"), 1.0f) != 1.0f) {
if (CVarGetInteger(CVAR_CHEAT("SpeedModifier.SpeedToggle"), 0) == 1) {
if (gWalkSpeedToggle) {
swimMod *= CVarGetFloat(CVAR_CHEAT("SpeedModifier.Value"), 1.0f);
}
// sControlInput is NULL to prevent inputs while surfacing after obtaining an underwater item so we want to
// ignore it for that case
} else if (sControlInput != NULL) {
const s32 mod1Mask = CVarGetInteger(CVAR_SETTING("WalkModifier.Mod1Btn"), BTN_CUSTOM_MODIFIER1);
const s32 mod2Mask = CVarGetInteger(CVAR_SETTING("WalkModifier.Mod2Btn"), BTN_CUSTOM_MODIFIER2);
const s32 mod1Mask = CVarGetInteger(CVAR_CHEAT("SpeedModifier.Btn"), BTN_CUSTOM_MODIFIER1);
if (mod1Mask != 0 && CHECK_BTN_ALL(sControlInput->cur.button, mod1Mask)) {
swimMod *= CVarGetFloat(CVAR_SETTING("WalkModifier.SwimMapping1"), 1.0f);
} else if (mod2Mask != 0 && CHECK_BTN_ALL(sControlInput->cur.button, mod2Mask)) {
swimMod *= CVarGetFloat(CVAR_SETTING("WalkModifier.SwimMapping2"), 1.0f);
swimMod *= CVarGetFloat(CVAR_CHEAT("SpeedModifier.Value"), 1.0f);
}
}
temp1 = this->skelAnime.curFrame - 10.0f;
@@ -14048,7 +14027,7 @@ void func_8084DBC4(PlayState* play, Player* this, f32 arg2) {
func_8084AEEC(this, &this->linearVelocity, sp2C * 0.5f, sp2A);
// Original implementation of func_8084AEEC (SurfaceWithoutSwimMod) to prevent velocity increases via swim mod which
// push Link into the air #region SOH [Enhancement]
if (CVarGetInteger(CVAR_SETTING("WalkModifier.Enabled"), 0)) {
if (CVarGetFloat(CVAR_CHEAT("SpeedModifier.Value"), 1.0f) != 1.0f) {
SurfaceWithoutSwimMod(this, &this->actor.velocity.y, arg2, this->yaw);
// #endregion
} else {
@@ -13,8 +13,7 @@ void Opening_SetupTitleScreen(OpeningContext* this) {
this->state.running = false;
gSaveContext.linkAge = 0;
gSaveContext.fileNum = 0xFF;
gWalkSpeedToggle1 = 0;
gWalkSpeedToggle2 = 0;
gWalkSpeedToggle = 0;
Sram_InitDebugSave();
gSaveContext.cutsceneIndex = 0xFFF3;
gSaveContext.sceneSetupIndex = 7;