Skip to content
This repository was archived by the owner on Sep 11, 2023. It is now read-only.

Commit 6fc37e9

Browse files
committed
History Viewer: Prevent history viewer window from overwriting .sav files
1 parent 82c4dc8 commit 6fc37e9

File tree

10 files changed

+45
-39
lines changed

10 files changed

+45
-39
lines changed

Core/AsciiTurboFile.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class AsciiTurboFile : public BaseControlDevice, public IBattery
2626
public:
2727
AsciiTurboFile(shared_ptr<Console> console) : BaseControlDevice(console, BaseControlDevice::ExpDevicePort)
2828
{
29-
BatteryManager::LoadBattery(".tf", _data, AsciiTurboFile::FileSize);
29+
_console->GetBatteryManager()->LoadBattery(".tf", _data, AsciiTurboFile::FileSize);
3030
}
3131

3232
~AsciiTurboFile()
@@ -36,7 +36,7 @@ class AsciiTurboFile : public BaseControlDevice, public IBattery
3636

3737
void SaveBattery() override
3838
{
39-
BatteryManager::SaveBattery(".tf", _data, AsciiTurboFile::FileSize);
39+
_console->GetBatteryManager()->SaveBattery(".tf", _data, AsciiTurboFile::FileSize);
4040
}
4141

4242
uint8_t ReadRAM(uint16_t addr) override

Core/BaseMapper.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -353,22 +353,22 @@ bool BaseMapper::HasBattery()
353353
void BaseMapper::LoadBattery()
354354
{
355355
if(HasBattery() && _saveRamSize > 0) {
356-
BatteryManager::LoadBattery(".sav", _saveRam, _saveRamSize);
356+
_console->GetBatteryManager()->LoadBattery(".sav", _saveRam, _saveRamSize);
357357
}
358358

359359
if(_hasChrBattery && _chrRamSize > 0) {
360-
BatteryManager::LoadBattery(".sav.chr", _chrRam, _chrRamSize);
360+
_console->GetBatteryManager()->LoadBattery(".sav.chr", _chrRam, _chrRamSize);
361361
}
362362
}
363363

364364
void BaseMapper::SaveBattery()
365365
{
366366
if(HasBattery() && _saveRamSize > 0) {
367-
BatteryManager::SaveBattery(".sav", _saveRam, _saveRamSize);
367+
_console->GetBatteryManager()->SaveBattery(".sav", _saveRam, _saveRamSize);
368368
}
369369

370370
if(_hasChrBattery && _chrRamSize > 0) {
371-
BatteryManager::SaveBattery(".sav.chr", _chrRam, _chrRamSize);
371+
_console->GetBatteryManager()->SaveBattery(".sav.chr", _chrRam, _chrRamSize);
372372
}
373373
}
374374

Core/BatteryManager.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,10 @@
33
#include "VirtualFile.h"
44
#include "../Utilities/FolderUtilities.h"
55

6-
string BatteryManager::_romName;
7-
bool BatteryManager::_saveEnabled = true;
8-
std::weak_ptr<IBatteryRecorder> BatteryManager::_recorder;
9-
std::weak_ptr<IBatteryProvider> BatteryManager::_provider;
10-
116
void BatteryManager::Initialize(string romName)
127
{
138
_romName = romName;
9+
_saveEnabled = true;
1410
}
1511

1612
string BatteryManager::GetBasePath()

Core/BatteryManager.h

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,23 @@ class IBatteryRecorder
1616
class BatteryManager
1717
{
1818
private:
19-
static string _romName;
20-
static bool _saveEnabled;
21-
static string GetBasePath();
19+
string _romName;
20+
bool _saveEnabled;
21+
string GetBasePath();
2222

23-
static std::weak_ptr<IBatteryProvider> _provider;
24-
static std::weak_ptr<IBatteryRecorder> _recorder;
25-
26-
BatteryManager() = delete;
23+
std::weak_ptr<IBatteryProvider> _provider;
24+
std::weak_ptr<IBatteryRecorder> _recorder;
2725

2826
public:
29-
static void Initialize(string romName);
27+
void Initialize(string romName);
3028

31-
static void SetSaveEnabled(bool enabled);
29+
void SetSaveEnabled(bool enabled);
3230

33-
static void SetBatteryProvider(shared_ptr<IBatteryProvider> provider);
34-
static void SetBatteryRecorder(shared_ptr<IBatteryRecorder> recorder);
31+
void SetBatteryProvider(shared_ptr<IBatteryProvider> provider);
32+
void SetBatteryRecorder(shared_ptr<IBatteryRecorder> recorder);
3533

36-
static void SaveBattery(string extension, uint8_t* data, uint32_t length);
34+
void SaveBattery(string extension, uint8_t* data, uint32_t length);
3735

38-
static vector<uint8_t> LoadBattery(string extension);
39-
static void LoadBattery(string extension, uint8_t* data, uint32_t length);
36+
vector<uint8_t> LoadBattery(string extension);
37+
void LoadBattery(string extension, uint8_t* data, uint32_t length);
4038
};

