From f4611e2443270530109f0bdb8bc773d19c97b442 Mon Sep 17 00:00:00 2001 From: Steven Wroblewski Date: Fri, 17 Apr 2026 13:22:56 +0200 Subject: [PATCH] fix(core): serialize character positions as [x,y] arrays for JSON compatibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Vector2 is not a JSON-native type — JSON.stringify converts it to a string, which cannot be assigned back to a Vector2 return type on load. Positions are now saved as [x, y] float arrays and reconstructed as Vector2 in apply_save_data. Co-Authored-By: Claude Sonnet 4.6 --- scripts/autoload/GameState.gd | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/scripts/autoload/GameState.gd b/scripts/autoload/GameState.gd index e06b95e..00eb00b 100644 --- a/scripts/autoload/GameState.gd +++ b/scripts/autoload/GameState.gd @@ -35,8 +35,12 @@ func set_object_state(id: String, state: String) -> void: func get_save_data() -> Dictionary: + var positions: Dictionary = {} + for key: String in _character_positions: + var pos: Vector2 = _character_positions[key] + positions[key] = [pos.x, pos.y] return { - "character_positions": _character_positions, + "character_positions": positions, "object_states": _object_states, "current_room": current_room, "music_volume": music_volume, @@ -46,7 +50,11 @@ func get_save_data() -> Dictionary: func apply_save_data(data: Dictionary) -> void: if data.has("character_positions"): - _character_positions = data["character_positions"] + _character_positions = {} + for key: String in data["character_positions"]: + var val: Variant = data["character_positions"][key] + if val is Array and val.size() >= 2: + _character_positions[key] = Vector2(val[0], val[1]) if data.has("object_states"): _object_states = data["object_states"] if data.has("current_room"):