From 8583c2758649cb5350a69405850debf6e3bbe7c9 Mon Sep 17 00:00:00 2001 From: "s0wlz (Matthias Puchstein)" Date: Tue, 14 Apr 2026 03:03:04 +0200 Subject: [PATCH 1/9] =?UTF-8?q?refactor:=20rename=20tavern=20=E2=86=92=20t?= =?UTF-8?q?avern=5Flobby=20(scene=20+=20script)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruf-der-pilze/scenes/{tavern.tscn => tavern_lobby.tscn} | 2 +- ruf-der-pilze/scripts/{tavern.gd => tavern_lobby.gd} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename ruf-der-pilze/scenes/{tavern.tscn => tavern_lobby.tscn} (97%) rename ruf-der-pilze/scripts/{tavern.gd => tavern_lobby.gd} (100%) diff --git a/ruf-der-pilze/scenes/tavern.tscn b/ruf-der-pilze/scenes/tavern_lobby.tscn similarity index 97% rename from ruf-der-pilze/scenes/tavern.tscn rename to ruf-der-pilze/scenes/tavern_lobby.tscn index a559e11..37fe2ed 100644 --- a/ruf-der-pilze/scenes/tavern.tscn +++ b/ruf-der-pilze/scenes/tavern_lobby.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=8 format=3] -[ext_resource type="Script" path="res://scripts/tavern.gd" id="1"] +[ext_resource type="Script" path="res://scripts/tavern_lobby.gd" id="1"] [sub_resource type="Environment" id="Environment_1"] background_mode = 1 diff --git a/ruf-der-pilze/scripts/tavern.gd b/ruf-der-pilze/scripts/tavern_lobby.gd similarity index 100% rename from ruf-der-pilze/scripts/tavern.gd rename to ruf-der-pilze/scripts/tavern_lobby.gd From bc5e64083be7f3d84bc6f7301a73d0743772fff2 Mon Sep 17 00:00:00 2001 From: "s0wlz (Matthias Puchstein)" Date: Tue, 14 Apr 2026 03:03:47 +0200 Subject: [PATCH 2/9] =?UTF-8?q?feat:=20update=20SceneManager=20=E2=80=94?= =?UTF-8?q?=20lobby/tavern/dm=5Fview=20keys,=20game=5Fstarted=20routing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruf-der-pilze/scripts/scene_manager.gd | 34 +++++++++++--------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/ruf-der-pilze/scripts/scene_manager.gd b/ruf-der-pilze/scripts/scene_manager.gd index 9ebc426..d16d319 100644 --- a/ruf-der-pilze/scripts/scene_manager.gd +++ b/ruf-der-pilze/scripts/scene_manager.gd @@ -1,24 +1,23 @@ extends Node const SCENES := { - "tavern": "res://scenes/tavern.tscn", - "chamber": "res://scenes/chamber.tscn", + "lobby": "res://scenes/tavern_lobby.tscn", + "tavern": "res://scenes/tavern.tscn", + "dm_view": "res://scenes/dm_view.tscn", "entrance_hall": "res://scenes/entrance_hall.tscn", - "refectory": "res://scenes/refectory.tscn", - "library": "res://scenes/library.tscn", - "chapel": "res://scenes/chapel.tscn", - "cloister": "res://scenes/cloister.tscn", - "sanctum": "res://scenes/sanctum.tscn", + "refectory": "res://scenes/refectory.tscn", + "library": "res://scenes/library.tscn", + "chapel": "res://scenes/chapel.tscn", + "cloister": "res://scenes/cloister.tscn", + "sanctum": "res://scenes/sanctum.tscn", } +var pending_room_index: int = 0 var _current_scene_node: Node = null func _ready() -> void: NetworkManager.game_started.connect(_on_game_started) - # Defer until main.tscn and its CurrentScene node are in the tree. - # call_deferred is not sufficient here — autoloads init before the main - # scene. Connect to root.ready (fires once, after main scene is ready). get_tree().root.ready.connect(_on_root_ready, CONNECT_ONE_SHOT) @@ -26,7 +25,7 @@ func _on_root_ready() -> void: var args := OS.get_cmdline_args() + OS.get_cmdline_user_args() var is_server := OS.has_feature("dedicated_server") or "--server" in args if not is_server: - transition_to("tavern") + transition_to("lobby") func transition_to(scene_name: String) -> void: @@ -51,13 +50,8 @@ func _on_game_started() -> void: var args := OS.get_cmdline_args() + OS.get_cmdline_user_args() if OS.has_feature("dedicated_server") or "--server" in args: return - # TODO next feature: call _load_for_role("chamber") here once role routing is implemented - print("[SceneManager] Spiel gestartet — chamber transition kommt im nächsten Feature") - - -func _load_for_role(scene_name: String) -> void: - # my_id is only valid after NetworkManager._on_connected_to_server fires. - # Do not call before game_started — my_id will be 0 before that. var role: String = NetworkManager.players.get(NetworkManager.my_id, {}).get("role", "player") - # TODO next feature: load dm variant when role == "dm" - print("[SceneManager] Role %s → %s (stub, not switching yet)" % [role, scene_name]) + if role == "dm": + transition_to("dm_view") + else: + transition_to("tavern") From a97be028b2ccff23a67a1d65caab08c3f40ada02 Mon Sep 17 00:00:00 2001 From: "s0wlz (Matthias Puchstein)" Date: Tue, 14 Apr 2026 03:05:57 +0200 Subject: [PATCH 3/9] refactor: extract taproom as reusable sub-scene, update lobby --- ruf-der-pilze/scenes/taproom.tscn | 120 +++++++++++++++++++++++++ ruf-der-pilze/scenes/tavern_lobby.tscn | 68 ++------------ 2 files changed, 125 insertions(+), 63 deletions(-) create mode 100644 ruf-der-pilze/scenes/taproom.tscn diff --git a/ruf-der-pilze/scenes/taproom.tscn b/ruf-der-pilze/scenes/taproom.tscn new file mode 100644 index 0000000..3cf2816 --- /dev/null +++ b/ruf-der-pilze/scenes/taproom.tscn @@ -0,0 +1,120 @@ +[gd_scene load_steps=22 format=3] + +[sub_resource type="StandardMaterial3D" id="Material_wood"] +albedo_color = Color(0.169, 0.102, 0.051, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_floor"] +size = Vector3(12, 0.1, 8) + +[sub_resource type="BoxShape3D" id="BoxShape3D_floor"] +size = Vector3(12, 0.1, 8) + +[sub_resource type="BoxMesh" id="BoxMesh_ceiling"] +size = Vector3(12, 0.1, 8) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ceiling"] +size = Vector3(12, 0.1, 8) + +[sub_resource type="BoxMesh" id="BoxMesh_wallback"] +size = Vector3(12, 4, 0.1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_wallback"] +size = Vector3(12, 4, 0.1) + +[sub_resource type="BoxMesh" id="BoxMesh_wallleft"] +size = Vector3(0.1, 4, 8) + +[sub_resource type="BoxShape3D" id="BoxShape3D_wallleft"] +size = Vector3(0.1, 4, 8) + +[sub_resource type="BoxMesh" id="BoxMesh_wallright"] +size = Vector3(0.1, 4, 8) + +[sub_resource type="BoxShape3D" id="BoxShape3D_wallright"] +size = Vector3(0.1, 4, 8) + +[sub_resource type="BoxMesh" id="BoxMesh_bar"] +size = Vector3(4, 1.1, 0.3) + +[sub_resource type="BoxShape3D" id="BoxShape3D_bar"] +size = Vector3(4, 1.1, 0.3) + +[sub_resource type="Environment" id="Environment_1"] +background_mode = 1 +background_color = Color(0.102, 0.059, 0, 1) +ambient_light_color = Color(0.6, 0.35, 0.1, 1) +ambient_light_energy = 0.4 +fog_enabled = true +fog_light_color = Color(0.102, 0.059, 0, 1) +fog_density = 0.05 + +[node name="Taproom" type="Node3D"] + +[node name="Floor" type="StaticBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.05, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Floor"] +mesh = SubResource("BoxMesh_floor") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Floor"] +shape = SubResource("BoxShape3D_floor") + +[node name="Ceiling" type="StaticBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4.05, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Ceiling"] +mesh = SubResource("BoxMesh_ceiling") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Ceiling"] +shape = SubResource("BoxShape3D_ceiling") + +[node name="WallBack" type="StaticBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, -4) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="WallBack"] +mesh = SubResource("BoxMesh_wallback") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="WallBack"] +shape = SubResource("BoxShape3D_wallback") + +[node name="WallLeft" type="StaticBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6, 2, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="WallLeft"] +mesh = SubResource("BoxMesh_wallleft") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="WallLeft"] +shape = SubResource("BoxShape3D_wallleft") + +[node name="WallRight" type="StaticBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 2, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="WallRight"] +mesh = SubResource("BoxMesh_wallright") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="WallRight"] +shape = SubResource("BoxShape3D_wallright") + +[node name="Bar" type="StaticBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 0.55, -3.5) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Bar"] +mesh = SubResource("BoxMesh_bar") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Bar"] +shape = SubResource("BoxShape3D_bar") + +[node name="Light" type="OmniLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, 0) +light_color = Color(0.91, 0.643, 0.29, 1) +light_energy = 1.2 +omni_range = 10.0 + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_1") diff --git a/ruf-der-pilze/scenes/tavern_lobby.tscn b/ruf-der-pilze/scenes/tavern_lobby.tscn index 37fe2ed..e4fd68c 100644 --- a/ruf-der-pilze/scenes/tavern_lobby.tscn +++ b/ruf-der-pilze/scenes/tavern_lobby.tscn @@ -1,76 +1,18 @@ -[gd_scene load_steps=8 format=3] +[gd_scene load_steps=2 format=3] [ext_resource type="Script" path="res://scripts/tavern_lobby.gd" id="1"] +[ext_resource type="PackedScene" path="res://scenes/taproom.tscn" id="2"] -[sub_resource type="Environment" id="Environment_1"] -background_mode = 1 -background_color = Color(0.102, 0.059, 0, 1) -ambient_light_color = Color(0.6, 0.35, 0.1, 1) -ambient_light_energy = 0.4 -fog_enabled = true -fog_light_color = Color(0.102, 0.059, 0, 1) -fog_density = 0.05 - -[sub_resource type="StandardMaterial3D" id="Material_1"] -albedo_color = Color(0.169, 0.102, 0.051, 1) - -[sub_resource type="BoxMesh" id="BoxMesh_floor"] -size = Vector3(12, 0.1, 8) - -[sub_resource type="BoxMesh" id="BoxMesh_ceiling"] -size = Vector3(12, 0.1, 8) - -[sub_resource type="BoxMesh" id="BoxMesh_back"] -size = Vector3(12, 4, 0.1) - -[sub_resource type="BoxMesh" id="BoxMesh_left"] -size = Vector3(0.1, 4, 8) - -[sub_resource type="BoxMesh" id="BoxMesh_right"] -size = Vector3(0.1, 4, 8) - -[node name="Tavern" type="Node3D"] +[node name="TavernLobby" type="Node3D"] script = ExtResource("1") +[node name="Taproom" parent="." instance=ExtResource("2")] + [node name="Camera3D" type="Camera3D" parent="."] transform = Transform3D(1, 0, 0, 0, 0.951, 0.309, 0, -0.309, 0.951, 0, 3, 6) fov = 70.0 current = true -[node name="WorldEnvironment" type="WorldEnvironment" parent="."] -environment = SubResource("Environment_1") - -[node name="OmniLight3D" type="OmniLight3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, 0) -light_color = Color(0.91, 0.643, 0.29, 1) -light_energy = 1.2 -omni_range = 10.0 - -[node name="Floor" type="MeshInstance3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.05, 0) -mesh = SubResource("BoxMesh_floor") -surface_material_override/0 = SubResource("Material_1") - -[node name="Ceiling" type="MeshInstance3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4.05, 0) -mesh = SubResource("BoxMesh_ceiling") -surface_material_override/0 = SubResource("Material_1") - -[node name="WallBack" type="MeshInstance3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, -4) -mesh = SubResource("BoxMesh_back") -surface_material_override/0 = SubResource("Material_1") - -[node name="WallLeft" type="MeshInstance3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6, 2, 0) -mesh = SubResource("BoxMesh_left") -surface_material_override/0 = SubResource("Material_1") - -[node name="WallRight" type="MeshInstance3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 2, 0) -mesh = SubResource("BoxMesh_right") -surface_material_override/0 = SubResource("Material_1") - [node name="CanvasLayer" type="CanvasLayer" parent="."] [node name="JoinPanel" type="VBoxContainer" parent="CanvasLayer"] From 30bd407a25f94a325e92a53c51587bca65208e6f Mon Sep 17 00:00:00 2001 From: "s0wlz (Matthias Puchstein)" Date: Tue, 14 Apr 2026 03:07:10 +0200 Subject: [PATCH 4/9] =?UTF-8?q?feat:=20tavern=20scene=20=E2=80=94=20ground?= =?UTF-8?q?=20floor=20blockout=20(taproom,=20kitchen,=20exit,=20myzel=20tr?= =?UTF-8?q?ail)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruf-der-pilze/scenes/tavern.tscn | 105 +++++++++++++++++++++++++++++++ ruf-der-pilze/scripts/tavern.gd | 5 ++ 2 files changed, 110 insertions(+) create mode 100644 ruf-der-pilze/scenes/tavern.tscn create mode 100644 ruf-der-pilze/scripts/tavern.gd diff --git a/ruf-der-pilze/scenes/tavern.tscn b/ruf-der-pilze/scenes/tavern.tscn new file mode 100644 index 0000000..b52e70d --- /dev/null +++ b/ruf-der-pilze/scenes/tavern.tscn @@ -0,0 +1,105 @@ +[gd_scene load_steps=18 format=3] + +[ext_resource type="Script" path="res://scripts/tavern.gd" id="1"] +[ext_resource type="PackedScene" path="res://scenes/taproom.tscn" id="2"] + +[sub_resource type="StandardMaterial3D" id="Material_wood"] +albedo_color = Color(0.169, 0.102, 0.051, 1) + +[sub_resource type="StandardMaterial3D" id="Material_myzel"] +albedo_color = Color(0.2, 0.8, 0.3, 1) +emission_enabled = true +emission = Color(0.1, 0.4, 0.1, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_kitchen_back"] +size = Vector3(4, 3, 0.1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_kitchen_back"] +size = Vector3(4, 3, 0.1) + +[sub_resource type="BoxMesh" id="BoxMesh_kitchen_side"] +size = Vector3(0.1, 3, 2.3) + +[sub_resource type="BoxShape3D" id="BoxShape3D_kitchen_side"] +size = Vector3(0.1, 3, 2.3) + +[sub_resource type="BoxMesh" id="BoxMesh_door"] +size = Vector3(0.1, 4, 2) + +[sub_resource type="BoxShape3D" id="BoxShape3D_door"] +size = Vector3(0.1, 4, 2) + +[sub_resource type="BoxMesh" id="BoxMesh_trail_long"] +size = Vector3(0.5, 0.01, 3) + +[sub_resource type="BoxMesh" id="BoxMesh_trail_medium"] +size = Vector3(0.5, 0.01, 4) + +[node name="Tavern" type="Node3D"] +script = ExtResource("1") + +[node name="Taproom" parent="." instance=ExtResource("2")] + +[node name="GroundFloor" type="Node3D" parent="."] + +[node name="KitchenBack" type="StaticBody3D" parent="GroundFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 1.5, -5.9) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="GroundFloor/KitchenBack"] +mesh = SubResource("BoxMesh_kitchen_back") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="GroundFloor/KitchenBack"] +shape = SubResource("BoxShape3D_kitchen_back") + +[node name="KitchenLeft" type="StaticBody3D" parent="GroundFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.05, 1.5, -4.85) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="GroundFloor/KitchenLeft"] +mesh = SubResource("BoxMesh_kitchen_side") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="GroundFloor/KitchenLeft"] +shape = SubResource("BoxShape3D_kitchen_side") + +[node name="KitchenRight" type="StaticBody3D" parent="GroundFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.95, 1.5, -4.85) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="GroundFloor/KitchenRight"] +mesh = SubResource("BoxMesh_kitchen_side") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="GroundFloor/KitchenRight"] +shape = SubResource("BoxShape3D_kitchen_side") + +[node name="PrivateRoomDoor" type="StaticBody3D" parent="GroundFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6, 2, 2) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="GroundFloor/PrivateRoomDoor"] +mesh = SubResource("BoxMesh_door") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="GroundFloor/PrivateRoomDoor"] +shape = SubResource("BoxShape3D_door") + +[node name="ExitDoor" type="StaticBody3D" parent="GroundFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 2, 4) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="GroundFloor/ExitDoor"] +mesh = SubResource("BoxMesh_door") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="GroundFloor/ExitDoor"] +shape = SubResource("BoxShape3D_door") + +[node name="MyzelTrailGround" type="Node3D" parent="GroundFloor"] + +[node name="TrailSegment1" type="MeshInstance3D" parent="GroundFloor/MyzelTrailGround"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.06, 1.5) +mesh = SubResource("BoxMesh_trail_long") +surface_material_override/0 = SubResource("Material_myzel") + +[node name="TrailSegment2" type="MeshInstance3D" parent="GroundFloor/MyzelTrailGround"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0.06, 0) +mesh = SubResource("BoxMesh_trail_medium") +surface_material_override/0 = SubResource("Material_myzel") diff --git a/ruf-der-pilze/scripts/tavern.gd b/ruf-der-pilze/scripts/tavern.gd new file mode 100644 index 0000000..d3810a7 --- /dev/null +++ b/ruf-der-pilze/scripts/tavern.gd @@ -0,0 +1,5 @@ +extends Node3D + + +func _ready() -> void: + print("[Tavern] Scene loaded. Room index: %d" % SceneManager.pending_room_index) From 1970e5111613acba3a4ebe4534400a5759b0eaa2 Mon Sep 17 00:00:00 2001 From: "s0wlz (Matthias Puchstein)" Date: Tue, 14 Apr 2026 03:10:04 +0200 Subject: [PATCH 5/9] =?UTF-8?q?feat:=20tavern=20scene=20=E2=80=94=20upper?= =?UTF-8?q?=20floor=20blockout=20(8=20rooms=20+=20Anna's=20room,=20SpawnPo?= =?UTF-8?q?ints)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruf-der-pilze/scenes/tavern.tscn | 299 ++++++++++++++++++++++++++++++- 1 file changed, 298 insertions(+), 1 deletion(-) diff --git a/ruf-der-pilze/scenes/tavern.tscn b/ruf-der-pilze/scenes/tavern.tscn index b52e70d..7c438e3 100644 --- a/ruf-der-pilze/scenes/tavern.tscn +++ b/ruf-der-pilze/scenes/tavern.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=18 format=3] +[gd_scene load_steps=28 format=3] [ext_resource type="Script" path="res://scripts/tavern.gd" id="1"] [ext_resource type="PackedScene" path="res://scenes/taproom.tscn" id="2"] @@ -35,6 +35,48 @@ size = Vector3(0.5, 0.01, 3) [sub_resource type="BoxMesh" id="BoxMesh_trail_medium"] size = Vector3(0.5, 0.01, 4) +[sub_resource type="BoxMesh" id="BoxMesh_stairs"] +size = Vector3(1.5, 0.2, 4) + +[sub_resource type="BoxShape3D" id="BoxShape3D_stairs"] +size = Vector3(1.5, 0.2, 4) + +[sub_resource type="BoxMesh" id="BoxMesh_upper_floor"] +size = Vector3(18, 0.1, 8) + +[sub_resource type="BoxShape3D" id="BoxShape3D_upper_floor"] +size = Vector3(18, 0.1, 8) + +[sub_resource type="BoxMesh" id="BoxMesh_upper_wall_long"] +size = Vector3(18, 3, 0.1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_upper_wall_long"] +size = Vector3(18, 3, 0.1) + +[sub_resource type="BoxMesh" id="BoxMesh_upper_wall_short"] +size = Vector3(0.1, 3, 8) + +[sub_resource type="BoxShape3D" id="BoxShape3D_upper_wall_short"] +size = Vector3(0.1, 3, 8) + +[sub_resource type="BoxMesh" id="BoxMesh_bed"] +size = Vector3(1.8, 0.5, 0.9) + +[sub_resource type="BoxShape3D" id="BoxShape3D_bed"] +size = Vector3(1.8, 0.5, 0.9) + +[sub_resource type="BoxMesh" id="BoxMesh_anna_door"] +size = Vector3(0.05, 2.5, 1.2) + +[sub_resource type="BoxShape3D" id="BoxShape3D_anna_door"] +size = Vector3(0.05, 2.5, 1.2) + +[sub_resource type="BoxMesh" id="BoxMesh_myzel_patch"] +size = Vector3(0.8, 0.01, 0.8) + +[sub_resource type="BoxMesh" id="BoxMesh_myzel_trail_anna"] +size = Vector3(0.4, 0.01, 1.5) + [node name="Tavern" type="Node3D"] script = ExtResource("1") @@ -103,3 +145,258 @@ surface_material_override/0 = SubResource("Material_myzel") transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0.06, 0) mesh = SubResource("BoxMesh_trail_medium") surface_material_override/0 = SubResource("Material_myzel") + +[node name="Stairs" type="StaticBody3D" parent="GroundFloor"] +transform = Transform3D(1, 0, 0, 0, 0.906, -0.423, 0, 0.423, 0.906, 0, 1, 3) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="GroundFloor/Stairs"] +mesh = SubResource("BoxMesh_stairs") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="GroundFloor/Stairs"] +shape = SubResource("BoxShape3D_stairs") + +[node name="UpperFloor" type="Node3D" parent="."] + +[node name="Floor" type="StaticBody3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 4, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/Floor"] +mesh = SubResource("BoxMesh_upper_floor") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/Floor"] +shape = SubResource("BoxShape3D_upper_floor") + +[node name="Ceiling" type="StaticBody3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 7, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/Ceiling"] +mesh = SubResource("BoxMesh_upper_floor") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/Ceiling"] +shape = SubResource("BoxShape3D_upper_floor") + +[node name="WallBack" type="StaticBody3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 5.5, -4) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/WallBack"] +mesh = SubResource("BoxMesh_upper_wall_long") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/WallBack"] +shape = SubResource("BoxShape3D_upper_wall_long") + +[node name="WallFront" type="StaticBody3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 5.5, 4) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/WallFront"] +mesh = SubResource("BoxMesh_upper_wall_long") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/WallFront"] +shape = SubResource("BoxShape3D_upper_wall_long") + +[node name="WallLeft" type="StaticBody3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6, 5.5, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/WallLeft"] +mesh = SubResource("BoxMesh_upper_wall_short") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/WallLeft"] +shape = SubResource("BoxShape3D_upper_wall_short") + +[node name="WallRight" type="StaticBody3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 5.5, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/WallRight"] +mesh = SubResource("BoxMesh_upper_wall_short") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/WallRight"] +shape = SubResource("BoxShape3D_upper_wall_short") + +[node name="CorridorWall" type="StaticBody3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 5.5, 2) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/CorridorWall"] +mesh = SubResource("BoxMesh_upper_wall_long") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/CorridorWall"] +shape = SubResource("BoxShape3D_upper_wall_long") + +[node name="Room1" type="Node3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 4.1, 2.8) + +[node name="Bed" type="StaticBody3D" parent="UpperFloor/Room1"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -2.5) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/Room1/Bed"] +mesh = SubResource("BoxMesh_bed") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/Room1/Bed"] +shape = SubResource("BoxShape3D_bed") + +[node name="SpawnPoint" type="Marker3D" parent="UpperFloor/Room1"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0, -1) + +[node name="Room2" type="Node3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 4.1, 2.8) + +[node name="Bed" type="StaticBody3D" parent="UpperFloor/Room2"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -2.5) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/Room2/Bed"] +mesh = SubResource("BoxMesh_bed") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/Room2/Bed"] +shape = SubResource("BoxShape3D_bed") + +[node name="SpawnPoint" type="Marker3D" parent="UpperFloor/Room2"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0, -1) + +[node name="Room3" type="Node3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 4.1, 2.8) + +[node name="Bed" type="StaticBody3D" parent="UpperFloor/Room3"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -2.5) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/Room3/Bed"] +mesh = SubResource("BoxMesh_bed") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/Room3/Bed"] +shape = SubResource("BoxShape3D_bed") + +[node name="SpawnPoint" type="Marker3D" parent="UpperFloor/Room3"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0, -1) + +[node name="Room4" type="Node3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 4.1, 2.8) + +[node name="Bed" type="StaticBody3D" parent="UpperFloor/Room4"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -2.5) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/Room4/Bed"] +mesh = SubResource("BoxMesh_bed") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/Room4/Bed"] +shape = SubResource("BoxShape3D_bed") + +[node name="SpawnPoint" type="Marker3D" parent="UpperFloor/Room4"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0, -1) + +[node name="Room5" type="Node3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 4.1, 2.8) + +[node name="Bed" type="StaticBody3D" parent="UpperFloor/Room5"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -2.5) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/Room5/Bed"] +mesh = SubResource("BoxMesh_bed") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/Room5/Bed"] +shape = SubResource("BoxShape3D_bed") + +[node name="SpawnPoint" type="Marker3D" parent="UpperFloor/Room5"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0, -1) + +[node name="Room6" type="Node3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 4.1, 2.8) + +[node name="Bed" type="StaticBody3D" parent="UpperFloor/Room6"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -2.5) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/Room6/Bed"] +mesh = SubResource("BoxMesh_bed") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/Room6/Bed"] +shape = SubResource("BoxShape3D_bed") + +[node name="SpawnPoint" type="Marker3D" parent="UpperFloor/Room6"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0, -1) + +[node name="Room7" type="Node3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7, 4.1, 2.8) + +[node name="Bed" type="StaticBody3D" parent="UpperFloor/Room7"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -2.5) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/Room7/Bed"] +mesh = SubResource("BoxMesh_bed") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/Room7/Bed"] +shape = SubResource("BoxShape3D_bed") + +[node name="SpawnPoint" type="Marker3D" parent="UpperFloor/Room7"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0, -1) + +[node name="Room8" type="Node3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 4.1, 2.8) + +[node name="Bed" type="StaticBody3D" parent="UpperFloor/Room8"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -2.5) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/Room8/Bed"] +mesh = SubResource("BoxMesh_bed") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/Room8/Bed"] +shape = SubResource("BoxShape3D_bed") + +[node name="SpawnPoint" type="Marker3D" parent="UpperFloor/Room8"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0, -1) + +[node name="Room9" type="Node3D" parent="UpperFloor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11, 4.1, 2.8) + +[node name="Bed" type="StaticBody3D" parent="UpperFloor/Room9"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -2.5) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/Room9/Bed"] +mesh = SubResource("BoxMesh_bed") +surface_material_override/0 = SubResource("Material_myzel") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/Room9/Bed"] +shape = SubResource("BoxShape3D_bed") + +[node name="SpawnPoint" type="Marker3D" parent="UpperFloor/Room9"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0, -1) + +[node name="OpenDoor" type="StaticBody3D" parent="UpperFloor/Room9"] +transform = Transform3D(0, 0, 1, 0, 1, 0, -1, 0, 0, 0.6, 1.25, 0.2) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="UpperFloor/Room9/OpenDoor"] +mesh = SubResource("BoxMesh_anna_door") +surface_material_override/0 = SubResource("Material_wood") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="UpperFloor/Room9/OpenDoor"] +shape = SubResource("BoxShape3D_anna_door") + +[node name="MyzelDecor" type="Node3D" parent="UpperFloor/Room9"] + +[node name="MyzelPatch1" type="MeshInstance3D" parent="UpperFloor/Room9/MyzelDecor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.3, 0.01, -2) +mesh = SubResource("BoxMesh_myzel_patch") +surface_material_override/0 = SubResource("Material_myzel") + +[node name="MyzelPatch2" type="MeshInstance3D" parent="UpperFloor/Room9/MyzelDecor"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.8, -3.8) +mesh = SubResource("BoxMesh_myzel_patch") +surface_material_override/0 = SubResource("Material_myzel") + +[node name="MyzelTrailAnna" type="Node3D" parent="UpperFloor/Room9"] + +[node name="TrailOut" type="MeshInstance3D" parent="UpperFloor/Room9/MyzelTrailAnna"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.06, 1.2) +mesh = SubResource("BoxMesh_myzel_trail_anna") +surface_material_override/0 = SubResource("Material_myzel") From fb189ef53400c25997de21a33fa80570630dbeeb Mon Sep 17 00:00:00 2001 From: "s0wlz (Matthias Puchstein)" Date: Tue, 14 Apr 2026 03:10:36 +0200 Subject: [PATCH 6/9] feat: include room assignments in start_game RPC --- ruf-der-pilze/scripts/network_manager.gd | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/ruf-der-pilze/scripts/network_manager.gd b/ruf-der-pilze/scripts/network_manager.gd index 310bacd..f4b7de7 100644 --- a/ruf-der-pilze/scripts/network_manager.gd +++ b/ruf-der-pilze/scripts/network_manager.gd @@ -118,14 +118,27 @@ func request_start_game() -> void: var requester_id := multiplayer.get_remote_sender_id() if players.get(requester_id, {}).get("role", "") != "dm": return - start_game.rpc() + var assignments := _build_room_assignments() + start_game.rpc(assignments) @rpc("authority", "call_local", "reliable") -func start_game() -> void: +func start_game(room_assignments: Dictionary) -> void: + if my_id in room_assignments: + SceneManager.pending_room_index = room_assignments[my_id] game_started.emit() +func _build_room_assignments() -> Dictionary: + var result := {} + var player_peers: Array = players.keys().filter( + func(id: int) -> bool: return players[id].role == "player" + ) + for i in player_peers.size(): + result[player_peers[i]] = i % 8 # 8 Gästezimmer (Index 0–7) + return result + + # call_remote: Server hat lokal bereits gelöscht; nur Clients führen aus @rpc("authority", "call_remote", "reliable") func _broadcast_player_left(peer_id: int) -> void: From 22b256a9106ec81dfeab70f0f46c830506aae044 Mon Sep 17 00:00:00 2001 From: "s0wlz (Matthias Puchstein)" Date: Tue, 14 Apr 2026 03:11:06 +0200 Subject: [PATCH 7/9] =?UTF-8?q?feat:=20tavern.gd=20=E2=80=94=20spawn=20pla?= =?UTF-8?q?yer=20at=20assigned=20room=20SpawnPoint?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruf-der-pilze/scripts/tavern.gd | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/ruf-der-pilze/scripts/tavern.gd b/ruf-der-pilze/scripts/tavern.gd index d3810a7..23583a2 100644 --- a/ruf-der-pilze/scripts/tavern.gd +++ b/ruf-der-pilze/scripts/tavern.gd @@ -1,5 +1,29 @@ extends Node3D +const ROOM_COUNT := 8 + func _ready() -> void: - print("[Tavern] Scene loaded. Room index: %d" % SceneManager.pending_room_index) + var args := OS.get_cmdline_args() + OS.get_cmdline_user_args() + if OS.has_feature("dedicated_server") or "--server" in args: + return + var room_index := SceneManager.pending_room_index + _spawn_player(room_index) + + +func _spawn_player(room_index: int) -> void: + var room_num := (room_index % ROOM_COUNT) + 1 # Zimmer heißen Room1..Room8 + var spawn_path := "UpperFloor/Room%d/SpawnPoint" % room_num + var spawn := get_node_or_null(spawn_path) as Marker3D + if spawn == null: + push_error("[Tavern] SpawnPoint nicht gefunden: %s" % spawn_path) + return + var controller := Node3D.new() + controller.name = "PlayerController" + var camera := Camera3D.new() + camera.name = "Camera3D" + camera.current = true + controller.add_child(camera) + add_child(controller) + controller.global_transform = spawn.global_transform + print("[Tavern] Spieler gespawnt in %s" % spawn_path) From 81eb6024964c8a351825957f01c0c147bb22a384 Mon Sep 17 00:00:00 2001 From: "s0wlz (Matthias Puchstein)" Date: Tue, 14 Apr 2026 03:11:37 +0200 Subject: [PATCH 8/9] feat: dm_view stub scene --- ruf-der-pilze/scenes/dm_view.tscn | 31 +++++++++++++++++++++++++++++++ ruf-der-pilze/scripts/dm_view.gd | 5 +++++ 2 files changed, 36 insertions(+) create mode 100644 ruf-der-pilze/scenes/dm_view.tscn create mode 100644 ruf-der-pilze/scripts/dm_view.gd diff --git a/ruf-der-pilze/scenes/dm_view.tscn b/ruf-der-pilze/scenes/dm_view.tscn new file mode 100644 index 0000000..ff2337e --- /dev/null +++ b/ruf-der-pilze/scenes/dm_view.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=2 format=3] + +[ext_resource type="Script" path="res://scripts/dm_view.gd" id="1"] + +[node name="DmView" type="Node"] +script = ExtResource("1") + +[node name="ViewportContainer" type="SubViewportContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 + +[node name="SubViewport" type="SubViewport" parent="ViewportContainer"] + +[node name="Camera3D" type="Camera3D" parent="ViewportContainer/SubViewport"] +transform = Transform3D(1, 0, 0, 0, 0, 1, 0, -1, 0, 0, 20, 0) +current = true + +[node name="UI" type="CanvasLayer" parent="."] + +[node name="StubLabel" type="Label" parent="UI"] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -150.0 +offset_top = -30.0 +offset_right = 150.0 +offset_bottom = 30.0 +text = "DM View — Stub +(wird in Schritt 7 ausgebaut)" +horizontal_alignment = 1 diff --git a/ruf-der-pilze/scripts/dm_view.gd b/ruf-der-pilze/scripts/dm_view.gd new file mode 100644 index 0000000..f753936 --- /dev/null +++ b/ruf-der-pilze/scripts/dm_view.gd @@ -0,0 +1,5 @@ +extends Node + + +func _ready() -> void: + print("[DmView] DM-Szene geladen (Stub)") From cb4fe0befcdf30a5dc374001369894893aea79f7 Mon Sep 17 00:00:00 2001 From: "s0wlz (Matthias Puchstein)" Date: Tue, 14 Apr 2026 03:12:11 +0200 Subject: [PATCH 9/9] docs: mark scene switching complete, update STATUS --- docs/STATUS.md | 9 ++++----- ruf-der-pilze/CLAUDE.md | 3 +-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/docs/STATUS.md b/docs/STATUS.md index c657124..d3f2449 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -1,6 +1,6 @@ # Ruf der Pilze — Projektstatus -Zuletzt aktualisiert: 2026-04-14 (Plan Schritt 6 fertig) +Zuletzt aktualisiert: 2026-04-14 (Schritt 5 abgeschlossen) --- @@ -13,14 +13,13 @@ Zuletzt aktualisiert: 2026-04-14 (Plan Schritt 6 fertig) - **Multiplayer Grundgerüst** — ENet Server/Client, NetworkManager Autoload, welcome RPC verifiziert - **Lobby + Rollen** — Join-UI, Warteraum, Spieler/DM-Rollen, Sync, Kick, Spiel-Start-Signal - **Tavern Lobby** — 3D-Taverne ersetzt die flache Lobby-UI; SceneManager Autoload eingeführt +- **Taverne + Szenen-Wechsel** — 2-stöckige In-Game-Taverne (Blockout), taproom.tscn als Sub-Scene, + game_started → Spieler in zugewiesenem Zimmer (SpawnPoint), DM in dm_view.tscn Stub ### 🔄 In Arbeit — (nichts aktiv) ### ⏳ Als nächstes -- **Taverne + Szenen-Wechsel nach Spielstart** — 2-stöckige In-Game-Taverne (Blockout), taproom als Sub-Scene, game_started → Spieler in Zimmer, DM in Stub-Szene - Spec: `docs/superpowers/specs/2026-04-14-tavern-scene-design.md` - Plan: `docs/plans/2026-04-14-tavern-scene-plan.md` - **DM Regiepult Basics** — Top-Down-Karte (EG/OG), Spieler-Positionsmarker, Live-Cam-Feeds pro Spieler, Overlay-Toggle Plan: `docs/plans/2026-04-14-dm-regiepult-basics.md` @@ -32,7 +31,7 @@ Zuletzt aktualisiert: 2026-04-14 (Plan Schritt 6 fertig) 2. ✅ Multiplayer Grundgerüst (Server, Clients verbinden, rpc testen) 3. ✅ Lobby + Rollen (Spieler registrieren sich, DM kriegt Sonderrechte) 4. ✅ Tavern Lobby — 3D-Taverne als Warteraum, SceneManager Autoload -5. ⏳ Szenen-Wechsel nach Spielstart — Chamber/DM-Szene nach game_started +5. ✅ Szenen-Wechsel nach Spielstart — taproom Sub-Scene, 2 Etagen, SpawnPoints, dm_view Stub 6. ⏳ DM Regiepult Basics — Overlay-Toggle, Top-Down pro Etage, Player-Cams Plan: `docs/plans/2026-04-14-dm-regiepult-basics.md` 7. ⏳ Refectorium — asymmetrische Wahrnehmung (erster Raum) diff --git a/ruf-der-pilze/CLAUDE.md b/ruf-der-pilze/CLAUDE.md index 8c7744a..69bc51b 100644 --- a/ruf-der-pilze/CLAUDE.md +++ b/ruf-der-pilze/CLAUDE.md @@ -233,10 +233,9 @@ Verzeichnis: `../Anna_Model/` (außerhalb von `ruf-der-pilze/`, im Repo-Root) 2. ✅ Multiplayer Grundgerüst (Server, Clients verbinden, rpc testen) 3. ✅ Lobby + Rollen (Spieler mit Name + Rolle, DM-Sonderrechte) 4. ✅ Tavern Lobby — 3D-Taverne als Warteraum, SceneManager Autoload -5. ⏳ Taverne + Szenen-Wechsel — 2-stöckige In-Game-Taverne (Blockout), taproom.tscn +5. ✅ Taverne + Szenen-Wechsel — 2-stöckige In-Game-Taverne (Blockout), taproom.tscn als Sub-Scene, game_started → Spieler in Zimmer (SpawnPoint), DM → dm_view.tscn Kein separates "chamber" — Zimmer sind Teil von tavern.tscn - Plan: ../docs/plans/2026-04-14-tavern-scene-plan.md 6. ⏳ DM Regiepult Basics — Overlay-Toggle, Top-Down pro Etage, Player-Cams Plan: `../docs/plans/2026-04-14-dm-regiepult-basics.md` 7. ⏳ Erster Raum — Refectory mit asymmetrischer Wahrnehmung