core/movie: Add future event and timeline check
As specified in TASVideos [Laws of TAS](http://tasvideos.org/LawsOfTAS/OnSavestates.html)
This commit is contained in:
parent
b6f8cc884f
commit
e188f86582
|
@ -2,6 +2,7 @@
|
|||
// Licensed under GPLv2 or any later version
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstring>
|
||||
#include <stdexcept>
|
||||
#include <string>
|
||||
|
@ -182,10 +183,16 @@ void Movie::serialize(Archive& ar, const unsigned int file_version) {
|
|||
if (play_mode == PlayMode::Recording) {
|
||||
SaveMovie();
|
||||
}
|
||||
if (current_byte >= recorded_input.size()) {
|
||||
throw std::runtime_error(
|
||||
"This savestate was created at a later point and must be loaded in R+W mode");
|
||||
if (recorded_input_.size() >= recorded_input.size()) {
|
||||
throw std::runtime_error("Future event savestate not allowed in R/O mode");
|
||||
}
|
||||
// Ensure that the current movie and savestate movie are in the same timeline
|
||||
if (std::mismatch(recorded_input_.begin(), recorded_input_.end(),
|
||||
recorded_input.begin())
|
||||
.first != recorded_input_.end()) {
|
||||
throw std::runtime_error("Timeline mismatch not allowed in R/O mode");
|
||||
}
|
||||
|
||||
play_mode = PlayMode::Playing;
|
||||
total_input = GetInputCount(recorded_input);
|
||||
} else {
|
||||
|
|
Reference in New Issue