diff --git a/Adventures in Lestoria Tests/Adventures in Lestoria Tests.vcxproj b/Adventures in Lestoria Tests/Adventures in Lestoria Tests.vcxproj
index adb98958..cdc91f11 100644
--- a/Adventures in Lestoria Tests/Adventures in Lestoria Tests.vcxproj
+++ b/Adventures in Lestoria Tests/Adventures in Lestoria Tests.vcxproj
@@ -112,6 +112,10 @@
+
+
+
+
diff --git a/Adventures in Lestoria Tests/Adventures in Lestoria Tests.vcxproj.filters b/Adventures in Lestoria Tests/Adventures in Lestoria Tests.vcxproj.filters
index d8b0f985..f9c3e1eb 100644
--- a/Adventures in Lestoria Tests/Adventures in Lestoria Tests.vcxproj.filters
+++ b/Adventures in Lestoria Tests/Adventures in Lestoria Tests.vcxproj.filters
@@ -78,6 +78,9 @@
Source Files
+
+ Source Files
+
diff --git a/Adventures in Lestoria Tests/FileTests.cpp b/Adventures in Lestoria Tests/FileTests.cpp
new file mode 100644
index 00000000..95306b70
--- /dev/null
+++ b/Adventures in Lestoria Tests/FileTests.cpp
@@ -0,0 +1,113 @@
+#pragma region License
+/*
+License (OLC-3)
+~~~~~~~~~~~~~~~
+
+Copyright 2024 Joshua Sigona
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+1. Redistributions or derivations of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+2. Redistributions or derivative works in binary form must reproduce the above
+copyright notice. This list of conditions and the following disclaimer must be
+reproduced in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may
+be used to endorse or promote products derived from this software without specific
+prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+Portions of this software are copyright © 2024 The FreeType
+Project (www.freetype.org). Please see LICENSE_FT.txt for more information.
+All rights reserved.
+*/
+#pragma endregion
+#include "CppUnitTest.h"
+#include "AdventuresInLestoria.h"
+#include "config.h"
+#include "ItemDrop.h"
+#include "Tutorial.h"
+#include "DamageNumber.h"
+#include "GameHelper.h"
+#include "SaveFile.h"
+#include
+
+using namespace Microsoft::VisualStudio::CppUnitTestFramework;
+using namespace olc::utils;
+
+INCLUDE_MONSTER_DATA
+INCLUDE_game
+INCLUDE_GFX
+INCLUDE_DAMAGENUMBER_LIST
+INCLUDE_MONSTER_LIST
+INCLUDE_INITIALIZEGAMECONFIGURATIONS
+
+namespace FileTests
+{
+ TEST_CLASS(FileTest)
+ {
+ public:
+ std::unique_ptrtestGame;
+ #pragma region Setup Functions
+ void SetupTest(){
+ InitializeGameConfigurations();
+ testGame.reset(new AiL(true));
+ ItemAttribute::Initialize();
+ ItemInfo::InitializeItems();
+ testGame->InitializeGraphics();
+ testGame->InitializeClasses();
+ sig::Animation::InitializeAnimations();
+ testGame->InitializeDefaultKeybinds();
+ testGame->InitializePlayer();
+ sig::Animation::SetupPlayerAnimations();
+ Menu::InitializeMenus();
+ Tutorial::Initialize();
+ Stats::InitializeDamageReductionTable();
+
+ GameState::Initialize();
+ GameState::STATE=GameState::states.at(States::State::GAME_RUN);
+ testGame->ResetLevelStates();
+
+ #pragma region Setup a fake test map
+ game->MAP_DATA["CAMPAIGN_1_1"];
+ game->_SetCurrentLevel("CAMPAIGN_1_1");
+ ItemDrop::ClearDrops();
+ #pragma endregion
+
+ MonsterData testMonsterData{"TestName","Test Monster",30,10,5,{MonsterDropData{"Health Potion",100.f,1,1}},200.f};
+ MONSTER_DATA["TestName"]=testMonsterData;
+
+ Menu::themes.SetInitialized();
+ GFX.SetInitialized();
+ DAMAGENUMBER_LIST.clear();
+ }
+ void SetupMockMap(){
+ game->MAP_DATA["CAMPAIGN_1_1"];
+ ItemDrop::ClearDrops();
+ }
+ #pragma endregion
+
+ TEST_METHOD_INITIALIZE(FileTestInitialize){
+ SetupTest();
+ SetupMockMap();
+ }
+ TEST_METHOD_CLEANUP(CleanupFileTests){
+ testGame->EndGame();
+ testGame->OnUserUpdate(0.f);
+ testGame.reset();
+ }
+ };
+}
\ No newline at end of file
diff --git a/Adventures in Lestoria/SaveFile.cpp b/Adventures in Lestoria/SaveFile.cpp
index e354a851..76cf0fc2 100644
--- a/Adventures in Lestoria/SaveFile.cpp
+++ b/Adventures in Lestoria/SaveFile.cpp
@@ -81,7 +81,7 @@ const size_t SaveFile::GetOnlineSaveFileCount(){
return count;
}
-const void SaveFile::SaveGame(){
+const bool SaveFile::SaveGame(){
game->saveGameDisplayTime=6.f;
game->SetQuitAllowed(false);
@@ -206,41 +206,7 @@ const void SaveFile::SaveGame(){
}
}
- #pragma region Save save file and prep File Hash
- bool fileNoHashWrittenSuccessfully{false};
- bool fileHashWrittenSuccessfully{false};
- while(!fileNoHashWrittenSuccessfully||!fileHashWrittenSuccessfully){
- fileNoHashWrittenSuccessfully=false;
- fileHashWrittenSuccessfully=false;
-
- saveFile["Hash"].SetString("");
- fileNoHashWrittenSuccessfully=utils::datafile::Write(saveFile,"save_file_path"_S+std::format("save.{:04}",saveFileID)+".tmp");
-
- auto trim = [](std::string& s)
- {
- s.erase(0, s.find_first_not_of(" \\\t\n\r\f\v"));
- s.erase(s.find_last_not_of(" \\\t\n\r\f\v") + 1);
- for(int marker=0;markerSetQuitAllowed(true);
#endif
+ return true;
}
-#define HASH_VERIFICATION_REQUIRED true
-
-void SaveFile::LoadFile(){
+const bool SaveFile::LoadFile(){
utils::datafile loadFile;
std::string loadFilename="save_file_path"_S+std::format("save.{:04}",saveFileID);
if(std::filesystem::exists(loadFilename)){
utils::datafile::Read(loadFile,"save_file_path"_S+std::format("save.{:04}",saveFileID));
- if(!ADMIN_MODE&&HASH_VERIFICATION_REQUIRED){
- if(!loadFile.HasProperty("Hash")){
- LOG(std::format("WARNING! Filehash for file {} does not exist!","save_file_path"_S+std::format("save.{:04}",saveFileID)));
- return;
- }
- if(loadFile.HasProperty("Hash")){
- std::string expectedFileHash=loadFile["Hash"].GetString();
- bool fileNoHashWrittenSuccessfully{false};
- bool fileHashWrittenSuccessfully{false};
- while(!fileNoHashWrittenSuccessfully||!fileHashWrittenSuccessfully){
- fileNoHashWrittenSuccessfully=false;
- fileHashWrittenSuccessfully=false;
-
- loadFile["Hash"].SetString("");
- fileNoHashWrittenSuccessfully=utils::datafile::Write(loadFile,"save_file_path"_S+std::format("save.{:04}",saveFileID)+".tmp");
-
- auto trim = [](std::string& s)
- {
- s.erase(0, s.find_first_not_of(" \t\n\r\f\v"));
- s.erase(s.find_last_not_of(" \t\n\r\f\v") + 1);
- for(int marker=0;markerResetGame();
for(auto&[key,data]:loadFile["Items"].GetOrderedKeys()){
std::weak_ptr- newItem=Inventory::AddItem(data["Item Name"].GetString(),data["Amt"].GetInt());
@@ -503,8 +422,10 @@ void SaveFile::LoadFile(){
}
GameState::ChangeState(States::OVERWORLD_MAP,0.5f);
+ return true;
}else{
LOG(std::format("WARNING! File {} does not exist for loading!","save_file_path"_S+std::format("save.{:04}",saveFileID)));
+ return false;
}
};
diff --git a/Adventures in Lestoria/SaveFile.h b/Adventures in Lestoria/SaveFile.h
index c91cbe10..8aed264b 100644
--- a/Adventures in Lestoria/SaveFile.h
+++ b/Adventures in Lestoria/SaveFile.h
@@ -63,9 +63,9 @@ public:
static void SetOnlineMode(bool online);
static const std::string_view GetUserID();
static const void SetUserID(std::string_view userID);
- static const void SaveGame();
+ static const bool SaveGame();
static const void LoadGame();
- static void LoadFile();
+ static const bool LoadFile();
static const void SetSaveFileID(size_t saveFileID);
static const void SetSaveFileOfflineID_TransitionToOverworldMap();
//Called whenever the save game data is updated.
diff --git a/Adventures in Lestoria/Version.h b/Adventures in Lestoria/Version.h
index 4b559a4d..4fd8247f 100644
--- a/Adventures in Lestoria/Version.h
+++ b/Adventures in Lestoria/Version.h
@@ -39,7 +39,7 @@ All rights reserved.
#define VERSION_MAJOR 1
#define VERSION_MINOR 3
#define VERSION_PATCH 0
-#define VERSION_BUILD 11563
+#define VERSION_BUILD 11565
#define stringify(a) stringify_(a)
#define stringify_(a) #a
diff --git a/x64/Release/Adventures in Lestoria.exe b/x64/Release/Adventures in Lestoria.exe
index aff11b9d..d59e0130 100644
Binary files a/x64/Release/Adventures in Lestoria.exe and b/x64/Release/Adventures in Lestoria.exe differ