RapidGameFramework
Reusable Godot managers for data-driven small games
Loading...
Searching...
No Matches
game_save_migrations.gd
Go to the documentation of this file.
1extends RefCounted
2
3
9
10
11
12static func register_for_game(game_id:String, save_manager) -> bool:
13 match game_id:
14 "reflecting_pool":
15 register_reflecting_pool(save_manager)
16 return true
17 "emoji_card_collector":
18 register_emoji_card_collector(save_manager)
19 return true
20 "project_alchemy":
21 register_project_alchemy(save_manager)
22 return true
23 return false
24
25
26
27static func register_reflecting_pool(save_manager) -> void:
28 save_manager.register_migration(1, func(state):
29 if not state.has("meta"):
30 state["meta"] = {}
31 state["meta"]["game_id"] = "reflecting_pool"
32 if not state.has("run"):
33 state["run"] = {}
34 state["run"]["schema"] = "reflecting_pool_v1"
35 if not state.has("stats"):
36 state["stats"] = {}
37 if not state["stats"].has("progression"):
38 state["stats"]["progression"] = {"counters": {}, "records": {}, "flags": {}}
39 return state
40 )
41
42
43
44static func register_emoji_card_collector(save_manager) -> void:
45 save_manager.register_migration(1, func(state):
46 if not state.has("meta"):
47 state["meta"] = {}
48 state["meta"]["game_id"] = "emoji_card_collector"
49 if not state.has("stats"):
50 state["stats"] = {}
51 state["stats"]["wins"] = int(state["stats"].get("wins", 0))
52 state["stats"]["losses"] = int(state["stats"].get("losses", 0))
53 if not state["stats"].has("progression"):
54 state["stats"]["progression"] = {"counters": {}, "records": {}, "flags": {}}
55 if not state.has("collection"):
56 state["collection"] = {"discovered_card_ids": []}
57 return state
58 )
59
60
61
62static func register_project_alchemy(save_manager) -> void:
63 save_manager.register_migration(1, func(state):
64 if not state.has("meta"):
65 state["meta"] = {}
66 state["meta"]["game_id"] = "project_alchemy"
67 if not state.has("lab"):
68 state["lab"] = {}
69 state["lab"]["schema"] = "project_alchemy_v1"
70 if not state.has("materials"):
71 state["materials"] = {}
72 if not state.has("inventory"):
73 state["inventory"] = {}
74 if not state["inventory"].has("resources"):
75 state["inventory"]["resources"] = state["materials"].get("values", {}).duplicate(true)
76 for category in ["forms", "modifiers", "consumables", "items"]:
77 if not state["inventory"].has(category):
78 state["inventory"][category] = {}
79 if not state["inventory"].has("gold"):
80 state["inventory"]["gold"] = 0
81 if not state.has("codex"):
82 state["codex"] = {}
83 if not state.has("spells"):
84 state["spells"] = {}
85 if not state["spells"].has("unlocked"):
86 state["spells"]["unlocked"] = ["fire_projectile"]
87 if not state["spells"].has("equipped"):
88 state["spells"]["equipped"] = ["fire_projectile"]
89 if not state["spells"].has("created_cards"):
90 state["spells"]["created_cards"] = {}
91 if not state.has("field"):
92 state["field"] = {}
93 state["field"]["selected_mode"] = str(state["field"].get("selected_mode", "arena"))
94 state["field"]["selected_adventure"] = str(state["field"].get("selected_adventure", "mosswood_intro"))
95 if not state["field"].has("adventure_run"):
96 state["field"]["adventure_run"] = {}
97 if not state["field"].has("triggered_adventure_scripts"):
98 state["field"]["triggered_adventure_scripts"] = {}
99 if not state["field"].has("run_collected_resources"):
100 state["field"]["run_collected_resources"] = {}
101 if not state["field"].has("run_damage_taken"):
102 state["field"]["run_damage_taken"] = 0
103 if not state["field"].has("active_spell_projectiles"):
104 state["field"]["active_spell_projectiles"] = []
105 if not state["field"].has("enemy_decision_step_interval"):
106 state["field"]["enemy_decision_step_interval"] = 3
107 if not state.has("stats"):
108 state["stats"] = {}
109 if not state["stats"].has("progression"):
110 state["stats"]["progression"] = {"counters": {}, "records": {}, "flags": {}}
111 return state
112 )