face
Member
GM Version: Studio
Target Platform: Windows
Download: code below
Links: n/a
Summary:
Code that detects the first time the game is run.
Certain games don't like players to go back in their path. You can see in games like the Amnesia Series where it's all about autosaves and not having much controll over the saves.
This will help you do that sort of thing or you can adapt to it and do what suits you best.
To get this to work you need 3 things.
Change the extension of the ".txt" file to ".ini".
I've named mine "firstrun.ini"
A .ini file is uselfull for holding a specific value of data and it will hold that value until it's overwritten or deleted, unlike game variables which reset everytime you start the game.
We need the firstrun to be a fixed value and to not reset.
So now we are going to create an object. I called mine "obj_firstrunchecker". That object will check the value of the .ini file.
We are not done yet. We need another object to change the value of "firstrun" in our .ini file.
Wait! You have those objects but what to do now?
This part takes no code, only logic:
Code not working?
Here's what to NOT do:
Where you place your code matters every single time. Even if you have this object to create all of your game variables:
If this object doesn't run when the game starts and the "a" var is used at game start, every functions that have or need the "a" var will NOT work.
Hope this helps!
Target Platform: Windows
Download: code below
Links: n/a
Summary:
Code that detects the first time the game is run.
Certain games don't like players to go back in their path. You can see in games like the Amnesia Series where it's all about autosaves and not having much controll over the saves.
This will help you do that sort of thing or you can adapt to it and do what suits you best.
To get this to work you need 3 things.
- A .ini file;
- Object to check the ini file at the start of the game;
- Object to change the firstrun value in the .ini file.
INI:
[player]
firstrun = 1
;We'll use 1 for true and 0 for false
;Remember 1 = true; 0 = false
I've named mine "firstrun.ini"
A .ini file is uselfull for holding a specific value of data and it will hold that value until it's overwritten or deleted, unlike game variables which reset everytime you start the game.
We need the firstrun to be a fixed value and to not reset.
So now we are going to create an object. I called mine "obj_firstrunchecker". That object will check the value of the .ini file.
GML:
//obj_firstrunchecker - > Create Event
globalvar firstrun; //It's important that this variable is global
ini_open("firstrun.ini"); //Always open the ini file
firstrun = ini_read_real("player","firstrun",1); //The 1 means that if there's no value or no firstrun.ini file, the function will return 1
ini_close(); //Always close the ini file
if (firstrun == 0) {
//Commands go here
//These are the commands I used
//I wanted to do an autosave/autoload feature and this is how I did it
game_load("data.win");
audio_stop_all();
}
We are not done yet. We need another object to change the value of "firstrun" in our .ini file.
GML:
//obj_firstrunchanger -> Create Event
firstrun = 0; //set the value of the global variable firstrun
ini_open("firstrun.ini");
ini_write_real("player", "firstrun", firstrun); //Change the value of the .ini file with the value of the global variable
ini_close();
This part takes no code, only logic:
- The ini file will go into the included files of your project;
- The obj_firstrunchecker should run when the game starts, in my case, so it can auto load;
- You can put it also in a place where it matters to check if there was a previous run (eg. a change that only should occur if the player gets past a specific level).
Code not working?
Here's what to NOT do:
GML:
//declaring variables after they're used
//opening ini files after the changes
firstrun = ini_read_real("player","firstrun",1);
ini_open("firstrun.ini")
ini_close();
if (firstrun == 0) {
//commands go here
}
globalvar firstrun;
Where you place your code matters every single time. Even if you have this object to create all of your game variables:
GML:
globalvar a;
globalvar b;
globalvar c;
globalvar d;
Hope this helps!
Last edited: