working on picking up arrows

This commit is contained in:
derek
2025-06-26 17:04:35 -05:00
parent af5ff6f284
commit 64310b848b
37 changed files with 492 additions and 106 deletions

View File

@@ -3,7 +3,7 @@
[resource] [resource]
transparency = 1 transparency = 1
blend_mode = 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_enabled = true
emission = Color(0.774314, 0.602011, 0.0986466, 1) emission = Color(0.774314, 0.602011, 0.0986466, 1)
emission_energy_multiplier = 5.0 emission_energy_multiplier = 5.0

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -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

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
FX_CloudAlpha01.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 KiB

View File

@@ -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

BIN
FX_CloudAlpha02.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

View File

@@ -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

View File

@@ -34,38 +34,53 @@ anchors_preset = 0
offset_right = 40.0 offset_right = 40.0
offset_bottom = 40.0 offset_bottom = 40.0
[node name="BoxContainer" type="BoxContainer" parent="Camera3D/Control"] [node name="VBoxContainer2" type="VBoxContainer" parent="Camera3D/Control"]
layout_mode = 1 layout_mode = 2
offset_right = 3400.0 offset_right = 330.0
offset_bottom = 1440.0 offset_bottom = 1440.0
size_flags_horizontal = 0
[node name="VBoxContainer" type="VBoxContainer" parent="Camera3D/Control/BoxContainer"] [node name="GOLD" type="Label" parent="Camera3D/Control/VBoxContainer2"]
custom_minimum_size = Vector2(236.82, 3.065)
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 0 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 layout_mode = 2
size_flags_vertical = 10 size_flags_vertical = 10
theme = ExtResource("3_8uhk6") theme = ExtResource("3_8uhk6")
theme_override_styles/fill = SubResource("StyleBoxFlat_6wc88") theme_override_styles/fill = SubResource("StyleBoxFlat_6wc88")
value = 42.34 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 layout_mode = 2
size_flags_vertical = 1 size_flags_vertical = 1
theme = ExtResource("3_8uhk6") theme = ExtResource("3_8uhk6")
theme_override_styles/fill = SubResource("StyleBoxFlat_8uhk6") theme_override_styles/fill = SubResource("StyleBoxFlat_8uhk6")
value = 42.34 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="."] [node name="MouseTable" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
collision_layer = 128 collision_layer = 128

View File

@@ -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="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"] [ext_resource type="Script" uid="uid://b0crflswpal5l" path="res://Scripts/arrow.gd" id="1_c7yig"]
@@ -73,12 +73,21 @@ _surfaces = [{
blend_shape_mode = 0 blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_62tqx") shadow_mesh = SubResource("ArrayMesh_62tqx")
[sub_resource type="CylinderShape3D" id="CylinderShape3D_c7yig"] [sub_resource type="Animation" id="Animation_nc78r"]
margin = 0.0 length = 0.001
height = 1.77637
radius = 0.1
[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") script = ExtResource("1_c7yig")
[node name="LandDepth" type="Marker3D" parent="."] [node name="LandDepth" type="Marker3D" parent="."]
@@ -93,11 +102,19 @@ metadata/extras = {
"poliigon_props": {} "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="."] [node name="HitRay" type="RayCast3D" parent="."]
target_position = Vector3(0, 0, -2) 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")

View File

@@ -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")

View File

@@ -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="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"] [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://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://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://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"] [sub_resource type="BoxMesh" id="BoxMesh_5wxv7"]
size = Vector3(0.945, 0.13, 0.135) size = Vector3(0.945, 0.13, 0.135)
@@ -88,6 +89,9 @@ _data = {
[sub_resource type="SphereShape3D" id="SphereShape3D_juxdh"] [sub_resource type="SphereShape3D" id="SphereShape3D_juxdh"]
radius = 2.5 radius = 2.5
[sub_resource type="BoxShape3D" id="BoxShape3D_2xbkd"]
size = Vector3(1, 3.50049, 1.52917)
[node name="Player" type="CharacterBody3D"] [node name="Player" type="CharacterBody3D"]
collision_layer = 20 collision_layer = 20
collision_mask = 5 collision_mask = 5
@@ -108,6 +112,7 @@ script = ExtResource("3_knrd4")
[node name="On Floor" type="Node" parent="State Machine"] [node name="On Floor" type="Node" parent="State Machine"]
script = ExtResource("4_hck1p") script = ExtResource("4_hck1p")
move_speed = 7.0 move_speed = 7.0
move_transition_speed = 7.0
[node name="Dodge Roll" type="Node" parent="State Machine"] [node name="Dodge Roll" type="Node" parent="State Machine"]
script = ExtResource("5_hck1p") script = ExtResource("5_hck1p")
@@ -146,11 +151,24 @@ libraries = {
&"": SubResource("AnimationLibrary_4qbli") &"": SubResource("AnimationLibrary_4qbli")
} }
[node name="Area3D" type="Area3D" parent="."] [node name="PickupMagnet" type="Area3D" parent="."]
collision_layer = 16 collision_layer = 16
collision_mask = 16 collision_mask = 16
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"] [node name="CollisionShape3D" type="CollisionShape3D" parent="PickupMagnet"]
shape = SubResource("SphereShape3D_juxdh") 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"]

View File

@@ -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://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="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"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_o45vq"]
resource_name = "rat1" resource_name = "rat1"
@@ -327,9 +328,15 @@ _data = {
&"run": SubResource("Animation_rf35q") &"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"]] [node name="rat" type="CharacterBody3D" groups=["breakable", "npc", "rat", "spawned"]]
collision_layer = 64 collision_layer = 8
collision_mask = 45 collision_mask = 9
script = ExtResource("1_xmfkn")
start_health = 3
loot_dropped = 100
[node name="StateMachine" type="Node" parent="."] [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) 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) 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"] [connection signal="velocity_computed" from="NavigationAgent3D" to="." method="_on_navigation_agent_3d_velocity_computed"]

View File

@@ -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://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://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://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://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://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://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://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://cu6f8karst8uk" path="res://Prefabs/cloud_spawner.tscn" id="8_tadml"]
[ext_resource type="PackedScene" uid="uid://jkl8odkxg2s2" path="res://mousedebug.tscn" id="10_tadml"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_31lxn"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_31lxn"]
sky_top_color = Color(0.1, 0.1, 0.1, 1) 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_light_energy = 1.65
fog_density = 1.0 fog_density = 1.0
volumetric_fog_enabled = true volumetric_fog_enabled = true
volumetric_fog_length = 120.0 volumetric_fog_length = 40.0
adjustment_enabled = true adjustment_enabled = true
adjustment_contrast = 1.5 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="TestLevel" type="Node3D"]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
@@ -51,12 +46,6 @@ shadow_bias = 0.0
[node name="WorldEnvironment" type="WorldEnvironment" parent="."] [node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_vab8d") 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="Test1" type="Node3D" parent="."]
[node name="Camera3D" parent="." node_paths=PackedStringArray("player") instance=ExtResource("2_qq11w")] [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")] [node name="Torch4" parent="." instance=ExtResource("5_l8yri")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.9561, 0, -4.17663) 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")] [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) 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="Test2" parent="." instance=ExtResource("8_46b76")]
[node name="CoinSpawner" parent="." instance=ExtResource("9_46b76")] [node name="CloudSpawner" parent="." instance=ExtResource("8_tadml")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.81324, 3.94453, 0.757049) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -18.6754, -11.9108)
size = Vector3(57.1482, 29.6659, 69.293)
[node name="MOUSEDEBUG" parent="." node_paths=PackedStringArray("player") instance=ExtResource("10_tadml")] number_of_clouds = 10
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.21551, 0.500001, -0.339623)
player = NodePath("../Player")