Core/BattleBox.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class BattleBox : public BaseControlDevice, public IBattery
3333
public:
3434
BattleBox(shared_ptr<Console> console) : BaseControlDevice(console, BaseControlDevice::ExpDevicePort)
3535
{
36-
BatteryManager::LoadBattery(".bb", (uint8_t*)_data, BattleBox::FileSize);
36+
_console->GetBatteryManager()->LoadBattery(".bb", (uint8_t*)_data, BattleBox::FileSize);
3737
}
3838

3939
~BattleBox()
@@ -43,7 +43,7 @@ class BattleBox : public BaseControlDevice, public IBattery
4343

4444
void SaveBattery() override
4545
{
46-
BatteryManager::SaveBattery(".bb", (uint8_t*)_data, BattleBox::FileSize);
46+
_console->GetBatteryManager()->SaveBattery(".bb", (uint8_t*)_data, BattleBox::FileSize);
4747
}
4848

4949
uint8_t ReadRAM(uint16_t addr) override

Core/Console.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ Console::~Console()
7474
void Console::Init()
7575
{
7676
_notificationManager.reset(new NotificationManager());
77+
_batteryManager.reset(new BatteryManager());
7778

7879
_videoRenderer.reset(new VideoRenderer(shared_from_this()));
7980
_videoDecoder.reset(new VideoDecoder(shared_from_this()));
@@ -135,6 +136,11 @@ void Console::Release(bool forShutdown)
135136
_controlManager.reset();
136137
}
137138

