FDS: Fixed minor issue with save states that caused problems when using run ahead

This commit is contained in:
Sour 2020-01-25 12:11:06 -05:00
parent 91a28c1340
commit 78288fc456
2 changed files with 16 additions and 9 deletions

View file

@ -29,6 +29,9 @@ void FDS::InitMapper(RomData &romData)
_fdsDiskSides = romData.FdsDiskData;
_fdsDiskHeaders = romData.FdsDiskHeaders;
_fdsRawData = romData.RawData;
FdsLoader loader;
loader.LoadDiskData(_fdsRawData, _orgDiskSides, _orgDiskHeaders);
//Apply save data (saved as an IPS file), if found
vector<uint8_t> ipsData = _console->GetBatteryManager()->LoadBattery(".ips");
@ -488,16 +491,17 @@ void FDS::StreamState(bool saving)
_diskNumber, _diskPosition, _delay, _previousCrcControlFlag, _gapEnded, _scanningDisk, _transferComplete, audio);
if(saving) {
vector<uint8_t> ipsData = CreateIpsPatch();
VectorInfo<uint8_t> data{ &ipsData };
Stream(data);
for(size_t i = 0; i < _fdsDiskSides.size(); i++) {
vector<uint8_t> ipsData = IpsPatcher::CreatePatch(_orgDiskSides[i], _fdsDiskSides[i]);
VectorInfo<uint8_t> data { &ipsData };
Stream(data);
}
} else {
vector<uint8_t> ipsData;
VectorInfo<uint8_t> data{ &ipsData };
Stream(data);
if(ipsData.size() > 0) {
LoadDiskData(ipsData);
for(size_t i = 0; i < _fdsDiskSides.size(); i++) {
vector<uint8_t> ipsData;
VectorInfo<uint8_t> data { &ipsData };
Stream(data);
IpsPatcher::PatchBuffer(ipsData, _orgDiskSides[i], _fdsDiskSides[i]);
}
//Make sure we disable fast forwarding when loading a state

View file

@ -70,6 +70,9 @@ private:
vector<vector<uint8_t>> _fdsDiskHeaders;
string _romFilepath;
vector<vector<uint8_t>> _orgDiskSides;
vector<vector<uint8_t>> _orgDiskHeaders;
bool _gameStarted;
bool _needSave = false;