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_ptrnewItem=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