diff --git a/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage.glb b/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage.glb new file mode 100644 index 0000000..c89f19f Binary files /dev/null and b/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage.glb differ diff --git a/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage.glb.import b/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage.glb.import new file mode 100644 index 0000000..078b5bd --- /dev/null +++ b/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage.glb.import @@ -0,0 +1,48 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://dykjhgsqsihbj" +path="res://.godot/imported/Mage.glb-40a7a7ea54ec1419f6ea0f43a4f9458d.scn" + +[deps] + +source_file="res://assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage.glb" +dest_files=["res://.godot/imported/Mage.glb-40a7a7ea54ec1419f6ea0f43a4f9458d.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={ +"nodes": { +"PATH:Rig/Skeleton3D/2H_Staff/2H_Staff": { +"import/skip_import": true +}, +"PATH:Rig/Skeleton3D/Spellbook/Spellbook": { +"import/skip_import": true +}, +"PATH:Rig/Skeleton3D/Spellbook_open/Spellbook_open": { +"import/skip_import": true +} +} +} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage_mage_texture.png b/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage_mage_texture.png new file mode 100644 index 0000000..d0b91fb Binary files /dev/null and b/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage_mage_texture.png differ diff --git a/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage_mage_texture.png.import b/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage_mage_texture.png.import new file mode 100644 index 0000000..c70a6bc --- /dev/null +++ b/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage_mage_texture.png.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://hsebtdlvcren" +path.s3tc="res://.godot/imported/Mage_mage_texture.png-6b5f9120f8aad7a4abc4672ec474b41b.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} +generator_parameters={ +"md5": "4929e1d8419d602df7a7be89ce778863" +} + +[deps] + +source_file="res://assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage_mage_texture.png" +dest_files=["res://.godot/imported/Mage_mage_texture.png-6b5f9120f8aad7a4abc4672ec474b41b.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/mage_texture.png b/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/mage_texture.png new file mode 100644 index 0000000..d0b91fb Binary files /dev/null and b/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/mage_texture.png differ diff --git a/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/mage_texture.png.import b/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/mage_texture.png.import new file mode 100644 index 0000000..5cb659f --- /dev/null +++ b/assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/mage_texture.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cykl6plps8ewj" +path="res://.godot/imported/mage_texture.png-741b5df61e695443a6e234dd9a731d82.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/mage_texture.png" +dest_files=["res://.godot/imported/mage_texture.png-741b5df61e695443a6e234dd9a731d82.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/characters/mage.tscn b/assets/characters/mage.tscn new file mode 100644 index 0000000..68d6631 --- /dev/null +++ b/assets/characters/mage.tscn @@ -0,0 +1,124 @@ +[gd_scene load_steps=6 format=3 uid="uid://bnstbaflxlhuj"] + +[ext_resource type="PackedScene" uid="uid://dykjhgsqsihbj" path="res://assets/3rdparty/KayKit_Adventurers_1.0_EXTRA/Characters/gltf/Mage.glb" id="1_ojy63"] +[ext_resource type="AnimationLibrary" uid="uid://dbaynxuqbkor6" path="res://assets/characters/rogue_animation_library.tres" id="2_xc1in"] + +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_l7k36"] +animation = &"rogue_animation_library/Idle" + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_84wiy"] +advance_mode = 2 + +[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_dwyg8"] +states/rogue_animation_library_Idle/node = SubResource("AnimationNodeAnimation_l7k36") +states/rogue_animation_library_Idle/position = Vector2(470, 100) +transitions = ["Start", "rogue_animation_library_Idle", SubResource("AnimationNodeStateMachineTransition_84wiy")] + +[node name="Mage" type="Node3D"] + +[node name="Mage" parent="." instance=ExtResource("1_ojy63")] + +[node name="Skeleton3D" parent="Mage/Rig" index="0"] +bones/0/rotation = Quaternion(0, 1.19209e-07, 0, 1) +bones/1/position = Vector3(0, 0.392064, 0) +bones/1/rotation = Quaternion(-1.11123e-10, 0.0431578, 2.57241e-09, 0.999068) +bones/2/rotation = Quaternion(-6.93889e-18, 7.10543e-15, 4.93038e-32, 1) +bones/3/rotation = Quaternion(8.27181e-25, 3.72529e-09, 0, 1) +bones/4/position = Vector3(0.212007, 0.134132, 8.40246e-08) +bones/4/rotation = Quaternion(-0.559906, -0.0608804, -0.643974, 0.517779) +bones/4/scale = Vector3(0.999999, 0.999999, 1) +bones/5/rotation = Quaternion(3.65498e-08, -4.88301e-08, -0.494719, 0.869053) +bones/6/rotation = Quaternion(-9.73784e-11, -2.98437e-10, 0.0266581, 0.999645) +bones/6/scale = Vector3(1, 1, 1) +bones/7/rotation = Quaternion(-0.321065, -0.325319, 0.145726, 0.87741) +bones/8/position = Vector3(8.34815e-10, 0.0961251, -0.0575001) +bones/8/rotation = Quaternion(1.60975e-09, 1.60975e-09, -0.707107, 0.707107) +bones/8/scale = Vector3(1, 1, 1) +bones/9/rotation = Quaternion(-8.95373e-08, 0.707107, 0.707107, -9.81383e-08) +bones/10/rotation = Quaternion(-8.95373e-08, 0.707107, 0.707107, -9.81383e-08) +bones/11/position = Vector3(-0.212007, 0.134132, 8.40246e-08) +bones/11/rotation = Quaternion(-0.618244, 0.0807285, 0.618012, 0.478873) +bones/11/scale = Vector3(0.999999, 0.999999, 1) +bones/12/rotation = Quaternion(2.09853e-08, 5.12855e-08, 0.517939, 0.855417) +bones/13/rotation = Quaternion(-9.73784e-11, 2.98437e-10, -0.0266581, 0.999645) +bones/13/scale = Vector3(1, 1, 1) +bones/14/rotation = Quaternion(-0.319291, 0.300524, -0.22735, 0.869512) +bones/15/position = Vector3(-8.34815e-10, 0.0961251, -0.0575001) +bones/15/rotation = Quaternion(-1.02444e-09, -4.24391e-09, 0.707107, 0.707107) +bones/15/scale = Vector3(1, 1, 1) +bones/18/rotation = Quaternion(-5.8061e-11, -0.0313416, -1.88013e-09, 0.999509) +bones/19/rotation = Quaternion(-0.130526, -7.04464e-15, -9.27445e-16, 0.991445) +bones/21/position = Vector3(0.170945, 0.113587, 1.39233e-08) +bones/21/rotation = Quaternion(0.996186, 0.0479136, 0.0566427, -0.045939) +bones/21/scale = Vector3(1, 1, 1) +bones/22/rotation = Quaternion(0.165014, 6.49414e-08, -1.11407e-07, 0.986291) +bones/23/rotation = Quaternion(-0.533729, -0.260895, -1.72985e-05, 0.804405) +bones/24/rotation = Quaternion(-3.04797e-08, 0.920355, -0.391084, 6.94849e-08) +bones/24/scale = Vector3(1, 1, 1) +bones/25/position = Vector3(-0.170945, 0.113587, 1.39233e-08) +bones/25/rotation = Quaternion(0.997322, -0.0294574, 0.0315293, 0.0590483) +bones/25/scale = Vector3(1, 1, 1) +bones/26/rotation = Quaternion(0.274008, -6.38135e-08, 1.92761e-07, 0.961727) +bones/27/rotation = Quaternion(-0.559039, 0.114513, -0.00862764, 0.82115) +bones/28/rotation = Quaternion(3.04797e-08, 0.920355, -0.391084, -6.94849e-08) +bones/28/scale = Vector3(1, 1, 1) +bones/29/position = Vector3(0.170945, 0.29231, 0.575812) +bones/29/rotation = Quaternion(0.707107, -2.29302e-07, -4.60551e-08, 0.707107) +bones/30/position = Vector3(0.213918, 0.0259903, 0.173866) +bones/30/rotation = Quaternion(-0.705092, 0.0533355, 0.0533355, 0.705092) +bones/31/position = Vector3(1.94581e-08, 0.362833, -2.42861e-15) +bones/31/rotation = Quaternion(9.65792e-09, 1.77955e-09, 0.985719, -0.168398) +bones/32/position = Vector3(-1.11482e-08, 0.213436, -2.50942e-15) +bones/32/rotation = Quaternion(-1.04035e-07, 0.391084, 0.920355, -2.9526e-08) +bones/33/position = Vector3(8.58988e-09, 0.16565, -5.09137e-09) +bones/34/rotation = Quaternion(1, -3.10863e-15, 1.94707e-07, -6.91739e-22) +bones/36/position = Vector3(-0.170945, 0.29231, 0.575812) +bones/36/rotation = Quaternion(0.707107, -3.82385e-08, 1.45009e-07, 0.707107) +bones/37/position = Vector3(-0.170945, 0.0259903, 0.245789) +bones/37/rotation = Quaternion(-0.707107, -7.05285e-08, -7.05285e-08, 0.707107) +bones/38/position = Vector3(1.94581e-08, 0.362833, 2.42861e-15) +bones/38/rotation = Quaternion(-5.83589e-09, 6.43837e-10, 0.994809, 0.101756) +bones/39/position = Vector3(3.75294e-09, 0.213436, 0) +bones/39/rotation = Quaternion(-1.04035e-07, 0.391084, 0.920355, -2.95261e-08) +bones/40/position = Vector3(-6.31128e-09, 0.16565, 1.36608e-09) +bones/40/rotation = Quaternion(-0.391084, -6.885e-08, -6.56287e-08, 0.920355) +bones/41/rotation = Quaternion(1, 4.44086e-16, 1.94707e-07, 6.91739e-22) +bones/43/position = Vector3(0.453507, 1.10676, -0.588859) +bones/43/rotation = Quaternion(-0.707107, -7.27951e-08, -7.27951e-08, 0.707107) +bones/44/position = Vector3(0.520841, 0.788312, -0.0576373) +bones/44/rotation = Quaternion(0.794627, -1.2666e-07, 0.607098, -5.96046e-08) +bones/45/position = Vector3(-0.453507, 1.10676, -0.58886) +bones/45/rotation = Quaternion(-0.707107, -7.27951e-08, -7.27951e-08, 0.707107) +bones/46/position = Vector3(-0.510844, 0.788312, 0.0597369) +bones/46/rotation = Quaternion(0.758253, 1.82539e-07, -0.651961, 1.11759e-08) + +[node name="Spellbook" parent="Mage/Rig/Skeleton3D" index="0"] +transform = Transform3D(3.03989e-07, 0.964832, 0.262864, -0.999999, 9.10786e-07, -3.5482e-07, -7.37311e-07, -0.262865, 0.964832, 0.577621, 0.636705, 0.237873) + +[node name="Spellbook_open" parent="Mage/Rig/Skeleton3D" index="1"] +transform = Transform3D(3.03989e-07, 0.964832, 0.262864, -0.999999, 9.10786e-07, -3.5482e-07, -7.37311e-07, -0.262865, 0.964832, 0.545985, 0.636705, 0.121754) + +[node name="1H_Wand" parent="Mage/Rig/Skeleton3D" index="2"] +transform = Transform3D(1.09228e-07, -0.149894, 0.988701, 0.999999, -9.80669e-07, -5.96046e-07, 1.3651e-06, 0.988701, 0.149894, -0.49106, 0.641029, 0.106596) + +[node name="2H_Staff" parent="Mage/Rig/Skeleton3D" index="3"] +transform = Transform3D(1.09228e-07, -0.149894, 0.988701, 0.999999, -9.80669e-07, -5.96046e-07, 1.3651e-06, 0.988701, 0.149894, -0.49106, 0.641029, 0.106596) + +[node name="Mage_Hat" parent="Mage/Rig/Skeleton3D" index="4"] +transform = Transform3D(0.99972, -0.0061203, 0.0228413, 1.39341e-09, 0.965926, 0.258819, -0.023647, -0.258747, 0.965656, -7.48424e-09, 1.7705, -1.02479e-07) + +[node name="Mage_Cape" parent="Mage/Rig/Skeleton3D" index="5"] +transform = Transform3D(0.996275, -5.14962e-09, 0.0862354, 5.13044e-09, 1, 4.44078e-10, -0.0862354, 1.46374e-15, 0.996275, -1.2997e-08, 1.20227, -1.01951e-07) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +root_node = NodePath("../Mage") +libraries = { +"rogue_animation_library": ExtResource("2_xc1in") +} + +[node name="AnimationTree" type="AnimationTree" parent="."] +root_node = NodePath("../Mage") +tree_root = SubResource("AnimationNodeStateMachine_dwyg8") +anim_player = NodePath("../AnimationPlayer") + +[editable path="Mage"] diff --git a/assets/custom/seeds.blend b/assets/custom/seeds.blend new file mode 100644 index 0000000..5c1b599 Binary files /dev/null and b/assets/custom/seeds.blend differ diff --git a/assets/custom/seeds.blend.import b/assets/custom/seeds.blend.import new file mode 100644 index 0000000..9a5a034 --- /dev/null +++ b/assets/custom/seeds.blend.import @@ -0,0 +1,51 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://ddd7nq81ag3lg" +path="res://.godot/imported/seeds.blend-b1fe43304cafc66b1e1347fc3eeae2f9.scn" + +[deps] + +source_file="res://assets/custom/seeds.blend" +dest_files=["res://.godot/imported/seeds.blend-b1fe43304cafc66b1e1347fc3eeae2f9.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +blender/nodes/visible=0 +blender/nodes/active_collection_only=false +blender/nodes/punctual_lights=true +blender/nodes/cameras=true +blender/nodes/custom_properties=true +blender/nodes/modifiers=1 +blender/meshes/colors=false +blender/meshes/uvs=true +blender/meshes/normals=true +blender/meshes/tangents=true +blender/meshes/skins=2 +blender/meshes/export_bones_deforming_mesh_only=false +blender/materials/unpack_enabled=true +blender/materials/export_materials=1 +blender/animation/limit_playback=true +blender/animation/always_sample=true +blender/animation/group_tracks=true diff --git a/assets/custom/seeds.blend1 b/assets/custom/seeds.blend1 new file mode 100644 index 0000000..f8ff8c5 Binary files /dev/null and b/assets/custom/seeds.blend1 differ diff --git a/assets/custom/seeds.glb b/assets/custom/seeds.glb new file mode 100644 index 0000000..270b8a3 Binary files /dev/null and b/assets/custom/seeds.glb differ diff --git a/assets/custom/seeds.glb.import b/assets/custom/seeds.glb.import new file mode 100644 index 0000000..e1e26c5 --- /dev/null +++ b/assets/custom/seeds.glb.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://tcdn7l77rl1a" +path="res://.godot/imported/seeds.glb-23ad838f3774296d1039ac42af351974.scn" + +[deps] + +source_file="res://assets/custom/seeds.glb" +dest_files=["res://.godot/imported/seeds.glb-23ad838f3774296d1039ac42af351974.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/assets/items/seeds.png b/assets/items/seeds.png new file mode 100644 index 0000000..ff8f987 Binary files /dev/null and b/assets/items/seeds.png differ diff --git a/assets/items/seeds.png.import b/assets/items/seeds.png.import new file mode 100644 index 0000000..5f67d62 --- /dev/null +++ b/assets/items/seeds.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://db1oiikkj5m3e" +path="res://.godot/imported/seeds.png-6bfcc221f6eb34964b98afdb75e4a651.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/items/seeds.png" +dest_files=["res://.godot/imported/seeds.png-6bfcc221f6eb34964b98afdb75e4a651.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/items/seeds.tscn b/assets/items/seeds.tscn new file mode 100644 index 0000000..66420cc --- /dev/null +++ b/assets/items/seeds.tscn @@ -0,0 +1,7 @@ +[gd_scene load_steps=2 format=3 uid="uid://nu84ofa6lx0s"] + +[ext_resource type="PackedScene" uid="uid://tcdn7l77rl1a" path="res://assets/custom/seeds.glb" id="1_t02b2"] + +[node name="Seeds" type="Node3D"] + +[node name="seeds" parent="." instance=ExtResource("1_t02b2")] diff --git a/data/items/seeds.tres b/data/items/seeds.tres new file mode 100644 index 0000000..cd732f1 --- /dev/null +++ b/data/items/seeds.tres @@ -0,0 +1,15 @@ +[gd_resource type="Resource" script_class="ItemResource" load_steps=4 format=3 uid="uid://mvph5aepql1t"] + +[ext_resource type="Script" path="res://model/item_resource.gd" id="1_ks17v"] +[ext_resource type="Texture2D" uid="uid://db1oiikkj5m3e" path="res://assets/items/seeds.png" id="1_rdv4h"] +[ext_resource type="PackedScene" uid="uid://nu84ofa6lx0s" path="res://assets/items/seeds.tscn" id="2_27srp"] + +[resource] +script = ExtResource("1_ks17v") +name = "Seeds" +scene = ExtResource("2_27srp") +icon = ExtResource("1_rdv4h") +max_stack_size = 64 +is_tool = false +is_buildable = false +tool_action = 0 diff --git a/dialogue/default_dialogue.dialogue b/dialogue/default_dialogue.dialogue index 172dde2..dd6e4e1 100644 --- a/dialogue/default_dialogue.dialogue +++ b/dialogue/default_dialogue.dialogue @@ -1,5 +1,5 @@ ~ start -Chloe: [[Hi|Hello|Howdy]], weather seems nice today! +Chloe: [[Hi|Hello|Howdy]], ein schöner Tag, nicht wahr? => END \ No newline at end of file diff --git a/dialogue/mage_missing_seeds.dialogue b/dialogue/mage_missing_seeds.dialogue new file mode 100644 index 0000000..dd4b86f --- /dev/null +++ b/dialogue/mage_missing_seeds.dialogue @@ -0,0 +1,20 @@ +~ start + +Klaus: Wo sind sie denn? ... Wo sind sie denn? ... +Klaus: Ich brauche die Samen! + +- Alles ok? + Klaus: Wo sind sie ... Ah, Entschuldigung. + Klaus: Ich suche die Samen für meine Pflanzen. Hast Du welche? + + - Ja. + if is_seeds_found == false: + Klaus: Lüg' mich nicht an! + else: + Klaus: Danke! + set is_seeds_delivered = true + - Leider nicht. + Klaus: Dann suche ich eben weiter. +- (-> Weggehen) + +=> END \ No newline at end of file diff --git a/dialogue/mage_missing_seeds.dialogue.import b/dialogue/mage_missing_seeds.dialogue.import new file mode 100644 index 0000000..4c6f4d4 --- /dev/null +++ b/dialogue/mage_missing_seeds.dialogue.import @@ -0,0 +1,15 @@ +[remap] + +importer="dialogue_manager_compiler_12" +type="Resource" +uid="uid://mn4emvkkv3v4" +path="res://.godot/imported/mage_missing_seeds.dialogue-6d7742e15f77c9281243d17b9856b01e.tres" + +[deps] + +source_file="res://dialogue/mage_missing_seeds.dialogue" +dest_files=["res://.godot/imported/mage_missing_seeds.dialogue-6d7742e15f77c9281243d17b9856b01e.tres"] + +[params] + +defaults=true diff --git a/objects/actionable.gd b/objects/actionable.gd index db50433..edfb1cf 100644 --- a/objects/actionable.gd +++ b/objects/actionable.gd @@ -3,10 +3,17 @@ extends Area3D signal conversation_started +@export var dialogue_start: String = "start" +@export var related_quest_path: NodePath + @export var quest_dialogue_resource: DialogueResource @export var default_dialogue_resource: DialogueResource -@export var dialogue_start: String = "start" -@onready var builder_missing_tool:QuestBuilderMissingTool = %BuilderMissingTool + +var related_quest:QuestBase = null + +func _ready(): + if not related_quest_path.is_empty(): + related_quest = get_node(related_quest_path) func action() -> void: var balloon = load("res://ui/dialogue/balloon.tscn").instantiate() as DialogueBaloon @@ -14,7 +21,7 @@ func action() -> void: get_tree().current_scene.add_child(balloon) var quest_states = get_tree().get_nodes_in_group("quest_state") - if not builder_missing_tool.is_completed: + if related_quest != null and not related_quest.is_completed: balloon.start(quest_dialogue_resource, dialogue_start, quest_states) else: balloon.start(default_dialogue_resource, dialogue_start, quest_states) diff --git a/objects/grass.gd b/objects/grass.gd index 55bcd96..667f8d0 100644 --- a/objects/grass.gd +++ b/objects/grass.gd @@ -1,6 +1,7 @@ @tool extends Node3D +@export var seed_drop_rate:float = 1.0 @export var is_chopped:bool = true: get: return is_chopped @@ -12,10 +13,12 @@ extends Node3D @onready var grass_large: Node3D = %grassLarge @onready var grow_timer: Timer = %GrowTimer +@onready var item_spawner: ItemSpawner = %ItemSpawner # Called when the node enters the scene tree for the first time. func _ready() -> void: _update_geometry() + grow_timer.wait_time = grow_timer.wait_time + grow_timer.wait_time * 0.2 * (randf() - 0.5) func _update_geometry() -> void: if grass_large == null: @@ -26,10 +29,13 @@ func _update_geometry() -> void: else: grass_large.transform = Transform3D(Basis.IDENTITY.scaled(Vector3(1, 3, 1)), grass_large.position) -func _on_hitbox_area_shape_entered(area_rid: RID, area: Area3D, area_shape_index: int, local_shape_index: int) -> void: +func _on_hitbox_area_shape_entered(_area_rid: RID, _area: Area3D, _area_shape_index: int, _local_shape_index: int) -> void: + if is_chopped: + return + is_chopped = true grow_timer.start() - + item_spawner.spawn() func _on_grow_timer_timeout() -> void: if is_chopped: diff --git a/objects/grass.tscn b/objects/grass.tscn index b8d01e5..2ba67d3 100644 --- a/objects/grass.tscn +++ b/objects/grass.tscn @@ -1,18 +1,21 @@ -[gd_scene load_steps=4 format=3 uid="uid://bwt4hbinrod8q"] +[gd_scene load_steps=6 format=3 uid="uid://bwt4hbinrod8q"] [ext_resource type="Script" path="res://objects/grass.gd" id="1_sc4bm"] [ext_resource type="PackedScene" uid="uid://c5x71uagdcocv" path="res://assets/3rdparty/kenney/survival-kit/Models/grassLarge.glb" id="2_4frmr"] +[ext_resource type="Script" path="res://objects/item_spawner.gd" id="3_eji24"] +[ext_resource type="Resource" uid="uid://mvph5aepql1t" path="res://data/items/seeds.tres" id="4_rsj4o"] [sub_resource type="BoxShape3D" id="BoxShape3D_4etwi"] size = Vector3(0.5, 0.483398, 0.5) [node name="Grass" type="Node3D"] script = ExtResource("1_sc4bm") +seed_drop_rate = null is_chopped = false [node name="grassLarge" parent="." instance=ExtResource("2_4frmr")] unique_name_in_owner = true -transform = Transform3D(1, 0, 0, 0, 4, 0, 0, 0, 1, 0, 0, 0) +transform = Transform3D(1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0) [node name="Hitbox" type="Area3D" parent="."] collision_layer = 0 @@ -27,5 +30,10 @@ shape = SubResource("BoxShape3D_4etwi") unique_name_in_owner = true wait_time = 2.0 +[node name="ItemSpawner" type="Node3D" parent="."] +unique_name_in_owner = true +script = ExtResource("3_eji24") +item = ExtResource("4_rsj4o") + [connection signal="area_shape_entered" from="Hitbox" to="." method="_on_hitbox_area_shape_entered"] [connection signal="timeout" from="GrowTimer" to="." method="_on_grow_timer_timeout"] diff --git a/objects/item_spawner.gd b/objects/item_spawner.gd new file mode 100644 index 0000000..e53f1da --- /dev/null +++ b/objects/item_spawner.gd @@ -0,0 +1,14 @@ +class_name ItemSpawner +extends Node3D + +@export var item:ItemResource = null +@export var spawn_chance:float = 0.2 + +@onready var pickup_item_scene:PackedScene = preload("res://objects/pickup_item.tscn") + +func spawn() -> void: + if randf() < spawn_chance: + var pickup_item:PickupItem = pickup_item_scene.instantiate() + get_parent().add_child(pickup_item) + pickup_item.global_transform = global_transform + pickup_item.item = load("res://data/items/seeds.tres") diff --git a/objects/item_spawner.tscn b/objects/item_spawner.tscn new file mode 100644 index 0000000..cb0857b --- /dev/null +++ b/objects/item_spawner.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=3 format=3 uid="uid://br6po50kfianv"] + +[ext_resource type="Script" path="res://objects/item_spawner.gd" id="1_uc120"] +[ext_resource type="Resource" uid="uid://mvph5aepql1t" path="res://data/items/seeds.tres" id="2_7m1cg"] + +[node name="ItemSpawner" type="Node3D"] +script = ExtResource("1_uc120") +item = ExtResource("2_7m1cg") diff --git a/objects/non_player_character.gd b/objects/non_player_character.gd index 9ecead1..ae7aa6f 100644 --- a/objects/non_player_character.gd +++ b/objects/non_player_character.gd @@ -15,6 +15,7 @@ extends CharacterBody3D const SPEED = 5.0 const JUMP_VELOCITY = 4.5 +var tool_damage:bool = false var tracking_node:Node3D = null var look_direction:Vector3 = Vector3.BACK var look_direction_damper:SpringDamper = SpringDamper.new(Vector3.ZERO, 2, 0.003, 0.003) diff --git a/objects/pickup_item.gd b/objects/pickup_item.gd index 037c924..64ccd75 100644 --- a/objects/pickup_item.gd +++ b/objects/pickup_item.gd @@ -13,7 +13,7 @@ signal item_picked_up(node_path:NodePath) if value != item: item = value - if not Engine.is_editor_hint() or world_item_node == null: + if world_item_node == null: return for child in world_item_node.get_children(): @@ -22,7 +22,7 @@ signal item_picked_up(node_path:NodePath) world_item_node.add_child(item.scene.instantiate()) -# Called when the node enters the scene tree for the first time. + func _ready(): if item == null: push_error ("Error: invalid PickupItem at %s" % str(global_position)) diff --git a/objects/player.gd b/objects/player.gd index 33b17c0..61187b1 100644 --- a/objects/player.gd +++ b/objects/player.gd @@ -9,7 +9,8 @@ const JUMP_VELOCITY = 3.5 @onready var animation_tree:AnimationTree = $Geometry/AnimationTree @onready var build_location:Node3D = %BuildLocation @onready var right_hand_attachement:HandTool = %RightHandAttachement -@export var tool_damage:bool = false : + +var tool_damage:bool = false : get: return tool_damage set(value): @@ -18,7 +19,6 @@ const JUMP_VELOCITY = 3.5 if right_hand_attachement != null and right_hand_attachement.tool_hitbox: right_hand_attachement.tool_hitbox.monitorable = bool(tool_damage) -# Get the gravity from the project settings to be synced with RigidBody nodes. var gravity = ProjectSettings.get_setting("physics/3d/default_gravity") var inventory:Inventory = Inventory.new() var selected_tool_slot_index:int = 0 @@ -28,7 +28,7 @@ var _direction:Vector3 = Vector3.ZERO var _look_direction:Vector3 = Vector3.BACK var _look_direction_damper:SpringDamper = SpringDamper.new(Vector3.ZERO) -var is_conversation_active:bool = false +var is_input_blocked:bool = false signal trigger_message(message:String) @@ -56,7 +56,7 @@ func _physics_process(delta): if not is_on_floor(): velocity.y -= gravity * delta - if not is_conversation_active: + if not is_input_blocked: _handle_input() move_and_slide() diff --git a/objects/player.tscn b/objects/player.tscn index 6a4c1ec..3c8b11d 100644 --- a/objects/player.tscn +++ b/objects/player.tscn @@ -26,7 +26,7 @@ length = 0.001 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("%Geometry/..:tool_slice_damage") +tracks/0/path = NodePath("%Geometry/..:tool_damage") tracks/0/interp = 0 tracks/0/loop_wrap = true tracks/0/keys = { @@ -169,7 +169,7 @@ unique_name_in_owner = true transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.98728) [node name="RightHandBone" type="BoneAttachment3D" parent="."] -transform = Transform3D(-8.44922e-05, -0.0603305, 0.395424, 0.4, -0.000359516, 3.04633e-05, 0.000350951, 0.395424, 0.0603306, -0.1964, 0.25612, 0.042693) +transform = Transform3D(-0.001175, -0.0650121, 0.394679, 0.39997, -0.00487941, 0.000386901, 0.00475177, 0.394651, 0.0650216, -0.19617, 0.248974, 0.0428286) bone_name = "Knife" bone_idx = 17 use_external_skeleton = true diff --git a/objects/player_right_hand_attachement.gd b/objects/player_right_hand_attachement.gd index f8d4f8d..ec42070 100644 --- a/objects/player_right_hand_attachement.gd +++ b/objects/player_right_hand_attachement.gd @@ -19,7 +19,3 @@ func set_tool(node:Node3D) -> void: if _current_tool != null: add_child(_current_tool) tool_hitbox = find_child("Hitbox", true, false) - -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta: float) -> void: - pass diff --git a/project.godot b/project.godot index 6c4f865..25c7954 100644 --- a/project.godot +++ b/project.godot @@ -178,7 +178,7 @@ jump={ [internationalization] -locale/translations_pot_files=PackedStringArray("res://dialogue/bridge_builder_missing_tool.dialogue", "res://dialogue/default_dialogue.dialogue") +locale/translations_pot_files=PackedStringArray("res://dialogue/bridge_builder_missing_tool.dialogue", "res://dialogue/default_dialogue.dialogue", "res://dialogue/mage_missing_seeds.dialogue") [layer_names] diff --git a/quests/builder_missing_tool_quest.gd b/quests/builder_missing_tool_quest.gd index 529eb7c..a0e88d6 100644 --- a/quests/builder_missing_tool_quest.gd +++ b/quests/builder_missing_tool_quest.gd @@ -1,40 +1,38 @@ class_name QuestBuilderMissingTool -extends Node +extends QuestBase @export var is_hammer_found:bool = false @export var is_hammer_delivered:bool = false @export var is_bridge_built:bool = false -@export var is_completed:bool = false @onready var bridge = %Bridge @onready var merchant: NonPlayerCharacter = %Merchant var _bridge_transform:Transform3D = Transform3D.IDENTITY -var _player:Player = null var _merchant_conversation_actionable:ConversationActionable = null signal wrench_delivered func _ready(): + super._ready() + _bridge_transform = bridge.global_transform bridge.global_transform = Transform3D.IDENTITY.translated(Vector3.UP * -1000) - _player = get_tree().root.find_child("Player", true, false) _merchant_conversation_actionable = merchant.find_child("Conversation", true, false) assert(_merchant_conversation_actionable != null) _merchant_conversation_actionable.conversation_started.connect(on_dialogue_started) func on_dialogue_started() -> void: - _player.is_conversation_active = true + _player.is_input_blocked = true func on_dialogue_ended(_dialog_resource: DialogueResource) -> void: - _player.is_conversation_active = false + _player.is_input_blocked = false if is_completed: return if is_hammer_delivered and not is_bridge_built: - print ("Will build bridge!") wrench_delivered.emit() diff --git a/quests/mage_missing_seeds.gd b/quests/mage_missing_seeds.gd new file mode 100644 index 0000000..aec7c95 --- /dev/null +++ b/quests/mage_missing_seeds.gd @@ -0,0 +1,16 @@ +class_name QuestNeedSomeSeeds +extends QuestBase + +@export var is_seeds_found:bool = false +@export var is_seeds_delivered:bool = false + +func _process(_delta): + if is_completed: + return + + var seeds_item:ItemResource = load("res://data/items/seeds.tres") + if _player.inventory.has_all([seeds_item]): + is_seeds_found = true + + if is_seeds_delivered: + is_completed = true diff --git a/root_ui.gd b/root_ui.gd index f176f81..71273fa 100644 --- a/root_ui.gd +++ b/root_ui.gd @@ -109,10 +109,10 @@ func load_game(): player.global_transform = save_data.player_transform # Quest state - for node:Node in get_tree().get_nodes_in_group("quest_state"): - for property in node.get_property_list(): - if (property.usage & PROPERTY_USAGE_STORAGE != 0) and (property.usage & PROPERTY_USAGE_SCRIPT_VARIABLE) != 0: - node.set(property.name, save_data.quest_states[node.name][property.name]) + for quest_state:Node in get_tree().get_nodes_in_group("quest_state"): + for property in quest_state.get_property_list(): + if (property.usage & PROPERTY_USAGE_STORAGE != 0) and (property.usage & PROPERTY_USAGE_SCRIPT_VARIABLE) != 0 and (save_data.quest_states.has(quest_state.name)) and (save_data.quest_states[quest_state.name].has(property.name)): + quest_state.set(property.name, save_data.quest_states[quest_state.name][property.name]) # Inventory player.inventory.clear() diff --git a/systems/QuestBase.gd b/systems/QuestBase.gd new file mode 100644 index 0000000..9d83e48 --- /dev/null +++ b/systems/QuestBase.gd @@ -0,0 +1,9 @@ +class_name QuestBase +extends Node + +@export var is_completed:bool = false + +var _player:Player = null + +func _ready(): + _player = get_tree().root.find_child("Player", true, false)