Skip to content

Commit

Permalink
Rewind to the tick before previous assignment
Browse files Browse the repository at this point in the history
Rename "Replay" options to "Game Controls".
  • Loading branch information
SimonN committed Feb 18, 2024
1 parent 3a228e1 commit f76d73f
Show file tree
Hide file tree
Showing 16 changed files with 190 additions and 154 deletions.
Binary file added data/images/rewindprevply/1.5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/images/rewindprevply/1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/images/rewindprevply/2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 10 additions & 8 deletions data/transl/catalan.txt
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,10 @@ $gameShowSplatRuler Mostra el regle d'esclafades.
$gameHighlightGoals Ressalta els teus propis caus i objectius.
$gameStateSave Desa la posició ràpidament.
$gameStateLoad Carrrega ràpidament una posició.
$gameShowTweaker Mostra l'ajustador de repeticions
$gameFramestepBack %s per fer un pas enrere, %s per saltar enrere.
$gameFramestepAhead %s per fer un pas endavant, %s per saltar endavant.
$gameShowTweaker Mostra l'ajustador de repeticions.
$gameRewindPrevPly Rebobina l'habilitat més recent.
$gameRewindOneTick %s per fer un pas enrere, %s per saltar enrere.
$gameSkipOneTick %s per fer un pas endavant, %s per saltar endavant.
$gameFastForward %s per avançar ràpidament, %s per a avanç turbo.
$gameRestart Reiniciar el nivell.
$gameNuke Bomba nuclear. Fes doble clic per activar-la.
Expand Down Expand Up @@ -317,7 +318,7 @@ $optionTitle Opcions|Va al menú d'opcions des del menú principal.
$optionGroupGeneral General
$optionGroupGraphics Gràfics
$optionGroupControls Controls
$optionGroupReplay Repetitió
$optionGroupGameControls Controls del joc
$optionGroupGameKeys Tecles del joc
$optionGroupEditorKeys Tecles de l'editor
$optionGroupMenuKeys Tecles del menú
Expand Down Expand Up @@ -367,10 +368,11 @@ $optionInsertAssignments Insertar habilitats|After ◀▮, assigning skills pres
$optionKeyForceLeft Forçar l'esquerra|Mantenir per assignar habilitats als lix encarats a l'esquerra.|És útil en un manat dens de lix.
$optionKeyForceRight Forçar la dreta|Mantenir per assignar habilitats als lix encarats a la dreta.|És útil en un manat dens de lix.
$optionKeyPause Pausar|Pausar el joc.|Pots escollir si assignar habilitats hauria de despausar o no, veure avall.
$optionKeyFrameBackMany ◀▮ 1 segon.|Rebobina el joc 1 segon.
$optionKeyFrameBackOne ◀▮ 1 fotograma|Rebobina el joc 1 fotograma, és a dir, ¹⁄₁₅ de segon.
$optionKeyFrameAheadOne ▮▶ 1 fotograma|Avança el joc 1 fotograma, és a dir, ¹⁄₁₅ de segon.
$optionKeyFrameAheadMany ▮▶ 10 segons|Avança el joc 10 segons.
$optionKeyRewindPrevPly ⬚◀◀|Rebobina l'habilitat més recent.|Then, click air to erase the assignment, or unpause to replay it.
$optionKeyRewindOneSecond ◀▮ 1 segon.|Rebobina el joc 1 segon.
$optionKeyRewindOneTick ◀▮ 1 fotograma|Rebobina el joc 1 tick, és a dir, ¹⁄₁₅ de segon.
$optionKeySkipOneTick ▮▶ 1 fotograma|Avança el joc 1 tick, és a dir, ¹⁄₁₅ de segon.
$optionKeySkipTenSeconds ▮▶ 10 segons|Avança el joc 10 segons.
$optionKeySpeedFast ▶▶|Activa l'avanç ràpid.|L'avanç ràpid és 4 vegades més ràpid que la velocitat normal.
$optionKeySpeedTurbo ▶▶▶|Activa l'avanç turbo|L'avanç turbo és 36 vegades més ràpid que la velocitat normal.
$optionKeyRestart Reiniciar|Reinicia el nivell des del començament. Totes les accions es repetiran.|Per interrompre la repetició, fes clic a l'aire.
Expand Down
16 changes: 9 additions & 7 deletions data/transl/english.txt
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,9 @@ $gameHighlightGoals Highlight own hatches and goals.
$gameStateSave Quicksave game position.
$gameStateLoad Load quicksaved position.
$gameShowTweaker Show replay tweaker.
$gameFramestepBack %s to step back, %s to jump back.
$gameFramestepAhead %s to step ahead, %s to jump ahead.
$gameRewindPrevPly Rewind your previous skill assignment.
$gameRewindOneTick %s to rewind 1 tick, %s to rewind 1 second.
$gameSkipOneTick %s to advance 1 tick, %s to skip 10 seconds.
$gameFastForward %s for fast-forward, %s for turbo.
$gameRestart Restart level.
$gameNuke Nuke. Double-click to activate.
Expand Down Expand Up @@ -315,7 +316,7 @@ $optionTitle Options|From the main menu, go to the options menu.
$optionGroupGeneral General
$optionGroupGraphics Graphics
$optionGroupControls Controls
$optionGroupReplay Replay
$optionGroupGameControls Game Controls
$optionGroupGameKeys Game Keys
$optionGroupEditorKeys Editor Keys
$optionGroupMenuKeys Menu Keys
Expand Down Expand Up @@ -365,10 +366,11 @@ $optionInsertAssignments Insert Assignments|After ◀▮, assigning skills prese
$optionKeyForceLeft Force left|Hold to assign skills to lix facing left.|This is useful in a dense bunch of lix.
$optionKeyForceRight Force right|Hold to assign skills to lix facing right.|This is useful in a dense bunch of lix.
$optionKeyPause Pause|Pause the game.|You can choose whether skill assignments should unpause, see below.
$optionKeyFrameBackMany ◀▮ 1 sec.|Rewind the game by 1 second.
$optionKeyFrameBackOne ◀▮ 1 frame|Rewind the game by 1 frame, i.e., by ¹⁄₁₅ of a second.
$optionKeyFrameAheadOne ▮▶ 1 frame|Advance the game by 1 frame, i.e., by ¹⁄₁₅ of a second.
$optionKeyFrameAheadMany ▮▶ 10 sec.|Advance the game by 10 seconds.
$optionKeyRewindPrevPly ⬚◀◀|Rewind your most recent skill assignment.|Then, click air to erase the assignment, or unpause to replay it.
$optionKeyRewindOneSecond ◀▮ 1 Sec.|Rewind the game by 1 second.
$optionKeyRewindOneTick ◀▮ 1 Tick|Rewind the game by 1 tick, i.e., by ¹⁄₁₅ of a second.
$optionKeySkipOneTick ▮▶ 1 Tick|Advance the game by 1 tick, i.e., by ¹⁄₁₅ of a second.
$optionKeySkipTenSeconds ▮▶ 10 Sec.|Advance the game by 10 seconds.
$optionKeySpeedFast ▶▶|Toggle fast-forward.|Fast-forward is 4 times faster than normal speed.
$optionKeySpeedTurbo ▶▶▶|Toggle turbo-fast-forward.|Turbo-fast-forward is 36 times faster than normal speed.
$optionKeyRestart Restart|Restart the level from the beginning. All your actions will replay.|To interrupt the replay, click into the air.
Expand Down
16 changes: 9 additions & 7 deletions data/transl/german.txt
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,9 @@ $gameHighlightGoals Eigene Klappen und Ziele hervorheben.
$gameStateSave Spielstand schnellspeichern.
$gameStateLoad Schnellgespeicherten Spielstand laden.
$gameShowTweaker Replay-Justierer anzeigen.
$gameFramestepBack %s für Schritt zurück, %s für Sprung zurück.
$gameFramestepAhead %s für Schritt vorwärts, %s für Sprung vorwärts.
$gameRewindPrevPly Deine letzte Fähigkeitszuweisung zurückspulen.
$gameRewindOneTick %s spult 1 Tick zurück, %s spult 1 Sekunde zurück.
$gameSkipOneTick %s geht 1 Tick vor, %s springt 10 Sekunden vor.
$gameFastForward %s für schnellen Vorlauf, %s für Turbo.
$gameRestart Level neu starten.
$gameNuke Atombombe. Aktiviere per Doppelklick.
Expand Down Expand Up @@ -304,7 +305,7 @@ $optionTitle Optionen|Vom Hauptmenü das Optionsmenü aufrufen.
$optionGroupGeneral Allgemein
$optionGroupGraphics Grafik
$optionGroupControls Steuerung
$optionGroupReplay Replay
$optionGroupGameControls Spielsteuerung
$optionGroupGameKeys Spieltasten
$optionGroupEditorKeys Editortasten
$optionGroupMenuKeys Menütasten
Expand Down Expand Up @@ -357,10 +358,11 @@ $optionInsertAssignments Zuweisungen einfügen|Nach ◀▮ belassen neue Zuweisu
$optionKeyForceLeft Nur links|Halte gedrückt, um Fähigkeiten an Linksläufer zuzuweisen.|Das ist nützlich in dichten Ansammlungen von Lix.
$optionKeyForceRight Nur rechts|Halte gedrückt, um Fähigkeiten an Rechtsläufer zuzuweisen.|Das ist nützlich in dichten Ansammlungen von Lix.
$optionKeyPause Pause|Das Spiel pausieren.|Du kannst unten bestimmen, ob Fähigkeitszuweisungen die Pause beenden.
$optionKeyFrameBackMany ◀▮ 1 Sek.|Das Spiel um 1 Sekunde zurückspulen.
$optionKeyFrameBackOne ◀▮ 1 Bild|Das Spiel um 1 Physik-Update zurückspulen, also um ¹⁄₁₅ einer Sekunde.
$optionKeyFrameAheadOne ▮▶ 1 Bild|Das Spiel um 1 Physik-Update vorspulen, also um ¹⁄₁₅ einer Sekunde.
$optionKeyFrameAheadMany ▮▶ 10 Sek.|Das Spiel um 10 Sekunden vorspulen.
$optionKeyRewindPrevPly ⬚◀◀|Deine letzte Fähigkeitszuweisung zurückspulen.|Klicke anschließend in die Luft, um die Zuweisung zu löschen.
$optionKeyRewindOneSecond ◀▮ 1 Sek.|Das Spiel um 1 Sekunde zurückspulen.
$optionKeyRewindOneTick ◀▮ 1 Tick|Das Spiel um 1 Physik-Update zurückspulen, also um ¹⁄₁₅ einer Sekunde.
$optionKeySkipOneTick ▮▶ 1 Tick|Das Spiel um 1 Physik-Update vorspulen, also um ¹⁄₁₅ einer Sekunde.
$optionKeySkipTenSeconds ▮▶ 10 Sek.|Das Spiel um 10 Sekunden vorspulen.
$optionKeySpeedFast ▶▶|Schnellen Vorlauf an- und ausschalten.|Schneller Vorlauf ist 4-mal so schnell wie normales Spiel.
$optionKeySpeedTurbo ▶▶▶|Turbo-Vorlauf an- und ausschalten.|Turbo-Vorlauf ist 36-mal so schnell wie normales Spiel.
$optionKeyRestart Neustart|Den Level komplett von vorne starten, mit Replay deiner Aktionen.|Um das Replay abzubrechen, klicke in die Luft.
Expand Down
18 changes: 10 additions & 8 deletions data/transl/swedish.txt
Original file line number Diff line number Diff line change
Expand Up @@ -140,8 +140,9 @@ $gameHighlightGoals Markera egna luckor och mål.
$gameStateSave Snabbspara spelposition.
$gameStateLoad Läs in snabbsparad position.
$gameShowTweaker Visa repristrimmare.
$gameFramestepBack %s för att kliva bakåt, %s för att hoppa bakåt.
$gameFramestepAhead %s för att kliva framåt, %s för att hoppa framåt.
$gameRewindPrevPly Spola tillbaka din senaste tilldelning av förmågor.
$gameRewindOneTick %s för att spola tillbaka 1 tick, %s för 1 sekund.
$gameSkipOneTick %s för att flytta fram 1 tick, %s för 10 sekunder.
$gameFastForward %s för att snabbspola framåt, %s för turbo.
$gameRestart Starta om bana.
$gameNuke Spräng. Dubbelklicka för att aktivera.
Expand Down Expand Up @@ -315,7 +316,7 @@ $optionTitle Inställningar|Gå till menyn för inställningar från huvudmenyn.
$optionGroupGeneral Allmänt
$optionGroupGraphics Grafik
$optionGroupControls Kontroller
$optionGroupReplay Repris
$optionGroupGameControls Spelkontroller
$optionGroupGameKeys Speltangenter
$optionGroupEditorKeys Redigerartangenter
$optionGroupMenuKeys Menytangenter
Expand Down Expand Up @@ -365,10 +366,11 @@ $optionInsertAssignments Infoga ny tilldelningen|After ◀▮, assigning skills
$optionKeyForceLeft Tvinga vänster|Håll för att tildela förmågor till vänsterriktade lix.|Detta är användbart i en tät grupp av lix.
$optionKeyForceRight Tvinga höger|Håll för att tilldela förmågor till högerriktade lix.|Detta är användbart i en tät grupp av lix.
$optionKeyPause Pausa|Pausa spelet.|Du kan välja om tilldelning av förmågor borde opausa, se nedanför.
$optionKeyFrameBackMany ◀▮ 1 sek.|Spola tillbaka spelet med 1 sekund.
$optionKeyFrameBackOne ◀▮ 1 bild|Spola tillbaka spelet med 1 bild, dvs med ¹⁄₁₅ av en sekund.
$optionKeyFrameAheadOne ▮▶ 1 bild|Spola fram spelet med 1 bild, dvs med ¹⁄₁₅ av en sekund.
$optionKeyFrameAheadMany ▮▶ 10 sek.|Spola fram spelet med 10 sekunder.
$optionKeyRewindPrevPly ⬚◀◀|Spola tillbaka din senaste tilldelning av förmågor.|Klicka sedan i luften för att radera tilldelningen eller låta den spelas upp igen.
$optionKeyRewindOneSecond ◀▮ 1 sek.|Spola tillbaka spelet med 1 sekund.
$optionKeyRewindOneTick ◀▮ 1 tick|Spola tillbaka spelet med 1 tick, dvs med ¹⁄₁₅ av en sekund.
$optionKeySkipOneTick ▮▶ 1 tick|Spola fram spelet med 1 tick, dvs med ¹⁄₁₅ av en sekund.
$optionKeySkipTenSeconds ▮▶ 10 sek.|Spola fram spelet med 10 sekunder.
$optionKeySpeedFast ▶▶|Växla snabbspolning framåt.|Snabbspolning framåt är 4 bilder snabbare än normal hastighet.
$optionKeySpeedTurbo ▶▶▶|Växla turbosnabbspolning framåt.|Turbosnappspolning framåt är 36 bilder snabbare än normal hastighet.
$optionKeyRestart Starta om|Starta om banan från början. Alla dina åtgärder kommer att repriseras.|Klicka i luften för att avbryta reprisen.
Expand All @@ -381,7 +383,7 @@ $optionKeyHighlightGoals Markera mål|Markera egna luckor och mål under nätver
$optionKeyNuke Spräng|Spräng alla dina lix i enspelarläge för att klara banan.|Starta övertid i flerspelarläge om du har räddat minst 1 lix.

