From 698c5eea9b01e7e20ce92fa0b40f00147f1d4453 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Sun, 3 May 2026 09:27:22 +0200 Subject: [PATCH] fix(client): parse-order fixes for Protocol autoload and MetaScreen extends MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Protocol.gd is an autoload — replace Messagepack class_name refs with inline load() calls via a static helper. main_menu.gd extends MetaScreen by class_name which fails at parse time; switch to path-based extends. Co-Authored-By: Claude Sonnet 4.6 --- client/scripts/protocol/protocol.gd | 19 +++++++++++-------- client/ui/meta/screens/main_menu/main_menu.gd | 2 +- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/client/scripts/protocol/protocol.gd b/client/scripts/protocol/protocol.gd index f1693ceb5..744b7afd2 100644 --- a/client/scripts/protocol/protocol.gd +++ b/client/scripts/protocol/protocol.gd @@ -9,6 +9,9 @@ extends Node ## Unit enum variants (no data) → bare strings ("MoveNorth", "Npc") ## Data enum variants → single-element maps ({"UsePerceptionMode": "thermal"}) +static func _mp(): + return load("res://addons/messagepack/messagepack.gd") + # -- Decode: bytes from server → GDScript types -------------------------------- @@ -17,7 +20,7 @@ extends Node ## v2 fields (version, game_time, player_facing, visible_tiles) default to null/empty ## when decoding v1 snapshots for backward compatibility. static func decode_snapshot(bytes: PackedByteArray) -> Variant: - var result = Messagepack.decode(bytes) + var result = _mp().decode(bytes) if result.status != null: push_error("Protocol: msgpack decode failed: %s" % result.status) return null @@ -625,7 +628,7 @@ static func encode_startup_message( } if character_visual != null and character_visual.has_method("to_dict"): msg["character_visual_descriptor"] = character_visual.to_dict() - var result = Messagepack.encode(msg) + var result = _mp().encode(msg) if result.status != null: push_error("Protocol: startup message encode failed: %s" % result.status) return PackedByteArray() @@ -646,7 +649,7 @@ static func encode_player_input( "action": action_value, } - var result = Messagepack.encode(input) + var result = _mp().encode(input) if result.status != null: push_error("Protocol: msgpack encode failed: %s" % result.status) return PackedByteArray() @@ -672,7 +675,7 @@ static func encode_player_inputs(inputs: Array) -> PackedByteArray: ) ) - var result = Messagepack.encode(wire_inputs) + var result = _mp().encode(wire_inputs) if result.status != null: push_error("Protocol: msgpack encode failed: %s" % result.status) return PackedByteArray() @@ -705,7 +708,7 @@ static func encode_change_settings(enabled: bool) -> PackedByteArray: "action_data": {"ai_enhanced_dialogue": enabled}, } ] - var result = Messagepack.encode(entries) + var result = _mp().encode(entries) if result.status != null: push_error("Protocol: encode_change_settings failed: %s" % result.status) return PackedByteArray() @@ -716,7 +719,7 @@ static func encode_change_settings(enabled: bool) -> PackedByteArray: ## Unit variant — no payload. Server responds with bookmark_catalog in the next snapshot. static func encode_request_bookmark_catalog() -> PackedByteArray: var entries: Array = [{"tick": 0, "action_name": "RequestBookmarkCatalog", "action_data": null}] - var result = Messagepack.encode(entries) + var result = _mp().encode(entries) if result.status != null: push_error("Protocol: encode_request_bookmark_catalog failed: %s" % result.status) return PackedByteArray() @@ -733,7 +736,7 @@ static func encode_confirm_bookmark(bookmark_id: String, starting_location_id: S "action_data": {"bookmark_id": bookmark_id, "starting_location_id": starting_location_id}, } ] - var result = Messagepack.encode(entries) + var result = _mp().encode(entries) if result.status != null: push_error("Protocol: encode_confirm_bookmark failed: %s" % result.status) return PackedByteArray() @@ -743,7 +746,7 @@ static func encode_confirm_bookmark(bookmark_id: String, starting_location_id: S ## Decode a PlayerInput from MessagePack bytes (used in tests / echo scenarios). ## Returns { "tick": int, "action": { "variant": String, "data": Variant } } or null. static func decode_player_input(bytes: PackedByteArray) -> Variant: - var result = Messagepack.decode(bytes) + var result = _mp().decode(bytes) if result.status != null: push_error("Protocol: msgpack decode failed: %s" % result.status) return null diff --git a/client/ui/meta/screens/main_menu/main_menu.gd b/client/ui/meta/screens/main_menu/main_menu.gd index 55b1badd6..7b935c303 100644 --- a/client/ui/meta/screens/main_menu/main_menu.gd +++ b/client/ui/meta/screens/main_menu/main_menu.gd @@ -1,4 +1,4 @@ -extends MetaScreen +extends "res://ui/meta/meta_screen.gd" ## #258: Main menu — New Game / Continue / Load Game / Quit. ## New Game: opens character creation screen, then starts game. ## Continue: loads most recent save directory.