Add in some achievement icons and file hashing saving/loading of save files. Release Build 8515.

This commit is contained in:
sigonasr2 2024-03-29 02:40:06 -05:00
parent d1f95e03c9
commit 3256a686a3
15 changed files with 74 additions and 1 deletions

View File

@ -178,7 +178,14 @@ const void SaveFile::SaveGame(){
saveSystemFile["Fullscreen"].SetBool(game->IsFullscreen());
#pragma endregion
saveFile["Hash"].SetString("");
utils::datafile::Write(saveFile,"save_file_path"_S+std::format("save.{:04}",saveFileID));
std::string fileHash=util::GetHash("save_file_path"_S+std::format("save.{:04}",saveFileID));
saveFile["Hash"].SetString(fileHash);
utils::datafile::Write(saveFile,"save_file_path"_S+std::format("save.{:04}",saveFileID)); //Once the hash has been computed and added, save the file a second time.
utils::datafile::Write(saveSystemFile,"save_file_path"_S+"system.conf");
utils::datafile metadata;
if(onlineMode){
@ -279,6 +286,24 @@ void SaveFile::LoadFile(){
if(std::filesystem::exists(loadFilename)){
utils::datafile::Read(loadFile,"save_file_path"_S+std::format("save.{:04}",saveFileID));
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();
loadFile["Hash"].SetString("");
utils::datafile::Write(loadFile,"save_file_path"_S+std::format("save.{:04}",saveFileID));
std::string fileHash=util::GetHash("save_file_path"_S+std::format("save.{:04}",saveFileID));
if(expectedFileHash!=fileHash){
LOG(std::format("WARNING! Filehash for file {} was not identified as proper! Will not load this file!","save_file_path"_S+std::format("save.{:04}",saveFileID)));
return;
}
loadFile["Hash"].SetString(expectedFileHash); //Now write the hash back into the file since we tampered with it.
utils::datafile::Write(loadFile,"save_file_path"_S+std::format("save.{:04}",saveFileID));
}
game->ResetGame();
for(auto&[key,data]:loadFile["Items"].GetOrderedKeys()){
std::weak_ptr<Item>newItem=Inventory::AddItem(data["Item Name"].GetString(),data["Amt"].GetInt());

View File

@ -10,6 +10,28 @@ Upon the second time entering a stage, the game will spawn a timer that the play
Upon completion of a stage in time trial mode if the player beat their previous time (which they likely will) the record will update.
For each class and stage combination there will be a "dev time"
Achievements
A Good Night's Rest - Unlock the Camp
Handyman - Unlock Greg the Blacksmith
A Strange Gemstone - Complete Chapter 1
Slime Hunter(100), Killer(250), Slayer(1000)
Slime King
Slime King Destroyer (<1 Minute Kill)
Ursule, Mother of Bears
Ursule, Mother of Bears Destroyer (<1 Minute Kill)
Tough as Steel - Obtain Level 5 on Warrior
Skilled Marksman - Obtain Level 5 on Ranger
Controller of Elements - Obtain Level 5 on Wizard
Maxed out a Weapon in Chapter 1
Maxed out an Armor piece in Chapter 1
Wear a full set of maxed out gear
Beat the Devs - Obtained a Time Medal
Speedrunner - Obtained 11 Time Medals
SetAchievement
File Hash on Save/Load.
============================================
Make another actions config file for the main build (The app # is different)

View File

@ -39,7 +39,7 @@ All rights reserved.
#define VERSION_MAJOR 1
#define VERSION_MINOR 0
#define VERSION_PATCH 0
#define VERSION_BUILD 8507
#define VERSION_BUILD 8515
#define stringify(a) stringify_(a)
#define stringify_(a) #a

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

View File

@ -148,6 +148,31 @@ std::u32string util::WrapText(PixelGameEngine*pge,std::u32string str,int width,F
return newStr;
}
std::string util::GetHash(std::string fileName){
std::ifstream file(fileName);
std::string hash="";
uint8_t hashIndex=0;
while(file.good()){
uint8_t hashChar=0;
if(hash.size()==std::numeric_limits<uint8_t>::max()){
hashChar=hash[hashIndex];
}
hashChar+=file.get()*21-7;
hashChar^=hashIndex;
if(hashIndex>0)hashChar+=hash[hashIndex-1];
hashChar%=94;
hashChar+=32;
if(hashChar=='"'){hashChar+=60;}
if(hash.size()<std::numeric_limits<uint8_t>::max()){
hash+=hashChar;
}else{
hash[hashIndex]=hashChar;
}
hashIndex++;
}
return hash;
}
long double operator""_Pixels(long double unitDist){
return unitDist/100*24.;
}

View File

@ -58,6 +58,7 @@ namespace olc::util{
std::string WrapText(PixelGameEngine*pge,std::string str,int width,bool proportional,vd2d scale);
std::u32string WrapText(PixelGameEngine*pge,std::u32string str,int width,Font&font,vd2d scale);
float angle_difference(float angle_1, float angle_2);
std::string GetHash(std::string file);
}
template<class TL, class TR>