View File

@@ -1,13 +1,45 @@
extends Projectile extends Projectile
class_name Arrow
@onready var hit_ray: RayCast3D = $HitRay @onready var hit_ray: RayCast3D = $HitRay
@onready var land_depth: Marker3D = $LandDepth @onready var land_depth: Marker3D = $LandDepth
@onready var arrow: MeshInstance3D = $Arrow
@onready var pickup_collision: Area3D = $PickupCollision
func _process(delta: float) -> void: 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(): 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() var stick_point = hit_ray.get_collision_point()
if land_depth.global_position.distance_to(stick_point) > .2: if land_depth.global_position.distance_to(stick_point) > .2:
global_position += global_transform.basis * Vector3(0,0,-speed) * delta global_position += global_transform.basis * Vector3(0,0,-speed) * delta
else: else:
global_position += global_transform.basis * Vector3(0,0,-speed) * delta global_position += global_transform.basis * Vector3(0,0,-speed) * delta
else:
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

20
Scripts/cloudSpawner.gd Normal file
View File

@@ -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

View File

@@ -0,0 +1 @@
uid://bot4t8im34ldh

11
Scripts/csg_spawner.gd Normal file
View File

@@ -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)

View File

@@ -0,0 +1 @@
uid://c28po5p783mb2

41
Scripts/enemy.gd Normal file
View File

@@ -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

1
Scripts/enemy.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://cf6bja6cahxl5

View File

@@ -10,9 +10,6 @@ const SPAWN_OUT_HEIGHT = 14.0
func _process(delta: float) -> void: func _process(delta: float) -> void:
if follow_target != null: if follow_target != null:
if spawn_out: 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 follow_target.gold += amount
queue_free() queue_free()
else: else:

View File

