Oh, good point. But yeah, just using classic Chrome without incognito mode.
this is my short load code that works in html5
if (!file_exists(working_directory + "profiles.json")){
var file = file_text_open_write(working_directory+"profiles.json");
profiles = ds_map_create();
file_text_write_string(file, json_encode(profiles));
file_text_close(file);
}else{
var file = file_text_open_read(working_directory+"profiles.json");
var content = file_text_read_string(file);
file_text_close(file);
profiles = json_decode(content);
}
Hey FieryLion,
Hope all is well and thank you for the in-depth code. Apologies for the late response as I haven't gotten a chance to work on this till now. Your code was helpful, but I'm actually saving my game in a bit of different way. I write all the information into a data structure first, then push to array. Then using "json_stringify" I turn the array into a json string and save to a temporary buffer that includes my save file.
Here's my code after I've determined which values I want to save:
// STEP 3 - JSON STRINGIFY data (convert from array to string) var json_string = json_stringify(save_data); // STEP 4 - BUFFER: create, write, save, delete // (size is string length+1, buffer_fixed means size of buffer doesn't change, alignemnt is 1) var temp_buffer = buffer_create(string_byte_length(json_string)+1, buffer_fixed, 1); buffer_write(temp_buffer, buffer_string, json_string); // write our json_string to the buffer in string format buffer_save(temp_buffer, working_directory + "Saves/" + global.save_file); buffer_delete(temp_buffer); temp_buffer = -1; // reset to -1 show_debug_message("Game saved! " + json_string);
When loading files, it's the same process but backwards. Read from the buffer, then "json_parse", then pop values off the array and back into the objects. After working on this tonight, I feel like I've tried everything. With and without "working directory" and also using a save folder like:
if (file_exists(working_directory + "Saves/" + global.save_file)) { ... }
Also, here's the name of my save file currently:
global.save_file = "dive-bitsloth-fIt0QNLgfAlboxByK9zdWOKRXRvzbMWeafIm4Q6LLlV9vykE5T.save";
I've tested this locally and other than some visual glitches, the saving works functionally. The screen that's coming up can only possibly appear if a save file exists, which I don't see how is possible if it's my first time running the game and have never saved before on itch's server. At this point I'm thinking there's something wrong with itch's CDN as my game saves perfectly on my local server and the 3rd set of characters is a randomly generated 50-character string. Not sure what else to do at this point.
Thanks for all the help so far,
bitsloth
Yup, exactly. This is the one that's showing up:
which should only appear if a saved file was found. I've tried doing the "Start New Game" option which finds and deletes the current save file, but it doesn't really do anything and I still see this screen. Also, the 50-char randomly generated string for the save file variable was a pretty new addition, but after uploading that and running for the first time, same problem. There shouldn't be a duplicate of it on itch's server I believe.
Gotcha, so I tried loading the game (which reads from the phantom file) as soon as it enters the room, but then the game just freezes. Getting this error:
However, I think I know what's going on! I was doing some research earlier tonight and starting looking into the actual errors themselves. 403 is a permissions error, which I think means my game isn't able to access the save file on the remote server. So what I believe is happening (just an educated guess) is that somehow, the game thinks a save file exists, but when it goes to grab it from itch's remote server, it doesn't actually exist so is producing the errors above. I checked GMS2's documentation for "file_exists" and found something really interesting: https://manual.yoyogames.com/GameMaker_Language/GML_Reference/File_Handling/File...
They specifically say:
"Note that the function can only be used to check local files, but not any files stored on a remote server."
So I'm assuming that's the error, since the way I'm checking save files is using that function. However, I do know that you're also using that same function in your code and it's working, so I'm really not sure what's going on 😅.
somehow, the game thinks a save file exists, but when it goes to grab it from itch’s remote server, it doesn’t actually exist so is producing the errors above.
I actually got the same error and came to the same conclusion as you in one of my games.
My solution to that was to use ini_open(filename) this function will create a new ini file if one doesn’t exist
then I check if ini_section_exists(“data”), “data” can be the section name you will write. If this section doesn’t exist then there are no save file (cus its a new ini file being created).
This is roundabout way but it should work!
NOTE: I’m not telling you to write your save data into an ini file, you just need to create an ini file as a way to check if a save file exists
Weirdly enough that was the only game I had that error with file_exists, my other games file_exists work just fine >.<
Ok that makes sense, thank you! So I'm running into a bit of an error trying to do this, as it seems my "options.ini" is in the "html5game" directory. Here's some pics of testing on localhost:
So my game is trying to grab "options.ini" from inside the html5game, but I know that it's not actually in that directory, but rather on the same level based on the image below from one of my previous zip exports.
This is just some test code I have in a "Key Press - P" in my gameManager object.
ini_open("options.ini"); if ini_section_exists("DisplayName") { show_debug_message("section exists"); } ini_close();
However, I have a feeling this is different from what you were suggesting. Is this what you meant by reading the filename - the "options.ini"? Or did you mean I should "ini_open" my save file, the "dive-bitsloth-50char" file? Sorry, first time working with ini files so I'm not too familiar with how this all works haha. I'm a little confused how checking a section in the ini file relates to whether a save file exists. Would this be a custom section I'm creating myself?
I only get a similar error when I play my game in Incognito mode. Are you testing your game in Incognito?
add me on discord if you want to keep in contact 🦁🔥#8269
This is a large part of my load code:
ini_open("settings.ini");
if (!ini_section_exists("data")){
ini_write_real("data", "init game", 1);
ini_write_real("data", "version", version);
ini_write_real("setting", "sound", 1);
global.new_game = true;
loadbar.init = true;
}else{
if (ini_read_real("data", "version", 0) != version){
show_message("WARNING: Save data is of previous version. Unfortunately, data must be reset.");
clear_user_data();
ini_close();
room_restart();
exit;
}
global.new_game = false;
loadbar.rm_next = rmMainMenu;
load_game(); //load the actual save file here
}