Initial scaffold: Godot 4.3 scenes, systems, and placeholders.

Wire all twelve levels with billboard prefabs, autoload systems (inventory, achievements, mock shop, DE/EN/BY), and satire audio locks so the Title→End flow is playable with placeholder assets.
This commit is contained in:
copilot 2026-09-14 18:36:02 +02:00
commit 938cc4bc82
114 changed files with 4819 additions and 0 deletions

73
scenes/death_screen.tscn Normal file
View file

@ -0,0 +1,73 @@
[gd_scene load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/levels/death_screen.gd" id="1"]
[node name="DeathScreen" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1")
[node name="Bg" type="ColorRect" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
color = Color(0.7, 0.1, 0.5, 1)
[node name="Title" type="Label" parent="."]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -300.0
offset_top = 120.0
offset_right = 300.0
offset_bottom = 180.0
theme_override_font_sizes/font_size = 36
horizontal_alignment = 1
text = "DU BIST GESTORBEN"
[node name="Cause" type="Label" parent="."]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -300.0
offset_top = 200.0
offset_right = 300.0
offset_bottom = 250.0
horizontal_alignment = 1
text = "..."
[node name="Skull" type="ColorRect" parent="."]
visible = false
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -40.0
offset_top = -40.0
offset_right = 40.0
offset_bottom = 40.0
color = Color(1, 1, 1, 1)
[node name="ContinueButton" type="Button" parent="."]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -160.0
offset_top = -120.0
offset_right = 160.0
offset_bottom = -70.0
text = "Continue"
[connection signal="pressed" from="ContinueButton" to="." method="_on_continue_pressed"]

58
scenes/end_screen.tscn Normal file
View file

@ -0,0 +1,58 @@
[gd_scene load_steps=8 format=3]
[ext_resource type="Script" path="res://scripts/levels/end_screen.gd" id="1"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/player.tscn" id="2"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/exit_trigger.tscn" id="3"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/npc.tscn" id="4"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/enemy.tscn" id="5"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/hazard.tscn" id="6"]
[sub_resource type="BoxMesh" id="BoxMesh_ground"]
size = Vector3(40, 0.2, 40)
[sub_resource type="StandardMaterial3D" id="Mat_ground"]
albedo_color = Color(0.4, 0.7, 0.45, 1)
shading_mode = 0
[sub_resource type="BoxShape3D" id="BoxShape_ground"]
size = Vector3(40, 0.2, 40)
[node name="end_screen" type="Node3D"]
script = ExtResource("1")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.866, -0.354, 0.354, 0, 0.707, 0.707, -0.5, -0.612, 0.612, 0, 8, 0)
shadow_enabled = false
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.707, 0.707, 0, -0.707, 0.707, 0, 12, 12)
current = true
fov = 50.0
[node name="Ground" type="StaticBody3D" parent="."]
collision_layer = 1
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ground"]
mesh = SubResource("BoxMesh_ground")
surface_material_override/0 = SubResource("Mat_ground")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground"]
shape = SubResource("BoxShape_ground")
[node name="Player" parent="." instance=ExtResource("2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 4)
[node name="BearEnd" parent="." instance=ExtResource("4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0.1, 0)
dialog_key = "dialog_bear_end"
texture_path = "res://assets/sprites/placeholders/bear.png"
[node name="HouseSpot" parent="." instance=ExtResource("4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0.1, -2)
dialog_key = "build_house"
texture_path = "res://assets/sprites/placeholders/house.png"
quest_flag = "house_built"

75
scenes/farm.tscn Normal file
View file

@ -0,0 +1,75 @@
[gd_scene load_steps=8 format=3]
[ext_resource type="Script" path="res://scripts/levels/farm.gd" id="1"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/player.tscn" id="2"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/exit_trigger.tscn" id="3"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/npc.tscn" id="4"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/enemy.tscn" id="5"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/hazard.tscn" id="6"]
[sub_resource type="BoxMesh" id="BoxMesh_ground"]
size = Vector3(40, 0.2, 40)
[sub_resource type="StandardMaterial3D" id="Mat_ground"]
albedo_color = Color(0.45, 0.35, 0.2, 1)
shading_mode = 0
[sub_resource type="BoxShape3D" id="BoxShape_ground"]
size = Vector3(40, 0.2, 40)
[node name="farm" type="Node3D"]
script = ExtResource("1")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.866, -0.354, 0.354, 0, 0.707, 0.707, -0.5, -0.612, 0.612, 0, 8, 0)
shadow_enabled = false
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.707, 0.707, 0, -0.707, 0.707, 0, 12, 12)
current = true
fov = 50.0
[node name="Ground" type="StaticBody3D" parent="."]
collision_layer = 1
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ground"]
mesh = SubResource("BoxMesh_ground")
surface_material_override/0 = SubResource("Mat_ground")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground"]
shape = SubResource("BoxShape_ground")
[node name="Player" parent="." instance=ExtResource("2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 4)
[node name="Farmer" parent="." instance=ExtResource("4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0.1, 0)
dialog_key = "dialog_farmer"
texture_path = "res://assets/sprites/placeholders/farmer.png"
give_item_id = "chicken"
[node name="Urhahn" parent="." instance=ExtResource("5")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0.1, -2)
max_hp = 6
texture_path = "res://assets/sprites/placeholders/rooster.png"
defeat_flag = "urhahn_defeated"
[node name="RoosterHazard" parent="." instance=ExtResource("6")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0.1, -4)
death_cause_key = "death_rooster"
[node name="Dressler" parent="." instance=ExtResource("5")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4, 0.1, -4)
max_hp = 5
texture_path = "res://assets/sprites/placeholders/apple.png"
defeat_flag = "dressler_defeated"
achievement_on_defeat = "dressler_apples"
[node name="Exit" parent="." instance=ExtResource("3")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -12)
require_flag = "urhahn_defeated"

57
scenes/farm_path.tscn Normal file
View file

@ -0,0 +1,57 @@
[gd_scene load_steps=8 format=3]
[ext_resource type="Script" path="res://scripts/levels/farm_path.gd" id="1"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/player.tscn" id="2"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/exit_trigger.tscn" id="3"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/npc.tscn" id="4"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/enemy.tscn" id="5"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/hazard.tscn" id="6"]
[sub_resource type="BoxMesh" id="BoxMesh_ground"]
size = Vector3(40, 0.2, 40)
[sub_resource type="StandardMaterial3D" id="Mat_ground"]
albedo_color = Color(0.55, 0.5, 0.3, 1)
shading_mode = 0
[sub_resource type="BoxShape3D" id="BoxShape_ground"]
size = Vector3(40, 0.2, 40)
[node name="farm_path" type="Node3D"]
script = ExtResource("1")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.866, -0.354, 0.354, 0, 0.707, 0.707, -0.5, -0.612, 0.612, 0, 8, 0)
shadow_enabled = false
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.707, 0.707, 0, -0.707, 0.707, 0, 12, 12)
current = true
fov = 50.0
[node name="Ground" type="StaticBody3D" parent="."]
collision_layer = 1
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ground"]
mesh = SubResource("BoxMesh_ground")
surface_material_override/0 = SubResource("Mat_ground")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground"]
shape = SubResource("BoxShape_ground")
[node name="Player" parent="." instance=ExtResource("2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 4)
[node name="Mage" parent="." instance=ExtResource("4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -3)
dialog_key = "dialog_mage"
texture_path = "res://assets/sprites/placeholders/mage.png"
quest_flag = "mage_talked"
[node name="Exit" parent="." instance=ExtResource("3")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 0.1, -10)
require_flag = "mage_talked"

62
scenes/final_boss.tscn Normal file
View file

@ -0,0 +1,62 @@
[gd_scene load_steps=8 format=3]
[ext_resource type="Script" path="res://scripts/levels/final_boss.gd" id="1"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/player.tscn" id="2"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/exit_trigger.tscn" id="3"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/npc.tscn" id="4"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/enemy.tscn" id="5"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/hazard.tscn" id="6"]
[sub_resource type="BoxMesh" id="BoxMesh_ground"]
size = Vector3(40, 0.2, 40)
[sub_resource type="StandardMaterial3D" id="Mat_ground"]
albedo_color = Color(0.15, 0.05, 0.2, 1)
shading_mode = 0
[sub_resource type="BoxShape3D" id="BoxShape_ground"]
size = Vector3(40, 0.2, 40)
[node name="final_boss" type="Node3D"]
script = ExtResource("1")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.866, -0.354, 0.354, 0, 0.707, 0.707, -0.5, -0.612, 0.612, 0, 8, 0)
shadow_enabled = false
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.707, 0.707, 0, -0.707, 0.707, 0, 12, 12)
current = true
fov = 50.0
[node name="Ground" type="StaticBody3D" parent="."]
collision_layer = 1
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ground"]
mesh = SubResource("BoxMesh_ground")
surface_material_override/0 = SubResource("Mat_ground")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground"]
shape = SubResource("BoxShape_ground")
[node name="Player" parent="." instance=ExtResource("2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 4)
[node name="Hongkong" parent="." instance=ExtResource("5")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -3)
max_hp = 12
texture_path = "res://assets/sprites/placeholders/hongkong.png"
defeat_flag = "hongkong_defeated"
achievement_on_defeat = "beat_hongkong"
[node name="QuirxelHazard" parent="." instance=ExtResource("6")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0.1, -2)
death_cause_key = "death_quirxel"
[node name="Exit" parent="." instance=ExtResource("3")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -12)
require_flag = "hongkong_defeated"

View file

@ -0,0 +1,73 @@
[gd_scene load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/levels/intro_cutscene.gd" id="1"]
[node name="IntroCutscene" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1")
[node name="Bg" type="ColorRect" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
color = Color(0.12, 0.1, 0.08, 1)
[node name="Desk" type="ColorRect" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -200.0
offset_top = -40.0
offset_right = 200.0
offset_bottom = 80.0
color = Color(0.45, 0.28, 0.12, 1)
[node name="Console" type="ColorRect" parent="."]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -60.0
offset_top = -100.0
offset_right = 60.0
offset_bottom = -40.0
color = Color(0.2, 0.2, 0.25, 1)
[node name="Label" type="Label" parent="."]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -400.0
offset_top = 40.0
offset_right = 400.0
offset_bottom = 120.0
horizontal_alignment = 1
autowrap_mode = 3
text = "..."
[node name="SkipButton" type="Button" parent="."]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -80.0
offset_top = -80.0
offset_right = 80.0
offset_bottom = -40.0
text = "Skip / Weiter"
[connection signal="pressed" from="SkipButton" to="." method="_on_skip_pressed"]

View file

@ -0,0 +1,59 @@
[gd_scene load_steps=8 format=3]
[ext_resource type="Script" path="res://scripts/levels/massage_studio.gd" id="1"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/player.tscn" id="2"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/exit_trigger.tscn" id="3"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/npc.tscn" id="4"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/enemy.tscn" id="5"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/hazard.tscn" id="6"]
[sub_resource type="BoxMesh" id="BoxMesh_ground"]
size = Vector3(40, 0.2, 40)
[sub_resource type="StandardMaterial3D" id="Mat_ground"]
albedo_color = Color(0.7, 0.55, 0.5, 1)
shading_mode = 0
[sub_resource type="BoxShape3D" id="BoxShape_ground"]
size = Vector3(40, 0.2, 40)
[node name="massage_studio" type="Node3D"]
script = ExtResource("1")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.866, -0.354, 0.354, 0, 0.707, 0.707, -0.5, -0.612, 0.612, 0, 8, 0)
shadow_enabled = false
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.707, 0.707, 0, -0.707, 0.707, 0, 12, 12)
current = true
fov = 50.0
[node name="Ground" type="StaticBody3D" parent="."]
collision_layer = 1
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ground"]
mesh = SubResource("BoxMesh_ground")
surface_material_override/0 = SubResource("Mat_ground")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground"]
shape = SubResource("BoxShape_ground")
[node name="Player" parent="." instance=ExtResource("2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 4)
[node name="CowMasseur" parent="." instance=ExtResource("4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -2)
dialog_key = "dialog_cow"
texture_path = "res://assets/sprites/placeholders/cow.png"
require_item_id = "snake"
consume_required = true
quest_flag = "snake_massaged"
achievement_id = "snake_massage"
[node name="Exit" parent="." instance=ExtResource("3")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -10)

65
scenes/meadow.tscn Normal file
View file

@ -0,0 +1,65 @@
[gd_scene load_steps=8 format=3]
[ext_resource type="Script" path="res://scripts/levels/meadow.gd" id="1"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/player.tscn" id="2"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/exit_trigger.tscn" id="3"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/npc.tscn" id="4"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/enemy.tscn" id="5"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/hazard.tscn" id="6"]
[sub_resource type="BoxMesh" id="BoxMesh_ground"]
size = Vector3(40, 0.2, 40)
[sub_resource type="StandardMaterial3D" id="Mat_ground"]
albedo_color = Color(0.4, 0.75, 0.3, 1)
shading_mode = 0
[sub_resource type="BoxShape3D" id="BoxShape_ground"]
size = Vector3(40, 0.2, 40)
[node name="meadow" type="Node3D"]
script = ExtResource("1")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.866, -0.354, 0.354, 0, 0.707, 0.707, -0.5, -0.612, 0.612, 0, 8, 0)
shadow_enabled = false
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.707, 0.707, 0, -0.707, 0.707, 0, 12, 12)
current = true
fov = 50.0
[node name="Ground" type="StaticBody3D" parent="."]
collision_layer = 1
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ground"]
mesh = SubResource("BoxMesh_ground")
surface_material_override/0 = SubResource("Mat_ground")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground"]
shape = SubResource("BoxShape_ground")
[node name="Player" parent="." instance=ExtResource("2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 4)
[node name="Glitzo" parent="." instance=ExtResource("5")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0.1, -1)
max_hp = 4
texture_path = "res://assets/sprites/placeholders/glitzo.png"
achievement_on_defeat = "first_glitzo"
[node name="Bear" parent="." instance=ExtResource("4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0.1, -3)
dialog_key = "dialog_bear"
texture_path = "res://assets/sprites/placeholders/bear.png"
[node name="MowerHazard" parent="." instance=ExtResource("6")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -5)
death_cause_key = "death_mower"
[node name="Exit" parent="." instance=ExtResource("3")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -12)

70
scenes/moon.tscn Normal file
View file

@ -0,0 +1,70 @@
[gd_scene load_steps=8 format=3]
[ext_resource type="Script" path="res://scripts/levels/moon.gd" id="1"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/player.tscn" id="2"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/exit_trigger.tscn" id="3"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/npc.tscn" id="4"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/enemy.tscn" id="5"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/hazard.tscn" id="6"]
[sub_resource type="BoxMesh" id="BoxMesh_ground"]
size = Vector3(40, 0.2, 40)
[sub_resource type="StandardMaterial3D" id="Mat_ground"]
albedo_color = Color(0.75, 0.75, 0.7, 1)
shading_mode = 0
[sub_resource type="BoxShape3D" id="BoxShape_ground"]
size = Vector3(40, 0.2, 40)
[node name="moon" type="Node3D"]
script = ExtResource("1")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.866, -0.354, 0.354, 0, 0.707, 0.707, -0.5, -0.612, 0.612, 0, 8, 0)
shadow_enabled = false
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.707, 0.707, 0, -0.707, 0.707, 0, 12, 12)
current = true
fov = 50.0
[node name="Ground" type="StaticBody3D" parent="."]
collision_layer = 1
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ground"]
mesh = SubResource("BoxMesh_ground")
surface_material_override/0 = SubResource("Mat_ground")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground"]
shape = SubResource("BoxShape_ground")
[node name="Player" parent="." instance=ExtResource("2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 4)
[node name="CheeseSeller" parent="." instance=ExtResource("4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0.1, -1)
dialog_key = "dialog_cheese"
texture_path = "res://assets/sprites/placeholders/cheese.png"
give_item_id = "cheese"
[node name="SwordStone" parent="." instance=ExtResource("4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0.1, -1)
dialog_key = "dialog_cheese"
texture_path = "res://assets/sprites/placeholders/apple.png"
give_item_id = "moon_sword"
[node name="FakeBowser" parent="." instance=ExtResource("5")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -4)
max_hp = 8
texture_path = "res://assets/sprites/placeholders/bowser.png"
defeat_flag = "bowser_defeated"
achievement_on_defeat = "beat_bowser"
[node name="Exit" parent="." instance=ExtResource("3")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -12)
require_flag = "bowser_defeated"

View file

@ -0,0 +1,8 @@
[gd_scene load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/billboard/billboard_sprite.gd" id="1"]
[node name="BillboardSprite" type="Node3D"]
script = ExtResource("1")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]

11
scenes/prefabs/enemy.tscn Normal file
View file

@ -0,0 +1,11 @@
[gd_scene load_steps=3 format=3]
[ext_resource type="Script" path="res://scripts/combat/hittable.gd" id="1"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/billboard_sprite.tscn" id="2"]
[node name="Enemy" type="Node3D"]
script = ExtResource("1")
max_hp = 4
[node name="BillboardSprite" parent="." instance=ExtResource("2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0)

View file

@ -0,0 +1,15 @@
[gd_scene load_steps=3 format=3]
[ext_resource type="Script" path="res://scripts/combat/exit_trigger.gd" id="1"]
[sub_resource type="BoxShape3D" id="BoxShape3D_1"]
size = Vector3(2.5, 2, 2.5)
[node name="ExitTrigger" type="Area3D"]
collision_layer = 0
collision_mask = 2
script = ExtResource("1")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = SubResource("BoxShape3D_1")

View file

@ -0,0 +1,15 @@
[gd_scene load_steps=3 format=3]
[ext_resource type="Script" path="res://scripts/combat/hazard_zone.gd" id="1"]
[sub_resource type="BoxShape3D" id="BoxShape3D_1"]
size = Vector3(2.0, 2, 2.0)
[node name="HazardZone" type="Area3D"]
collision_layer = 0
collision_mask = 2
script = ExtResource("1")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = SubResource("BoxShape3D_1")

10
scenes/prefabs/npc.tscn Normal file
View file

@ -0,0 +1,10 @@
[gd_scene load_steps=3 format=3]
[ext_resource type="Script" path="res://scripts/combat/interactable_npc.gd" id="1"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/billboard_sprite.tscn" id="2"]
[node name="NPC" type="Node3D"]
script = ExtResource("1")
[node name="BillboardSprite" parent="." instance=ExtResource("2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0)

View file

@ -0,0 +1,20 @@
[gd_scene load_steps=4 format=3]
[ext_resource type="Script" path="res://scripts/player/player_controller.gd" id="1"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/billboard_sprite.tscn" id="2"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_1"]
radius = 0.35
height = 1.0
[node name="Player" type="CharacterBody3D"]
collision_layer = 2
collision_mask = 1
script = ExtResource("1")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
shape = SubResource("CapsuleShape3D_1")
[node name="BillboardSprite" parent="." instance=ExtResource("2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0)

57
scenes/shoe_boss.tscn Normal file
View file

@ -0,0 +1,57 @@
[gd_scene load_steps=8 format=3]
[ext_resource type="Script" path="res://scripts/levels/shoe_boss.gd" id="1"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/player.tscn" id="2"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/exit_trigger.tscn" id="3"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/npc.tscn" id="4"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/enemy.tscn" id="5"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/hazard.tscn" id="6"]
[sub_resource type="BoxMesh" id="BoxMesh_ground"]
size = Vector3(40, 0.2, 40)
[sub_resource type="StandardMaterial3D" id="Mat_ground"]
albedo_color = Color(0.25, 0.2, 0.15, 1)
shading_mode = 0
[sub_resource type="BoxShape3D" id="BoxShape_ground"]
size = Vector3(40, 0.2, 40)
[node name="shoe_boss" type="Node3D"]
script = ExtResource("1")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.866, -0.354, 0.354, 0, 0.707, 0.707, -0.5, -0.612, 0.612, 0, 8, 0)
shadow_enabled = false
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.707, 0.707, 0, -0.707, 0.707, 0, 12, 12)
current = true
fov = 50.0
[node name="Ground" type="StaticBody3D" parent="."]
collision_layer = 1
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ground"]
mesh = SubResource("BoxMesh_ground")
surface_material_override/0 = SubResource("Mat_ground")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground"]
shape = SubResource("BoxShape_ground")
[node name="Player" parent="." instance=ExtResource("2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 4)
[node name="Reif" parent="." instance=ExtResource("5")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -2)
max_hp = 5
texture_path = "res://assets/sprites/placeholders/shoe.png"
defeat_flag = "reif_defeated"
[node name="Exit" parent="." instance=ExtResource("3")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -12)
require_flag = "reif_defeated"

84
scenes/title_screen.tscn Normal file
View file

@ -0,0 +1,84 @@
[gd_scene load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/levels/title_screen.gd" id="1"]
[node name="TitleScreen" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1")
[node name="Bg" type="ColorRect" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.08, 0.05, 0.12, 1)
[node name="Rain" type="Node2D" parent="."]
[node name="Title" type="Label" parent="."]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -360.0
offset_top = 80.0
offset_right = 360.0
offset_bottom = 140.0
grow_horizontal = 2
theme_override_font_sizes/font_size = 40
horizontal_alignment = 1
text = "Explosion der Spiele"
[node name="Subtitle" type="Label" parent="."]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -360.0
offset_top = 140.0
offset_right = 360.0
offset_bottom = 180.0
grow_horizontal = 2
horizontal_alignment = 1
text = "Pay2Win"
[node name="Bubble" type="Label" parent="."]
layout_mode = 0
offset_left = 40.0
offset_top = 500.0
offset_right = 420.0
offset_bottom = 620.0
autowrap_mode = 3
text = "..."
[node name="Disturbed" type="ColorRect" parent="."]
layout_mode = 0
offset_left = 40.0
offset_top = 620.0
offset_right = 120.0
offset_bottom = 700.0
color = Color(0.7, 0.7, 0.7, 1)
[node name="StartButton" type="Button" parent="."]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -120.0
offset_top = -120.0
offset_right = 120.0
offset_bottom = -70.0
grow_horizontal = 2
grow_vertical = 0
text = "Starten"
[connection signal="pressed" from="StartButton" to="." method="_on_start_pressed"]

197
scenes/ui/ui_root.tscn Normal file
View file

@ -0,0 +1,197 @@
[gd_scene load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/ui/ui_root.gd" id="1"]
[node name="UIRoot" type="CanvasLayer"]
process_mode = 3
layer = 100
script = ExtResource("1")
[node name="HUD" type="Control" parent="."]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
[node name="HpLabel" type="Label" parent="HUD"]
layout_mode = 0
offset_left = 16.0
offset_top = 12.0
offset_right = 200.0
offset_bottom = 40.0
text = "HP 5/5"
[node name="ToastLabel" type="Label" parent="."]
visible = false
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -280.0
offset_top = 48.0
offset_right = 280.0
offset_bottom = 88.0
grow_horizontal = 2
horizontal_alignment = 1
text = "Achievement"
[node name="DialogPanel" type="PanelContainer" parent="."]
visible = false
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -420.0
offset_top = -140.0
offset_right = 420.0
offset_bottom = -24.0
grow_horizontal = 2
grow_vertical = 0
[node name="Margin" type="MarginContainer" parent="DialogPanel"]
layout_mode = 2
theme_override_constants/margin_left = 16
theme_override_constants/margin_top = 12
theme_override_constants/margin_right = 16
theme_override_constants/margin_bottom = 12
[node name="DialogLabel" type="Label" parent="DialogPanel/Margin"]
layout_mode = 2
autowrap_mode = 3
text = "..."
[node name="BurgerOverlay" type="ColorRect" parent="."]
visible = false
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
color = Color(0.05, 0.02, 0.02, 0.85)
[node name="BurgerLabel" type="Label" parent="BurgerOverlay"]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -320.0
offset_top = -40.0
offset_right = 320.0
offset_bottom = 40.0
grow_horizontal = 2
grow_vertical = 2
horizontal_alignment = 1
vertical_alignment = 1
text = "Burger!"
[node name="PausePanel" type="PanelContainer" parent="."]
process_mode = 3
visible = false
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -280.0
offset_top = -300.0
offset_right = 280.0
offset_bottom = 300.0
grow_horizontal = 2
grow_vertical = 2
[node name="Margin" type="MarginContainer" parent="PausePanel"]
layout_mode = 2
theme_override_constants/margin_left = 16
theme_override_constants/margin_top = 12
theme_override_constants/margin_right = 16
theme_override_constants/margin_bottom = 12
[node name="VBox" type="VBoxContainer" parent="PausePanel/Margin"]
layout_mode = 2
theme_override_constants/separation = 6
[node name="TitleLabel" type="Label" parent="PausePanel/Margin/VBox"]
layout_mode = 2
text = "Einstellungen"
[node name="ResumeButton" type="Button" parent="PausePanel/Margin/VBox"]
layout_mode = 2
text = "Zurück"
[node name="PointsLabel" type="Label" parent="PausePanel/Margin/VBox"]
layout_mode = 2
text = "Dresslerpunkte: 0"
[node name="ShopTitle" type="Label" parent="PausePanel/Margin/VBox"]
layout_mode = 2
text = "Shop"
[node name="BuyPointButton" type="Button" parent="PausePanel/Margin/VBox"]
layout_mode = 2
text = "1€"
[node name="BuySunglassesButton" type="Button" parent="PausePanel/Margin/VBox"]
layout_mode = 2
text = "Sunglasses"
[node name="BuyTicketButton" type="Button" parent="PausePanel/Margin/VBox"]
layout_mode = 2
text = "Ticket"
[node name="BuyMilkButton" type="Button" parent="PausePanel/Margin/VBox"]
layout_mode = 2
text = "Milk"
[node name="BuyTiramisuButton" type="Button" parent="PausePanel/Margin/VBox"]
layout_mode = 2
text = "Tiramisu"
[node name="SfxLabel" type="Label" parent="PausePanel/Margin/VBox"]
layout_mode = 2
text = "SFX"
[node name="SfxSlider" type="HSlider" parent="PausePanel/Margin/VBox"]
layout_mode = 2
max_value = 1.0
step = 0.05
value = 1.0
[node name="MusicLabel" type="Label" parent="PausePanel/Margin/VBox"]
layout_mode = 2
text = "Music locked"
[node name="MusicSlider" type="HSlider" parent="PausePanel/Margin/VBox"]
layout_mode = 2
editable = false
max_value = 1.0
value = 1.0
[node name="LangLabel" type="Label" parent="PausePanel/Margin/VBox"]
layout_mode = 2
text = "Language"
[node name="LangOption" type="OptionButton" parent="PausePanel/Margin/VBox"]
layout_mode = 2
[node name="InventoryLabel" type="Label" parent="PausePanel/Margin/VBox"]
layout_mode = 2
text = "Inventar"
[node name="InventoryList" type="ItemList" parent="PausePanel/Margin/VBox"]
custom_minimum_size = Vector2(0, 100)
layout_mode = 2
[connection signal="pressed" from="PausePanel/Margin/VBox/ResumeButton" to="." method="_on_resume_pressed"]
[connection signal="pressed" from="PausePanel/Margin/VBox/BuyPointButton" to="." method="_on_buy_point"]
[connection signal="pressed" from="PausePanel/Margin/VBox/BuySunglassesButton" to="." method="_on_buy_sunglasses"]
[connection signal="pressed" from="PausePanel/Margin/VBox/BuyTicketButton" to="." method="_on_buy_ticket"]
[connection signal="pressed" from="PausePanel/Margin/VBox/BuyMilkButton" to="." method="_on_buy_milk"]
[connection signal="pressed" from="PausePanel/Margin/VBox/BuyTiramisuButton" to="." method="_on_buy_tiramisu"]
[connection signal="value_changed" from="PausePanel/Margin/VBox/SfxSlider" to="." method="_on_sfx_changed"]
[connection signal="value_changed" from="PausePanel/Margin/VBox/MusicSlider" to="." method="_on_music_changed"]
[connection signal="item_selected" from="PausePanel/Margin/VBox/LangOption" to="." method="_on_lang_selected"]
[connection signal="item_activated" from="PausePanel/Margin/VBox/InventoryList" to="." method="_on_inventory_activated"]

70
scenes/village.tscn Normal file
View file

@ -0,0 +1,70 @@
[gd_scene load_steps=8 format=3]
[ext_resource type="Script" path="res://scripts/levels/village.gd" id="1"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/player.tscn" id="2"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/exit_trigger.tscn" id="3"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/npc.tscn" id="4"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/enemy.tscn" id="5"]
[ext_resource type="PackedScene" path="res://scenes/prefabs/hazard.tscn" id="6"]
[sub_resource type="BoxMesh" id="BoxMesh_ground"]
size = Vector3(40, 0.2, 40)
[sub_resource type="StandardMaterial3D" id="Mat_ground"]
albedo_color = Color(0.35, 0.7, 0.35, 1)
shading_mode = 0
[sub_resource type="BoxShape3D" id="BoxShape_ground"]
size = Vector3(40, 0.2, 40)
[node name="village" type="Node3D"]
script = ExtResource("1")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.866, -0.354, 0.354, 0, 0.707, 0.707, -0.5, -0.612, 0.612, 0, 8, 0)
shadow_enabled = false
[node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 0.707, 0.707, 0, -0.707, 0.707, 0, 12, 12)
current = true
fov = 50.0
[node name="Ground" type="StaticBody3D" parent="."]
collision_layer = 1
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ground"]
mesh = SubResource("BoxMesh_ground")
surface_material_override/0 = SubResource("Mat_ground")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground"]
shape = SubResource("BoxShape_ground")
[node name="Player" parent="." instance=ExtResource("2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 4)
[node name="NPC_HongkongFan" parent="." instance=ExtResource("4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0.1, 0)
dialog_key = "dialog_hongkong_npc"
texture_path = "res://assets/sprites/placeholders/npc.png"
give_item_id = "snake"
[node name="House" parent="." instance=ExtResource("4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0.1, -2)
dialog_key = "dialog_hongkong_npc"
texture_path = "res://assets/sprites/placeholders/house.png"
[node name="Dentist" parent="." instance=ExtResource("4")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 0.1, 2)
dialog_key = "dialog_hongkong_npc"
texture_path = "res://assets/sprites/placeholders/npc.png"
give_item_id = "tooth"
quest_flag = "teeth_stolen"
achievement_id = "tooth_millionaire"
[node name="Exit" parent="." instance=ExtResource("3")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, -10)