Add in some achievement icons and file hashing saving/loading of save files. Release Build 8515.
This commit is contained in:
parent
d1f95e03c9
commit
3256a686a3
@ -178,7 +178,14 @@ const void SaveFile::SaveGame(){
|
|||||||
saveSystemFile["Fullscreen"].SetBool(game->IsFullscreen());
|
saveSystemFile["Fullscreen"].SetBool(game->IsFullscreen());
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
|
saveFile["Hash"].SetString("");
|
||||||
|
|
||||||
utils::datafile::Write(saveFile,"save_file_path"_S+std::format("save.{:04}",saveFileID));
|
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::Write(saveSystemFile,"save_file_path"_S+"system.conf");
|
||||||
utils::datafile metadata;
|
utils::datafile metadata;
|
||||||
if(onlineMode){
|
if(onlineMode){
|
||||||
@ -279,6 +286,24 @@ void SaveFile::LoadFile(){
|
|||||||
|
|
||||||
if(std::filesystem::exists(loadFilename)){
|
if(std::filesystem::exists(loadFilename)){
|
||||||
utils::datafile::Read(loadFile,"save_file_path"_S+std::format("save.{:04}",saveFileID));
|
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();
|
game->ResetGame();
|
||||||
for(auto&[key,data]:loadFile["Items"].GetOrderedKeys()){
|
for(auto&[key,data]:loadFile["Items"].GetOrderedKeys()){
|
||||||
std::weak_ptr<Item>newItem=Inventory::AddItem(data["Item Name"].GetString(),data["Amt"].GetInt());
|
std::weak_ptr<Item>newItem=Inventory::AddItem(data["Item Name"].GetString(),data["Amt"].GetInt());
|
||||||
|
@ -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.
|
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"
|
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)
|
Make another actions config file for the main build (The app # is different)
|
@ -39,7 +39,7 @@ All rights reserved.
|
|||||||
#define VERSION_MAJOR 1
|
#define VERSION_MAJOR 1
|
||||||
#define VERSION_MINOR 0
|
#define VERSION_MINOR 0
|
||||||
#define VERSION_PATCH 0
|
#define VERSION_PATCH 0
|
||||||
#define VERSION_BUILD 8507
|
#define VERSION_BUILD 8515
|
||||||
|
|
||||||
#define stringify(a) stringify_(a)
|
#define stringify(a) stringify_(a)
|
||||||
#define stringify_(a) #a
|
#define stringify_(a) #a
|
||||||
|
BIN
Adventures in Lestoria/assets/Achievements/BronzeBorder.xcf
Normal file
BIN
Adventures in Lestoria/assets/Achievements/BronzeBorder.xcf
Normal file
Binary file not shown.
BIN
Adventures in Lestoria/assets/Achievements/GoldBorder.xcf
Normal file
BIN
Adventures in Lestoria/assets/Achievements/GoldBorder.xcf
Normal file
Binary file not shown.
BIN
Adventures in Lestoria/assets/Achievements/SilverBorder.xcf
Normal file
BIN
Adventures in Lestoria/assets/Achievements/SilverBorder.xcf
Normal file
Binary file not shown.
BIN
Adventures in Lestoria/assets/Achievements/kill_slime_1.png
Normal file
BIN
Adventures in Lestoria/assets/Achievements/kill_slime_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 155 KiB |
BIN
Adventures in Lestoria/assets/Achievements/kill_slime_2.png
Normal file
BIN
Adventures in Lestoria/assets/Achievements/kill_slime_2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
Binary file not shown.
After Width: | Height: | Size: 168 KiB |
BIN
Adventures in Lestoria/assets/Achievements/kill_slime_3.png
Normal file
BIN
Adventures in Lestoria/assets/Achievements/kill_slime_3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 127 KiB |
@ -148,6 +148,31 @@ std::u32string util::WrapText(PixelGameEngine*pge,std::u32string str,int width,F
|
|||||||
return newStr;
|
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){
|
long double operator""_Pixels(long double unitDist){
|
||||||
return unitDist/100*24.;
|
return unitDist/100*24.;
|
||||||
}
|
}
|
||||||
|
@ -58,6 +58,7 @@ namespace olc::util{
|
|||||||
std::string WrapText(PixelGameEngine*pge,std::string str,int width,bool proportional,vd2d scale);
|
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);
|
std::u32string WrapText(PixelGameEngine*pge,std::u32string str,int width,Font&font,vd2d scale);
|
||||||
float angle_difference(float angle_1, float angle_2);
|
float angle_difference(float angle_1, float angle_2);
|
||||||
|
std::string GetHash(std::string file);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class TL, class TR>
|
template<class TL, class TR>
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user