2.6 KiB
id, icon, group, title, order
| id | icon | group | title | order |
|---|---|---|---|---|
| save | panel.saves | gameplay | Saving games | 6 |
Saving games
A save holds what you mark as persistent, not the whole scene. Loading a save reloads its scene from the project and then applies the save on top.
| Mark | What is saved |
|---|---|
save.Persist component |
the node's transform and enabled flag |
sdk.Persist("field", …) on a component type |
those fields of every such component |
@persist on a script field |
that field of every script instance |
OnSave() / OnLoad() |
values the script writes with save.Put* |
Besides that a save remembers which scene nodes were destroyed and every object made with scene.Spawn: its prefab, parent, pose and persistent data.
@persist
var Coins int
func OnSave() {
save.PutVec2("checkpoint", lastCheckpoint)
}
func OnLoad() {
lastCheckpoint = save.GetVec2("checkpoint", node.Position())
}
| Function | |
|---|---|
save.Save(slot) |
write the game to a slot at the end of the frame |
save.Load(slot) |
reload the saved scene and restore the slot |
save.Checkpoint() |
save to the slot checkpoint |
save.Autosave(seconds) |
save to autosave every given number of real seconds |
save.Exists(slot), save.Delete(slot) |
|
save.SetGlobalInt(key, v), save.GlobalInt(key, def) |
game-wide progress carried by every save; also Float, Bool, String |
Slot names use letters, digits, - and _. Saves live next to the player settings, in saves/ of the profile.
id: save/load icon: file.open parent: save order: 1 title: Loading order
Loading order
- The scene of the save is loaded fresh.
- Scene nodes the save lists as destroyed are destroyed.
- Spawned objects are spawned again with their persistent ids.
- Transforms, component fields and
@persistfields are restored. - Scripts run
Ready, thenOnLoad.
Fields restored in step 4 are already set when Ready runs. A field that is not marked comes from the scene, as on a fresh start.
References between saved nodes survive: a NodeRef to a scene node is saved by its id, a reference into a spawned object by the object's persistent id and the path inside it.
id: save/go icon: code.brackets parent: save order: 2 title: Modules
Modules
A module saves its own state with a section:
r.SaveSection("mygame.quests", questSection{})
A section has Version, Save(world, w), Load(world, r) and Migrate(node, from, to), which runs when a save was written by another version of the section. Sections of modules that are not loaded are kept and written back unchanged.