Skip to content

Commit 3b86080

Browse files
committed
Wrap around from highest to lowest speed with "V" key
Fixes Return-To-The-Roots#1828 after regression in Return-To-The-Roots#1829
1 parent af28636 commit 3b86080

File tree

3 files changed

+35
-36
lines changed

3 files changed

+35
-36
lines changed

libs/s25main/desktops/dskGameInterface.cpp

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -748,58 +748,55 @@ bool dskGameInterface::Msg_RightUp(const MouseCoords& /*mc*/) //-V524
748748
return false;
749749
}
750750

751-
/**
752-
* Druck von Spezialtasten auswerten.
753-
*/
754751
bool dskGameInterface::Msg_KeyDown(const KeyEvent& ke)
755752
{
756753
cheatCommandTracker_.onKeyEvent(ke);
757754

758755
switch(ke.kt)
759756
{
760757
default: break;
761-
case KeyType::Return: // Chatfenster öffnen
758+
case KeyType::Return: // Open chat
762759
WINDOWMANAGER.Show(std::make_unique<iwChat>(this));
763760
return true;
764761

765-
case KeyType::Space: // Bauqualitäten anzeigen
762+
case KeyType::Space: // Show / hide construction aid
766763
gwv.ToggleShowBQ();
767764
return true;
768765

769-
case KeyType::Left: // Nach Links Scrollen
766+
case KeyType::Left: // Scroll left
770767
gwv.MoveBy({-30, 0});
771768
return true;
772-
case KeyType::Right: // Nach Rechts Scrollen
769+
case KeyType::Right: // Scroll right
773770
gwv.MoveBy({30, 0});
774771
return true;
775-
case KeyType::Up: // Nach Oben Scrollen
772+
case KeyType::Up: // Scroll up
776773
gwv.MoveBy({0, -30});
777774
return true;
778-
case KeyType::Down: // Nach Unten Scrollen
775+
case KeyType::Down: // Scroll down
779776
gwv.MoveBy({0, 30});
780777
return true;
781778

782-
case KeyType::F2: // Spiel speichern
779+
case KeyType::F2: // Open save game window
783780
WINDOWMANAGER.ToggleWindow(std::make_unique<iwSave>());
784781
return true;
785-
case KeyType::F3: // Map debug window/ Multiplayer coordinates
782+
case KeyType::F3: // Map debug window
786783
{
787784
const bool replayMode = GAMECLIENT.IsReplayModeOn();
788785
if(replayMode)
789786
DisableFoW(true);
790787
WINDOWMANAGER.ToggleWindow(std::make_unique<iwMapDebug>(gwv, game_->world_.IsSinglePlayer() || replayMode));
791788
return true;
792789
}
793-
case KeyType::F8: // Tastaturbelegung
790+
case KeyType::F8:
794791
WINDOWMANAGER.ToggleWindow(std::make_unique<iwTextfile>("keyboardlayout.txt", _("Keyboard layout")));
795792
return true;
796-
case KeyType::F9: // Readme
793+
case KeyType::F9:
797794
WINDOWMANAGER.ToggleWindow(std::make_unique<iwTextfile>("readme.txt", _("Readme!")));
798795
return true;
799796
case KeyType::F11: // Music player (midi files)
800797
WINDOWMANAGER.ToggleWindow(std::make_unique<iwMusicPlayer>());
801798
return true;
802-
case KeyType::F12: // Optionsfenster
799+
case KeyType::F12: // Ingame options
803800
WINDOWMANAGER.ToggleWindow(std::make_unique<iwOptionsWindow>(gwv.GetSoundMgr()));
804801
return true;
805802
}
@@ -815,9 +812,10 @@ bool dskGameInterface::Msg_KeyDown(const KeyEvent& ke)
815812
GAMECLIENT.DecreaseSpeed();
816813
return true;
817814

815+
// Switch to specific player
818816
case '1':
819817
case '2':
820-
case '3': // Spieler umschalten
818+
case '3':
821819
case '4':
822820
case '5':
823821
case '6':
@@ -832,7 +830,7 @@ bool dskGameInterface::Msg_KeyDown(const KeyEvent& ke)
832830
RTTR_Assert(worldViewer.GetPlayerId() == oldPlayerId || worldViewer.GetPlayerId() == playerIdx);
833831
} else if(playerIdx < worldViewer.GetWorld().GetNumPlayers())
834832
{
835-
// On mutiplayer this currently asyncs, but as this is a debug feature anyway just disable it there.
833+
// On multiplayer this currently asyncs, but as this is a debug feature anyway just disable it.
836834
// If this should be enabled again, look into the handling/clearing of accumulated GCs
837835
if(game_->world_.IsSinglePlayer())
838836
{
@@ -844,64 +842,62 @@ bool dskGameInterface::Msg_KeyDown(const KeyEvent& ke)
844842
return true;
845843
}
846844

847-
case 'b': // Zur lezten Position zurückspringen
848-
gwv.MoveToLastPosition();
849-
return true;
845+
case 'b': gwv.MoveToLastPosition(); return true;
850846
case 'v':
851847
if(game_->world_.IsSinglePlayer())
852-
GAMECLIENT.IncreaseSpeed();
848+
GAMECLIENT.IncreaseSpeed(true);
853849
return true;
854-
case 'c': // Gebäudenamen anzeigen
850+
case 'c': // Show/hide building names
855851
gwv.ToggleShowNames();
856852
return true;
857-
case 'd': // Replay: FoW an/ausschalten
853+
case 'd': // Enable/Disable fog of war (in replay mode)
858854
ToggleFoW();
859855
return true;
860-
case 'h': // Zum HQ springen
856+
case 'h': // Go to HQ
861857
{
862858
const GamePlayer& player = worldViewer.GetPlayer();
863-
// Prüfen, ob dieses überhaupt noch existiert
859+
// HQ might not exist anymore
864860
if(player.GetHQPos().isValid())
865861
gwv.MoveToMapPt(player.GetHQPos());
866862
}
867863
return true;
868864
case 'i': // Show inventory
869865
WINDOWMANAGER.ToggleWindow(std::make_unique<iwInventory>(worldViewer.GetPlayer()));
870866
return true;
871-
case 'j': // GFs überspringen
867+
case 'j': // Skip GFs (fast forward)
872868
if(game_->world_.IsSinglePlayer() || GAMECLIENT.IsReplayModeOn())
873869
WINDOWMANAGER.ToggleWindow(std::make_unique<iwSkipGFs>(gwv));
874870
return true;
875-
case 'l': // Minimap anzeigen
871+
case 'l': // Show minimap
876872
WINDOWMANAGER.ToggleWindow(std::make_unique<iwMinimap>(minimap, gwv));
877873
return true;
878-
case 'm': // Hauptauswahl
874+
case 'm': // Show main menu
879875
WINDOWMANAGER.ToggleWindow(std::make_unique<iwMainMenu>(gwv, GAMECLIENT));
880876
return true;
881-
case 'n': // Show Post window
877+
case 'n': // Show post window
882878
WINDOWMANAGER.ToggleWindow(std::make_unique<iwPostWindow>(gwv, GetPostBox()));
883879
UpdatePostIcon(GetPostBox().GetNumMsgs(), false);
884880
return true;
885881
case 'p': // Pause
886882
GAMECLIENT.TogglePause();
887883
return true;
888-
case 'q': // Spiel verlassen
884+
case 'q': // Quit game (dialog)
889885
if(ke.alt)
890886
WINDOWMANAGER.ToggleWindow(std::make_unique<iwEndgame>());
891887
return true;
892-
case 's': // Produktivität anzeigen
888+
case 's': // Show/hide productivity overlay
893889
gwv.ToggleShowProductivity();
894890
return true;
895891
case 26: // ctrl+z
896892
gwv.SetZoomFactor(ZOOM_FACTORS[ZOOM_DEFAULT_INDEX]);
897893
return true;
898-
case 'z': // zoom
899-
if(ke.ctrl)
894+
case 'z': // zoom in
895+
if(ke.ctrl) // Reset zoom
900896
gwv.SetZoomFactor(ZOOM_FACTORS[ZOOM_DEFAULT_INDEX]);
901897
else
902898
gwv.SetZoomFactor(getNextZoomLevel(gwv.GetCurrentTargetZoomFactor()));
903899
return true;
904-
case 'Z': // shift-z, reverse zoom
900+
case 'Z': // shift-z, zoom out
905901
gwv.SetZoomFactor(getPreviousZoomLevel(gwv.GetCurrentTargetZoomFactor()));
906902
return true;
907903
}