@@ -5,6 +5,7 @@ var dodge_direction
@onready var body: MeshInstance3D = $Body @onready var body: MeshInstance3D = $Body
@onready var anim_player: AnimationPlayer = $AnimationPlayer @onready var anim_player: AnimationPlayer = $AnimationPlayer
@onready var sword_hit_area: Area3D = $SwordHit
var gold_to_vacuum = [] var gold_to_vacuum = []
var gold = 0 var gold = 0
@@ -12,6 +13,8 @@ var gold = 0
const MAX_HEALTH : float = 100 const MAX_HEALTH : float = 100
var health = MAX_HEALTH var health = MAX_HEALTH
var arrows = 10
const MAX_STAMINA : float = 100 const MAX_STAMINA : float = 100
var stamina = MAX_STAMINA var stamina = MAX_STAMINA
@@ -34,3 +37,7 @@ func stamina_regen(delta):
func _on_area_3d_body_entered(body: Node3D) -> void: func _on_area_3d_body_entered(body: Node3D) -> void:
if body is Gold: if body is Gold:
body.follow_target = self 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

View File

@@ -2,9 +2,10 @@ extends Node3D
@export var player : Player @export var player : Player
@onready var gold_label: Label = $Camera3D/Control/BoxContainer/GOLD @onready var gold_label: Label = $Camera3D/Control/VBoxContainer2/GOLD
@onready var health_bar: ProgressBar = $Camera3D/Control/BoxContainer/VBoxContainer/HealthBar @onready var arrow_label: Label = $Camera3D/Control/VBoxContainer2/Arrows
@onready var stamina_bar: ProgressBar = $Camera3D/Control/BoxContainer/VBoxContainer/StaminaBar @onready var health_bar: ProgressBar = $Camera3D/Control/VBoxContainer/HealthBar
@onready var stamina_bar: ProgressBar = $Camera3D/Control/VBoxContainer/StaminaBar
const CAM_MOVE_SPEED = 5 const CAM_MOVE_SPEED = 5
@@ -12,6 +13,7 @@ const CAM_MOVE_SPEED = 5
func _physics_process(delta: float) -> void: func _physics_process(delta: float) -> void:
follow_player(delta) follow_player(delta)
gold_label.text = "Gold : " + str(player.gold) gold_label.text = "Gold : " + str(player.gold)
arrow_label.text = "Arrows : " + str(player.arrows)
stamina_bar.value = player.stamina stamina_bar.value = player.stamina
health_bar.value = player.health health_bar.value = player.health

View File

@@ -10,4 +10,5 @@ func Physics_Update(delta):
attack() attack()
if Input.is_action_just_pressed("ranged_attack"): if Input.is_action_just_pressed("ranged_attack"):
if character.arrows > 0:
Transitioned.emit(self,"ranged attack") Transitioned.emit(self,"ranged attack")

View File

@@ -1,5 +1,6 @@
extends Node3D extends Node3D
class_name Projectile class_name Projectile
var damage var damage = 1
var speed var speed
var despawn = false

View File

@@ -3,13 +3,14 @@ class_name PlayerRangedAttack
@export var fired_object : PackedScene @export var fired_object : PackedScene
@export var object_speed : float = 20.0 @export var object_speed : float = 20.0
@export var arrow_damage : float = 1
func Enter(): func Enter():
character.velocity = Vector3.ZERO character.velocity = Vector3.ZERO
func Physics_Update(delta): func Physics_Update(delta):
body_look_at_mouse() body_look_at_mouse()
apply_gravity(delta)
if Input.is_action_just_released("ranged_attack"): if Input.is_action_just_released("ranged_attack"):
fire_projectile() fire_projectile()
Transitioned.emit(self,"on floor") Transitioned.emit(self,"on floor")
@@ -18,6 +19,7 @@ func Physics_Update(delta):
func fire_projectile(): func fire_projectile():
var arrow_spawn = fired_object.instantiate() var arrow_spawn = fired_object.instantiate()
get_tree().current_scene.add_child(arrow_spawn) get_tree().current_scene.add_child(arrow_spawn)
character.arrows -= 1
arrow_spawn.speed = object_speed arrow_spawn.speed = object_speed
arrow_spawn.transform.basis = character.body.global_transform.basis arrow_spawn.transform.basis = character.body.global_transform.basis
arrow_spawn.global_position = character.body.global_position arrow_spawn.global_position = character.body.global_position

1
Scripts/rat.gd Normal file
View File

@@ -0,0 +1 @@
extends EnemyCharacter

1
Scripts/rat.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://blcfh1bg820w7

35
cloud1.tscn Normal file
View File

@@ -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")

83
clouds.gdshader Normal file
View File

@@ -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;
}

1
clouds.gdshader.uid Normal file
View File

@@ -0,0 +1 @@
uid://bb8xxifcect78

View File

@@ -79,6 +79,7 @@ ranged_attack={
[layer_names] [layer_names]
3d_physics/layer_3="Player" 3d_physics/layer_3="Player"
3d_physics/layer_4="Enemies"
3d_physics/layer_5="Objects" 3d_physics/layer_5="Objects"
3d_physics/layer_6="conflicts with MouseTable for some reason, leaving open for now" 3d_physics/layer_6="conflicts with MouseTable for some reason, leaving open for now"
3d_physics/layer_8="MouseTable" 3d_physics/layer_8="MouseTable"