Skip to content

Commit f1100ab

Browse files
authored
Fixed cappy toggle balls
1 parent e6bf570 commit f1100ab

1 file changed

Lines changed: 44 additions & 26 deletions

File tree

source/states/TwistsConfig.cpp

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ void TwistsConfig::toggleCappyDisable() {
2929
sCappyForceEnabled = !sCappyForceEnabled;
3030
}
3131

32+
static bool weDisabledCappy = false;
33+
3234
void TwistsConfig::updateCappyProximity(PlayerActorHakoniwa* player, StageScene* stageScene) {
3335
if (!player || !stageScene) return;
3436

@@ -37,45 +39,61 @@ void TwistsConfig::updateCappyProximity(PlayerActorHakoniwa* player, StageScene*
3739

3840
GameDataHolderWriter writer;
3941
writer.mData = stageScene->mHolder.mData;
40-
41-
if (sCappyForceEnabled) {
42-
// Forced toggle ON — force enable Cappy
43-
writer.mData->mGameDataFile->mIsEnableCap = true;
44-
cappyDisabled = false;
45-
Logger::log("Cappy forced enabled by toggle\n");
46-
return;
47-
}
48-
49-
// Forced toggle OFF — fallback to normal proximity logic
42+
5043
GameDataHolderAccessor accessor(stageScene);
51-
bool isCappyEnabled = GameDataFunction::isEnableCap(accessor);
44+
bool isCappyCurrentlyEnabled = GameDataFunction::isEnableCap(accessor);
45+
5246
ShineTowerRocket* odyssey = rs::tryGetShineTowerRocketFromDemoDirector((al::LiveActor*)playerBase);
5347

54-
if (!odyssey) {
55-
if (isCappyEnabled) {
48+
if (!sCappyForceEnabled) {
49+
// Toggle is OFF - use normal proximity logic
50+
if (!odyssey) {
51+
if (isCappyCurrentlyEnabled) {
52+
writer.mData->mGameDataFile->mIsEnableCap = false;
53+
cappyDisabled = true;
54+
weDisabledCappy = true;
55+
Logger::log("Cappy disabled - no Odyssey\n");
56+
}
57+
return;
58+
}
59+
60+
f32 distance = al::calcDistance((al::LiveActor*)player, (al::LiveActor*)odyssey);
61+
bool shouldEnable = (distance <= cappyThreshold);
62+
63+
if (shouldEnable && !isCappyCurrentlyEnabled) {
64+
writer.mData->mGameDataFile->mIsEnableCap = true;
65+
cappyDisabled = false;
66+
weDisabledCappy = false;
67+
Logger::log("Cappy enabled - near Odyssey (%.1f)\n", distance);
68+
} else if (!shouldEnable && isCappyCurrentlyEnabled) {
5669
writer.mData->mGameDataFile->mIsEnableCap = false;
5770
cappyDisabled = true;
58-
Logger::log("Cappy disabled - no Odyssey\n");
71+
weDisabledCappy = true;
72+
Logger::log("Cappy disabled - far from Odyssey (%.1f)\n", distance);
5973
}
6074
return;
6175
}
6276

63-
f32 distance = al::calcDistance((al::LiveActor*)player, (al::LiveActor*)odyssey);
64-
bool shouldEnable = (distance <= cappyThreshold);
65-
66-
if (shouldEnable && !isCappyEnabled) {
67-
writer.mData->mGameDataFile->mIsEnableCap = true;
68-
cappyDisabled = false;
69-
Logger::log("Cappy enabled - near Odyssey (%.1f)\n", distance);
70-
} else if (!shouldEnable && isCappyEnabled) {
71-
writer.mData->mGameDataFile->mIsEnableCap = false;
72-
cappyDisabled = true;
73-
Logger::log("Cappy disabled - far from Odyssey (%.1f)\n", distance);
77+
// Toggle is ON - force enable, but only if we're not in a naturally capless area
78+
79+
if (!isCappyCurrentlyEnabled) {
80+
// Cappy is disabled. Was it us who disabled it, or the game naturally?
81+
if (weDisabledCappy || cappyDisabled) {
82+
// We disabled it due to proximity, safe to re-enable
83+
writer.mData->mGameDataFile->mIsEnableCap = true;
84+
cappyDisabled = false;
85+
weDisabledCappy = false;
86+
Logger::log("Cappy forced enabled by toggle\n");
87+
} else {
88+
// Game naturally disabled it (capless area), don't override
89+
Logger::log("Cappy remains disabled - naturally disabled by game\n");
90+
}
7491
}
92+
// If Cappy is already enabled, no need to do anything
7593
}
7694

7795
void TwistsConfig::handleStageInit() {
7896
cappyDisabled = false; // Changed: Cappy starts enabled
7997
needsCappyDisable = false; // Changed: We don't need to disable it
8098
Logger::log("Stage init: Cappy will be enabled\n"); // Updated log message
81-
}
99+
}

0 commit comments

Comments
 (0)