libs/s25main/network/GameClient.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,7 +1162,7 @@ bool GameClient::OnGameMessage(const GameMessage_GameCommand& msg)
11621162
return true;
11631163
}
11641164

1165-
void GameClient::IncreaseSpeed()
1165+
void GameClient::IncreaseSpeed(const bool wraparound)
11661166
{
11671167
static_assert(MIN_SPEED >= SPEED_GF_LENGTHS[GameSpeed::VeryFast], "Not all speeds reachable");
11681168
const bool debugMode =
@@ -1172,14 +1172,17 @@ void GameClient::IncreaseSpeed()
11721172
false;
11731173
#endif
11741174
const auto oldSpeed = framesinfo.gfLengthReq;
1175+
// Note: Higher speed = lower gf_length value
11751176
// Go from debug speed directly back to min speed, else in fixed steps
11761177
static_assert(MIN_SPEED_DEBUG > MIN_SPEED);
11771178
if(framesinfo.gfLengthReq == MIN_SPEED_DEBUG)
11781179
framesinfo.gfLengthReq = MIN_SPEED;
11791180
else if(framesinfo.gfLengthReq >= MAX_SPEED + SPEED_STEP)
11801181
framesinfo.gfLengthReq -= SPEED_STEP;
1181-
else if((replayMode || debugMode))
1182+
else if((replayMode || debugMode) && framesinfo.gfLengthReq > MAX_SPEED_DEBUG) // 1 more step in debug/replay mode
11821183
framesinfo.gfLengthReq = MAX_SPEED_DEBUG;
1184+
else if(wraparound) // Highest speed, wrap around to slowest if requested
1185+
framesinfo.gfLengthReq = MIN_SPEED;
11831186

11841187
if(replayMode)
11851188
framesinfo.gf_length = framesinfo.gfLengthReq;

libs/s25main/network/GameClient.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class GameClient final :
128128
/// And a 2nd time when the GUI is ready which actually starty the game
129129
void OnGameStart();
130130

131-
void IncreaseSpeed();
131+
void IncreaseSpeed(bool wraparound = false);
132132
void DecreaseSpeed();
133133

134134
/// Lädt ein Replay und startet dementsprechend das Spiel

0 commit comments

Comments
 (0)