Untitled
unknown
plain_text
a year ago
3.3 kB
24
Indexable
/// @function save_game()
/// @description Saves the specified in (save_data) data, to a file named "Save.dat".
/// The game data is first converted to a JSON string, encoded with Base64, and hashed with SHA-1 for integrity checking. The encoded
/// string and the hash are then saved to the file, separated by a unique delimiter.
function save_game() {
var save_path = "Save.dat";
var save_data = {
inventory: global.Inventory,
equipment: global.EquipmentSlots,
};
// Convert the save data to JSON string
var json_string = json_stringify(save_data);
// Encode the JSON string
var encoded_string = base64_encode(json_string);
// Create a hash of the original JSON string
var hash = sha1_string_utf8(json_string);
// Save the encoded string and hash to a file with a unique delimiter
var delimiter = "|||END_OF_SAVE|||"; // Unique delimiter
var file = file_text_open_write(save_path);
if (file != -1) {
var save_content = encoded_string + delimiter + hash;
file_text_write_string(file, save_content);
file_text_close(file);
show_message("Game saved successfully!");
} else {
show_message("Failed to write to save file location.");
}
}
/// @function load_game()
/// @description Loads the game state from the file "Save.dat". The file content is split into the encoded string and the hash using a unique delimiter.
/// The encoded string is decoded from Base64 back to JSON, and its integrity is verified using the SHA-1 hash. If the integrity check passes, the game data is restored.
function load_game() {
var save_path = "Save.dat";
if (file_exists(save_path)) {
var file = file_text_open_read(save_path);
if (file != -1) {
// Read the entire file content
var file_content = file_text_read_string(file);
file_text_close(file);
// Split the content using the unique delimiter
var delimiter = "|||END_OF_SAVE|||"; // Unique delimiter
var parts = string_split(file_content, delimiter);
// Check if parts contain both the encoded string and the hash
if (array_length(parts) == 2) {
var saved_encoded_string = parts[0];
var saved_hash = parts[1];
// Decode the encoded string
var json_string = base64_decode(saved_encoded_string);
// Verify the hash
var current_hash = sha1_string_utf8(json_string);
if (current_hash == saved_hash) {
// Convert JSON string back to a struct
var save_data = json_parse(json_string);
// Restore game data from the struct
global.Inventory = save_data.inventory;
global.EquipmentSlots = save_data.equipment;
show_message("Game loaded successfully!");
} else {
show_message("Save file integrity check failed.");
}
} else {
show_message("Save file format is incorrect.");
}
} else {
show_message("Failed to read the save file.");
}
} else {
show_message("Save file does not exist.");
}
}Editor is loading...
Leave a Comment