Skip to content

Commit

Permalink
Fix Replays not applying Mirror when not using Preference to apply mods
Browse files Browse the repository at this point in the history
  • Loading branch information
poco0317 committed Dec 21, 2019
1 parent 913b0d8 commit 190eead
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 27 deletions.
2 changes: 2 additions & 0 deletions src/Etterna/Models/Misc/PlayerAI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ map<float, vector<TapReplayResult>> PlayerAI::m_ReplayTapMapByElapsedTime;
map<float, vector<HoldReplayResult>> PlayerAI::m_ReplayHoldMapByElapsedTime;
float PlayerAI::replayRate = 1.f;
RString PlayerAI::replayModifiers = "";
bool PlayerAI::replayUsedMirror = false;
RString PlayerAI::oldModifiers = "";
float PlayerAI::oldRate = 1.f;
RString PlayerAI::oldNoteskin = "";
Expand Down Expand Up @@ -95,6 +96,7 @@ PlayerAI::ResetScoreData()
m_ReplayHoldMapByElapsedTime.clear();
replayRate = 1.f;
replayModifiers.clear();
replayUsedMirror = false;
oldModifiers.clear();
oldRate = 1.f;
oldNoteskin.clear();
Expand Down
1 change: 1 addition & 0 deletions src/Etterna/Models/Misc/PlayerAI.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ class PlayerAI

static RString oldModifiers;
static RString replayModifiers;
static bool replayUsedMirror;
static RString oldNoteskin;
static float replayRate;
static float oldRate;
Expand Down
64 changes: 37 additions & 27 deletions src/Etterna/Screen/Gameplay/ScreenGameplayReplay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,18 @@ ScreenGameplayReplay::ScreenGameplayReplay()
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetStage().m_sNoteSkin =
PlayerAI::oldNoteskin;
}

// Set up mirror
FOREACH_ENUM(ModsLevel, lvl)
{
PO_GROUP_ASSIGN_N(GAMESTATE->m_pPlayerState->m_PlayerOptions,
lvl,
m_bTurns,
PlayerOptions::TURN_MIRROR,
PlayerAI::replayUsedMirror);
}
// We don't have to ever turn off mirror actually, due to the
// reinitialization of PlayerOptions in the deconstructor.
}

void
Expand All @@ -88,33 +100,31 @@ ScreenGameplayReplay::~ScreenGameplayReplay()
LOG->Trace("ScreenGameplayReplay::~ScreenGameplayReplay()");

if (!GAMESTATE->m_bRestartedGameplay) {
if (PREFSMAN->m_bReplaysUseScoreMods) {
GAMESTATE->m_pPlayerState->m_PlayerOptions.Init();
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetPreferred()
.FromString(PlayerAI::oldModifiers);
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetCurrent().FromString(
PlayerAI::oldModifiers);
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetSong().FromString(
PlayerAI::oldModifiers);
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetStage().FromString(
PlayerAI::oldModifiers);
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetPreferred()
.m_sNoteSkin = PlayerAI::oldNoteskin;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetCurrent()
.m_sNoteSkin = PlayerAI::oldNoteskin;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetSong().m_sNoteSkin =
PlayerAI::oldNoteskin;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetStage().m_sNoteSkin =
PlayerAI::oldNoteskin;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetPreferred()
.m_FailType = PlayerAI::oldFailType;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetCurrent().m_FailType =
PlayerAI::oldFailType;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetSong().m_FailType =
PlayerAI::oldFailType;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetStage().m_FailType =
PlayerAI::oldFailType;
}
GAMESTATE->m_pPlayerState->m_PlayerOptions.Init();
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetPreferred().FromString(
PlayerAI::oldModifiers);
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetCurrent().FromString(
PlayerAI::oldModifiers);
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetSong().FromString(
PlayerAI::oldModifiers);
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetStage().FromString(
PlayerAI::oldModifiers);
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetPreferred().m_sNoteSkin =
PlayerAI::oldNoteskin;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetCurrent().m_sNoteSkin =
PlayerAI::oldNoteskin;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetSong().m_sNoteSkin =
PlayerAI::oldNoteskin;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetStage().m_sNoteSkin =
PlayerAI::oldNoteskin;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetPreferred().m_FailType =
PlayerAI::oldFailType;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetCurrent().m_FailType =
PlayerAI::oldFailType;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetSong().m_FailType =
PlayerAI::oldFailType;
GAMESTATE->m_pPlayerState->m_PlayerOptions.GetStage().m_FailType =
PlayerAI::oldFailType;
GAMESTATE->m_SongOptions.Init();
GAMESTATE->m_SongOptions.GetPreferred().m_fMusicRate =
PlayerAI::oldRate;
Expand Down
2 changes: 2 additions & 0 deletions src/Etterna/Screen/Others/ScreenSelectMusic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1733,8 +1733,10 @@ class LunaScreenSelectMusic : public Luna<ScreenSelectMusic>
if (ns.empty())
ns = CommonMetrics::DEFAULT_NOTESKIN_NAME;
PlayerAI::oldNoteskin = ns;
bool usesMirror = potmp.m_bTurns[PlayerOptions::TURN_MIRROR];
RString hsMods = hs->GetModifiers();
PlayerAI::replayModifiers = hsMods;
PlayerAI::replayUsedMirror = usesMirror;
PlayerAI::oldFailType = ft;

// lock the game into replay mode and GO
Expand Down

0 comments on commit 190eead

Please sign in to comment.