139+
shared_ptr<BatteryManager> Console::GetBatteryManager()
140+
{
141+
return _batteryManager;
142+
}
143+
138144
shared_ptr<SaveStateManager> Console::GetSaveStateManager()
139145
{
140146
return _saveStateManager;
@@ -264,7 +270,7 @@ bool Console::Initialize(VirtualFile &romFile, VirtualFile &patchFile)
264270
vector<uint8_t> fileData;
265271
romFile.ReadFile(fileData);
266272

267-
BatteryManager::Initialize(FolderUtilities::GetFilename(romFile.GetFileName(), false));
273+
_batteryManager->Initialize(FolderUtilities::GetFilename(romFile.GetFileName(), false));
268274
shared_ptr<BaseMapper> mapper = MapperFactory::InitializeFromFile(shared_from_this(), romFile.GetFileName(), fileData);
269275
if(mapper) {
270276
_soundMixer->StopAudio(true);
@@ -324,7 +330,7 @@ bool Console::Initialize(VirtualFile &romFile, VirtualFile &patchFile)
324330
}
325331

326332
//Temporarely disable battery saves to prevent battery files from being created for the wrong game (for Battle Box & Turbo File)
327-
BatteryManager::SetSaveEnabled(false);
333+
_batteryManager->SetSaveEnabled(false);
328334

329335
uint32_t pollCounter = 0;
330336
if(_controlManager && !isDifferentGame) {
@@ -341,7 +347,7 @@ bool Console::Initialize(VirtualFile &romFile, VirtualFile &patchFile)
341347
_controlManager->UpdateControlDevices();
342348

343349
//Re-enable battery saves
344-
BatteryManager::SetSaveEnabled(true);
350+
_batteryManager->SetSaveEnabled(true);
345351

346352
if(_hdData && (!_hdData->Tiles.empty() || !_hdData->Backgrounds.empty())) {
347353
_ppu.reset(new HdPpu(shared_from_this(), _hdData.get()));
@@ -415,7 +421,7 @@ bool Console::Initialize(VirtualFile &romFile, VirtualFile &patchFile)
415421
}
416422

417423
//Reset battery source to current game if new game failed to load
418-
BatteryManager::Initialize(FolderUtilities::GetFilename(GetRomInfo().RomName, false));
424+
_batteryManager->Initialize(FolderUtilities::GetFilename(GetRomInfo().RomName, false));
419425
if(_mapper) {
420426
_videoDecoder->StartThread();
421427
}
@@ -1275,6 +1281,8 @@ void Console::CopyRewindData(shared_ptr<Console> sourceConsole)
12751281
sourceConsole->Pause();
12761282
Pause();
12771283

1284+
//Disable battery saving for this instance
1285+
_batteryManager->SetSaveEnabled(false);
12781286
_historyViewer.reset(new HistoryViewer(shared_from_this()));
12791287
sourceConsole->_rewindManager->CopyHistory(_historyViewer);
12801288

Core/Console.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class SoundMixer;
2727
class NotificationManager;
2828
class Debugger;
2929
class EmulationSettings;
30+
class BatteryManager;
3031

3132
struct HdPackData;
3233
struct HashInfo;
@@ -61,7 +62,8 @@ class Console : public std::enable_shared_from_this<Console>
6162
//Used by VS-DualSystem
6263
shared_ptr<Console> _master;
6364
shared_ptr<Console> _slave;
64-
65+
66+
shared_ptr<BatteryManager> _batteryManager;
6567
shared_ptr<SystemActionManager> _systemActionManager;
6668

6769
shared_ptr<VideoDecoder> _videoDecoder;
@@ -106,6 +108,7 @@ class Console : public std::enable_shared_from_this<Console>
106108
void Init();
107109
void Release(bool forShutdown);
108110

111+
shared_ptr<BatteryManager> GetBatteryManager();
109112
shared_ptr<SaveStateManager> GetSaveStateManager();
110113
shared_ptr<VideoDecoder> GetVideoDecoder();
111114
shared_ptr<VideoRenderer> GetVideoRenderer();

Core/FDS.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ void FDS::InitMapper(RomData &romData)
3131
_fdsRawData = romData.RawData;
3232

3333
//Apply save data (saved as an IPS file), if found
34-
vector<uint8_t> ipsData = BatteryManager::LoadBattery(".ips");
34+
vector<uint8_t> ipsData = _console->GetBatteryManager()->LoadBattery(".ips");
3535
LoadDiskData(ipsData);
3636
}
3737

@@ -60,7 +60,7 @@ vector<uint8_t> FDS::CreateIpsPatch()
6060
void FDS::SaveBattery()
6161
{
6262
vector<uint8_t> ipsData = CreateIpsPatch();
63-
BatteryManager::SaveBattery(".ips", ipsData.data(), (uint32_t)ipsData.size());
63+
_console->GetBatteryManager()->SaveBattery(".ips", ipsData.data(), (uint32_t)ipsData.size());
6464
}
6565

6666
void FDS::Reset(bool softReset)

Core/MesenMovie.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ bool MesenMovie::Play(VirtualFile &file)
112112

113113
_console->Pause();
114114

115-
BatteryManager::SetBatteryProvider(shared_from_this());
115+
_console->GetBatteryManager()->SetBatteryProvider(shared_from_this());
116116
_console->GetNotificationManager()->RegisterNotificationListener(shared_from_this());
117117
ApplySettings();
118118

Core/MovieRecorder.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ bool MovieRecorder::Record(RecordMovieOptions options)
4040
_console->Pause();
4141

4242
if(options.RecordFrom == RecordMovieFrom::StartWithoutSaveData) {
43-
BatteryManager::SetBatteryProvider(shared_from_this());
43+
_console->GetBatteryManager()->SetBatteryProvider(shared_from_this());
4444
}
4545

4646
//Save existing battery files
4747
if(options.RecordFrom == RecordMovieFrom::StartWithSaveData) {
48-
BatteryManager::SetBatteryRecorder(shared_from_this());
48+
_console->GetBatteryManager()->SetBatteryRecorder(shared_from_this());
4949
}
5050

5151
_console->GetNotificationManager()->RegisterNotificationListener(shared_from_this());
@@ -56,7 +56,7 @@ bool MovieRecorder::Record(RecordMovieOptions options)
5656
} else {
5757
_console->PowerCycle();
5858
}
59-
BatteryManager::SetBatteryRecorder(nullptr);
59+
_console->GetBatteryManager()->SetBatteryRecorder(nullptr);
6060
_console->Resume();
6161

6262
MessageManager::DisplayMessage("Movies", "MovieRecordingTo", FolderUtilities::GetFilename(_filename, true));
@@ -238,7 +238,8 @@ bool MovieRecorder::CreateMovie(string movieFile, std::deque<RewindData> &data,
238238
if(startPosition < data.size() && endPosition <= data.size() && _writer->Initialize(_filename)) {
239239
vector<shared_ptr<BaseControlDevice>> devices = _console->GetControlManager()->GetControlDevices();
240240

241-
if(startPosition > 0) {
241+
if(startPosition > 0 || _console->GetRomInfo().HasBattery) {
242+
//Create a movie from a savestate if we don't start from the beginning (or if the game has save ram)
242243
_hasSaveState = true;
243244
_saveStateData = stringstream();
244245
_console->GetSaveStateManager()->GetSaveStateHeader(_saveStateData);

0 commit comments

Comments
 (0)