Do you want to keep the global.silicate after the player dies and respawns? You'd wanna not reset it to 0 in the player's create event and have it controlled by whether you start a new game or not, or level. You could put it in the room creation code, I'd make a function level_init() or something, which sets all the global variables up to what they should be like at the start of the level, then if the player dies and the level restarts, you could use a global variable "player_dead", or "level_restart", and in the level_init function, check if this variable is true or not.
If it is true, you'd keep any variables that should stay the same after dying, and if say you started a new game or go to a new level you'd set global.player_dead to false just before. This'd be a simple fix to put in place, but it'd probably be better to handle everything with separate functions.