diff --git a/desktop_version/src/Game.cpp b/desktop_version/src/Game.cpp index 811c1852..21640aef 100644 --- a/desktop_version/src/Game.cpp +++ b/desktop_version/src/Game.cpp @@ -4737,6 +4737,14 @@ void Game::deserializesettings(tinyxml2::XMLElement* dataNode, ScreenSettings* s } bool Game::savestats() +{ + ScreenSettings screen_settings; + graphics.screenbuffer->GetSettings(&screen_settings); + + return savestats(&screen_settings); +} + +bool Game::savestats(const ScreenSettings* screen_settings) { tinyxml2::XMLDocument doc; bool already_exists = FILESYSTEM_loadTiXml2Document("saves/unlock.vvv", doc); @@ -4810,7 +4818,7 @@ bool Game::savestats() xml::update_tag(dataNode, "swnrecord", swnrecord); - serializesettings(dataNode); + serializesettings(dataNode, screen_settings); return FILESYSTEM_saveTiXml2Document("saves/unlock.vvv", doc); } @@ -4834,29 +4842,19 @@ void Game::savestatsandsettings_menu() } } -void Game::serializesettings(tinyxml2::XMLElement* dataNode) +void Game::serializesettings(tinyxml2::XMLElement* dataNode, const ScreenSettings* screen_settings) { tinyxml2::XMLDocument& doc = xml::get_document(dataNode); - xml::update_tag(dataNode, "fullscreen", !graphics.screenbuffer->isWindowed); + xml::update_tag(dataNode, "fullscreen", (int) screen_settings->fullscreen); - xml::update_tag(dataNode, "stretch", graphics.screenbuffer->stretchMode); + xml::update_tag(dataNode, "stretch", screen_settings->stretch); - xml::update_tag(dataNode, "useLinearFilter", graphics.screenbuffer->isFiltered); + xml::update_tag(dataNode, "useLinearFilter", (int) screen_settings->linearFilter); - int width, height; - if (graphics.screenbuffer != NULL) - { - graphics.screenbuffer->GetWindowSize(&width, &height); - } - else - { - width = 320; - height = 240; - } - xml::update_tag(dataNode, "window_width", width); + xml::update_tag(dataNode, "window_width", screen_settings->windowWidth); - xml::update_tag(dataNode, "window_height", height); + xml::update_tag(dataNode, "window_height", screen_settings->windowHeight); xml::update_tag(dataNode, "noflashingmode", noflashingmode); @@ -4869,7 +4867,7 @@ void Game::serializesettings(tinyxml2::XMLElement* dataNode) xml::update_tag(dataNode, "slowdown", slowdown); - xml::update_tag(dataNode, "advanced_smoothing", graphics.screenbuffer->badSignalEffect); + xml::update_tag(dataNode, "advanced_smoothing", (int) screen_settings->badSignal); xml::update_tag(dataNode, "usingmmmmmm", music.usingmmmmmm); @@ -4890,16 +4888,7 @@ void Game::serializesettings(tinyxml2::XMLElement* dataNode) xml::update_tag(dataNode, "glitchrunnermode", (int) glitchrunnermode); - int vsyncOption; - if (graphics.screenbuffer != NULL) - { - vsyncOption = (int) graphics.screenbuffer->vsync; - } - else - { - vsyncOption = 0; - } - xml::update_tag(dataNode, "vsync", vsyncOption); + xml::update_tag(dataNode, "vsync", (int) screen_settings->useVsync); // Delete all controller buttons we had previously. // dataNode->FirstChildElement() shouldn't be NULL at this point... @@ -4990,6 +4979,14 @@ void Game::loadsettings(ScreenSettings* screen_settings) } bool Game::savesettings() +{ + ScreenSettings screen_settings; + graphics.screenbuffer->GetSettings(&screen_settings); + + return savesettings(&screen_settings); +} + +bool Game::savesettings(const ScreenSettings* screen_settings) { tinyxml2::XMLDocument doc; bool already_exists = FILESYSTEM_loadTiXml2Document("saves/settings.vvv", doc); @@ -5006,7 +5003,7 @@ bool Game::savesettings() tinyxml2::XMLElement* dataNode = xml::update_element(root, "Data"); - serializesettings(dataNode); + serializesettings(dataNode, screen_settings); return FILESYSTEM_saveTiXml2Document("saves/settings.vvv", doc); } diff --git a/desktop_version/src/Game.h b/desktop_version/src/Game.h index 3e14549e..581b5231 100644 --- a/desktop_version/src/Game.h +++ b/desktop_version/src/Game.h @@ -133,16 +133,18 @@ public: void loadstats(ScreenSettings* screen_settings); + bool savestats(const ScreenSettings* screen_settings); bool savestats(); void deletestats(); void deserializesettings(tinyxml2::XMLElement* dataNode, ScreenSettings* screen_settings); - void serializesettings(tinyxml2::XMLElement* dataNode); + void serializesettings(tinyxml2::XMLElement* dataNode, const ScreenSettings* screen_settings); void loadsettings(ScreenSettings* screen_settings); + bool savesettings(const ScreenSettings* screen_settings); bool savesettings(); bool savestatsandsettings(); diff --git a/desktop_version/src/Screen.cpp b/desktop_version/src/Screen.cpp index 85185d49..20554d39 100644 --- a/desktop_version/src/Screen.cpp +++ b/desktop_version/src/Screen.cpp @@ -93,6 +93,21 @@ void Screen::init(const ScreenSettings& settings) ResizeScreen(settings.windowWidth, settings.windowHeight); } +void Screen::GetSettings(ScreenSettings* settings) +{ + int width, height; + GetWindowSize(&width, &height); + + settings->windowWidth = width; + settings->windowHeight = height; + + settings->fullscreen = !isWindowed; + settings->useVsync = vsync; + settings->stretch = stretchMode; + settings->linearFilter = isFiltered; + settings->badSignal = badSignalEffect; +} + void Screen::LoadIcon() { unsigned char *fileIn = NULL; diff --git a/desktop_version/src/Screen.h b/desktop_version/src/Screen.h index 4f934eaa..b13a7be0 100644 --- a/desktop_version/src/Screen.h +++ b/desktop_version/src/Screen.h @@ -10,6 +10,8 @@ class Screen public: void init(const ScreenSettings& settings); + void GetSettings(ScreenSettings* settings); + void LoadIcon(); void ResizeScreen(int x, int y);