$optionAvoidBuilderQueuing Föredra spamning framför köläggning|Föredra byggaretilldelningar framför icke-byggare istället för att kölägga till existerande byggare.|Du kan hålla omvänd prioritering för att göra det du inte föredrar.
$optionAvoidBatterToExploder Föredra slagmän framför icke-exploderare.|Föredra slagmäntilldelningar framför gångare istället för slagmäntilldeningar framför tidsinställda exploderare|Du kan hålla omvänd prioritering.
$optionAvoidBatterToExploder Föredra slagmän framför icke-exploderare.|Föredra slagmäntilldelningar framför gångare istället för slagmäntilldelningar framför tidsinställda exploderare|Du kan hålla omvänd prioritering.
$optionUnpauseOnAssign Fortsätt spelet vid tilldelning av förmåga|Fortsätt spelet då du tilldelar en förmåga under paus.|Om inte förbockat kommer tilldelning av förmågor under paus att fortsätta spelet med 1 bild.

$optionKeyMenuOkay Okej/ja|Spela den markerade banan. Spara och stäng dialogfönster.
Expand Down
16 changes: 9 additions & 7 deletions src/file/lang/enum_.d
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,9 @@ enum Lang {
gameStateSave,
gameStateLoad,
gameShowTweaker,
gameFramestepBack,
gameFramestepAhead,
gameRewindPrevPly,
gameRewindOneTick,
gameSkipOneTick,
gameFastForward,
gameRestart,
gameNuke,
Expand Down Expand Up @@ -285,7 +286,7 @@ enum Lang {
optionGroupGeneral,
optionGroupGraphics,
optionGroupControls,
optionGroupReplay,
optionGroupGameControls,
optionGroupGameKeys,
optionGroupEditorKeys,
optionGroupMenuKeys,
Expand Down Expand Up @@ -339,10 +340,11 @@ enum Lang {
optionKeyForceLeft,
optionKeyForceRight,
optionKeyPause,
optionKeyFrameBackMany,
optionKeyFrameBackOne,
optionKeyFrameAheadOne,
optionKeyFrameAheadMany,
optionKeyRewindPrevPly,
optionKeyRewindOneSecond,
optionKeyRewindOneTick,
optionKeySkipOneTick,
optionKeySkipTenSeconds,
optionKeySpeedFast,
optionKeySpeedTurbo,
optionKeyRestart,
Expand Down
23 changes: 15 additions & 8 deletions src/file/option/allopts.d
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,11 @@ UserOption!KeySet
keyForceLeft,
keyForceRight,
keyPause,
keyFrameBackMany,
keyFrameBackOne,
keyFrameAheadOne,
keyFrameAheadMany,
keyRewindPrevPly,
keyRewindOneSecond,
keyRewindOneTick,
keySkipOneTick,
keySkipTenSeconds,
keySpeedFast,
keySpeedTurbo,
keyRestart,
Expand Down Expand Up @@ -368,10 +369,16 @@ do {
keyForceLeft = newKey2("keyForceLeft", Lang.optionKeyForceLeft, ALLEGRO_KEY_S, ALLEGRO_KEY_LEFT);
keyForceRight = newKey2("keyForceRight", Lang.optionKeyForceRight, ALLEGRO_KEY_F, ALLEGRO_KEY_RIGHT);
keyPause = newKey2("keyPause", Lang.optionKeyPause, ALLEGRO_KEY_SPACE, hardware.keyenum.keyMMB);
keyFrameBackMany = newKey("keySpeedBackMany", Lang.optionKeyFrameBackMany, ALLEGRO_KEY_1);
keyFrameBackOne = newKey("keySpeedBackOne", Lang.optionKeyFrameBackOne, ALLEGRO_KEY_2);
keyFrameAheadOne = newKey("keySpeedAheadOne", Lang.optionKeyFrameAheadOne, ALLEGRO_KEY_3);
keyFrameAheadMany = newKey("keySpeedAheadMany", Lang.optionKeyFrameAheadMany, ALLEGRO_KEY_6);
keyRewindPrevPly = newOpt("keyRewindPrevPly",
Lang.optionKeyRewindPrevPly, KeySet());
keyRewindOneSecond = newKey("keySpeedBackMany",
Lang.optionKeyRewindOneSecond, ALLEGRO_KEY_1);
keyRewindOneTick = newKey("keySpeedBackOne",
Lang.optionKeyRewindOneTick, ALLEGRO_KEY_2);
keySkipOneTick = newKey("keySpeedAheadOne",
Lang.optionKeySkipOneTick, ALLEGRO_KEY_3);
keySkipTenSeconds = newKey("keySpeedAheadMany",
Lang.optionKeySkipTenSeconds, ALLEGRO_KEY_6);
keySpeedFast = newKey("keySpeedFast", Lang.optionKeySpeedFast, ALLEGRO_KEY_4);
keySpeedTurbo = newKey("keySpeedTurbo", Lang.optionKeySpeedTurbo, ALLEGRO_KEY_5);
keyRestart = newKey("keyRestart", Lang.optionKeyRestart, ALLEGRO_KEY_F1);
Expand Down
75 changes: 48 additions & 27 deletions src/game/core/speed.d
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
module game.core.speed;

import std.algorithm;
import core.time;
static import basics.globals;

import basics.alleg5;
static import basics.globals;
import file.option; // replayAfterFrameBack
import game.core.game;
import game.nurse.cache : DuringTurbo;
Expand Down Expand Up @@ -32,16 +33,21 @@ void dispatchTweaks(Game game)

void updatePhysicsAccordingToSpeedButtons(Game game) { with (game)
{
if (pan.framestepBackOne) {
with (LoadStateRAII(game))
game.nurse.framestepBackBy(1);
if (pan.rewindPrevPly) {
game.nurse.framestepBackBy(game.numPhyusToBackstepToPrevPly);
game.finishFramestepping(AndThen.pauseUnlessAtBeginning);
}
else if (pan.framestepBackMany) {
with (LoadStateRAII(game))
game.nurse.framestepBackBy(Game.updatesBackMany);
else if (pan.rewindOneSecond) {
game.nurse.framestepBackBy(Game.updatesBackMany);
game.finishFramestepping(AndThen.pause);
}
if (pan.rewindOneTick) {
game.nurse.framestepBackBy(1);
game.finishFramestepping(AndThen.pause);
}
else if (pan.restart) {
game.restartLevel();
game.nurse.restartLevel();
game.finishFramestepping(AndThen.unpause);
}
else if (pan.saveState) {
nurse.saveUserState();
Expand All @@ -50,17 +56,19 @@ void updatePhysicsAccordingToSpeedButtons(Game game) { with (game)
hardware.sound.playQuiet(Sound.CLOCK);
}
else if (pan.loadState) {
if (nurse.userStateExists)
with (LoadStateRAII(game)) {
nurse.loadUserState();
_effect.quickload();
}
if (nurse.userStateExists) {
nurse.loadUserState();
_effect.quickload();
game.finishFramestepping(AndThen.pause);
}
}
else if (pan.framestepAheadOne) {
else if (pan.skipOneTick) {
game.upd(1, DuringTurbo.no);
game.pan.pause = true;
}
else if (pan.framestepAheadMany) {
else if (pan.skipTenSeconds) {
game.upd(updatesAheadMany, DuringTurbo.no);
// Don't pause. Don't unpause either. Keep pause as-is.
}
else if (pan.paused && isMouseOnLand && mouseClickLeft) {
// Clicking into the non-panel screen advances physics once.
Expand All @@ -83,14 +91,6 @@ void updatePhysicsAccordingToSpeedButtons(Game game) { with (game)
}
}
}}
// end with (game), end function updatePhysicsAccordingToSpeedButtons

void restartLevel(Game game)
{
game.pan.setSpeedNormal();
with (LoadStateRAII(game))
game.nurse.restartLevel();
}

// The server tells us the milliseconds since game start, and the net client
// has added our lag. We think in Phyus or Allegro ticks, not in millis,
Expand Down Expand Up @@ -120,11 +120,22 @@ void recordServersWishSinceGameStart(
private: //////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

struct LoadStateRAII
enum AndThen {
pause,
pauseUnlessAtBeginning,
unpause
}

void finishFramestepping(Game game, in AndThen andThen)
{
private Game _game;
this(Game g) { _game = g; }
~this() { _game.setLastPhyuToNow(); }
game.setLastPhyuToNow();
final switch (andThen) {
case AndThen.pause: game.pan.pause = true; return;
case AndThen.unpause: game.pan.pause = false; return;
case AndThen.pauseUnlessAtBeginning:
game.pan.pause = (game.nurse.updatesSinceZero != 0);
return;
}
}

// Combat the network time-lag, affect _alticksToAdjust.
Expand Down Expand Up @@ -158,3 +169,13 @@ private void upd(Game game, in int howmany, in DuringTurbo duringTurbo)
game.nurse.updateTo(Phyu(before + howmany), duringTurbo);
game.setLastPhyuToNow();
}

int numPhyusToBackstepToPrevPly(Game game)
{
immutable Phyu now = game.nurse.now;
immutable Phyu target = game.replay.allPlies
.filter!(ply => ply.when <= now)
.map!(ply => ply.when)
.fold!max(Phyu(now - game.nurse.updatesSinceZero));
return now - target + 1; // The +1 goes back to the phyu before that ply.
}
5 changes: 3 additions & 2 deletions src/game/panel/base.d
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,9 @@ public:
// Copy-pasted function names from RightButtons.
static foreach (field; ["paused", "speedIsNormal", "speedIsFast",
"speedIsTurbo", "restart", "saveState", "loadState",
"framestepBackOne", "framestepBackMany", "framestepAheadOne",
"framestepAheadMany", "splatRulerIsOn", "tweakerIsOn",
"rewindPrevPly", "rewindOneSecond", "rewindOneTick",
"skipOneTick", "skipTenSeconds",
"splatRulerIsOn", "tweakerIsOn",
"highlightGoalsExecute", "nukeDoubleclicked"]
) {
import std.format;
Expand Down
Loading

0 comments on commit f76d73f

Please sign in to comment.