crowd markers, unsheathed sword correct

This commit is contained in:
2026-08-26 19:13:39 +03:00
parent 95c4c0ddf9
commit c4a19c7443
6 changed files with 163 additions and 401 deletions
+2
View File
@@ -29,6 +29,8 @@ I am a **Godot 4.6+ expert**. I follow current best practices for GDScript, scen
| `levels/level_def.gd` | `LevelDef` resource — a level's name / map colour / `scene_path` (always the shell) / `level_scene` (the level module instanced into the shell) / optional `enemy_scene` (arena wave vs. a boss like the bear) | | `levels/level_def.gd` | `LevelDef` resource — a level's name / map colour / `scene_path` (always the shell) / `level_scene` (the level module instanced into the shell) / optional `enemy_scene` (arena wave vs. a boss like the bear) |
| `levels/map_node.gd` | `MapNode` — one runtime node on the run map (position, level, links) | | `levels/map_node.gd` | `MapNode` — one runtime node on the run map (position, level, links) |
| `levels/MapScreen.tscn` / `levels/map_screen.gd` | Between-fights map screen; win → pick a node → next level | | `levels/MapScreen.tscn` / `levels/map_screen.gd` | Between-fights map screen; win → pick a node → next level |
| `crowd_marker.gd` | `CrowdMarker` (`@tool Node3D`, `class_name`) — designer drops one per billboard spectator via the editor's Add-Node dialog; picks one of six 60°-spaced facings from the `orientation` dropdown. Draws an editor-only preview (slab + forward arrow, never serialised) and joins the `&"crowd_marker"` group |
| `crowd_billboards.gd` / `crowd_billboard.gdshader` | `MultiMeshInstance3D` that harvests every `CrowdMarker` (group `&"crowd_marker"`) into one draw call, using each marker's world position + chosen facing. Front/back sprite sheet baked by `tools/bake_crowd_sheet.gd`; falls back to a generated inward-facing ring when no markers are placed |
| `debug_params.gd` | Runtime-tunable parameter registry (autoload `DP`) | | `debug_params.gd` | Runtime-tunable parameter registry (autoload `DP`) |
| `Assets/` | Raw 3D assets (`.glb`, `.fbx`) | | `Assets/` | Raw 3D assets (`.glb`, `.fbx`) |
| `Blender/` | Blender source files, animation scripts, FBX exports | | `Blender/` | Blender source files, animation scripts, FBX exports |
+37 -55
View File
@@ -1,19 +1,16 @@
extends MultiMeshInstance3D extends MultiMeshInstance3D
## A whole stand of cheering spectators rendered as camera-facing billboards in a ## A whole stand of cheering spectators rendered as flat billboards in a single draw
## single draw call — the performant replacement for dozens of skinned crowd skeletons. ## call — the performant replacement for dozens of skinned crowd skeletons. The sprite
## The sprite sheet is baked from the existing crowd figure by tools/bake_crowd_sheet.gd. ## sheet is baked from the existing crowd figure by tools/bake_crowd_sheet.gd.
## ##
## Placement mirrors an existing crowd node (default: the sibling PublikNode) so the ## Placement comes from CrowdMarker nodes the designer drops into the level (collected
## billboards land exactly where the crowd was authored; if that node is missing it ## via the &"crowd_marker" group): each marker gives one spectator its world position and
## falls back to a generated tribune so the scene still populates. ## a chosen facing (one of six 60°-spaced headings). If no markers are present the scene
## falls back to a generated tribune so it still populates.
const SHEET_PATH := "res://Assets/crowd_clap_sheet.png" const SHEET_PATH := "res://Assets/crowd_clap_sheet.png"
const SHADER_PATH := "res://crowd_billboard.gdshader" const SHADER_PATH := "res://crowd_billboard.gdshader"
## Node whose descendant figures (names starting with `figure_prefix`) donate their
## world positions. Empty = use the generated fallback stand.
@export var source_path: NodePath = ^"../PublikNode"
@export var figure_prefix: String = "mees"
## World height of a spectator billboard, in metres. Sheet aspect sets the width. ## World height of a spectator billboard, in metres. Sheet aspect sets the width.
@export var figure_height: float = 2.0 @export var figure_height: float = 2.0
@export var frames: int = 8 @export var frames: int = 8
@@ -36,7 +33,8 @@ var _rng := RandomNumberGenerator.new()
func _ready() -> void: func _ready() -> void:
_rng.seed = hash("bullosseum-crowd") # deterministic layout/phases across runs _rng.seed = hash("bullosseum-crowd") # deterministic layout/phases across runs
_build() # Deferred so every CrowdMarker has run _ready and joined the group before we harvest.
_build.call_deferred()
func _build() -> void: func _build() -> void:
@@ -58,71 +56,53 @@ func _build() -> void:
mat.set_shader_parameter("fps", clap_fps) mat.set_shader_parameter("fps", clap_fps)
material_override = mat material_override = mat
var seats := _seat_positions() # Each seat is a (global feet-position, unit forward) pair.
var center := _arena_center(seats) var positions := PackedVector3Array()
var facings: Array[Vector3] = []
_collect_seats(positions, facings)
var mm := MultiMesh.new() var mm := MultiMesh.new()
mm.transform_format = MultiMesh.TRANSFORM_3D mm.transform_format = MultiMesh.TRANSFORM_3D
mm.use_custom_data = true mm.use_custom_data = true
mm.mesh = quad mm.mesh = quad
mm.instance_count = seats.size() mm.instance_count = positions.size()
for i in seats.size(): for i in positions.size():
var s := 1.0 + _rng.randf_range(-0.06, 0.06) # slight height variety var s := 1.0 + _rng.randf_range(-0.06, 0.06) # slight height variety
mm.set_instance_transform(i, Transform3D(_facing_basis(seats[i], center, s), seats[i])) mm.set_instance_transform(i, Transform3D(_upright_basis(facings[i], s), positions[i]))
var b := 1.0 + _rng.randf_range(-tint_variation, tint_variation) var b := 1.0 + _rng.randf_range(-tint_variation, tint_variation)
mm.set_instance_custom_data(i, Color(_rng.randf(), b, b * 0.99, b * 0.98)) mm.set_instance_custom_data(i, Color(_rng.randf(), b, b * 0.99, b * 0.98))
multimesh = mm multimesh = mm
# Orientation for a seat: the sprite's forward (+Z, the quad's face) points horizontally # Upright basis whose forward (+Z, the quad's face) points along `look`, uniformly
# inward at the arena centre, so each ring segment faces the action instead of the # scaled by `s`. World +Y stays up so spectators never tilt.
# camera. Upright (world +Y), uniformly scaled by `s`. func _upright_basis(look: Vector3, s: float) -> Basis:
func _facing_basis(seat: Vector3, center: Vector3, s: float) -> Basis:
var look := center - seat
look.y = 0.0 look.y = 0.0
look = look.normalized() if look.length() > 0.001 else Vector3(0.0, 0.0, -1.0) look = look.normalized() if look.length() > 0.001 else Vector3(0.0, 0.0, 1.0)
var up := Vector3.UP var up := Vector3.UP
var right := up.cross(look).normalized()
var basis := Basis() var basis := Basis()
basis.x = right basis.x = up.cross(look).normalized()
basis.y = up basis.y = up
basis.z = look basis.z = look
return basis.scaled(Vector3.ONE * s) return basis.scaled(Vector3.ONE * s)
# Horizontal centre the crowd faces — the mean of the seat positions (the ring/stand # Seats from designer-placed CrowdMarker nodes: each contributes its world position and
# centroid), which for an arena crowd is the middle of the pitch. # its chosen 60°-spaced facing. With no markers present, fall back to a generated ring
func _arena_center(seats: PackedVector3Array) -> Vector3: # that faces inward so the scene still shows a crowd.
if seats.is_empty(): func _collect_seats(positions: PackedVector3Array, facings: Array[Vector3]) -> void:
return global_position for node in get_tree().get_nodes_in_group(&"crowd_marker"):
var sum := Vector3.ZERO var marker := node as Node3D
for p in seats: if marker == null or not marker.has_method(&"facing_dir"):
sum += p continue
return sum / float(seats.size()) positions.append(marker.global_position)
facings.append(marker.facing_dir())
if positions.is_empty():
_fallback_stand(positions, facings)
# Global feet-positions for every spectator: harvested from the source crowd if present, func _fallback_stand(positions: PackedVector3Array, facings: Array[Vector3]) -> void:
# otherwise the generated fallback tribune.
func _seat_positions() -> PackedVector3Array:
var out := PackedVector3Array()
var src := get_node_or_null(source_path)
if src != null:
_collect_figures(src, out)
if out.is_empty():
_fallback_stand(out)
return out
func _collect_figures(node: Node, out: PackedVector3Array) -> void:
if node is Node3D and node != self and (node as Node3D).name.begins_with(figure_prefix):
out.append((node as Node3D).global_position)
return # don't descend into a figure's own rig
for c in node.get_children():
_collect_figures(c, out)
func _fallback_stand(out: PackedVector3Array) -> void:
var placed := 0 var placed := 0
for row in fallback_rows: for row in fallback_rows:
var radius := fallback_inner_radius + float(row) * fallback_row_step var radius := fallback_inner_radius + float(row) * fallback_row_step
@@ -133,5 +113,7 @@ func _fallback_stand(out: PackedVector3Array) -> void:
if placed >= fallback_count: if placed >= fallback_count:
return return
var ang := TAU * float(s) / float(seats_in_row) var ang := TAU * float(s) / float(seats_in_row)
out.append(Vector3(cos(ang) * radius, y, sin(ang) * radius)) var pos := Vector3(cos(ang) * radius, y, sin(ang) * radius)
positions.append(pos)
facings.append(-pos) # face the ring centre (origin)
placed += 1 placed += 1
+89
View File
@@ -0,0 +1,89 @@
@tool
extends Node3D
class_name CrowdMarker
## A designer-placed spot for one billboard spectator. Drop these into a level in the
## editor; crowd_billboards.gd harvests every marker (via the &"crowd_marker" group) into
## its MultiMesh at runtime, using each marker's global position and chosen facing.
##
## The marker draws a lightweight preview (a slab standing in for the sprite + a forward
## arrow) so its position and orientation are visible in the viewport. That preview is
## editor-only and never serialised into the scene, so it costs nothing at runtime.
## The six selectable facings, one every 60° about the Y axis. DEG_0 faces the quad's
## front (+Z) along world +Z; increasing values rotate clockwise looking down.
enum Orientation {
DEG_0,
DEG_60,
DEG_120,
DEG_180,
DEG_240,
DEG_300,
}
const ORIENTATION_STEPS := 6
## Metres — matches crowd_billboards.figure_height so the editor preview reads true to scale.
const PREVIEW_HEIGHT := 2.0
@export var orientation := Orientation.DEG_0:
set(value):
orientation = value
_apply_orientation()
var _preview: Node3D
func _ready() -> void:
add_to_group(&"crowd_marker")
if Engine.is_editor_hint():
_build_preview()
_apply_orientation()
# Facing about Y for the current orientation: 0, 60, 120 … degrees as radians.
func facing_yaw() -> float:
return float(orientation) * (TAU / float(ORIENTATION_STEPS))
# Unit forward the spectator's front (+Z) points along, on the horizontal plane.
func facing_dir() -> Vector3:
var a := facing_yaw()
return Vector3(sin(a), 0.0, cos(a))
func _apply_orientation() -> void:
if _preview != null:
_preview.rotation = Vector3(0.0, facing_yaw(), 0.0)
# Editor-only preview. Children are added without an owner so they are excluded from the
# saved .tscn (Godot only serialises nodes owned by the scene root).
func _build_preview() -> void:
_preview = Node3D.new()
add_child(_preview)
var aspect := 0.5
var slab := MeshInstance3D.new()
var quad := QuadMesh.new()
quad.size = Vector2(PREVIEW_HEIGHT * aspect, PREVIEW_HEIGHT)
quad.center_offset = Vector3(0.0, PREVIEW_HEIGHT * 0.5, 0.0) # stand on the marker
slab.mesh = quad
slab.material_override = _preview_material(Color(0.3, 0.7, 1.0, 0.35))
_preview.add_child(slab)
var arrow := MeshInstance3D.new()
var shaft := BoxMesh.new()
shaft.size = Vector3(0.08, 0.08, PREVIEW_HEIGHT * 0.5)
arrow.mesh = shaft
# Push the shaft out along +Z (the facing) and up to chest height.
arrow.position = Vector3(0.0, PREVIEW_HEIGHT * 0.5, PREVIEW_HEIGHT * 0.25)
arrow.material_override = _preview_material(Color(1.0, 0.85, 0.2, 0.9))
_preview.add_child(arrow)
func _preview_material(col: Color) -> StandardMaterial3D:
var mat := StandardMaterial3D.new()
mat.albedo_color = col
mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
mat.cull_mode = BaseMaterial3D.CULL_DISABLED
return mat
+1
View File
@@ -0,0 +1 @@
uid://70j3ks1emhkd
+5 -3
View File
@@ -256,12 +256,14 @@ func _register_all() -> void:
_reg_f("Bear", "bear_stagger_cd", 1.0, 0.0, 4.0, 0.05) _reg_f("Bear", "bear_stagger_cd", 1.0, 0.0, 4.0, 0.05)
# ── Sword ───────────────────────────────────────────────────────────────── # ── Sword ─────────────────────────────────────────────────────────────────
# Local seating of the sword in the right hand (drawn / fighting). # Local seating of the sword in the right hand (drawn / fighting).
# Defaults are identity — the bone is oriented in Blender to seat the sword # The blade model runs along its local +Z, but weapon_bone (like every rig bone)
# directly; these exist to fine-tune in-game without re-exporting. # points down its local +Y — so identity leaves the blade jutting out sideways.
# rot_x = -90 maps the blade's +Z onto the bone's +Y so it thrusts straight along
# the bone; rot_y is then the free roll (crossguard tilt) about the blade axis.
_reg_f("Sword", "sword_pos_x", 0.0, -1.0, 1.0, 0.01) _reg_f("Sword", "sword_pos_x", 0.0, -1.0, 1.0, 0.01)
_reg_f("Sword", "sword_pos_y", 0.0, -1.0, 1.0, 0.01) _reg_f("Sword", "sword_pos_y", 0.0, -1.0, 1.0, 0.01)
_reg_f("Sword", "sword_pos_z", 0.0, -1.0, 1.0, 0.01) _reg_f("Sword", "sword_pos_z", 0.0, -1.0, 1.0, 0.01)
_reg_f("Sword", "sword_rot_x", 0.0, -180.0, 180.0, 1.0) _reg_f("Sword", "sword_rot_x", -90.0, -180.0, 180.0, 1.0)
_reg_f("Sword", "sword_rot_y", 0.0, -180.0, 180.0, 1.0) _reg_f("Sword", "sword_rot_y", 0.0, -180.0, 180.0, 1.0)
_reg_f("Sword", "sword_rot_z", 0.0, -180.0, 180.0, 1.0) _reg_f("Sword", "sword_rot_z", 0.0, -180.0, 180.0, 1.0)
# Local seating of the sword in the hip holster (sheathed / wandering). # Local seating of the sword in the hip holster (sheathed / wandering).
+29 -343
View File
@@ -3,10 +3,7 @@
[ext_resource type="PackedScene" uid="uid://dio67r8ambe7h" path="res://Assets/arena_placeholder_v01.glb" id="2_nxogm"] [ext_resource type="PackedScene" uid="uid://dio67r8ambe7h" path="res://Assets/arena_placeholder_v01.glb" id="2_nxogm"]
[ext_resource type="PackedScene" uid="uid://cl54dt38yj2x" path="res://Assets/Arena.glb" id="3_fy5k1"] [ext_resource type="PackedScene" uid="uid://cl54dt38yj2x" path="res://Assets/Arena.glb" id="3_fy5k1"]
[ext_resource type="Script" uid="uid://dou5ar6tkmng1" path="res://levels/matador_spawn.gd" id="3_spawn"] [ext_resource type="Script" uid="uid://dou5ar6tkmng1" path="res://levels/matador_spawn.gd" id="3_spawn"]
[ext_resource type="PackedScene" uid="uid://cmxqocsdbgufr" path="res://Animations/mees_plaksutab.glb" id="5_m7jmp"] [ext_resource type="Script" uid="uid://70j3ks1emhkd" path="res://crowd_marker.gd" id="9_agtuu"]
[ext_resource type="PackedScene" uid="uid://1y07gn65ktsi" path="res://Animations/ANIM_publik_mees.glb" id="7_xlvrw"]
[ext_resource type="Script" uid="uid://dr6phggarm73e" path="res://Animations/anim_publik_mees.gd" id="8_73fnb"]
[ext_resource type="Script" uid="uid://di0jafakftp3n" path="res://publikum_controller.gd" id="9_pubctrl"]
[ext_resource type="Script" uid="uid://cj0ytlkuavmf4" path="res://crowd_billboards.gd" id="11_crowd"] [ext_resource type="Script" uid="uid://cj0ytlkuavmf4" path="res://crowd_billboards.gd" id="11_crowd"]
[sub_resource type="BoxShape3D" id="BoxShape3D_ulcgi"] [sub_resource type="BoxShape3D" id="BoxShape3D_ulcgi"]
@@ -25,16 +22,17 @@ shape = SubResource("BoxShape3D_ulcgi")
[node name="arena_placeholder_v01" parent="Node3D" unique_id=173047470 instance=ExtResource("2_nxogm")] [node name="arena_placeholder_v01" parent="Node3D" unique_id=173047470 instance=ExtResource("2_nxogm")]
[node name="Arena_draft" parent="Node3D/arena_placeholder_v01" index="0" unique_id=603097973] [node name="Arena_draft" parent="Node3D/arena_placeholder_v01" index="0" unique_id=727602018]
visible = false visible = false
[node name="Wall" parent="Node3D/arena_placeholder_v01" index="1" unique_id=171701243] [node name="Wall" parent="Node3D/arena_placeholder_v01" index="1" unique_id=1457821831]
visible = false visible = false
[node name="CollisionShape3D" parent="Node3D/arena_placeholder_v01/Wall/StaticBody3D" parent_id_path=PackedInt32Array(173047470, 1793167121) index="0" unique_id=404958985] [node name="CollisionShape3D" parent="Node3D/arena_placeholder_v01/Wall/StaticBody3D" parent_id_path=PackedInt32Array(173047470, 1904923047) index="0" unique_id=1063849009]
transform = Transform3D(0.98309773, 0, 0, 0, 0.9558868, 0, 0, 0, 4.061706, 0.13596812, -0.091219574, -5.4371103e-09) transform = Transform3D(0.98309773, 0, 0, 0, 0.9558868, 0, 0, 0, 4.061706, 0.13596812, -0.091219574, -5.4371103e-09)
[node name="Arena2" parent="Node3D/arena_placeholder_v01" unique_id=1270130903 instance=ExtResource("3_fy5k1")] [node name="Arena2" parent="Node3D/arena_placeholder_v01" unique_id=1270130903 instance=ExtResource("3_fy5k1")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.017679214, 9.536743e-07, -0.013886452)
[node name="MatadorSpawner" type="Node3D" parent="." unique_id=1524912967] [node name="MatadorSpawner" type="Node3D" parent="." unique_id=1524912967]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 14) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 14)
@@ -81,346 +79,34 @@ light_energy = 0.106
shadow_enabled = true shadow_enabled = true
shadow_blur = 10.0 shadow_blur = 10.0
[node name="PublikNode" type="Node3D" parent="." unique_id=537560774]
visible = false
[node name="publikum2" type="Node3D" parent="PublikNode" unique_id=632248377]
transform = Transform3D(-0.91522944, 0, -0.4029331, 0, 1, 0, 0.4029331, 0, -0.91522944, 4.195425, 3.6553268, 13.885913)
visible = false
script = ExtResource("9_pubctrl")
[node name="mees_plaksutab" parent="PublikNode/publikum2" unique_id=1523494533 instance=ExtResource("5_m7jmp")]
[node name="mees_plaksutab2" parent="PublikNode/publikum2" unique_id=1136452990 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.8139224, 0, -0.33299255)
[node name="mees_plaksutab3" parent="PublikNode/publikum2" unique_id=1034056333 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5662975, 0, 0.3316717)
[node name="mees_plaksutab4" parent="PublikNode/publikum2" unique_id=1301549876 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -8.003071, 0, 1.5986013)
[node name="mees_plaksutab5" parent="PublikNode/publikum2" unique_id=426787640 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -7.1850557, 0.8316374, 0.36604595)
[node name="mees_plaksutab6" parent="PublikNode/publikum2" unique_id=264608279 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.97025216, 0, 0.24209678, 0, 1, 0, -0.24209678, 0, 0.97025216, -4.039103, 0.8316374, -0.8892679)
[node name="publikum4" type="Node3D" parent="PublikNode" unique_id=627563732]
transform = Transform3D(-0.629974, 0, -0.77661633, 0, 1, 0, 0.77661633, 0, -0.629974, 9.842437, 3.6553268, 10.401334)
visible = false
script = ExtResource("9_pubctrl")
[node name="mees_plaksutab" parent="PublikNode/publikum4" unique_id=1220293959 instance=ExtResource("5_m7jmp")]
[node name="mees_plaksutab2" parent="PublikNode/publikum4" unique_id=1450591086 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.8139224, 0, -0.33299255)
[node name="mees_plaksutab3" parent="PublikNode/publikum4" unique_id=1560510378 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5662975, 0, 0.3316717)
[node name="mees_plaksutab4" parent="PublikNode/publikum4" unique_id=37533204 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -8.003071, 0, 1.5986013)
[node name="mees_plaksutab5" parent="PublikNode/publikum4" unique_id=1261306009 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -7.1850557, 0.8316374, 0.36604595)
[node name="mees_plaksutab6" parent="PublikNode/publikum4" unique_id=1900385491 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.97025216, 0, 0.24209678, 0, 1, 0, -0.24209678, 0, 0.97025216, -4.039103, 0.8316374, -0.8892679)
[node name="publikum5" type="Node3D" parent="PublikNode" unique_id=1812640124]
transform = Transform3D(-0.39064395, 0, 0.920542, 0, 1, 0, -0.920542, 0, -0.39064395, -14.538336, 3.6553268, 3.9378712)
script = ExtResource("9_pubctrl")
[node name="mees_plaksutab" parent="PublikNode/publikum5" unique_id=83635667 instance=ExtResource("5_m7jmp")]
[node name="mees_plaksutab2" parent="PublikNode/publikum5" unique_id=1143183809 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.8139224, 0, -0.33299255)
[node name="mees_plaksutab3" parent="PublikNode/publikum5" unique_id=1283965822 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5662975, 0, 0.3316717)
[node name="mees_plaksutab4" parent="PublikNode/publikum5" unique_id=1691614127 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -8.003071, 0, 1.5986013)
[node name="mees_plaksutab5" parent="PublikNode/publikum5" unique_id=1236404634 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -7.1850557, 0.8316374, 0.36604595)
[node name="mees_plaksutab6" parent="PublikNode/publikum5" unique_id=606457826 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.97025216, 0, 0.24209678, 0, 1, 0, -0.24209678, 0, 0.97025216, -4.039103, 0.8316374, -0.8892679)
[node name="publikum6" type="Node3D" parent="PublikNode" unique_id=629778401]
transform = Transform3D(-0.7681126, 0, 0.64031476, 0, 1, 0, -0.64031476, 0, -0.7681126, -11.103292, 3.6553288, 9.335619)
script = ExtResource("9_pubctrl")
[node name="mees_plaksutab" parent="PublikNode/publikum6" unique_id=1894579943 instance=ExtResource("5_m7jmp")]
[node name="mees_plaksutab2" parent="PublikNode/publikum6" unique_id=1361331032 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.8139224, 0, -0.33299255)
[node name="mees_plaksutab3" parent="PublikNode/publikum6" unique_id=1108954377 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5662975, 0, 0.3316717)
[node name="mees_plaksutab4" parent="PublikNode/publikum6" unique_id=300775025 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -8.003071, 0, 1.5986013)
[node name="mees_plaksutab5" parent="PublikNode/publikum6" unique_id=1733379910 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -7.1850557, 0.8316374, 0.36604595)
[node name="mees_plaksutab6" parent="PublikNode/publikum6" unique_id=903641089 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.97025216, 0, 0.24209678, 0, 1, 0, -0.24209678, 0, 0.97025216, -4.039103, 0.8316374, -0.8892679)
[node name="publikum7" type="Node3D" parent="PublikNode" unique_id=1108195583]
transform = Transform3D(0.55061686, 0, -0.8347584, 0, 1, 0, 0.8347584, 0, 0.55061686, 13.163043, 3.4379854, -5.268345)
script = ExtResource("9_pubctrl")
[node name="mees_plaksutab" parent="PublikNode/publikum7" unique_id=365348429 instance=ExtResource("5_m7jmp")]
[node name="mees_plaksutab2" parent="PublikNode/publikum7" unique_id=1699361442 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.8139224, 0, -0.33299255)
[node name="mees_plaksutab3" parent="PublikNode/publikum7" unique_id=934639622 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5662975, 0, 0.3316717)
[node name="mees_plaksutab4" parent="PublikNode/publikum7" unique_id=1585045587 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -8.003071, 0, 1.5986013)
[node name="mees_plaksutab5" parent="PublikNode/publikum7" unique_id=501748248 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -7.1850557, 0.8316374, 0.36604595)
[node name="mees_plaksutab6" parent="PublikNode/publikum7" unique_id=92474890 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.97025216, 0, 0.24209678, 0, 1, 0, -0.24209678, 0, 0.97025216, -4.039103, 0.8316374, -0.8892679)
[node name="publikum8" type="Node3D" parent="PublikNode" unique_id=1138908471]
transform = Transform3D(0.85247177, 0, -0.5227735, 0, 1, 0, 0.5227735, 0, 0.85247177, 11.217102, 4.568224, -10.151715)
script = ExtResource("9_pubctrl")
[node name="mees_plaksutab" parent="PublikNode/publikum8" unique_id=2110447734 instance=ExtResource("5_m7jmp")]
[node name="mees_plaksutab2" parent="PublikNode/publikum8" unique_id=1304761336 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.8139224, 0, -0.33299255)
[node name="mees_plaksutab3" parent="PublikNode/publikum8" unique_id=1725684741 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5662975, 0, 0.3316717)
[node name="mees_plaksutab4" parent="PublikNode/publikum8" unique_id=2002512340 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -8.003071, 0, 1.5986013)
[node name="mees_plaksutab5" parent="PublikNode/publikum8" unique_id=1527416664 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -7.1850557, 0.8316374, 0.36604595)
[node name="mees_plaksutab6" parent="PublikNode/publikum8" unique_id=1248985994 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.97025216, 0, 0.24209678, 0, 1, 0, -0.24209678, 0, 0.97025216, -4.039103, 0.8316374, -0.8892679)
[node name="publikum3" type="Node3D" parent="PublikNode" unique_id=1978237178]
transform = Transform3D(0.8698311, 0, 0.49334967, 0, 1, 0, -0.49334967, 0, 0.8698311, -4.8910522, 4.627474, -14.224113)
script = ExtResource("9_pubctrl")
[node name="mees_plaksutab" parent="PublikNode/publikum3" unique_id=878298260 instance=ExtResource("5_m7jmp")]
[node name="mees_plaksutab2" parent="PublikNode/publikum3" unique_id=1331430063 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.8139224, 0, -0.33299255)
[node name="mees_plaksutab3" parent="PublikNode/publikum3" unique_id=263054039 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5662975, 0, 0.3316717)
[node name="mees_plaksutab4" parent="PublikNode/publikum3" unique_id=374864807 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -8.003071, 0, 1.5986013)
[node name="mees_plaksutab5" parent="PublikNode/publikum3" unique_id=674678014 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -7.1850557, 0.8316374, 0.36604595)
[node name="mees_plaksutab6" parent="PublikNode/publikum3" unique_id=2055934328 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.97025216, 0, 0.24209678, 0, 1, 0, -0.24209678, 0, 0.97025216, -4.039103, 0.8316374, -0.8892679)
[node name="publikum9" type="Node3D" parent="PublikNode" unique_id=1005200820]
transform = Transform3D(0.9760592, 0, 0.21750516, 0, 1, 0, -0.21750516, 0, 0.9760592, -2.1318102, 3.6553268, -13.557504)
script = ExtResource("9_pubctrl")
[node name="mees_plaksutab" parent="PublikNode/publikum9" unique_id=1436817061 instance=ExtResource("5_m7jmp")]
[node name="mees_plaksutab2" parent="PublikNode/publikum9" unique_id=375947457 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.8139224, 0, -0.33299255)
[node name="mees_plaksutab3" parent="PublikNode/publikum9" unique_id=71021140 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5662975, 0, 0.3316717)
[node name="mees_plaksutab4" parent="PublikNode/publikum9" unique_id=2106738663 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -8.003071, 0, 1.5986013)
[node name="mees_plaksutab5" parent="PublikNode/publikum9" unique_id=283876866 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -7.1850557, 0.8316374, 0.36604595)
[node name="mees_plaksutab6" parent="PublikNode/publikum9" unique_id=1033622841 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.97025216, 0, 0.24209678, 0, 1, 0, -0.24209678, 0, 0.97025216, -4.039103, 0.8316374, -0.8892679)
[node name="publikum11" type="Node3D" parent="PublikNode" unique_id=407707263]
transform = Transform3D(-0.95107377, 0, -0.30896416, 0, 1, 0, 0.30896416, 0, -0.95107377, 2.4321594, 3.6553268, 14.119543)
visible = false
script = ExtResource("9_pubctrl")
[node name="mees_plaksutab" parent="PublikNode/publikum11" unique_id=1140359395 instance=ExtResource("5_m7jmp")]
[node name="mees_plaksutab2" parent="PublikNode/publikum11" unique_id=5897282 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.8139224, 0, -0.33299255)
[node name="mees_plaksutab3" parent="PublikNode/publikum11" unique_id=528539077 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5662975, 0, 0.3316717)
[node name="mees_plaksutab4" parent="PublikNode/publikum11" unique_id=693156815 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -8.003071, 0, 1.5986013)
[node name="mees_plaksutab5" parent="PublikNode/publikum11" unique_id=1138785564 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -7.1850557, 0.8316374, 0.36604595)
[node name="mees_plaksutab6" parent="PublikNode/publikum11" unique_id=576184958 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.97025216, 0, 0.24209678, 0, 1, 0, -0.24209678, 0, 0.97025216, -4.039103, 0.8316374, -0.8892679)
[node name="publikum13" type="Node3D" parent="PublikNode" unique_id=332757108]
transform = Transform3D(-0.2962035, 0, 0.95512486, 0, 1, 0, -0.95512486, 0, -0.2962035, -14.037817, 3.6553268, 2.0647745)
script = ExtResource("9_pubctrl")
[node name="mees_plaksutab" parent="PublikNode/publikum13" unique_id=214289805 instance=ExtResource("5_m7jmp")]
[node name="mees_plaksutab2" parent="PublikNode/publikum13" unique_id=1147139958 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.1134007, 0, 0.6326933)
[node name="mees_plaksutab3" parent="PublikNode/publikum13" unique_id=662075088 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5662975, 0, 0.3316717)
[node name="mees_plaksutab4" parent="PublikNode/publikum13" unique_id=664162740 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -8.003071, 0, 1.5986013)
[node name="mees_plaksutab5" parent="PublikNode/publikum13" unique_id=1967822989 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -7.1850557, 0.8316374, 0.36604595)
[node name="mees_plaksutab6" parent="PublikNode/publikum13" unique_id=1108301136 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.97025216, 0, 0.24209678, 0, 1, 0, -0.24209678, 0, 0.97025216, -4.039103, 0.8316374, -0.8892679)
[node name="publikum15" type="Node3D" parent="PublikNode" unique_id=485853358]
transform = Transform3D(0.43092924, 0, -0.90238583, 0, 1, 0, 0.90238583, 0, 0.43092924, 14.766085, 4.568224, -2.378694)
script = ExtResource("9_pubctrl")
[node name="mees_plaksutab" parent="PublikNode/publikum15" unique_id=525464827 instance=ExtResource("5_m7jmp")]
[node name="mees_plaksutab2" parent="PublikNode/publikum15" unique_id=852905531 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.8139224, 0, -0.33299255)
[node name="mees_plaksutab3" parent="PublikNode/publikum15" unique_id=1785117697 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5662975, 0, 0.3316717)
[node name="mees_plaksutab4" parent="PublikNode/publikum15" unique_id=1380611321 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -8.003071, 0, 1.5986013)
[node name="mees_plaksutab5" parent="PublikNode/publikum15" unique_id=322138980 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -7.1850557, 0.8316374, 0.36604595)
[node name="mees_plaksutab6" parent="PublikNode/publikum15" unique_id=1360012012 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.97025216, 0, 0.24209678, 0, 1, 0, -0.24209678, 0, 0.97025216, -4.039103, 0.8316374, -0.8892679)
[node name="ANIM_publik_mees" parent="PublikNode" unique_id=941250087 instance=ExtResource("7_xlvrw")]
transform = Transform3D(-0.9976194, 0, 0.0689602, 0, 1, 0, -0.0689602, 0, -0.9976194, -2.9310942, 4.1751385, 14.861324)
script = ExtResource("8_73fnb")
[node name="publikum" type="Node3D" parent="PublikNode" unique_id=1122462483]
transform = Transform3D(0.70069104, 0, 0.7134648, 0, 1, 0, -0.7134648, 0, 0.70069104, -9.04294, 3.6553268, -10.339719)
script = ExtResource("9_pubctrl")
[node name="mees_plaksutab" parent="PublikNode/publikum" unique_id=1481053606 instance=ExtResource("5_m7jmp")]
[node name="mees_plaksutab2" parent="PublikNode/publikum" unique_id=984780880 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.8139224, 0, -0.33299255)
[node name="mees_plaksutab3" parent="PublikNode/publikum" unique_id=1137984224 instance=ExtResource("5_m7jmp")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5662975, 0, 0.3316717)
[node name="mees_plaksutab4" parent="PublikNode/publikum" unique_id=1462909335 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -8.003071, 0, 1.5986013)
[node name="mees_plaksutab5" parent="PublikNode/publikum" unique_id=227073959 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.89589787, 0, 0.44426048, 0, 1, 0, -0.44426048, 0, 0.89589787, -7.1850557, 0.8316374, 0.36604595)
[node name="mees_plaksutab6" parent="PublikNode/publikum" unique_id=1680469468 instance=ExtResource("5_m7jmp")]
transform = Transform3D(0.97025216, 0, 0.24209678, 0, 1, 0, -0.24209678, 0, 0.97025216, -4.039103, 0.8316374, -0.8892679)
[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=1750284504] [node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=1750284504]
environment = SubResource("Environment_73fnb") environment = SubResource("Environment_73fnb")
[node name="CrowdBillboards" type="MultiMeshInstance3D" parent="." unique_id=106730614] [node name="CrowdBillboards" type="MultiMeshInstance3D" parent="." unique_id=106730614]
visible = false
script = ExtResource("11_crowd") script = ExtResource("11_crowd")
[node name="CrowdMarker1" type="Node3D" parent="." unique_id=2100000001]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 14)
script = ExtResource("9_agtuu")
orientation = 3
metadata/_custom_type_script = "uid://70j3ks1emhkd"
[node name="CrowdMarker2" type="Node3D" parent="." unique_id=2100000002]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 5, 0)
script = ExtResource("9_agtuu")
orientation = 5
metadata/_custom_type_script = "uid://70j3ks1emhkd"
[node name="CrowdMarker3" type="Node3D" parent="." unique_id=2100000003]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, -14)
script = ExtResource("9_agtuu")
orientation = 0
metadata/_custom_type_script = "uid://70j3ks1emhkd"
[node name="CrowdMarker4" type="Node3D" parent="." unique_id=2100000004]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -14, 5, 0)
script = ExtResource("9_agtuu")
orientation = 1
metadata/_custom_type_script = "uid://70j3ks1emhkd"
[editable path="Node3D/arena_placeholder_v01"] [editable path="Node3D/arena_placeholder_v01"]
[editable path="PublikNode/publikum2/mees_plaksutab"]
[editable path="PublikNode/publikum2/mees_plaksutab2"]
[editable path="PublikNode/publikum2/mees_plaksutab3"]
[editable path="PublikNode/publikum2/mees_plaksutab4"]
[editable path="PublikNode/publikum2/mees_plaksutab5"]
[editable path="PublikNode/publikum2/mees_plaksutab6"]
[editable path="PublikNode/publikum4/mees_plaksutab"]
[editable path="PublikNode/publikum4/mees_plaksutab2"]
[editable path="PublikNode/publikum4/mees_plaksutab3"]
[editable path="PublikNode/publikum4/mees_plaksutab4"]
[editable path="PublikNode/publikum4/mees_plaksutab5"]
[editable path="PublikNode/publikum4/mees_plaksutab6"]
[editable path="PublikNode/publikum5/mees_plaksutab"]
[editable path="PublikNode/publikum5/mees_plaksutab2"]
[editable path="PublikNode/publikum5/mees_plaksutab3"]
[editable path="PublikNode/publikum5/mees_plaksutab4"]
[editable path="PublikNode/publikum5/mees_plaksutab5"]
[editable path="PublikNode/publikum5/mees_plaksutab6"]
[editable path="PublikNode/publikum6/mees_plaksutab"]
[editable path="PublikNode/publikum6/mees_plaksutab2"]
[editable path="PublikNode/publikum6/mees_plaksutab3"]
[editable path="PublikNode/publikum6/mees_plaksutab4"]
[editable path="PublikNode/publikum6/mees_plaksutab5"]
[editable path="PublikNode/publikum6/mees_plaksutab6"]
[editable path="PublikNode/publikum7/mees_plaksutab"]
[editable path="PublikNode/publikum7/mees_plaksutab2"]
[editable path="PublikNode/publikum7/mees_plaksutab3"]
[editable path="PublikNode/publikum7/mees_plaksutab4"]
[editable path="PublikNode/publikum7/mees_plaksutab5"]
[editable path="PublikNode/publikum7/mees_plaksutab6"]
[editable path="PublikNode/publikum8/mees_plaksutab"]
[editable path="PublikNode/publikum8/mees_plaksutab2"]
[editable path="PublikNode/publikum8/mees_plaksutab3"]
[editable path="PublikNode/publikum8/mees_plaksutab4"]
[editable path="PublikNode/publikum8/mees_plaksutab5"]
[editable path="PublikNode/publikum8/mees_plaksutab6"]
[editable path="PublikNode/publikum3/mees_plaksutab"]
[editable path="PublikNode/publikum3/mees_plaksutab2"]
[editable path="PublikNode/publikum3/mees_plaksutab3"]
[editable path="PublikNode/publikum3/mees_plaksutab4"]
[editable path="PublikNode/publikum3/mees_plaksutab5"]
[editable path="PublikNode/publikum3/mees_plaksutab6"]
[editable path="PublikNode/publikum9/mees_plaksutab"]
[editable path="PublikNode/publikum9/mees_plaksutab2"]
[editable path="PublikNode/publikum9/mees_plaksutab3"]
[editable path="PublikNode/publikum9/mees_plaksutab4"]
[editable path="PublikNode/publikum9/mees_plaksutab5"]
[editable path="PublikNode/publikum9/mees_plaksutab6"]
[editable path="PublikNode/publikum11/mees_plaksutab"]
[editable path="PublikNode/publikum11/mees_plaksutab2"]
[editable path="PublikNode/publikum11/mees_plaksutab3"]
[editable path="PublikNode/publikum11/mees_plaksutab4"]
[editable path="PublikNode/publikum11/mees_plaksutab5"]
[editable path="PublikNode/publikum11/mees_plaksutab6"]
[editable path="PublikNode/publikum13/mees_plaksutab"]
[editable path="PublikNode/publikum13/mees_plaksutab2"]
[editable path="PublikNode/publikum13/mees_plaksutab3"]
[editable path="PublikNode/publikum13/mees_plaksutab4"]
[editable path="PublikNode/publikum13/mees_plaksutab5"]
[editable path="PublikNode/publikum13/mees_plaksutab6"]
[editable path="PublikNode/publikum15/mees_plaksutab"]
[editable path="PublikNode/publikum15/mees_plaksutab2"]
[editable path="PublikNode/publikum15/mees_plaksutab3"]
[editable path="PublikNode/publikum15/mees_plaksutab4"]
[editable path="PublikNode/publikum15/mees_plaksutab5"]
[editable path="PublikNode/publikum15/mees_plaksutab6"]
[editable path="PublikNode/ANIM_publik_mees"]
[editable path="PublikNode/publikum/mees_plaksutab"]
[editable path="PublikNode/publikum/mees_plaksutab2"]
[editable path="PublikNode/publikum/mees_plaksutab3"]
[editable path="PublikNode/publikum/mees_plaksutab4"]
[editable path="PublikNode/publikum/mees_plaksutab5"]
[editable path="PublikNode/publikum/mees_plaksutab6"]