diff --git a/Assets/Materials/GoldGlow.tres b/Assets/Materials/GoldGlow.tres index 482eb03..4fe2195 100644 --- a/Assets/Materials/GoldGlow.tres +++ b/Assets/Materials/GoldGlow.tres @@ -3,7 +3,7 @@ [resource] transparency = 1 blend_mode = 1 -albedo_color = Color(0.586682, 0.458813, 0.00383217, 1) +albedo_color = Color(0.59, 0.463445, 0.00589999, 1) emission_enabled = true emission = Color(0.774314, 0.602011, 0.0986466, 1) emission_energy_multiplier = 5.0 diff --git a/Assets/Models/BowCursor.blend b/Assets/Models/BowCursor.blend index 404208d..1db25cd 100644 Binary files a/Assets/Models/BowCursor.blend and b/Assets/Models/BowCursor.blend differ diff --git a/Assets/Models/BowCursor.blend1 b/Assets/Models/BowCursor.blend1 index 1593565..9bdfdd7 100644 Binary files a/Assets/Models/BowCursor.blend1 and b/Assets/Models/BowCursor.blend1 differ diff --git a/Assets/Models/PlatformGenerator.blend b/Assets/Models/PlatformGenerator.blend new file mode 100644 index 0000000..45b06e3 Binary files /dev/null and b/Assets/Models/PlatformGenerator.blend differ diff --git a/Assets/Models/PlatformGenerator.blend.import b/Assets/Models/PlatformGenerator.blend.import new file mode 100644 index 0000000..5f3be3b --- /dev/null +++ b/Assets/Models/PlatformGenerator.blend.import @@ -0,0 +1,53 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://x3hgkrig0jim" +path="res://.godot/imported/PlatformGenerator.blend-673b683482efcd8b1ad86a5def6fa344.scn" + +[deps] + +source_file="res://Assets/Models/PlatformGenerator.blend" +dest_files=["res://.godot/imported/PlatformGenerator.blend-673b683482efcd8b1ad86a5def6fa344.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true +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/export_geometry_nodes_instances=false +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/Models/PlatformGenerator.blend1 b/Assets/Models/PlatformGenerator.blend1 new file mode 100644 index 0000000..1ddd6c4 Binary files /dev/null and b/Assets/Models/PlatformGenerator.blend1 differ diff --git a/Assets/Models/Test1.blend b/Assets/Models/Test1.blend index 7f74af7..7ad4bae 100644 Binary files a/Assets/Models/Test1.blend and b/Assets/Models/Test1.blend differ diff --git a/Assets/Models/Test1.blend1 b/Assets/Models/Test1.blend1 index 70da8af..5a87238 100644 Binary files a/Assets/Models/Test1.blend1 and b/Assets/Models/Test1.blend1 differ diff --git a/FX_CloudAlpha01.jpg b/FX_CloudAlpha01.jpg new file mode 100644 index 0000000..1934e3e Binary files /dev/null and b/FX_CloudAlpha01.jpg differ diff --git a/FX_CloudAlpha01.jpg.import b/FX_CloudAlpha01.jpg.import new file mode 100644 index 0000000..f9d51c1 --- /dev/null +++ b/FX_CloudAlpha01.jpg.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cmihquuk54hfs" +path.s3tc="res://.godot/imported/FX_CloudAlpha01.jpg-6e424269c7228922324e3e6b2eeab06c.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://FX_CloudAlpha01.jpg" +dest_files=["res://.godot/imported/FX_CloudAlpha01.jpg-6e424269c7228922324e3e6b2eeab06c.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/FX_CloudAlpha02.png b/FX_CloudAlpha02.png new file mode 100644 index 0000000..3f9695d Binary files /dev/null and b/FX_CloudAlpha02.png differ diff --git a/FX_CloudAlpha02.png.import b/FX_CloudAlpha02.png.import new file mode 100644 index 0000000..c508a27 --- /dev/null +++ b/FX_CloudAlpha02.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://daeuuulok4yfk" +path.s3tc="res://.godot/imported/FX_CloudAlpha02.png-0967462c32312bef5563f3774394b2f1.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://FX_CloudAlpha02.png" +dest_files=["res://.godot/imported/FX_CloudAlpha02.png-0967462c32312bef5563f3774394b2f1.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/Prefabs/PlayerCamera.tscn b/Prefabs/PlayerCamera.tscn index b42b498..404097c 100644 --- a/Prefabs/PlayerCamera.tscn +++ b/Prefabs/PlayerCamera.tscn @@ -34,38 +34,53 @@ anchors_preset = 0 offset_right = 40.0 offset_bottom = 40.0 -[node name="BoxContainer" type="BoxContainer" parent="Camera3D/Control"] -layout_mode = 1 -offset_right = 3400.0 +[node name="VBoxContainer2" type="VBoxContainer" parent="Camera3D/Control"] +layout_mode = 2 +offset_right = 330.0 offset_bottom = 1440.0 +size_flags_horizontal = 0 -[node name="VBoxContainer" type="VBoxContainer" parent="Camera3D/Control/BoxContainer"] -custom_minimum_size = Vector2(236.82, 3.065) +[node name="GOLD" type="Label" parent="Camera3D/Control/VBoxContainer2"] layout_mode = 2 size_flags_horizontal = 0 -size_flags_vertical = 8 +size_flags_vertical = 0 +theme = ExtResource("3_8uhk6") +text = "Gold: 35" -[node name="HealthBar" type="ProgressBar" parent="Camera3D/Control/BoxContainer/VBoxContainer"] +[node name="Arrows" type="Label" parent="Camera3D/Control/VBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 0 +theme = ExtResource("3_8uhk6") +text = "Arrows" + +[node name="VBoxContainer" type="VBoxContainer" parent="Camera3D/Control"] +custom_minimum_size = Vector2(236.82, 3.065) +layout_mode = 1 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -120.0 +offset_right = 236.82 +grow_vertical = 0 +size_flags_horizontal = 0 +size_flags_vertical = 8 +alignment = 2 + +[node name="HealthBar" type="ProgressBar" parent="Camera3D/Control/VBoxContainer"] layout_mode = 2 size_flags_vertical = 10 theme = ExtResource("3_8uhk6") theme_override_styles/fill = SubResource("StyleBoxFlat_6wc88") value = 42.34 -[node name="StaminaBar" type="ProgressBar" parent="Camera3D/Control/BoxContainer/VBoxContainer"] +[node name="StaminaBar" type="ProgressBar" parent="Camera3D/Control/VBoxContainer"] layout_mode = 2 size_flags_vertical = 1 theme = ExtResource("3_8uhk6") theme_override_styles/fill = SubResource("StyleBoxFlat_8uhk6") value = 42.34 -[node name="GOLD" type="Label" parent="Camera3D/Control/BoxContainer"] -layout_mode = 2 -size_flags_horizontal = 0 -size_flags_vertical = 0 -theme = ExtResource("3_8uhk6") -text = "Gold: 35" - [node name="MouseTable" type="Area3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0) collision_layer = 128 diff --git a/Prefabs/arrow.tscn b/Prefabs/arrow.tscn index 0ad8a64..1ea032a 100644 --- a/Prefabs/arrow.tscn +++ b/Prefabs/arrow.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=8 format=4 uid="uid://bxye0cuxw1mbr"] +[gd_scene load_steps=11 format=4 uid="uid://bxye0cuxw1mbr"] [ext_resource type="Material" uid="uid://c1evlkhnj37ky" path="res://Assets/Materials/GoldGlow.tres" id="1_77nlu"] [ext_resource type="Script" uid="uid://b0crflswpal5l" path="res://Scripts/arrow.gd" id="1_c7yig"] @@ -73,12 +73,21 @@ _surfaces = [{ blend_shape_mode = 0 shadow_mesh = SubResource("ArrayMesh_62tqx") -[sub_resource type="CylinderShape3D" id="CylinderShape3D_c7yig"] -margin = 0.0 -height = 1.77637 -radius = 0.1 +[sub_resource type="Animation" id="Animation_nc78r"] +length = 0.001 -[node name="Arrow" type="MeshInstance3D"] +[sub_resource type="Animation" id="Animation_c7yig"] +resource_name = "despawn" + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_nst05"] +_data = { +&"RESET": SubResource("Animation_nc78r"), +&"despawn": SubResource("Animation_c7yig") +} + +[sub_resource type="SphereShape3D" id="SphereShape3D_c7yig"] + +[node name="Arrow" type="Node3D"] script = ExtResource("1_c7yig") [node name="LandDepth" type="Marker3D" parent="."] @@ -93,11 +102,19 @@ metadata/extras = { "poliigon_props": {} } -[node name="ArrowCollider" type="Area3D" parent="."] -transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, -4.88765e-09, -0.875317) - -[node name="CollisionShape3D" type="CollisionShape3D" parent="ArrowCollider"] -shape = SubResource("CylinderShape3D_c7yig") - [node name="HitRay" type="RayCast3D" parent="."] target_position = Vector3(0, 0, -2) +collision_mask = 9 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_nst05") +} + +[node name="PickupCollision" type="Area3D" parent="."] +collision_layer = 16 +collision_mask = 16 +monitorable = false + +[node name="CollisionShape3D" type="CollisionShape3D" parent="PickupCollision"] +shape = SubResource("SphereShape3D_c7yig") diff --git a/Prefabs/cloud_spawner.tscn b/Prefabs/cloud_spawner.tscn new file mode 100644 index 0000000..ab2e40f --- /dev/null +++ b/Prefabs/cloud_spawner.tscn @@ -0,0 +1,12 @@ +[gd_scene load_steps=3 format=3 uid="uid://cu6f8karst8uk"] + +[ext_resource type="Script" uid="uid://bot4t8im34ldh" path="res://Scripts/cloudSpawner.gd" id="1_t6aj5"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_t6aj5"] +transparency = 1 +albedo_color = Color(1, 1, 1, 0) + +[node name="CloudSpawner" type="CSGBox3D"] +size = Vector3(57.1482, 23.8151, 69.293) +material = SubResource("StandardMaterial3D_t6aj5") +script = ExtResource("1_t6aj5") diff --git a/Prefabs/player.tscn b/Prefabs/player.tscn index 3e3f1da..19df110 100644 --- a/Prefabs/player.tscn +++ b/Prefabs/player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=19 format=3 uid="uid://bacgd5lmvaxea"] +[gd_scene load_steps=21 format=3 uid="uid://bacgd5lmvaxea"] [ext_resource type="Script" uid="uid://bcgt64gerg8pv" path="res://Scripts/player.gd" id="1_5wxv7"] [ext_resource type="Material" uid="uid://b4rpp31c0dx2m" path="res://Assets/Materials/BasicMat.tres" id="1_y6xdh"] @@ -10,6 +10,7 @@ [ext_resource type="PackedScene" uid="uid://b12w4ut17srje" path="res://Assets/Models/Character1.blend" id="7_juxdh"] [ext_resource type="PackedScene" uid="uid://bxye0cuxw1mbr" path="res://Prefabs/arrow.tscn" id="7_kgmex"] [ext_resource type="PackedScene" uid="uid://b4c4cu400yrgt" path="res://Assets/Models/SwordCursor.blend" id="8_4qbli"] +[ext_resource type="PackedScene" uid="uid://jkl8odkxg2s2" path="res://mousedebug.tscn" id="11_2xbkd"] [sub_resource type="BoxMesh" id="BoxMesh_5wxv7"] size = Vector3(0.945, 0.13, 0.135) @@ -88,6 +89,9 @@ _data = { [sub_resource type="SphereShape3D" id="SphereShape3D_juxdh"] radius = 2.5 +[sub_resource type="BoxShape3D" id="BoxShape3D_2xbkd"] +size = Vector3(1, 3.50049, 1.52917) + [node name="Player" type="CharacterBody3D"] collision_layer = 20 collision_mask = 5 @@ -108,6 +112,7 @@ script = ExtResource("3_knrd4") [node name="On Floor" type="Node" parent="State Machine"] script = ExtResource("4_hck1p") move_speed = 7.0 +move_transition_speed = 7.0 [node name="Dodge Roll" type="Node" parent="State Machine"] script = ExtResource("5_hck1p") @@ -146,11 +151,24 @@ libraries = { &"": SubResource("AnimationLibrary_4qbli") } -[node name="Area3D" type="Area3D" parent="."] +[node name="PickupMagnet" type="Area3D" parent="."] collision_layer = 16 collision_mask = 16 -[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"] +[node name="CollisionShape3D" type="CollisionShape3D" parent="PickupMagnet"] shape = SubResource("SphereShape3D_juxdh") -[connection signal="body_entered" from="Area3D" to="." method="_on_area_3d_body_entered"] +[node name="MOUSE" parent="." node_paths=PackedStringArray("player") instance=ExtResource("11_2xbkd")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.21551, 0.500001, -0.339623) +player = NodePath("..") + +[node name="SwordHit" type="Area3D" parent="."] +collision_layer = 8 +collision_mask = 8 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="SwordHit"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.25024, -0.766663) +shape = SubResource("BoxShape3D_2xbkd") + +[connection signal="area_entered" from="PickupMagnet" to="." method="_on_area_3d_area_entered"] +[connection signal="body_entered" from="PickupMagnet" to="." method="_on_area_3d_body_entered"] diff --git a/Prefabs/rat.tscn b/Prefabs/rat.tscn index 6671bc2..c7e10e0 100644 --- a/Prefabs/rat.tscn +++ b/Prefabs/rat.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=22 format=4 uid="uid://dctwrgdviw2bq"] +[gd_scene load_steps=24 format=4 uid="uid://dctwrgdviw2bq"] [ext_resource type="Material" uid="uid://cautxfwhf4hrq" path="res://Assets/Materials/BROWN.tres" id="1_sfuv8"] [ext_resource type="Material" uid="uid://dv5fpke6frr4n" path="res://Assets/Materials/BLACK.tres" id="1_sq2hy"] +[ext_resource type="Script" uid="uid://blcfh1bg820w7" path="res://Scripts/rat.gd" id="1_xmfkn"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_o45vq"] resource_name = "rat1" @@ -327,9 +328,15 @@ _data = { &"run": SubResource("Animation_rf35q") } +[sub_resource type="BoxShape3D" id="BoxShape3D_xmfkn"] +size = Vector3(0.433838, 2.92389, 1) + [node name="rat" type="CharacterBody3D" groups=["breakable", "npc", "rat", "spawned"]] -collision_layer = 64 -collision_mask = 45 +collision_layer = 8 +collision_mask = 9 +script = ExtResource("1_xmfkn") +start_health = 3 +loot_dropped = 100 [node name="StateMachine" type="Node" parent="."] @@ -396,4 +403,8 @@ target_position = Vector3(0, 0, -0.2) transform = Transform3D(0.707107, 0, 0.707107, 0, 1, 0, -0.707107, 0, 0.707107, 0, -0.0699478, -0.342128) target_position = Vector3(0, 0, -0.2) +[node name="CollisionShape3D2" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.45218, 0) +shape = SubResource("BoxShape3D_xmfkn") + [connection signal="velocity_computed" from="NavigationAgent3D" to="." method="_on_navigation_agent_3d_velocity_computed"] diff --git a/Scenes/TestScene1.tscn b/Scenes/TestScene1.tscn index e7f58df..0761e9e 100644 --- a/Scenes/TestScene1.tscn +++ b/Scenes/TestScene1.tscn @@ -1,15 +1,13 @@ -[gd_scene load_steps=15 format=3 uid="uid://dbqyyunvx6fdj"] +[gd_scene load_steps=12 format=3 uid="uid://dbqyyunvx6fdj"] [ext_resource type="PackedScene" uid="uid://hmyrn2pbbhpm" path="res://Prefabs/PlayerCamera.tscn" id="2_qq11w"] [ext_resource type="PackedScene" uid="uid://bacgd5lmvaxea" path="res://Prefabs/player.tscn" id="3_hfnh2"] [ext_resource type="PackedScene" uid="uid://deaibsufjpy1e" path="res://Prefabs/Decorations/chandelier.tscn" id="4_qq11w"] [ext_resource type="PackedScene" uid="uid://dqjh2pu32667h" path="res://Prefabs/Decorations/torch.tscn" id="5_l8yri"] -[ext_resource type="PackedScene" uid="uid://drmam18yg3du5" path="res://Prefabs/goldcoin.tscn" id="6_nc5b6"] [ext_resource type="PackedScene" uid="uid://lhqrdftu1js3" path="res://Prefabs/Decorations/tombstone.tscn" id="7_uchfh"] [ext_resource type="PackedScene" uid="uid://d0u2u3cvfkdlj" path="res://Assets/Models/Test1.blend" id="8_46b76"] [ext_resource type="PackedScene" uid="uid://dctwrgdviw2bq" path="res://Prefabs/rat.tscn" id="8_igv2b"] -[ext_resource type="PackedScene" uid="uid://1shngq3vrbu" path="res://coin_spawner.tscn" id="9_46b76"] -[ext_resource type="PackedScene" uid="uid://jkl8odkxg2s2" path="res://mousedebug.tscn" id="10_tadml"] +[ext_resource type="PackedScene" uid="uid://cu6f8karst8uk" path="res://Prefabs/cloud_spawner.tscn" id="8_tadml"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_31lxn"] sky_top_color = Color(0.1, 0.1, 0.1, 1) @@ -33,13 +31,10 @@ fog_light_color = Color(0.117, 0.14115, 0.18, 1) fog_light_energy = 1.65 fog_density = 1.0 volumetric_fog_enabled = true -volumetric_fog_length = 120.0 +volumetric_fog_length = 40.0 adjustment_enabled = true adjustment_contrast = 1.5 -[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_qq11w"] -data = PackedVector3Array(-1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1) - [node name="TestLevel" type="Node3D"] [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] @@ -51,12 +46,6 @@ shadow_bias = 0.0 [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_vab8d") -[node name="StaticBody3D" type="StaticBody3D" parent="."] -transform = Transform3D(5, 0, 0, 0, 50, 0, 0, 0, 5, 0, -50, 0) - -[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"] -shape = SubResource("ConcavePolygonShape3D_qq11w") - [node name="Test1" type="Node3D" parent="."] [node name="Camera3D" parent="." node_paths=PackedStringArray("player") instance=ExtResource("2_qq11w")] @@ -102,42 +91,6 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.33433, 0, -4.47843) [node name="Torch4" parent="." instance=ExtResource("5_l8yri")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.9561, 0, -4.17663) -[node name="GOLDCOIN" parent="." instance=ExtResource("6_nc5b6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.7488, 0.999622, 2.02556) - -[node name="GOLDCOIN2" parent="." instance=ExtResource("6_nc5b6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.94198, 0.999622, 1.68753) - -[node name="GOLDCOIN3" parent="." instance=ExtResource("6_nc5b6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.61372, 0.999622, 1.5643) - -[node name="GOLDCOIN4" parent="." instance=ExtResource("6_nc5b6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.76262, 0.999622, 1.10972) - -[node name="GOLDCOIN5" parent="." instance=ExtResource("6_nc5b6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.13946, 0.999622, 1.32129) - -[node name="GOLDCOIN6" parent="." instance=ExtResource("6_nc5b6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.02307, 1.44894, 0.736525) - -[node name="GOLDCOIN7" parent="." instance=ExtResource("6_nc5b6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.135758, 3.0102, -28.9616) - -[node name="GOLDCOIN8" parent="." instance=ExtResource("6_nc5b6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.328938, 3.0102, -29.2996) - -[node name="GOLDCOIN9" parent="." instance=ExtResource("6_nc5b6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.000678062, 3.0102, -29.4228) - -[node name="GOLDCOIN10" parent="." instance=ExtResource("6_nc5b6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.149578, 3.0102, -29.8774) - -[node name="GOLDCOIN11" parent="." instance=ExtResource("6_nc5b6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.526418, 3.0102, -29.6658) - -[node name="GOLDCOIN12" parent="." instance=ExtResource("6_nc5b6")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.410028, 3.45952, -30.2506) - [node name="Tombstone" parent="." instance=ExtResource("7_uchfh")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.07396, -0.0927737, -29.9195) @@ -164,9 +117,7 @@ transform = Transform3D(0.0790682, 0, 0.996869, 0, 1, 0, -0.996869, 0, 0.0790682 [node name="Test2" parent="." instance=ExtResource("8_46b76")] -[node name="CoinSpawner" parent="." instance=ExtResource("9_46b76")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.81324, 3.94453, 0.757049) - -[node name="MOUSEDEBUG" parent="." node_paths=PackedStringArray("player") instance=ExtResource("10_tadml")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.21551, 0.500001, -0.339623) -player = NodePath("../Player") +[node name="CloudSpawner" parent="." instance=ExtResource("8_tadml")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -18.6754, -11.9108) +size = Vector3(57.1482, 29.6659, 69.293) +number_of_clouds = 10 diff --git a/Scripts/arrow.gd b/Scripts/arrow.gd index 8473ce9..1db3f51 100644 --- a/Scripts/arrow.gd +++ b/Scripts/arrow.gd @@ -1,13 +1,45 @@ extends Projectile +class_name Arrow @onready var hit_ray: RayCast3D = $HitRay @onready var land_depth: Marker3D = $LandDepth +@onready var arrow: MeshInstance3D = $Arrow +@onready var pickup_collision: Area3D = $PickupCollision -func _process(delta: float) -> void: - - if hit_ray.is_colliding(): - var stick_point = hit_ray.get_collision_point() - if land_depth.global_position.distance_to(stick_point) > .2: +var follow_target +var spawn_out = false + + +func _ready() -> void: + pickup_collision.monitorable = false + +func _physics_process(delta: float) -> void: + if !despawn: + if hit_ray.is_colliding(): + despawn = true + var body_hit = hit_ray.get_collider() + if body_hit is EnemyCharacter: + body_hit.hit(damage) + reparent(body_hit) + var stick_point = hit_ray.get_collision_point() + if land_depth.global_position.distance_to(stick_point) > .2: + global_position += global_transform.basis * Vector3(0,0,-speed) * delta + else: global_position += global_transform.basis * Vector3(0,0,-speed) * delta else: - global_position += global_transform.basis * Vector3(0,0,-speed) * delta + pickup_collision.monitorable = true + + pickup_follow(delta) + +func pickup_follow(delta): + if follow_target != null: + if spawn_out: + follow_target.arrow += 1 + queue_free() + else: + if global_position.distance_to(follow_target.global_position) < .5: + spawn_out = true + else: + var direction_to_player = global_position.direction_to(follow_target.global_position) + var distance_to_player = global_position.distance_to(follow_target.global_position) + global_position += global_transform.basis * direction_to_player * (5 + distance_to_player * 3) * delta diff --git a/Scripts/cloudSpawner.gd b/Scripts/cloudSpawner.gd new file mode 100644 index 0000000..0092ec6 --- /dev/null +++ b/Scripts/cloudSpawner.gd @@ -0,0 +1,20 @@ +extends CSGSpawner + +@export var number_of_clouds : int = 50 +const CLOUD_1 = preload("res://cloud1.tscn") + +func _ready() -> void: + spawn_clouds() + +func spawn_clouds(): + while number_of_clouds >= 0: + number_of_clouds -= 1 + + var spawn_pos = random_box_pos() + var set_pos = self.global_position + spawn_pos + var cloud = CLOUD_1.instantiate() + cloud.visible = false + add_child(cloud) + cloud.global_position = set_pos + await cloud.global_position == set_pos + cloud.visible = true diff --git a/Scripts/cloudSpawner.gd.uid b/Scripts/cloudSpawner.gd.uid new file mode 100644 index 0000000..5234055 --- /dev/null +++ b/Scripts/cloudSpawner.gd.uid @@ -0,0 +1 @@ +uid://bot4t8im34ldh diff --git a/Scripts/csg_spawner.gd b/Scripts/csg_spawner.gd new file mode 100644 index 0000000..a4e7fb2 --- /dev/null +++ b/Scripts/csg_spawner.gd @@ -0,0 +1,11 @@ +extends CSGBox3D +class_name CSGSpawner + +func _ready() -> void: + visible = false + +func random_box_pos(): + var x : float = randf_range(size.x / 2, -size.x /2) + var y : float = randf_range(size.y/ 2, -size.y /2) + var z : float = randf_range(size.z / 2, -size.z /2) + return Vector3(x,y,z) diff --git a/Scripts/csg_spawner.gd.uid b/Scripts/csg_spawner.gd.uid new file mode 100644 index 0000000..19a971f --- /dev/null +++ b/Scripts/csg_spawner.gd.uid @@ -0,0 +1 @@ +uid://c28po5p783mb2 diff --git a/Scripts/enemy.gd b/Scripts/enemy.gd new file mode 100644 index 0000000..a478d70 --- /dev/null +++ b/Scripts/enemy.gd @@ -0,0 +1,41 @@ +extends CharacterBody3D +class_name EnemyCharacter + +@export var start_health : int = 10 +@export var loot_dropped : int = 3 + +const GOLDCOIN = preload("res://Prefabs/goldcoin.tscn") +const MAX_AV = 15 +const MAX_LV = 2 + + +var health + +func _ready() -> void: + health = start_health + +func hit(damage): + health -= damage + print("HEALTH : ",health) + print("HIT") + if health <= 0: + die() + +func die(): + drop_loot() + queue_free() + +func drop_loot(): + while loot_dropped > 0: + var instance_coin = GOLDCOIN.instantiate() + var av_x = randf_range(-MAX_AV,MAX_AV) + var av_y = randf_range(-MAX_AV,MAX_AV) + var av_z = randf_range(-MAX_AV,MAX_AV) + var lv_x = randf_range(-MAX_LV,MAX_LV) + var lv_y = randf_range(0,MAX_LV) + var lv_z = randf_range(-MAX_LV,MAX_LV) + get_tree().current_scene.add_child(instance_coin) + instance_coin.global_position = global_position + instance_coin.angular_velocity = Vector3(av_x,av_y,av_z) + instance_coin.linear_velocity = Vector3(lv_x,lv_y,lv_z) + loot_dropped -= 1 diff --git a/Scripts/enemy.gd.uid b/Scripts/enemy.gd.uid new file mode 100644 index 0000000..796cf4c --- /dev/null +++ b/Scripts/enemy.gd.uid @@ -0,0 +1 @@ +uid://cf6bja6cahxl5 diff --git a/Scripts/gold.gd b/Scripts/gold.gd index 432f617..0668f9a 100644 --- a/Scripts/gold.gd +++ b/Scripts/gold.gd @@ -10,9 +10,6 @@ const SPAWN_OUT_HEIGHT = 14.0 func _process(delta: float) -> void: if follow_target != null: if spawn_out: - #if global_position.y < SPAWN_OUT_HEIGHT: REMOVED BECAUSE I DIDN'T LIKE THE LOOK, LEAVING FOR NOW IN CASE I WANT TO MAKE A DIFFERENT EFFECT HAPPEN - #linear_velocity = Vector3(0,10,0) - #else: follow_target.gold += amount queue_free() else: diff --git a/Scripts/player.gd b/Scripts/player.gd index c83754c..832bc34 100644 --- a/Scripts/player.gd +++ b/Scripts/player.gd @@ -5,6 +5,7 @@ var dodge_direction @onready var body: MeshInstance3D = $Body @onready var anim_player: AnimationPlayer = $AnimationPlayer +@onready var sword_hit_area: Area3D = $SwordHit var gold_to_vacuum = [] var gold = 0 @@ -12,6 +13,8 @@ var gold = 0 const MAX_HEALTH : float = 100 var health = MAX_HEALTH +var arrows = 10 + const MAX_STAMINA : float = 100 var stamina = MAX_STAMINA @@ -34,3 +37,7 @@ func stamina_regen(delta): func _on_area_3d_body_entered(body: Node3D) -> void: if body is Gold: body.follow_target = self + +func _on_area_3d_area_entered(area: Area3D) -> void: + if area.get_parent() is Arrow: + body.get_parent().follow_target = self diff --git a/Scripts/player_camera.gd b/Scripts/player_camera.gd index 431a51c..32c1bd7 100644 --- a/Scripts/player_camera.gd +++ b/Scripts/player_camera.gd @@ -2,9 +2,10 @@ extends Node3D @export var player : Player -@onready var gold_label: Label = $Camera3D/Control/BoxContainer/GOLD -@onready var health_bar: ProgressBar = $Camera3D/Control/BoxContainer/VBoxContainer/HealthBar -@onready var stamina_bar: ProgressBar = $Camera3D/Control/BoxContainer/VBoxContainer/StaminaBar +@onready var gold_label: Label = $Camera3D/Control/VBoxContainer2/GOLD +@onready var arrow_label: Label = $Camera3D/Control/VBoxContainer2/Arrows +@onready var health_bar: ProgressBar = $Camera3D/Control/VBoxContainer/HealthBar +@onready var stamina_bar: ProgressBar = $Camera3D/Control/VBoxContainer/StaminaBar const CAM_MOVE_SPEED = 5 @@ -12,6 +13,7 @@ const CAM_MOVE_SPEED = 5 func _physics_process(delta: float) -> void: follow_player(delta) gold_label.text = "Gold : " + str(player.gold) + arrow_label.text = "Arrows : " + str(player.arrows) stamina_bar.value = player.stamina health_bar.value = player.health diff --git a/Scripts/player_on_floor.gd b/Scripts/player_on_floor.gd index e20cf66..adf6117 100644 --- a/Scripts/player_on_floor.gd +++ b/Scripts/player_on_floor.gd @@ -10,4 +10,5 @@ func Physics_Update(delta): attack() if Input.is_action_just_pressed("ranged_attack"): - Transitioned.emit(self,"ranged attack") + if character.arrows > 0: + Transitioned.emit(self,"ranged attack") diff --git a/Scripts/projectile.gd b/Scripts/projectile.gd index 2523c4e..5cf88cb 100644 --- a/Scripts/projectile.gd +++ b/Scripts/projectile.gd @@ -1,5 +1,6 @@ extends Node3D class_name Projectile -var damage +var damage = 1 var speed +var despawn = false diff --git a/Scripts/ranged_attack.gd b/Scripts/ranged_attack.gd index 2c0a5c6..02b243c 100644 --- a/Scripts/ranged_attack.gd +++ b/Scripts/ranged_attack.gd @@ -3,13 +3,14 @@ class_name PlayerRangedAttack @export var fired_object : PackedScene @export var object_speed : float = 20.0 +@export var arrow_damage : float = 1 func Enter(): character.velocity = Vector3.ZERO func Physics_Update(delta): body_look_at_mouse() - + apply_gravity(delta) if Input.is_action_just_released("ranged_attack"): fire_projectile() Transitioned.emit(self,"on floor") @@ -18,6 +19,7 @@ func Physics_Update(delta): func fire_projectile(): var arrow_spawn = fired_object.instantiate() get_tree().current_scene.add_child(arrow_spawn) + character.arrows -= 1 arrow_spawn.speed = object_speed arrow_spawn.transform.basis = character.body.global_transform.basis arrow_spawn.global_position = character.body.global_position diff --git a/Scripts/rat.gd b/Scripts/rat.gd new file mode 100644 index 0000000..2c4da56 --- /dev/null +++ b/Scripts/rat.gd @@ -0,0 +1 @@ +extends EnemyCharacter diff --git a/Scripts/rat.gd.uid b/Scripts/rat.gd.uid new file mode 100644 index 0000000..e162ada --- /dev/null +++ b/Scripts/rat.gd.uid @@ -0,0 +1 @@ +uid://blcfh1bg820w7 diff --git a/cloud1.tscn b/cloud1.tscn new file mode 100644 index 0000000..ac74015 --- /dev/null +++ b/cloud1.tscn @@ -0,0 +1,35 @@ +[gd_scene load_steps=7 format=3 uid="uid://b6d8oy7iuad4a"] + +[ext_resource type="Texture2D" uid="uid://daeuuulok4yfk" path="res://FX_CloudAlpha02.png" id="1_g3s35"] + +[sub_resource type="Gradient" id="Gradient_g3s35"] +colors = PackedColorArray(1, 1, 1, 0, 1, 1, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_017xs"] +gradient = SubResource("Gradient_g3s35") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_017xs"] +emission_shape = 3 +emission_box_extents = Vector3(5, 5, 5) +angle_min = 1.07288e-05 +angle_max = 360.0 +gravity = Vector3(0, 0, 0) +color_ramp = SubResource("GradientTexture1D_017xs") +turbulence_noise_speed = Vector3(0.345, 0, 0) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_7tvac"] +transparency = 1 +shading_mode = 0 +albedo_texture = ExtResource("1_g3s35") +billboard_mode = 1 + +[sub_resource type="QuadMesh" id="QuadMesh_0l02b"] +material = SubResource("StandardMaterial3D_7tvac") +size = Vector2(30, 30) + +[node name="Node3D" type="GPUParticles3D"] +amount = 20 +lifetime = 60.0 +explosiveness = 0.98 +process_material = SubResource("ParticleProcessMaterial_017xs") +draw_pass_1 = SubResource("QuadMesh_0l02b") diff --git a/clouds.gdshader b/clouds.gdshader new file mode 100644 index 0000000..e7823aa --- /dev/null +++ b/clouds.gdshader @@ -0,0 +1,83 @@ +shader_type spatial; +render_mode unshaded; + +uniform sampler3D cloud_noise_texture; +uniform float cloud_scale : hint_range(0.001, 5.0) = 1.0; +uniform float cloud_threshold : hint_range(0.0, 1.0) = 0.5; +uniform float cloud_threshold_multiplier: hint_range(0.00, 10.00) = 0.05; +uniform int max_steps : hint_range(1, 200) = 64; +uniform float step_size : hint_range(0.01, 0.5) = 0.1; +uniform float cloud_scroll_speed : hint_range(-1.0, 1.0) = 0.5; +uniform vec3 minBounds = vec3(-1.0, -1.0, -1.0); +uniform vec3 maxBounds = vec3(1.0, 1.0, 1.0); + +uniform sampler3D detail_noise_texture; +uniform float detail_intensity = 0.5; + +float sample_detail_noise(vec3 position) { + return texture(detail_noise_texture, position).r; +} + +float sample_cloud(vec3 position) { + vec3 offsetPos = position + cloud_scroll_speed * TIME; + float main_cloud = texture(cloud_noise_texture, offsetPos).r; + float detail = sample_detail_noise(position * 10.0); // 10.0 is an arbitrary value for higher frequency + return mix(main_cloud, detail, detail_intensity); +} + +float raymarch(vec3 ro_model, vec3 rd_model, vec2 intersections) { + float total_density = 0.0; + float t = intersections.x; // start from the entry point + float max_t = intersections.y; // march up to the exit point + + for (int i = 0; i < max_steps && t < max_t; i++) { + vec3 pos_model = ro_model + t * rd_model; + float density = sample_cloud(pos_model * cloud_scale); + density = smoothstep(cloud_threshold - 0.05, cloud_threshold + cloud_threshold_multiplier, density); + total_density += density * step_size; + t += step_size; + } + return total_density; +} + + +// Return both entry and exit intersections with the mesh +vec2 getRayIntersections(vec3 ro, vec3 rd) { + vec3 t1 = (minBounds - ro) / rd; + vec3 t2 = (maxBounds - ro) / rd; + + vec3 tmin = min(t1, t2); + vec3 tmax = max(t1, t2); + + float t_near = max(max(tmin.x, tmin.y), tmin.z); + float t_far = min(min(tmax.x, tmax.y), tmax.z); + + if (t_near > t_far || t_far < 0.0) { + return vec2(-1.0, -1.0); // No intersection + } + + return vec2(t_near, t_far); +} + +void fragment() { + vec3 ro_world = INV_VIEW_MATRIX[3].xyz; + vec4 clipPos = vec4((FRAGCOORD.xy / VIEWPORT_SIZE.xy) * 2.0 - 1.0, FRAGCOORD.z, 1.0); + vec4 viewPos = INV_PROJECTION_MATRIX * clipPos; + vec3 rd_world = normalize(viewPos.xyz / viewPos.w); + rd_world = mat3(INV_VIEW_MATRIX) * rd_world; + + vec2 intersections = getRayIntersections(ro_world, rd_world); + + // Check if there's no intersection + if (intersections.x == -1.0) { + discard; + } + + vec3 ro_model = mat3(inverse(MODEL_MATRIX)) * (ro_world - MODEL_MATRIX[3].xyz); + vec3 rd_model = mat3(inverse(MODEL_MATRIX)) * rd_world; + + float cloud_intensity = raymarch(ro_model, rd_model, intersections); + + ALBEDO = vec3(0.8, 0.8, 0.9) * cloud_intensity; + ALPHA = cloud_intensity; +} \ No newline at end of file diff --git a/clouds.gdshader.uid b/clouds.gdshader.uid new file mode 100644 index 0000000..8cbc111 --- /dev/null +++ b/clouds.gdshader.uid @@ -0,0 +1 @@ +uid://bb8xxifcect78 diff --git a/project.godot b/project.godot index 92875f6..3920c86 100644 --- a/project.godot +++ b/project.godot @@ -79,6 +79,7 @@ ranged_attack={ [layer_names] 3d_physics/layer_3="Player" +3d_physics/layer_4="Enemies" 3d_physics/layer_5="Objects" 3d_physics/layer_6="conflicts with MouseTable for some reason, leaving open for now" 3d_physics/layer_8="MouseTable"