diff --git a/Game/scripts/networked_match.gd b/Game/scripts/networked_match.gd index 4981e32a..43b58ca6 100644 --- a/Game/scripts/networked_match.gd +++ b/Game/scripts/networked_match.gd @@ -435,7 +435,11 @@ func _start_server() -> void: var arena_path := server_arena_override if not server_arena_override.is_empty() else ArenaRegistry.random_path() server_arena_override = "" _arena_path = arena_path - arena = (load(arena_path) as PackedScene).instantiate() + # The authoritative simulation needs the shared goals, boundary, and spawn + # markers, not a renderable arena variant. Some imported decoration scenes + # cannot be instantiated by a dedicated export; clients still receive + # arena_path below and instantiate that variant for presentation. + arena = (load(ScenePaths.SERVER_ARENA) as PackedScene).instantiate() add_child(arena) for goal in arena.get_goals(): goal.goal_scored.connect(_handle_goal_scored) diff --git a/Game/scripts/scene_paths.gd b/Game/scripts/scene_paths.gd index 5d20cd88..9abc87b3 100644 --- a/Game/scripts/scene_paths.gd +++ b/Game/scripts/scene_paths.gd @@ -9,3 +9,7 @@ const LOBBY := "res://scenes/lobby.tscn" # previously only ever reached by test harnesses hardcoding the string. const NETWORKED_MATCH := "res://scenes/networked_match.tscn" const SERVER_BOOT := "res://scenes/server_boot.tscn" +# Arena variants add presentation-only scenery. The dedicated server uses the +# common physical layout instead, while MatchSim still tells clients which +# variant to render. +const SERVER_ARENA := "res://scenes/arena_base.tscn"