diff --git a/addons/nodetunnel/bin/~nodetunnel.dll b/addons/nodetunnel/bin/~nodetunnel.dll deleted file mode 100644 index 36cce39..0000000 Binary files a/addons/nodetunnel/bin/~nodetunnel.dll and /dev/null differ diff --git a/experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_01.tscn b/experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_01.tscn index e8c5d17..21dfee8 100644 --- a/experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_01.tscn +++ b/experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_01.tscn @@ -1,18 +1,18 @@ [gd_scene load_steps=59 format=3 uid="uid://bflg720h1w3d3"] -[ext_resource type="Script" uid="uid://tb7n6ybv43ch" path="res://assets/BinbunVFX/shared/script/vfx_controller.gd" id="1_so17j"] -[ext_resource type="Shader" uid="uid://b6ke6r1fjb8s3" path="res://assets/BinbunVFX/impact_explosions/src/shader/explosion_core.gdshader" id="2_d2rk6"] -[ext_resource type="Material" uid="uid://dnw08mtonx63d" path="res://assets/BinbunVFX/impact_explosions/src/material/explosion/explosion_smoke.tres" id="2_plj08"] -[ext_resource type="Shader" uid="uid://d28ltkmbbdcjb" path="res://assets/BinbunVFX/impact_explosions/src/shader/sparks.gdshader" id="3_msnhc"] -[ext_resource type="Shader" uid="uid://bf8eiigjam2fr" path="res://assets/BinbunVFX/impact_explosions/src/shader/explostion_ring.gdshader" id="5_d2rk6"] -[ext_resource type="Texture2D" uid="uid://85fb3gemkbhp" path="res://assets/BinbunVFX/shared/texture/cracks_01.png" id="5_otofc"] -[ext_resource type="Texture2D" uid="uid://bbxo5nkvy537a" path="res://assets/BinbunVFX/shared/texture/cracks_emission_01.png" id="6_d2rk6"] -[ext_resource type="Shader" uid="uid://ccd4kg68n7uox" path="res://assets/BinbunVFX/impact_explosions/src/shader/basic_billboard.gdshader" id="8_y01pw"] -[ext_resource type="Script" uid="uid://bdk8hhttligw" path="res://assets/BinbunVFX/shared/script/vfx_light.gd" id="9_85p3d"] +[ext_resource type="Script" uid="uid://tb7n6ybv43ch" path="res://experimental/BinbunVFX/shared/script/vfx_controller.gd" id="1_so17j"] +[ext_resource type="Shader" uid="uid://b6ke6r1fjb8s3" path="res://experimental/BinbunVFX/impact_explosions/src/shader/explosion_core.gdshader" id="2_d2rk6"] +[ext_resource type="Material" uid="uid://dnw08mtonx63d" path="res://experimental/BinbunVFX/impact_explosions/src/material/explosion/explosion_smoke.tres" id="2_plj08"] +[ext_resource type="Shader" uid="uid://d28ltkmbbdcjb" path="res://experimental/BinbunVFX/impact_explosions/src/shader/sparks.gdshader" id="3_msnhc"] +[ext_resource type="Shader" uid="uid://bf8eiigjam2fr" path="res://experimental/BinbunVFX/impact_explosions/src/shader/explostion_ring.gdshader" id="5_d2rk6"] +[ext_resource type="Texture2D" uid="uid://85fb3gemkbhp" path="res://experimental/BinbunVFX/shared/texture/cracks_01.png" id="5_otofc"] +[ext_resource type="Texture2D" uid="uid://bbxo5nkvy537a" path="res://experimental/BinbunVFX/shared/texture/cracks_emission_01.png" id="6_d2rk6"] +[ext_resource type="Shader" uid="uid://ccd4kg68n7uox" path="res://experimental/BinbunVFX/impact_explosions/src/shader/basic_billboard.gdshader" id="8_y01pw"] +[ext_resource type="Script" uid="uid://bdk8hhttligw" path="res://experimental/BinbunVFX/shared/script/vfx_light.gd" id="9_85p3d"] -[sub_resource type="Gradient" id="Gradient_y01pw"] +[sub_resource type="Gradient" id="Gradient_iyrbe"] -[sub_resource type="FastNoiseLite" id="FastNoiseLite_85p3d"] +[sub_resource type="FastNoiseLite" id="FastNoiseLite_dga0b"] noise_type = 2 frequency = 0.02 fractal_octaves = 1 @@ -22,9 +22,9 @@ domain_warp_amplitude = 5.0 domain_warp_fractal_octaves = 1 [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_csir3"] +noise = SubResource("FastNoiseLite_dga0b") +color_ramp = SubResource("Gradient_iyrbe") seamless = true -color_ramp = SubResource("Gradient_y01pw") -noise = SubResource("FastNoiseLite_85p3d") [sub_resource type="ShaderMaterial" id="ShaderMaterial_e6ocy"] resource_local_to_scene = true @@ -139,8 +139,8 @@ noise_type = 2 fractal_octaves = 3 [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_7t2vj"] -seamless = true noise = SubResource("FastNoiseLite_d2rk6") +seamless = true [sub_resource type="Gradient" id="Gradient_d2rk6"] offsets = PackedFloat32Array(0.868159, 0.980099, 1) @@ -215,10 +215,10 @@ frequency = 0.02 fractal_octaves = 2 [sub_resource type="NoiseTexture2D" id="NoiseTexture2D_cwquj"] -invert = true -seamless = true -seamless_blend_skirt = 1.0 noise = SubResource("FastNoiseLite_y01pw") +seamless = true +invert = true +seamless_blend_skirt = 1.0 [sub_resource type="ShaderMaterial" id="ShaderMaterial_85p3d"] render_priority = 0 @@ -476,6 +476,7 @@ _data = { } [node name="VFXExplosion_01" type="Node3D"] +transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0) script = ExtResource("1_so17j") primary_color = Color(1, 0.662745, 0.0666667, 1) secondary_color = Color(0.984314, 0.192157, 0, 1) @@ -492,6 +493,7 @@ mesh = SubResource("SphereMesh_awqfb") [node name="Smoke" type="GPUParticles3D" parent="."] layers = 540672 material_override = ExtResource("2_plj08") +emitting = false amount = 16 lifetime = 0.8 one_shot = true @@ -502,6 +504,7 @@ draw_pass_1 = SubResource("SphereMesh_plj08") [node name="Sparks" type="GPUParticles3D" parent="."] layers = 540672 material_override = SubResource("ShaderMaterial_msnhc") +emitting = false amount = 16 lifetime = 0.5 one_shot = true diff --git a/experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_04.tscn b/experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_04.tscn index ca70970..6a144c9 100644 --- a/experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_04.tscn +++ b/experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_04.tscn @@ -357,6 +357,7 @@ _data = { } [node name="VFXExplosion_04" type="Node3D"] +transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0) script = ExtResource("1_gkc2v") primary_color = Color(1, 0.529412, 0, 1) secondary_color = Color(1, 0.337255, 0, 1) diff --git a/external/progress_fill.png b/external/progress_fill.png new file mode 100644 index 0000000..95b1ce8 Binary files /dev/null and b/external/progress_fill.png differ diff --git a/external/progress_fill.png.import b/external/progress_fill.png.import new file mode 100644 index 0000000..2e623cf --- /dev/null +++ b/external/progress_fill.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://g7k311jjr73e" +path="res://.godot/imported/progress_fill.png-0edd49454969b595fd5cd4e41197d4b2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://external/progress_fill.png" +dest_files=["res://.godot/imported/progress_fill.png-0edd49454969b595fd5cd4e41197d4b2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/external/progress_over.png b/external/progress_over.png new file mode 100644 index 0000000..c3ccb0b Binary files /dev/null and b/external/progress_over.png differ diff --git a/external/progress_over.png.import b/external/progress_over.png.import new file mode 100644 index 0000000..b91bb8c --- /dev/null +++ b/external/progress_over.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cp188cfq4qeas" +path="res://.godot/imported/progress_over.png-123d5e181e53b8525430d778ea9358ff.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://external/progress_over.png" +dest_files=["res://.godot/imported/progress_over.png-123d5e181e53b8525430d778ea9358ff.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/models/datablock.gltf b/models/datablock.gltf new file mode 100644 index 0000000..3409ab6 --- /dev/null +++ b/models/datablock.gltf @@ -0,0 +1 @@ +{"asset":{"version":"2.0","generator":"Blockbench 5.0.7 glTF exporter"},"scenes":[{"nodes":[0],"name":"blockbench_export"}],"scene":0,"nodes":[{"rotation":[0.3535533905932738,0.3535533905932738,0.14644660940672624,0.8535533905932737],"name":"mesh","mesh":0}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":288,"byteLength":288,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":576,"byteLength":192,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":768,"byteLength":72,"target":34963}],"buffers":[{"byteLength":840,"uri":"data:application/octet-stream;base64,AAAAPwAAgD8AAAA/AAAAPwAAAAAAAAA/AAAAPwAAgD8AAAC/AAAAPwAAAAAAAAC/AAAAvwAAgD8AAAA/AAAAvwAAgD8AAAC/AAAAvwAAAAAAAAA/AAAAvwAAAAAAAAC/AAAAPwAAgD8AAAA/AAAAPwAAgD8AAAC/AAAAvwAAgD8AAAA/AAAAvwAAgD8AAAC/AAAAPwAAAAAAAAA/AAAAvwAAAAAAAAA/AAAAPwAAAAAAAAC/AAAAvwAAAAAAAAC/AAAAPwAAgD8AAAA/AAAAvwAAgD8AAAA/AAAAPwAAAAAAAAA/AAAAvwAAAAAAAAA/AAAAPwAAgD8AAAC/AAAAPwAAAAAAAAC/AAAAvwAAgD8AAAC/AAAAvwAAAAAAAAC/AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAACAvwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAAAAAACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAgD8AAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAgD8AAIA/AgAAAAEAAgABAAMABgAEAAUABgAFAAcACgAIAAkACgAJAAsADgAMAA0ADgANAA8AEgAQABEAEgARABMAFgAUABUAFgAVABcA"}],"accessors":[{"bufferView":0,"componentType":5126,"count":24,"max":[0.5,1,0.5],"min":[-0.5,0,-0.5],"type":"VEC3"},{"bufferView":1,"componentType":5126,"count":24,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":2,"componentType":5126,"count":24,"max":[1,1],"min":[0,0],"type":"VEC2"},{"bufferView":3,"componentType":5123,"count":36,"max":[23],"min":[0],"type":"SCALAR"}],"materials":[{"pbrMetallicRoughness":{"metallicFactor":0,"roughnessFactor":1,"baseColorTexture":{"index":0}},"alphaMode":"MASK","alphaCutoff":0.05,"doubleSided":true}],"textures":[{"sampler":0,"source":0,"name":"texture"}],"samplers":[{"magFilter":9728,"minFilter":9728,"wrapS":33071,"wrapT":33071}],"images":[{"mimeType":"image/png","uri":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAgUlEQVR4AeyWsQ0AIQwDI8ZgDuZgWOZgDtb4lwu7/eYTGiOdIqXA5irac/m0uHxUYO8doPcemSAD8N0qwEX1VIE5Z4DsAsgAzFEBLqqnC9iADdiADdiADdiADdiADcjAWitA9rccGYA5KsBF9VSBMUaAc05kggzAh6oAF3/Pr/teAAAA//+XbCPxAAAABklEQVQDAKj338Fk9RQnAAAAAElFTkSuQmCC"}],"meshes":[{"primitives":[{"mode":4,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2},"indices":3,"material":0}]}]} \ No newline at end of file diff --git a/models/datablock.gltf.import b/models/datablock.gltf.import new file mode 100644 index 0000000..e1556fc --- /dev/null +++ b/models/datablock.gltf.import @@ -0,0 +1,42 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://d187i1jot4wmy" +path="res://.godot/imported/datablock.gltf-bd1206a04074a56813fd4c73675028f6.scn" + +[deps] + +source_file="res://models/datablock.gltf" +dest_files=["res://.godot/imported/datablock.gltf-bd1206a04074a56813fd4c73675028f6.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/root_script=null +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_name_suffixes=true +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="" +materials/extract=0 +materials/extract_format=0 +materials/extract_path="" +_subresources={} +gltf/naming_version=2 +gltf/embedded_image_handling=1 diff --git a/models/datablock_0.png b/models/datablock_0.png new file mode 100644 index 0000000..e21842d Binary files /dev/null and b/models/datablock_0.png differ diff --git a/models/datablock_0.png.import b/models/datablock_0.png.import new file mode 100644 index 0000000..142084f --- /dev/null +++ b/models/datablock_0.png.import @@ -0,0 +1,44 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b7s2n7xcvntpl" +path.s3tc="res://.godot/imported/datablock_0.png-be2ea7c3074a4bce475d2e7d6a4e74f6.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} +generator_parameters={ +"md5": "78f80e90042787b6f29cb279213d54f5" +} + +[deps] + +source_file="res://models/datablock_0.png" +dest_files=["res://.godot/imported/datablock_0.png-be2ea7c3074a4bce475d2e7d6a4e74f6.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/scenes/manufactory.tscn b/scenes/manufactory.tscn index d12ef48..af3273f 100644 --- a/scenes/manufactory.tscn +++ b/scenes/manufactory.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=14 format=4 uid="uid://dewb10lmvj1yy"] +[gd_scene load_steps=15 format=4 uid="uid://dewb10lmvj1yy"] [ext_resource type="Script" uid="uid://d3t381vws7vns" path="res://scripts/level.gd" id="1_0a1dj"] [ext_resource type="PackedScene" uid="uid://bgocskbofewsr" path="res://templates/HUD.tscn" id="2_uckv6"] @@ -9,10 +9,18 @@ [ext_resource type="Texture2D" uid="uid://dri0a20l6kpbj" path="res://visuals/images/icon.svg" id="7_cttrw"] [ext_resource type="AudioStream" uid="uid://cr0n18se6jnig" path="res://audio/music/Industrial Matts Fridge Intensity 2.wav" id="9_d3ajt"] [ext_resource type="Script" uid="uid://b5npi1ys4lnf4" path="res://scripts/multiplayer_level_setup.gd" id="9_owm7e"] +[ext_resource type="PackedScene" uid="uid://dyvov4i48mqoi" path="res://templates/datablock_pickup.tscn" id="10_owm7e"] [sub_resource type="Environment" id="Environment_x4b8f"] -background_energy_multiplier = 0.29 +background_mode = 1 +ambient_light_color = Color(1, 1, 1, 1) +reflected_light_source = 1 +tonemap_white = 16.0 glow_enabled = true +fog_mode = 1 +fog_light_color = Color(0.21401742, 0.23577034, 0.2696176, 1) +fog_light_energy = 0.0 +fog_density = 1.0 [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_d3ajt"] resource_name = "material_0" @@ -413,6 +421,9 @@ autoplay = true unique_name_in_owner = true script = ExtResource("9_owm7e") +[node name="Datablock Pickup" parent="." instance=ExtResource("10_owm7e")] +transform = Transform3D(0.99999994, 0, 0, 0, 0.9426415, -0.33380684, 0, 0.33380687, 0.94264144, 0.5, 1.790432, 0.5) + [connection signal="spawned" from="PawnSpawner" to="MultiplayerLevelSetup" method="_on_pawn_spawner_spawned"] [connection signal="spawned" from="CameraSpawner" to="MultiplayerLevelSetup" method="_on_camera_spawner_spawned"] diff --git a/scenes/vrep_loading.tscn b/scenes/vrep_loading.tscn new file mode 100644 index 0000000..d386994 --- /dev/null +++ b/scenes/vrep_loading.tscn @@ -0,0 +1,70 @@ +[gd_scene load_steps=3 format=3 uid="uid://dq5mtoakhfxx4"] + +[ext_resource type="Texture2D" uid="uid://cp188cfq4qeas" path="res://external/progress_over.png" id="1_wa8kr"] +[ext_resource type="Texture2D" uid="uid://g7k311jjr73e" path="res://external/progress_fill.png" id="2_0fdvr"] + +[node name="Node2D" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="ColorRect" type="ColorRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +color = Color(0, 0, 0, 1) + +[node name="RichTextLabel" type="RichTextLabel" parent="."] +layout_mode = 0 +offset_left = 160.0 +offset_top = 413.0 +offset_right = 1765.0 +offset_bottom = 618.0 +theme_override_font_sizes/normal_font_size = 150 +bbcode_enabled = true +text = "LOADING V-REP . . ." +fit_content = true +scroll_active = false + +[node name="TextureProgressBar" type="TextureProgressBar" parent="."] +texture_filter = 1 +layout_mode = 0 +offset_left = 133.0 +offset_top = 894.0 +offset_right = 1731.0 +offset_bottom = 987.0 +nine_patch_stretch = true +stretch_margin_left = 10 +stretch_margin_top = 10 +stretch_margin_right = 10 +stretch_margin_bottom = 10 +texture_over = ExtResource("1_wa8kr") +texture_progress = ExtResource("2_0fdvr") + +[node name="RichTextLabel2" type="RichTextLabel" parent="."] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -309.0 +offset_top = -260.0 +offset_right = 309.0 +offset_bottom = -205.0 +grow_horizontal = 2 +grow_vertical = 0 +theme_override_font_sizes/normal_font_size = 40 +bbcode_enabled = true +text = "[center]Simulating Virtual Environment[/center] +" +fit_content = true +scroll_active = false diff --git a/scripts/autos/game.gd b/scripts/autos/game.gd index f318c4b..a18e88d 100644 --- a/scripts/autos/game.gd +++ b/scripts/autos/game.gd @@ -65,8 +65,8 @@ func is_multiplayer() -> bool: return multiplayer_game -func start_level(pawns : Dictionary[int, StringName]) -> void: - pawns_selected = pawns +func start_level(pawn_dict : Dictionary[int, StringName]) -> void: + pawns_selected = pawn_dict if !Multiplayer.is_host(): return @@ -135,11 +135,11 @@ func level_spawned(peer_id : int) -> void: check_level_ready() func check_level_ready() -> void: - var ready : bool = true + var level_ready : bool = true for id in level_synced: if level_synced[id] == false: - ready = false - if ready: + level_ready = false + if level_ready: level.setup() func oneshot(stream : AudioStream) -> void: diff --git a/scripts/autos/multiplayer.gd b/scripts/autos/multiplayer.gd index a7818ca..227650b 100644 --- a/scripts/autos/multiplayer.gd +++ b/scripts/autos/multiplayer.gd @@ -81,26 +81,26 @@ func is_server() -> bool: func is_host() -> bool: return id == 1 -func _process(delta: float) -> void: +func _process(_delta: float) -> void: if waiting: - var ready : bool = true + var group_ready : bool = true for pr in player_readiness.values(): if !pr: - ready = false + group_ready = false break - if ready: + if group_ready: all_ready.emit() waiting = false for pr in player_readiness.keys(): player_readiness[pr] = false -func _add_player_to_game(id : int) -> void: - print("Player %s joined the game!" % id) +func _add_player_to_game(pid : int) -> void: + print("Player %s joined the game!" % pid) await get_tree().create_timer(0.5).timeout - get_handle_from_peer(id) + get_handle_from_peer(pid) -func _remove_player_from_game(id : int) -> void: - print("Player %s left the game!" % id) +func _remove_player_from_game(pid : int) -> void: + print("Player %s left the game!" % pid) func get_handle_from_peer(peer_id) -> void: rpc_id(peer_id, "report_handle_to_peer", id) diff --git a/scripts/collectable.gd b/scripts/collectable.gd new file mode 100644 index 0000000..54ddfd1 --- /dev/null +++ b/scripts/collectable.gd @@ -0,0 +1,17 @@ +class_name Pickup extends Area3D + + +enum Type{ + DATABLOCK, + INTEGRITY, + SCAN, + BASIC_HACK, + ADVANCED_HACK +} + +@export var type : Type + +func _on_body_entered(body: Node3D) -> void: + if body is PawnController: + body.pickup(type) + queue_free() diff --git a/scripts/collectable.gd.uid b/scripts/collectable.gd.uid new file mode 100644 index 0000000..d59c184 --- /dev/null +++ b/scripts/collectable.gd.uid @@ -0,0 +1 @@ +uid://du3s0b1kotb6l diff --git a/scripts/control_display.gd b/scripts/control_display.gd index ec8b114..98596e8 100644 --- a/scripts/control_display.gd +++ b/scripts/control_display.gd @@ -10,7 +10,7 @@ func _on_melee_range_changed(melee : bool) -> void: range_attack_button.visible = !melee melee_attack_button.visible = melee -func _process(delta: float) -> void: +func _process(_delta: float) -> void: hack_button.set_pressed_no_signal(Input.is_action_pressed("install")) detect_button.set_pressed_no_signal(Input.is_action_pressed("detect")) switch_button.set_pressed_no_signal(Input.is_action_pressed("detonate")) diff --git a/scripts/decompile_hack_modal.gd b/scripts/decompile_hack_modal.gd index 14fa94e..07dc1c4 100644 --- a/scripts/decompile_hack_modal.gd +++ b/scripts/decompile_hack_modal.gd @@ -47,7 +47,7 @@ var decompiling : bool var failed : bool var difficulty : int = 1 -func _process(delta: float) -> void: +func _process(_delta: float) -> void: timer_label.text = "%02f.3" % timer.time_left func start_decompiling() -> void: @@ -109,5 +109,5 @@ func succeed() -> void: func _on_hack_failed() -> void: fail() -func _on_hack_removed(type : Hack.Type) -> void: +func _on_hack_removed(_type : Hack.Type) -> void: Game.player.close_modal() diff --git a/scripts/gas_emitter.gd b/scripts/gas_emitter.gd index f3256eb..2a2a017 100644 --- a/scripts/gas_emitter.gd +++ b/scripts/gas_emitter.gd @@ -22,25 +22,25 @@ func _on_timeout() -> void: func spread() -> void: var new_squares : Dictionary[Vector3i, bool] = {} - for square in last_spread: + for sq in last_spread: for i in range(-1, 2): for j in range(-1, 2): for k in range(-1, 2): - var ts = square + Vector3i(i, j, k) - new_squares[square + Vector3i(i, j, k)] = true + #var ts = sq + Vector3i(i, j, k) + new_squares[sq + Vector3i(i, j, k)] = true last_spread = [] - for square in new_squares.keys(): - if squares.has(square): + for sq in new_squares.keys(): + if squares.has(sq): continue - var floor_square = square + Vector3i(0,-1,0) + var floor_square = sq + Vector3i(0,-1,0) if(Game.level.floor_layer.get_cell_item(floor_square) == GridMap.INVALID_CELL_ITEM and Game.level.ramp_layer.get_cell_item(floor_square) == GridMap.INVALID_CELL_ITEM): continue - last_spread.append(square) - squares[square] = true - emit_gas(square) + last_spread.append(sq) + squares[sq] = true + emit_gas(sq) -func emit_gas(square) -> void: +func emit_gas(sq) -> void: var gas = gas_square_template.instantiate() gas.setup(hack_owner, damage) - Game.level.add_vfx(gas, square) + Game.level.add_vfx(gas, sq) diff --git a/scripts/gas_square.gd b/scripts/gas_square.gd index 01c3f8e..81a071c 100644 --- a/scripts/gas_square.gd +++ b/scripts/gas_square.gd @@ -16,9 +16,9 @@ func _physics_process(delta: float) -> void: if time_remaining <= 0: queue_free() -func setup(owner, damage) -> void: - self.hack_owner = hack_owner - self.damage = damage +func setup(h_owner, dam) -> void: + hack_owner = h_owner + damage = dam time_remaining = 2.0 func _on_body_entered(body: Node3D) -> void: diff --git a/scripts/hack.gd b/scripts/hack.gd index 02eb019..7fa2d8e 100644 --- a/scripts/hack.gd +++ b/scripts/hack.gd @@ -26,10 +26,10 @@ const hack_icons : Dictionary = { Hack.Type.PURGE : preload("res://external/purge-icon.png"), } -const destroy_explosion_template = preload("res://templates/explosion.tscn") -const purge_explosion_template = preload("res://templates/explosion.tscn") +const destroy_explosion_template = preload("res://experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_01.tscn") +const purge_explosion_template = preload("res://experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_03.tscn") const contain_template = preload("res://templates/pitfall.tscn") -const trigger_explosion_template = preload("res://templates/explosion.tscn") +const trigger_explosion_template = preload("res://experimental/BinbunVFX/impact_explosions/effects/explosion/vfx_explosion_04.tscn") const infect_emitter_template = preload("res://templates/gas_emitter.tscn") const force_activate_sound = preload("res://audio/sounds/TomWinandySFX_UI_ScifiTech_Start_06.wav") @@ -69,13 +69,13 @@ func _enter_tree() -> void: func _exit_tree() -> void: Game.level.remove_map_marker(self) -func setup(type : Type, direction : Vector3, hack_owner : int) -> void: - self.type = type - self.hack_owner = hack_owner +func setup(new_type : Type, dir : Vector3, h_owner : int) -> void: + type = new_type + hack_owner = h_owner if type == Type.REDIRECT: - var r : float = atan2(direction.z, direction.x) + var r : float = atan2(dir.z, dir.x) var cardinal : float = roundi(r * 2 / PI) * PI / 2 - self.direction = Vector3(cos(cardinal), 0, sin(cardinal)) + direction = Vector3(cos(cardinal), 0, sin(cardinal)) func remove() -> void: removed.emit(type) @@ -127,7 +127,7 @@ func _ready() -> void: force_strip.rotate_y(r) force_strip.visible = owns_hack -func _process(delta: float) -> void: +func _process(_delta: float) -> void: just_revealed = false func blast(body : PawnController) -> void: @@ -149,16 +149,16 @@ func activate() -> void: for body in get_overlapping_bodies(): body.fling(direction, 5.0) Type.PURGE: - var exp = purge_explosion_template.instantiate() - Game.level.add_vfx(exp, square) + var expl = purge_explosion_template.instantiate() + Game.level.add_vfx(expl, square) explode = true Type.TRIGGER: - var exp = trigger_explosion_template.instantiate() - Game.level.add_vfx(exp, square) + var expl = trigger_explosion_template.instantiate() + Game.level.add_vfx(expl, square) explode = true Type.DESTROY: - var exp = destroy_explosion_template.instantiate() - Game.level.add_vfx(exp, square) + var expl = destroy_explosion_template.instantiate() + Game.level.add_vfx(expl, square) explode = true Type.INFECT: var emitter = infect_emitter_template.instantiate() @@ -181,10 +181,10 @@ func trigger_adjacent_bombs() -> void: if hack.type == Type.DESTROY and hack != self: hack.delay_trigger() -func generate_contain(square : Vector3i) -> void: +func generate_contain(sq : Vector3i) -> void: var contain = contain_template.instantiate() contain.duration = 6.0 - Game.level.add_vfx(contain, square) + Game.level.add_vfx(contain, sq) func blast_players() -> void: for body in range_area.get_overlapping_bodies(): @@ -206,7 +206,7 @@ func _on_body_entered(body: Node3D) -> void: return if !decompiling or body.id != decompile_id: - if !body.detecting: + if !body.is_detecting(): activate() diff --git a/scripts/hack_fx.gd b/scripts/hack_fx.gd index 71717d9..9fa8711 100644 --- a/scripts/hack_fx.gd +++ b/scripts/hack_fx.gd @@ -17,8 +17,8 @@ func proximal_shake(distance : float) -> void: var d = global_position.distance_squared_to(Game.player.global_position) var d_sq = distance * distance if d <= d_sq: - var str : float = (d_sq - d) / d_sq - var l_val : float = lerp(0.0, 1.0, str) - Input.start_joy_vibration(0, l_val,l_val,lerp(0.5, 1.0, str)) + var strength : float = (d_sq - d) / d_sq + var l_val : float = lerp(0.0, 1.0, strength) + Input.start_joy_vibration(0, l_val,l_val,lerp(0.5, 1.0, strength)) Game.player.camera.add_trauma(l_val) diff --git a/scripts/healthbar.gd b/scripts/healthbar.gd index a579577..e8bf404 100644 --- a/scripts/healthbar.gd +++ b/scripts/healthbar.gd @@ -8,11 +8,11 @@ func _ready() -> void: # Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta: float) -> void: +func _process(_delta: float) -> void: pass -func _on_health_changed(current : int, max : int) -> void: - max_value = max +func _on_health_changed(current : int, max_amt : int) -> void: + max_value = max_amt value = current func _on_poison_status_changed(poisoned : bool) -> void: diff --git a/scripts/hud.gd b/scripts/hud.gd index eb1b364..01a7b8a 100644 --- a/scripts/hud.gd +++ b/scripts/hud.gd @@ -25,6 +25,6 @@ func set_ammo(ammo : int) -> void: ammo_label.text = str(ammo) ammo_label.modulate = Color.DIM_GRAY if ammo == 0 else Color.WHITE -func _on_ammo_changed(current : int, max : int) -> void: +func _on_ammo_changed(current : int, _max_amt : int) -> void: set_ammo(current) diff --git a/scripts/level.gd b/scripts/level.gd index d3d6ae3..69badae 100644 --- a/scripts/level.gd +++ b/scripts/level.gd @@ -56,13 +56,13 @@ func spawn_players_singleplayer() -> void: var pc : PawnController = pawn_controller.instantiate() pawns[1] = pc pawns_node.add_child(pc,true) - var position : Vector3 + var pos : Vector3 if(spawn_points == null or len(spawn_points) <= 1): - position = Vector3(0,0,0) + pos = Vector3(0,0,0) else: - position = spawn_points[0].global_position - pc.global_position = position + pos = spawn_points[0].global_position + pc.global_position = pos pc.setup(1, Game.pawns_selected[1]) add_pawn_camera(pc) cameras[1].register_pawn(1) @@ -83,17 +83,17 @@ func spawn_players_multiplayer() -> void: for key in pawns: var pc = pawns[key] - var position : Vector3 + var pos : Vector3 if(spawn_points == null or len(spawn_points) <= count): if key == Multiplayer.id: - position = Vector3(0,0,0) + pos = Vector3(0,0,0) else: - position = Vector3(3,0,0) + pos = Vector3(3,0,0) else: - position = spawn_points[count].global_position + pos = spawn_points[count].global_position count += 1 - pc.global_position = position + pc.global_position = pos pc.setup.rpc(key, Game.pawns_selected[key]) multiplayer_level_setup.set_players_unready(Multiplayer.players.values()) @@ -198,7 +198,7 @@ func remove_map_marker(target) -> void: func add_map_marker(target) -> void: var marker : MapMarker - var height : float + var height : float = 0 if target is PawnController: marker = map_marker_templates.pawn.instantiate() height += 40 diff --git a/scripts/map_marker.gd b/scripts/map_marker.gd index 9a94504..fba0a29 100644 --- a/scripts/map_marker.gd +++ b/scripts/map_marker.gd @@ -2,17 +2,17 @@ class_name MapMarker extends Node3D var target : Node3D -func register_target(target : Node3D) -> void: - self.target = target +func register_target(new_target : Node3D) -> void: + target = new_target reposition() func reposition() -> void: var loc = target.position position = Vector3(loc.x, position.y, loc.z) -func _process(delta: float) -> void: +func _process(_delta: float) -> void: if target: reposition() -func _on_hack_revealed(is_visible : bool) -> void: - visible = is_visible +func _on_hack_revealed(reveal : bool) -> void: + visible = reveal diff --git a/scripts/multiplayer_level_setup.gd b/scripts/multiplayer_level_setup.gd index bc91d4f..af33623 100644 --- a/scripts/multiplayer_level_setup.gd +++ b/scripts/multiplayer_level_setup.gd @@ -56,7 +56,7 @@ func _on_pawn_spawner_spawned(node: Node) -> void: -func _on_camera_spawner_spawned(node: Node) -> void: +func _on_camera_spawner_spawned(_node: Node) -> void: cameras_expected -= 1 if cameras_expected == 0: all_cameras_spawned.emit() diff --git a/scripts/multiplayer_setup.gd b/scripts/multiplayer_setup.gd index 34da33e..d0d565b 100644 --- a/scripts/multiplayer_setup.gd +++ b/scripts/multiplayer_setup.gd @@ -70,7 +70,7 @@ func _on_joining_back_button_pressed() -> void: %Joining.visible = false %Menu.visible = true -func _on_client_added(peer_handle : String, peer_id : int) -> void: +func _on_client_added(peer_handle : String, _peer_id : int) -> void: %ParticipantsText.text = "[color=FFFF00][b]*%s[/b][/color]\n[color=FFFFFF]*%s[/color]" % [handle, peer_handle] %StartButton.disabled = false diff --git a/scripts/pawn_body.gd b/scripts/pawn_body.gd index 7427a35..a6a63d3 100644 --- a/scripts/pawn_body.gd +++ b/scripts/pawn_body.gd @@ -48,6 +48,21 @@ func _on_struggle_changed(value : float) -> void: else: struggle_bar.value = value +func set_animation_length(node_name : String, length : float) -> void: + if length == 0: + length = 0.01 + var blendtree : AnimationNodeBlendTree = anim_tree.tree_root.get_node(node_name) + if !blendtree: + return + var anim_node : AnimationNodeAnimation = blendtree.get_node("Animation") + if !anim_node: + return + var animation : Animation = anim_player.get_animation(anim_node.animation) + if !animation: + return + var a_scale : float = animation.length / length + anim_tree["parameters/%s/TimeScale/scale" % node_name] = a_scale + func _on_footstep_timer_timeout() -> void: walk_sound.play() diff --git a/scripts/pawn_camera.gd b/scripts/pawn_camera.gd index 30c4e15..2281996 100644 --- a/scripts/pawn_camera.gd +++ b/scripts/pawn_camera.gd @@ -45,7 +45,7 @@ func _process(delta: float) -> void: func shake(): noise_y += .1 var amount = pow(trauma, trauma_power) - var n_val = noise.get_noise_2d(noise.seed*2, noise_y) + #var n_val = noise.get_noise_2d(noise.seed*2, noise_y) h_offset = max_offset.x * amount * randf_range(-1, 1) v_offset = max_offset.y * amount * randf_range(-1, 1) print("%f %f" % [h_offset, v_offset]) diff --git a/scripts/pawn_controller.gd b/scripts/pawn_controller.gd index 4c2d392..9e1c48c 100644 --- a/scripts/pawn_controller.gd +++ b/scripts/pawn_controller.gd @@ -2,6 +2,11 @@ class_name PawnController extends CharacterBody3D enum State { NORMAL, + DETECTING, + INSTALLING, + UNINSTALLING, + MELEE_ATTACKING, + RANGED_ATTACKING, KNOCKDOWN, KNOCKUP, FLUNG, @@ -26,7 +31,7 @@ const range_sphere_template = preload("res://templates/range_sphere.tscn") @onready var detect_sound : AudioStreamPlayer3D = $DetectSound @onready var fling_sound : AudioStreamPlayer3D = $FlingSound @onready var crash_sound : AudioStreamPlayer3D = $CrashSound -@onready var reload_sound : AudioStreamPlayer3D = $PawnBody/ReloadSound +@onready var reload_sound : AudioStreamPlayer3D @onready var detect_icon : Sprite3D = $DetectIcon @export var id : int = 1 @@ -35,9 +40,6 @@ const range_sphere_template = preload("res://templates/range_sphere.tscn") var button_actions : Dictionary[int, String] var current_square : Vector3i var facing : Vector3 -@export var detecting : bool = false -var installing : bool = false -var uninstalling : bool = false var range_sphere : RangeSphere var detect_squares : Dictionary[Vector3i, bool] = {} var detect_tween : Tween = null @@ -51,18 +53,17 @@ var poison_time_remaining : float = 0 var poison_pulse_timer : float var melee_range : float = 3.0 +var can_melee : bool = false var ranged_range : float = 6 var attack_timer : float = 0 var melee_recovery_time : float = .75 -var ranged_recovery_time : float = .2 +var ranged_recovery_time : float = 0.25 var ranged_reload_time : float = 1 var projectile_speed : float = 10.0 var projectile_damage : int = 4 var ammo = 5 var max_ammo = 5 var combat_target -var meleeing : bool = false -var shooting : bool = false var reloading : bool = false var take_shot : bool = false var flinch : float = 0 @@ -98,7 +99,22 @@ func _exit_tree() -> void: #Game.level.evaluate_outcome() #Game.evaluate +func calculate_pawn_velocity(dir : Vector3) -> Vector3: + var y = velocity.y + var result = speed * dir + if is_poisoned(): + result *= 0.5 + if is_crouching(): + result *= .33 + result.y = y + return result +func play_footsteps(spd : float, loud : bool) -> void: + if loud: + body.play_footsteps(spd) + +func stop_footsteps() -> void: + body.stop_footsteps() func _physics_process(delta: float) -> void: if attack_timer > 0: @@ -142,26 +158,16 @@ func _physics_process(delta: float) -> void: knockdown(-fling_direction) hurt(10) moving = false - State.NORMAL: + State.NORMAL, State.DETECTING, State.INSTALLING: can_fall = true - if dir.length_squared() > 0: moving = true + velocity = calculate_pawn_velocity(dir) facing = dir.normalized() body.look_at(body.global_position - dir) - var y = velocity.y - velocity = speed * dir - if is_poisoned(): - velocity *= 0.5 - if is_crouching(): - velocity *= .33 - velocity.y = y - if !detecting: - body.play_footsteps(lerp(.78, .33, dir.length())) - else: - body.stop_footsteps() - elif body != null: - body.stop_footsteps() + play_footsteps(lerp(.78, .33, dir.length()), true) + else: + stop_footsteps() if body != null: body.set_animation_parameter("parameters/Motion/blend_position", dir.length()) body.set_animation_parameter("parameters/Crouch/blend_position", dir.length()) @@ -171,12 +177,9 @@ func _physics_process(delta: float) -> void: else: moving = true can_fall = true - State.KNOCKDOWN,State.BOUND,State.DEAD: - return if can_fall: - var down = 0 if !is_on_floor(): velocity.y = velocity.y + get_gravity().y * delta moving = true @@ -184,8 +187,9 @@ func _physics_process(delta: float) -> void: if moving: move_and_slide() - if detecting: + if is_detecting(): update_detect_region.rpc(true) + if range_sphere: update_range_sphere() #Deal with the rest of the buttons @@ -200,7 +204,7 @@ func _physics_process(delta: float) -> void: for button in buttons: if input.is_action_just_pressed(button): modal.button_pressed(button) - elif state == State.NORMAL: + else: update_actions() @rpc("call_local", "reliable") @@ -213,15 +217,17 @@ func set_pawn_body(pb : PawnBody) -> void: body = pb pb.reloading.connect(reload_ranged) pb.shooting.connect(fire_ranged) + reload_sound = body.find_child("ReloadSound") add_child(body) + body.set_animation_length("Ranged Fire", ranged_recovery_time) struggling.connect(body._on_struggle_changed) func attack() -> void: if attack_timer > 0: return - if meleeing: - body.play_animation.rpc("melee") + if can_melee: + state = State.MELEE_ATTACKING attack_timer = melee_recovery_time else: if ammo <= 0: @@ -229,14 +235,14 @@ func attack() -> void: return attack_timer = ranged_recovery_time - shooting = true + state = State.RANGED_ATTACKING take_shot = true if combat_target != null: var v = body.global_position.direction_to(combat_target.global_position) v.y = 0 body.look_at(body.global_position - v) - + func reload_ranged() -> void: reloading = false reload_sound.play() @@ -245,41 +251,44 @@ func reload_ranged() -> void: ammo_changed.emit(ammo, max_ammo) func update_actions() -> void: - if attack_timer <= 0 and shooting and !input.is_action_pressed("attack"): - shooting = false + + if state == State.DEAD: + return + + if attack_timer <= 0 and is_attacking(): + if !input.is_action_pressed("attack"): + state = State.NORMAL + elif is_shooting(): + if ammo <= 0: + reloading = true + else: + take_shot = true if input.is_action_just_pressed("left cycle hack"): cycle_active_hack(-1) if input.is_action_just_pressed("right cycle hack"): cycle_active_hack(1) - if input.is_action_just_pressed("detonate"): - detonate() - elif !installing: - if input.is_action_just_pressed("detect"): - start_detecting() - elif input.is_action_just_released("detect"): - stop_detecting() - if!detecting: - if input.is_action_just_pressed("install"): - installing = true - if range_sphere != null: - range_sphere.queue_free() - range_sphere = range_sphere_template.instantiate() - Game.level.add_child(range_sphere) - #Set the range sphere size based upon the current hack - update_range_sphere() - if input.is_action_just_released("install"): - installing = false - range_sphere.queue_free() - range_sphere = null - try_install_hack() + match(state): + State.NORMAL: + if input.is_action_just_pressed("detonate"): + detonate() + if(input.is_action_just_pressed("detect") + and input.is_action_pressed("detect")): + start_detecting() + return + if(input.is_action_just_pressed("install") + and input.is_action_pressed("install")): + start_installing() + return elif input.is_action_pressed("attack"): attack() - elif input.is_action_just_released("install"): - installing = false - range_sphere.queue_free() - range_sphere = null - try_install_hack() + State.DETECTING: + if !input.is_action_pressed("detect"): + stop_detecting() + State.INSTALLING: + if !input.is_action_pressed("install"): + stop_installing() + try_install_hack() func update_range_sphere() -> void: var new_pos = (global_position - Vector3.ONE * .5).round() + Vector3(0.5, 0, 0.5) @@ -324,6 +333,7 @@ func fire_ranged() -> void: ammo-=1 ammo_changed.emit(ammo, max_ammo) shot.speed = projectile_speed + shot.id = id tdir = body.ranged_point.global_position.direction_to(combat_target.global_position) if combat_target else facing shot.direction = tdir shot.damage = projectile_damage @@ -368,10 +378,10 @@ func check_attack_target() -> void: ranged_closest = target ranged_d_sq = d_sq if melee_closest != null: - meleeing = true + can_melee = true combat_target = melee_closest else: - meleeing = false + can_melee = false if ranged_closest != null: combat_target = ranged_closest combat_target_changed.emit(melee_closest != null) @@ -423,21 +433,21 @@ func detect_alert() -> void: detect_tween.tween_callback(func(): detect_tween = null) func close_modal() -> void: - uninstalling = false + state = State.NORMAL if modal != null: modal.queue_free() modal = null func show_uninstall_hack_modal() -> void: stop_detecting() - uninstalling = true + state = State.UNINSTALLING modal = uninstall_hack_modal.instantiate() modal.square = current_square Game.level.add_child(modal) func show_decompile_hack_modal() -> void: stop_detecting() - uninstalling = true + state = State.UNINSTALLING modal = decompile_hack_modal.instantiate() modal.difficulty = Game.level.difficulty modal.square = current_square @@ -451,8 +461,23 @@ func show_decompile_hack_modal() -> void: Game.level.add_child(modal) func start_detecting() -> void: - detecting = true - update_detect_region.rpc(false) + state = State.DETECTING + update_detect_region(false) + +func start_installing() -> void: + state = State.INSTALLING + if id == Multiplayer.id: + if range_sphere != null: + range_sphere.queue_free() + range_sphere = range_sphere_template.instantiate() + Game.level.add_child(range_sphere) + #Set the range sphere size based upon the current hack + update_range_sphere() + +func stop_installing() -> void: + state = State.NORMAL + range_sphere.queue_free() + range_sphere = null @rpc("authority", "call_local") func update_detect_region(update : bool) -> void: @@ -477,13 +502,14 @@ func update_detect_region(update : bool) -> void: var remove_list = [] var hack_detected : bool = false + var hack : Hack for sq in new_squares.keys(): if update and detect_squares.has(sq): continue if !Game.level.detect_square(sq, true): remove_list.append(sq) else: - var hack = Game.level.get_square_hack(sq + Vector3i(0,1,0)) + hack = Game.level.get_square_hack(sq + Vector3i(0,1,0)) if hack and hack.is_just_revealed(): hack_detected = true @@ -495,7 +521,7 @@ func update_detect_region(update : bool) -> void: for key in remove_list: detect_squares.erase(key) - var hack : Hack = Game.level.get_square_hack(current_square) + hack = Game.level.get_square_hack(current_square) if hack != null: if hack.hack_owner == Multiplayer.id: show_uninstall_hack_modal() @@ -504,7 +530,7 @@ func update_detect_region(update : bool) -> void: show_decompile_hack_modal() func stop_detecting() -> void: - detecting = false + state = State.NORMAL clear_detect_region.rpc() @rpc("authority", "call_local") @@ -516,8 +542,8 @@ func clear_detect_region() -> void: detect_squares = {} @rpc("authority", "call_local", "reliable") -func setup(id : int, pawn : StringName) -> void: - self.id = id +func setup(p_id : int, pawn : StringName) -> void: + id = p_id var base_data : PawnBaseData = Game.pawns[pawn] var hacklist : Array[PawnLevelData.HackData] = [] for hack in base_data.starting_hacks: @@ -564,9 +590,11 @@ func hurt(damage : int) -> void: health_changed.emit(data.life, data.max_life) if data.life == 0: die.rpc() -@rpc("any_peer", "call_local") + +@rpc("authority", "call_local") func die() -> void: state = State.DEAD + body.travel_animation("Death") input_locked = true if id == Multiplayer.id: var death_tween = create_tween() @@ -578,21 +606,15 @@ func _on_hack_decompiled(type : Hack.Type) -> void: for i in range(len(data.hacks)): var d = data.hacks[i] if d.type == type: - d.max -= 1 + d.max_quantity -= 1 hack_quantity_changed.emit(i, d.quantity) break -#hurt -#blast -#blast_players -#activate -#activate_hack -#fail -#on_hack_failed + func _on_hack_activated(type : Hack.Type) -> void: for i in range(len(data.hacks)): var d = data.hacks[i] if d.type == type: - d.quantity = min(d.max, d.quantity+ 1) + d.quantity = min(d.max_quantity, d.quantity+ 1) hack_quantity_changed.emit(i, d.quantity) break @@ -623,10 +645,10 @@ func poison(damage : int, length : float) -> void: pshader.set_shader_parameter("strength", 0.5) poison_status_changed.emit(true) -func fling(direction : Vector3, speed : float) -> void: +func fling(direction : Vector3, spd : float) -> void: state = State.FLUNG fling_direction = direction - fling_speed = speed + fling_speed = spd fling_sound.play() func knockdown(direction : Vector3) -> void: @@ -641,14 +663,14 @@ func knockdown(direction : Vector3) -> void: knockdown_tween.tween_property(self, "input_locked", false, 0) knockdown_tween.tween_callback(Callable(body.look_at).bind(facing, Vector3(0,1,0))) -func knockup(velocity : Vector3) -> void: +func knockup(vel : Vector3) -> void: if state != State.KNOCKUP: state = State.KNOCKUP input_locked = true if is_on_floor(): - self.velocity = Vector3.UP * .1 + velocity = Vector3.UP * .1 move_and_slide() - self.velocity = velocity + velocity = vel func knockback(direction : Vector3, impact : float) -> void: if state != State.NORMAL: @@ -672,14 +694,46 @@ func start_pitfall(square : Vector3, duration : float) -> void: tween.tween_property(self, "input_locked", false, 0) tween.tween_callback(pitfall.bind(duration)) -func _on_melee_hit(body : Node3D) -> void: +func _on_melee_hit(_body : Node3D) -> void: + #TODO: WRITE THE MELEE DAMAGE CODE pass + +func is_attacking() -> bool: + return state == State.RANGED_ATTACKING or state == State.MELEE_ATTACKING + +func is_meleeing() -> bool: + return state == State.MELEE_ATTACKING +func is_shooting() -> bool: + return state == State.RANGED_ATTACKING + func is_dead() -> bool: return state == State.DEAD func is_detecting() -> bool: - return detecting + return state == State.DETECTING +func is_installing() -> bool: + return state == State.INSTALLING + +func is_uninstalling() -> bool: + return state == State.UNINSTALLING + func is_crouching() -> bool: - return detecting or installing or uninstalling + var result : bool = false + match(state): + State.DETECTING: result = true + State.INSTALLING: result = true + State.UNINSTALLING: result = true + return result + +func add_random_hack(advanced : bool) -> void: + #TODO: Add random hack spawning using RPCs + pass + +func pickup(type : Pickup.Type) -> void: + if id != Multiplayer.id: + return + match(type): + Pickup.Type.DATABLOCK: print("Datablock picked up!") + Pickup.Type.BASIC_HACK: add_random_hack(false) diff --git a/scripts/pawn_display.gd b/scripts/pawn_display.gd index dcd8157..a4286cd 100644 --- a/scripts/pawn_display.gd +++ b/scripts/pawn_display.gd @@ -35,5 +35,5 @@ func tv_blur(amount : float) -> void: var blinder_mat : ShaderMaterial = portrait_blinder.material blinder_mat.set_shader_parameter("opacity_limit", amount) -func set_pawn_name(name : String) -> void: - pawn_name.text = name +func set_pawn_name(p_name : String) -> void: + pawn_name.text = p_name diff --git a/scripts/pawn_input.gd b/scripts/pawn_input.gd index a12e885..1564820 100644 --- a/scripts/pawn_input.gd +++ b/scripts/pawn_input.gd @@ -32,7 +32,7 @@ func _ready() -> void: "attack":false } -func _physics_process(delta: float) -> void: +func _physics_process(_delta: float) -> void: if get_multiplayer_authority() != Multiplayer.id: return var d = Input.get_vector("west", "east", "north", "south") diff --git a/scripts/pawn_level_data.gd b/scripts/pawn_level_data.gd index 2747540..e3de369 100644 --- a/scripts/pawn_level_data.gd +++ b/scripts/pawn_level_data.gd @@ -3,12 +3,12 @@ class_name PawnLevelData extends Node class HackData: var type : Hack.Type var quantity : int - var max : int + var max_quantity : int - func _init(type : Hack.Type, quantity : int, max : int) -> void: - self.type = type - self.quantity = quantity - self.max = max + func _init(new_type : Hack.Type, amt : int, max_amt : int) -> void: + type = new_type + quantity = amt + max_quantity = max_amt var hacks : Array[HackData] = [] var active_hack : int = 0 diff --git a/scripts/projectile.gd b/scripts/projectile.gd index 8fdc29c..d874bda 100644 --- a/scripts/projectile.gd +++ b/scripts/projectile.gd @@ -1,23 +1,24 @@ -class_name Projectile extends RigidBody3D +class_name Projectile extends Area3D +var id : int = 0 var direction : Vector3 var speed : float +var friend_safe : bool = true var damage var time_remaining : float func _ready() -> void: - linear_velocity = speed * direction time_remaining = 2 func _physics_process(delta: float) -> void: + global_position += speed * direction * delta time_remaining -= delta if time_remaining <= 0: queue_free() - -func _on_body_entered(body: Node) -> void: - queue_free() - - func _on_hit_area_entered(body: Node3D) -> void: if body is PawnController: - body.hurt(damage) + if !friend_safe or id != body.id: + body.hurt(damage) + queue_free() + else: + queue_free() diff --git a/scripts/range_sphere.gd b/scripts/range_sphere.gd index c12757d..bbf574d 100644 --- a/scripts/range_sphere.gd +++ b/scripts/range_sphere.gd @@ -15,8 +15,7 @@ var type : Hack.Type = -1 rim_sphere.radius = _radius if intersect_sphere != null: intersect_sphere.radius = _radius - -func set_range(range : float) -> void: - radius = range +func set_range(new_radius : float) -> void: + radius = new_radius diff --git a/scripts/title_screen.gd b/scripts/title_screen.gd index a9d4cce..461536d 100644 --- a/scripts/title_screen.gd +++ b/scripts/title_screen.gd @@ -56,7 +56,7 @@ func _ready() -> void: glow_tween.tween_property(target, "modulate:a", .8, .5) glow_tween.tween_property(target, "modulate:a", 1, .5) -func _process(delta: float) -> void: +func _process(_delta: float) -> void: if Input.is_action_just_pressed("ui_menu"): opened = !opened start.visible = !opened diff --git a/templates/bullet.tscn b/templates/bullet.tscn index 8ee53a8..675a37e 100644 --- a/templates/bullet.tscn +++ b/templates/bullet.tscn @@ -11,27 +11,18 @@ emission_energy_multiplier = 2.69 [sub_resource type="BoxShape3D" id="BoxShape3D_7i3j4"] size = Vector3(0.15, 0.15, 0.15) -[node name="Bullet" type="RigidBody3D"] -gravity_scale = 0.0 -contact_monitor = true -max_contacts_reported = 3 +[node name="Bullet" type="Area3D"] +collision_layer = 0 +collision_mask = 2 script = ExtResource("1_tc5n7") [node name="CSGSphere3D" type="CSGSphere3D" parent="."] transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0) radius = 0.05 -radial_segments = 4 -rings = 3 +radial_segments = 6 material = SubResource("StandardMaterial3D_fnprb") -[node name="HitArea" type="Area3D" parent="."] -collision_layer = 0 -collision_mask = 2 - -[node name="CollisionShape3D" type="CollisionShape3D" parent="HitArea"] -shape = SubResource("BoxShape3D_7i3j4") - -[node name="CollisionShape3D2" type="CollisionShape3D" parent="."] +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] shape = SubResource("BoxShape3D_7i3j4") [node name="OmniLight3D" type="OmniLight3D" parent="."] @@ -42,5 +33,4 @@ light_volumetric_fog_energy = 0.0 light_size = 0.2 omni_range = 0.4 -[connection signal="body_entered" from="." to="." method="_on_body_entered"] -[connection signal="body_entered" from="HitArea" to="." method="_on_hit_area_entered"] +[connection signal="body_entered" from="." to="." method="_on_hit_area_entered"] diff --git a/templates/datablock_pickup.tscn b/templates/datablock_pickup.tscn new file mode 100644 index 0000000..e72753f --- /dev/null +++ b/templates/datablock_pickup.tscn @@ -0,0 +1,81 @@ +[gd_scene load_steps=8 format=4 uid="uid://dyvov4i48mqoi"] + +[ext_resource type="Script" uid="uid://du3s0b1kotb6l" path="res://scripts/collectable.gd" id="1_mbwd5"] +[ext_resource type="Texture2D" uid="uid://b7s2n7xcvntpl" path="res://models/datablock_0.png" id="2_vuv4s"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ucvlk"] +resource_name = "material_0" +transparency = 2 +alpha_scissor_threshold = 0.05 +alpha_antialiasing_mode = 0 +cull_mode = 2 +albedo_texture = ExtResource("2_vuv4s") +texture_filter = 0 +texture_repeat = false + +[sub_resource type="ArrayMesh" id="ArrayMesh_m2shw"] +_surfaces = [{ +"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1), +"format": 34896613377, +"index_count": 36, +"index_data": PackedByteArray("AAABAAIAAQADAAIAAwAAAAIAAAAEAAEAAQAFAAMABAAFAAEAAwAGAAAABgAEAAAABQAGAAMABgAHAAQABAAHAAUABQAHAAYA"), +"name": "material_0", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 8, +"vertex_data": PackedByteArray("/////wAAAAD//wAA//8AAP///////wAAAAD/////AAD//wAAAAAAAAAAAAD//wAAAAD//wAAAAAAAAAAAAAAAA==") +}] +blend_shape_mode = 0 + +[sub_resource type="ArrayMesh" id="ArrayMesh_v5j1m"] +resource_name = "blockbench_export_mesh" +_surfaces = [{ +"aabb": AABB(-0.5, 0, -0.5, 1, 1, 1), +"attribute_data": PackedByteArray("//8AAAAA//8AAAAA//////////8AAAAA//8AAAAA//8AAP////8AAP////8AAAAA/////wAAAAD//wAAAAD///////8AAAAA//8AAAAA/////wAAAAD//wAAAAD/////"), +"format": 34896613399, +"index_count": 36, +"index_data": PackedByteArray("AAABAAIAAAADAAEABAAFAAYABAAHAAUACAAJAAoACAALAAkADAANAA4ADAAPAA0AEAARABIAEAATABEAFAAVABYAFAAXABUA"), +"material": SubResource("StandardMaterial3D_ucvlk"), +"name": "material_0", +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 24, +"vertex_data": PackedByteArray("/////wAA/7///wAA////v/////////+///8AAAAA/78AAAAA////vwAA//8AAP+/AAD//////78AAAAAAAD/vwAA//////+//////wAA/7//////////vwAA//8AAP+///8AAAAA/78AAAAA////v///AAD///+/AAAAAAAA/7///wAA//8AgAAA/////wCA////////AIAAAAAA//8AgAAA//8AAP////8AAAAA////////AAD//wAAAAAAAP///38AAP9/AAD/fwAA/38AAP9/////f////3////9///////9/////f////3////9/AAD/fwAA/38AAP9/AAD/f/9/////f////3////9/////f////3////9/////f///") +}] +blend_shape_mode = 0 +shadow_mesh = SubResource("ArrayMesh_m2shw") + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lnid6"] +shading_mode = 2 +diffuse_mode = 3 +specular_mode = 1 +disable_ambient_light = true +disable_fog = true +disable_specular_occlusion = true +albedo_texture = ExtResource("2_vuv4s") +emission_enabled = true +emission = Color(1, 1, 1, 1) +emission_energy_multiplier = 1.66 +emission_operator = 1 +emission_texture = ExtResource("2_vuv4s") +texture_filter = 0 + +[sub_resource type="BoxShape3D" id="BoxShape3D_5c3s5"] +size = Vector3(0.6, 0.6, 0.6) + +[node name="Datablock Pickup" type="Area3D"] +collision_layer = 0 +collision_mask = 2 +script = ExtResource("1_mbwd5") + +[node name="mesh" type="MeshInstance3D" parent="."] +transform = Transform3D(0.21338832, -0.036611654, 0.125, 0.125, 0.125, -0.17677669, -0.036611654, 0.21338832, 0.125, 0.0036189556, 0.63486314, -0.1206578) +mesh = SubResource("ArrayMesh_v5j1m") +skeleton = NodePath("") +surface_material_override/0 = SubResource("StandardMaterial3D_lnid6") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.63486314, 0) +shape = SubResource("BoxShape3D_5c3s5") + +[connection signal="body_entered" from="." to="." method="_on_body_entered"] diff --git a/templates/pawn_controller.tscn b/templates/pawn_controller.tscn index 29013e6..1521fcb 100644 --- a/templates/pawn_controller.tscn +++ b/templates/pawn_controller.tscn @@ -53,7 +53,10 @@ floor_constant_speed = true floor_max_angle = 0.93549645 floor_snap_length = 1.0 script = ExtResource("1_h27ep") +pawn_name = null speed = 2.25 +id = null +state = null [node name="CollisionShape3D" type="CollisionShape3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.375, 0) diff --git a/templates/pawns/a.tscn b/templates/pawns/a.tscn index 1e37d7f..a9328a5 100644 --- a/templates/pawns/a.tscn +++ b/templates/pawns/a.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=121 format=4 uid="uid://c3s6gqy0s5kus"] +[gd_scene load_steps=125 format=4 uid="uid://c3s6gqy0s5kus"] [ext_resource type="Script" uid="uid://wye3mat5y5yg" path="res://scripts/pawn_body.gd" id="1_ox2bo"] [ext_resource type="PackedScene" uid="uid://cfunlbp8arnlh" path="res://templates/bullet.tscn" id="2_pbmu7"] @@ -10332,10 +10332,22 @@ tracks/59/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "values": [{ -"args": [&"firing"], +"args": [&"shooting"], "method": &"emit_signal" }] } +tracks/60/type = "value" +tracks/60/imported = false +tracks/60/enabled = true +tracks/60/path = NodePath("%RangedPoint:position") +tracks/60/interp = 1 +tracks/60/loop_wrap = true +tracks/60/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(-0.069371, 0.6716403, 0.300628)] +} [sub_resource type="Animation" id="Animation_y78ih"] resource_name = "Punch_Cross" @@ -19279,9 +19291,22 @@ sync = true [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_h27ep"] animation = &"Death01" -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_dn5ph"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_18nw6"] animation = &"Hit_Chest" +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_agdjh"] +animation = &"Sword_Attack" + +[sub_resource type="AnimationNodeTimeScale" id="AnimationNodeTimeScale_aih1w"] + +[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_onvhp"] +nodes/output/position = Vector2(800, 140) +nodes/Animation/node = SubResource("AnimationNodeAnimation_agdjh") +nodes/Animation/position = Vector2(300, 120) +nodes/TimeScale/node = SubResource("AnimationNodeTimeScale_aih1w") +nodes/TimeScale/position = Vector2(560, 120) +node_connections = [&"output", 0, &"TimeScale", &"TimeScale", 0, &"Animation"] + [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_pnc3q"] animation = &"Idle" @@ -19313,24 +19338,26 @@ snap = 0.09 value_label = ".5" sync = true +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_8h8ae"] +animation = &"Pistol_Shoot" + +[sub_resource type="AnimationNodeTimeScale" id="AnimationNodeTimeScale_18nw6"] + +[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_agdjh"] +graph_offset = Vector2(-128.77832, -28.638329) +nodes/output/position = Vector2(340, 120) +nodes/Animation/node = SubResource("AnimationNodeAnimation_8h8ae") +nodes/Animation/position = Vector2(-80, 100) +nodes/TimeScale/node = SubResource("AnimationNodeTimeScale_18nw6") +nodes/TimeScale/position = Vector2(140, 100) +node_connections = [&"output", 0, &"TimeScale", &"TimeScale", 0, &"Animation"] + [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_tpe7m"] animation = &"Pistol_Idle" [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_44rnf"] animation = &"Pistol_Reload" -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_80lp4"] -animation = &"Pistol_Reload" - -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_n15br"] -animation = &"Pistol_Shoot" - -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_ko1jy"] -animation = &"Pistol_Shoot" - -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_rtmky"] -animation = &"Sword_Attack" - [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_bdfr7"] advance_mode = 2 @@ -19348,54 +19375,59 @@ advance_expression = "!is_crouching()" [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_myj18"] advance_mode = 2 -advance_expression = "shooting == true" +advance_expression = "is_shooting()" [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_emnr3"] advance_mode = 2 -advance_expression = "shooting == false" - -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_1skj0"] -advance_mode = 2 -advance_expression = "take_shot == true" - -[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_prcnq"] -switch_mode = 2 -advance_mode = 2 -advance_expression = "take_shot == false" +advance_expression = "!is_shooting()" [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_n5wpo"] advance_mode = 2 -advance_expression = "reloading = true" +advance_expression = "reloading == true" [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_p0uug"] switch_mode = 2 advance_mode = 2 +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_8h8ae"] +advance_mode = 2 +advance_expression = "take_shot == true" + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_18nw6"] +switch_mode = 2 +advance_mode = 2 + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_7mens"] +advance_mode = 2 +advance_expression = "is_meleeing()" + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_g0o8v"] +xfade_time = 0.5 +switch_mode = 2 +advance_mode = 2 + [sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_80lp4"] +allow_transition_to_self = true states/Crouch/node = SubResource("AnimationNodeBlendSpace1D_mggey") -states/Crouch/position = Vector2(831, 331.8868) +states/Crouch/position = Vector2(914.5, 319.8868) states/Death/node = SubResource("AnimationNodeAnimation_h27ep") -states/Death/position = Vector2(1264, 190) -states/End/position = Vector2(1124, 98) -states/Hit_Chest/node = SubResource("AnimationNodeAnimation_dn5ph") -states/Hit_Chest/position = Vector2(134, 239) +states/Death/position = Vector2(1121, 106.23659) +states/End/position = Vector2(1855, 203) +states/Hit_Chest/node = SubResource("AnimationNodeAnimation_18nw6") +states/Hit_Chest/position = Vector2(730.58984, 106.23659) +"states/Melee Attack/node" = SubResource("AnimationNodeBlendTree_onvhp") +"states/Melee Attack/position" = Vector2(914.5, 59.236588) states/Motion/node = SubResource("AnimationNodeBlendSpace1D_a4li3") -states/Motion/position = Vector2(852.5, 214.3125) -states/Pistol_Idle/node = SubResource("AnimationNodeAnimation_tpe7m") -states/Pistol_Idle/position = Vector2(1009.58984, 214.3125) -states/Pistol_Reload/node = SubResource("AnimationNodeAnimation_80lp4") -states/Pistol_Reload/position = Vector2(162, 294) -"states/Pistol_Reload 2/node" = SubResource("AnimationNodeAnimation_44rnf") -"states/Pistol_Reload 2/position" = Vector2(1017.08984, 357.23657) -states/Pistol_Shoot/node = SubResource("AnimationNodeAnimation_n15br") -states/Pistol_Shoot/position = Vector2(1185.75, 215.71875) -"states/Ranged Attack/node" = SubResource("AnimationNodeAnimation_ko1jy") -"states/Ranged Attack/position" = Vector2(853, 90) -states/Start/position = Vector2(543, 176) -states/Sword_Attack/node = SubResource("AnimationNodeAnimation_rtmky") -states/Sword_Attack/position = Vector2(319, 229) -transitions = ["Start", "Motion", SubResource("AnimationNodeStateMachineTransition_bdfr7"), "Motion", "Crouch", SubResource("AnimationNodeStateMachineTransition_26i23"), "Crouch", "Motion", SubResource("AnimationNodeStateMachineTransition_phens"), "Motion", "Pistol_Idle", SubResource("AnimationNodeStateMachineTransition_myj18"), "Pistol_Idle", "Motion", SubResource("AnimationNodeStateMachineTransition_emnr3"), "Pistol_Idle", "Pistol_Shoot", SubResource("AnimationNodeStateMachineTransition_1skj0"), "Pistol_Shoot", "Pistol_Idle", SubResource("AnimationNodeStateMachineTransition_prcnq"), "Pistol_Idle", "Pistol_Reload 2", SubResource("AnimationNodeStateMachineTransition_n5wpo"), "Pistol_Reload 2", "Pistol_Idle", SubResource("AnimationNodeStateMachineTransition_p0uug")] -graph_offset = Vector2(356.58984, 139.23659) +states/Motion/position = Vector2(914.5, 214.3125) +"states/Ranged Attack/node" = SubResource("AnimationNodeBlendTree_agdjh") +"states/Ranged Attack/position" = Vector2(1363.5898, 214.3125) +"states/Ranged Idle/node" = SubResource("AnimationNodeAnimation_tpe7m") +"states/Ranged Idle/position" = Vector2(1134.5898, 214.3125) +"states/Ranged Reload/node" = SubResource("AnimationNodeAnimation_44rnf") +"states/Ranged Reload/position" = Vector2(1134.5898, 319.8868) +states/Start/position = Vector2(646, 214.3125) +transitions = ["Start", "Motion", SubResource("AnimationNodeStateMachineTransition_bdfr7"), "Motion", "Crouch", SubResource("AnimationNodeStateMachineTransition_26i23"), "Crouch", "Motion", SubResource("AnimationNodeStateMachineTransition_phens"), "Motion", "Ranged Idle", SubResource("AnimationNodeStateMachineTransition_myj18"), "Ranged Idle", "Motion", SubResource("AnimationNodeStateMachineTransition_emnr3"), "Ranged Idle", "Ranged Reload", SubResource("AnimationNodeStateMachineTransition_n5wpo"), "Ranged Reload", "Ranged Idle", SubResource("AnimationNodeStateMachineTransition_p0uug"), "Ranged Idle", "Ranged Attack", SubResource("AnimationNodeStateMachineTransition_8h8ae"), "Ranged Attack", "Ranged Idle", SubResource("AnimationNodeStateMachineTransition_18nw6"), "Motion", "Melee Attack", SubResource("AnimationNodeStateMachineTransition_7mens"), "Melee Attack", "Motion", SubResource("AnimationNodeStateMachineTransition_g0o8v")] +graph_offset = Vector2(287.58984, 37.236588) [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_ghbft"] streams_count = 5 @@ -19460,8 +19492,8 @@ bones/1/name = "Hips" bones/1/parent = 0 bones/1/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9167, -0.05010003) bones/1/enabled = true -bones/1/position = Vector3(0.0029217794, 0.87712944, -0.08623208) -bones/1/rotation = Quaternion(-0.048274823, -0.122335054, -0.0053202827, 0.99129987) +bones/1/position = Vector3(0.009960683, 0.062668204, -0.54616094) +bones/1/rotation = Quaternion(-0.71823287, -0.10042195, 0.07455257, 0.6844698) bones/1/scale = Vector3(1, 1, 1) bones/2/name = "Spine" bones/2/parent = 1 @@ -19475,77 +19507,77 @@ bones/3/parent = 2 bones/3/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.12309997, 0.015199981) bones/3/enabled = true bones/3/position = Vector3(0, 0.12309997, 0.015199981) -bones/3/rotation = Quaternion(0.083439596, -0.050386205, -0.014193618, 0.995137) +bones/3/rotation = Quaternion(0.10398251, 0.0027813378, -0.004713317, 0.99456406) bones/3/scale = Vector3(1, 1, 1) bones/4/name = "UpperChest" bones/4/parent = 3 bones/4/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.14120016, -0.004500025) bones/4/enabled = true bones/4/position = Vector3(0, 0.14120016, -0.004500025) -bones/4/rotation = Quaternion(0.083440006, -0.1491554, -0.011031527, 0.9852253) +bones/4/rotation = Quaternion(0.1086738, -0.011971049, 0.014305387, 0.9939025) bones/4/scale = Vector3(1, 1, 1) bones/5/name = "Neck" bones/5/parent = 4 bones/5/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.17280002, -0.005600037) bones/5/enabled = true bones/5/position = Vector3(0, 0.17280002, -0.005600037) -bones/5/rotation = Quaternion(0.017888838, 0.10118126, 0.006566928, 0.99468553) +bones/5/rotation = Quaternion(-0.33731186, 0.012180819, -0.0069038575, 0.9412889) bones/5/scale = Vector3(1, 1, 1) bones/6/name = "Head" bones/6/parent = 5 bones/6/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.081100024, 0.0155999875) bones/6/enabled = true bones/6/position = Vector3(0, 0.081100024, 0.0155999875) -bones/6/rotation = Quaternion(0.024657993, -0.13774714, -0.024798114, 0.98985) +bones/6/rotation = Quaternion(-0.044471268, 0.013187573, -0.004703428, 0.9989126) bones/6/scale = Vector3(1, 1, 1) bones/7/name = "LeftShoulder" bones/7/parent = 4 bones/7/rest = Transform3D(0, 1, 0, 0, 0, 1, 1, 0, 0, 0.0188, 0.14310004, 0.07629998) bones/7/enabled = true bones/7/position = Vector3(0.0188, 0.14310004, 0.07629998) -bones/7/rotation = Quaternion(0.47803193, 0.5050022, 0.4935733, -0.52234435) +bones/7/rotation = Quaternion(0.58398527, 0.39858466, 0.39873582, -0.5840387) bones/7/scale = Vector3(1, 1, 1) bones/8/name = "LeftUpperArm" bones/8/parent = 7 bones/8/rest = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, -0.13680005, 0.17309996, -0.01710007) bones/8/enabled = true bones/8/position = Vector3(-0.13680005, 0.17309996, -0.01710007) -bones/8/rotation = Quaternion(0.49294424, 0.77037, -0.40433675, 0.0069256644) +bones/8/rotation = Quaternion(0.0016868409, 0.9983379, -0.05759801, 0.0009866056) bones/8/scale = Vector3(1, 1, 1) bones/9/name = "LeftLowerArm" bones/9/parent = 8 bones/9/rest = Transform3D(0, 0, -1, 0, 1, 0, 1, 0, 0, 0.004699965, 0.27440003, 3.769936e-08) bones/9/enabled = true bones/9/position = Vector3(0.004699965, 0.27440003, 3.769936e-08) -bones/9/rotation = Quaternion(0.40944093, -0.57015, 0.5879608, 0.40198165) +bones/9/rotation = Quaternion(-0.17464358, -0.6755791, 0.69889116, -0.15698323) bones/9/scale = Vector3(1, 1, 1) bones/10/name = "LeftHand" bones/10/parent = 9 bones/10/rest = Transform3D(0, 0, 1, 0, 1, 0, -1, 0, 0, 2.0133815e-08, 0.27260005, 0.004700036) bones/10/enabled = true bones/10/position = Vector3(2.0133815e-08, 0.27260005, 0.004700036) -bones/10/rotation = Quaternion(-0.066626236, 0.5500871, 0.035547514, 0.8316861) +bones/10/rotation = Quaternion(-0.03758643, 0.57259077, -0.024788877, 0.8186041) bones/10/scale = Vector3(1, 1, 1) bones/11/name = "LeftIndexProximal" bones/11/parent = 10 bones/11/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.03090003, 0.11989991, 0.001999812) bones/11/enabled = true bones/11/position = Vector3(-0.03090003, 0.11989991, 0.001999812) -bones/11/rotation = Quaternion(0.03729071, -7.154156e-08, -5.175003e-07, 0.99930453) +bones/11/rotation = Quaternion(0.048656568, -4.4703484e-08, 0.023325518, 0.99854314) bones/11/scale = Vector3(1, 1, 1) bones/12/name = "LeftIndexIntermediate" bones/12/parent = 11 bones/12/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.097772e-09, 0.040700007, 1.25191555e-08) bones/12/enabled = true bones/12/position = Vector3(-4.097772e-09, 0.040700007, 1.25191555e-08) -bones/12/rotation = Quaternion(0.3397444, -1.3053811e-07, -1.8548973e-06, 0.94051784) +bones/12/rotation = Quaternion(0.04865685, 0.0030170977, 0.02306965, 0.9985446) bones/12/scale = Vector3(1, 1, 1) bones/13/name = "LeftIndexDistal" bones/13/parent = 12 bones/13/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.0742177e-09, 0.034800045, 1.1683975e-08) bones/13/enabled = true bones/13/position = Vector3(-2.0742177e-09, 0.034800045, 1.1683975e-08) -bones/13/rotation = Quaternion(0.26331255, 3.1589735e-08, -2.7728588e-06, 0.9647106) +bones/13/rotation = Quaternion(0.04866741, 0.00729902, 0.02213545, 0.9985431) bones/13/scale = Vector3(1, 1, 1) bones/14/name = "index_04_leaf_l" bones/14/parent = 13 @@ -19559,21 +19591,21 @@ bones/15/parent = 10 bones/15/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.005200028, 0.121599905, -0.00040022636) bones/15/enabled = true bones/15/position = Vector3(-0.005200028, 0.121599905, -0.00040022636) -bones/15/rotation = Quaternion(0.034359887, -0.0016245749, -0.08324677, 0.99593514) +bones/15/rotation = Quaternion(0.034836993, -0.0016470999, -2.3841858e-07, 0.9993917) bones/15/scale = Vector3(1, 1, 1) bones/16/name = "LeftMiddleIntermediate" bones/16/parent = 15 bones/16/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0019999952, 0.04229999, 2.1621558e-08) bones/16/enabled = true bones/16/position = Vector3(0.0019999952, 0.04229999, 2.1621558e-08) -bones/16/rotation = Quaternion(0.3884896, 0.008260064, -0.010748425, 0.92135346) +bones/16/rotation = Quaternion(0.034841835, -0.0015417933, -5.9604645e-08, 0.9993917) bones/16/scale = Vector3(1, 1, 1) bones/17/name = "LeftMiddleDistal" bones/17/parent = 16 bones/17/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0014999973, 0.033899974, 1.615871e-07) bones/17/enabled = true bones/17/position = Vector3(0.0014999973, 0.033899974, 1.615871e-07) -bones/17/rotation = Quaternion(0.42306805, -0.019677328, -3.4574791e-06, 0.9058843) +bones/17/rotation = Quaternion(0.034838162, -0.0016204122, -3.5762795e-07, 0.9993917) bones/17/scale = Vector3(1, 1, 1) bones/18/name = "middle_04_leaf_l" bones/18/parent = 17 @@ -19587,21 +19619,21 @@ bones/19/parent = 10 bones/19/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.04079998, 0.10769992, 0.0015997506) bones/19/enabled = true bones/19/position = Vector3(0.04079998, 0.10769992, 0.0015997506) -bones/19/rotation = Quaternion(0.4281105, -0.028753696, -0.066136904, 0.9008444) +bones/19/rotation = Quaternion(0.016165243, -0.0010857434, -0.015371444, 0.9997506) bones/19/scale = Vector3(1, 1, 1) bones/20/name = "LeftLittleIntermediate" bones/20/parent = 19 bones/20/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0027000003, 0.040200002, 1.7218216e-10) bones/20/enabled = true bones/20/position = Vector3(0.0027000003, 0.040200002, 1.7218216e-10) -bones/20/rotation = Quaternion(0.39108172, -0.13253164, 0.046397403, 0.9095811) +bones/20/rotation = Quaternion(0.035252716, 0.0044559534, -0.00024011728, 0.9993684) bones/20/scale = Vector3(1, 1, 1) bones/21/name = "LeftLittleDistal" bones/21/parent = 20 bones/21/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0018999914, 0.027600013, 2.2658543e-07) bones/21/enabled = true bones/21/position = Vector3(0.0018999914, 0.027600013, 2.2658543e-07) -bones/21/rotation = Quaternion(0.4008552, -0.027103845, -2.9876176e-06, 0.9157405) +bones/21/rotation = Quaternion(0.03479651, -0.0023528042, -1.4901163e-07, 0.9993917) bones/21/scale = Vector3(1, 1, 1) bones/22/name = "pinky_04_leaf_l" bones/22/parent = 21 @@ -19615,21 +19647,21 @@ bones/23/parent = 10 bones/23/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.01709998, 0.1190999, -0.00010017503) bones/23/enabled = true bones/23/position = Vector3(0.01709998, 0.1190999, -0.00010017503) -bones/23/rotation = Quaternion(0.30737934, -0.010949735, -0.16781034, 0.9366098) +bones/23/rotation = Quaternion(0.0348538, -0.0012416095, -3.5762787e-07, 0.9993917) bones/23/scale = Vector3(1, 1, 1) bones/24/name = "LeftRingIntermediate" bones/24/parent = 23 bones/24/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.001399991, 0.039300047, -1.0103322e-07) bones/24/enabled = true bones/24/position = Vector3(0.001399991, 0.039300047, -1.0103322e-07) -bones/24/rotation = Quaternion(0.3325078, -0.17884532, 0.061298802, 0.9239564) +bones/24/rotation = Quaternion(0.034853745, -0.0012408198, -8.940698e-08, 0.9993917) bones/24/scale = Vector3(1, 1, 1) bones/25/name = "LeftRingDistal" bones/25/parent = 24 bones/25/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0010999943, 0.030899974, -1.0082857e-07) bones/25/enabled = true bones/25/position = Vector3(0.0010999943, 0.030899974, -1.0082857e-07) -bones/25/rotation = Quaternion(0.42352107, -0.015981447, -3.7984141e-06, 0.9057453) +bones/25/rotation = Quaternion(0.034851145, -0.0013151317, -5.9604638e-08, 0.9993917) bones/25/scale = Vector3(1, 1, 1) bones/26/name = "ring_04_leaf_l" bones/26/parent = 25 @@ -19643,21 +19675,21 @@ bones/27/parent = 10 bones/27/rest = Transform3D(0, -0.577, 0.816, 0, 0.816, 0.577, -1, 0, 0, -0.03360002, 0.02729993, 0.022799803) bones/27/enabled = true bones/27/position = Vector3(-0.03360002, 0.02729993, 0.022799803) -bones/27/rotation = Quaternion(-0.21418707, 0.6738871, 0.21418677, 0.6738873) +bones/27/rotation = Quaternion(-0.35230717, 0.5411503, 0.33356342, 0.6868562) bones/27/scale = Vector3(1, 0.99939233, 0.99939233) bones/28/name = "LeftThumbProximal" bones/28/parent = 27 bones/28/rest = Transform3D(0.99999994, 0, 0, 0, 0.9999999, 2.9802322e-08, 0, -2.9802322e-08, 0.9999999, -0.019199941, 0.03816641, 0.005296665) bones/28/enabled = true bones/28/position = Vector3(-0.019199941, 0.03816641, 0.005296665) -bones/28/rotation = Quaternion(-3.3225461e-07, -1.2098091e-07, -2.5420556e-07, 1) +bones/28/rotation = Quaternion(0.21444397, -0.06163305, -0.079114676, 0.971574) bones/28/scale = Vector3(0.99999994, 0.9999999, 0.9999999) bones/29/name = "LeftThumbDistal" bones/29/parent = 28 bones/29/rest = Transform3D(1, 0, 0, 0, 1.0000001, 0, 0, 0, 1.0000001, -0.021900143, 0.043532185, 0.0060270326) bones/29/enabled = true bones/29/position = Vector3(-0.021900143, 0.043532185, 0.0060270326) -bones/29/rotation = Quaternion(1.1049305e-07, 6.664385e-08, 1.4723999e-07, 1) +bones/29/rotation = Quaternion(-5.9604645e-08, -2.9802322e-08, 1.4901161e-07, 1) bones/29/scale = Vector3(1, 1.0000001, 1.0000001) bones/30/name = "thumb_04_leaf_l" bones/30/parent = 29 @@ -19665,167 +19697,167 @@ bones/30/rest = Transform3D(0.6015796, -0.44539672, 0.6631167, 0.39881337, 0.887 bones/30/enabled = true bones/30/position = Vector3(-0.018200096, 0.036257587, 0.0050497632) bones/30/rotation = Quaternion(-0.030814808, 0.3790144, 0.2359555, 0.8942726) -bones/30/scale = Vector3(1.0001454, 1.0004876, 1.0005833) +bones/30/scale = Vector3(1.0001454, 1.0004877, 1.0005833) bones/31/name = "RightShoulder" bones/31/parent = 4 bones/31/rest = Transform3D(0, -1, 0, 0, 0, 1, -1, 0, 0, -0.0188, 0.14310004, 0.07629998) bones/31/enabled = true bones/31/position = Vector3(-0.0188, 0.14310004, 0.07629998) -bones/31/rotation = Quaternion(0.4653403, -0.5231923, -0.581982, -0.41355187) +bones/31/rotation = Quaternion(0.38350642, -0.5053365, -0.42170727, -0.6478586) bones/31/scale = Vector3(1, 1, 1) bones/32/name = "RightUpperArm" bones/32/parent = 31 bones/32/rest = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0.13680005, 0.17309996, -0.01710007) bones/32/enabled = true bones/32/position = Vector3(0.13680005, 0.17309996, -0.01710007) -bones/32/rotation = Quaternion(-0.5746534, 0.7629577, -0.29604623, -0.0050707604) +bones/32/rotation = Quaternion(0.072124854, 0.9839927, 0.16293766, 0.0027908683) bones/32/scale = Vector3(1, 1, 1) bones/33/name = "RightLowerArm" bones/33/parent = 32 bones/33/rest = Transform3D(0, 0, 1, 0, 1, 0, -1, 0, 0, -0.004699971, 0.2744, 1.6425727e-07) bones/33/enabled = true bones/33/position = Vector3(-0.004699971, 0.2744, 1.6425727e-07) -bones/33/rotation = Quaternion(0.26061803, 0.7097086, -0.5588766, 0.3406597) +bones/33/rotation = Quaternion(-0.119480915, 0.90324116, -0.10729908, 0.3979531) bones/33/scale = Vector3(1, 1, 1) bones/34/name = "RightHand" bones/34/parent = 33 bones/34/rest = Transform3D(0, 0, -1, 0, 1, 0, 1, 0, 0, -2.829891e-08, 0.27259997, 0.004700046) bones/34/enabled = true bones/34/position = Vector3(-2.829891e-08, 0.27259997, 0.004700046) -bones/34/rotation = Quaternion(0.2154221, -0.082114436, -0.03242578, 0.97252214) +bones/34/rotation = Quaternion(-0.07690081, -0.08546657, -0.05117686, 0.99204975) bones/34/scale = Vector3(1, 1, 1) bones/35/name = "RightIndexProximal" bones/35/parent = 34 bones/35/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.030900035, 0.11989994, 0.0019998003) bones/35/enabled = true bones/35/position = Vector3(0.030900035, 0.11989994, 0.0019998003) -bones/35/rotation = Quaternion(-0.0018894076, -2.3841858e-07, 0.044270396, 0.99901783) +bones/35/rotation = Quaternion(-0.0019154402, -1.4901163e-07, -1.6391279e-07, 0.99999815) bones/35/scale = Vector3(1, 1, 1) bones/36/name = "RightIndexIntermediate" bones/36/parent = 35 bones/36/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5648136e-10, 0.040700104, -1.0677797e-07) bones/36/enabled = true bones/36/position = Vector3(-5.5648136e-10, 0.040700104, -1.0677797e-07) -bones/36/rotation = Quaternion(0.38319921, -0.02836375, 0.011775523, 0.923155) +bones/36/rotation = Quaternion(0.039266, 7.45058e-08, 8.9406956e-07, 0.99922884) bones/36/scale = Vector3(1, 1, 1) bones/37/name = "RightIndexDistal" bones/37/parent = 36 bones/37/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.121974e-10, 0.03480002, -1.0666921e-07) bones/37/enabled = true bones/37/position = Vector3(-6.121974e-10, 0.03480002, -1.0666921e-07) -bones/37/rotation = Quaternion(0.5064349, -1.3411044e-07, 4.470348e-06, 0.86227816) +bones/37/rotation = Quaternion(0.039265927, -1.4901159e-08, 1.490116e-07, 0.99922884) bones/37/scale = Vector3(1, 1, 1) bones/38/name = "index_04_leaf_r" bones/38/parent = 37 bones/38/rest = Transform3D(-1.0000001, 1.173466e-07, -1.5419573e-07, 6.8917885e-08, 0.9999999, 1.3196864e-08, 1.7491357e-07, 2.6301036e-08, -0.9999999, 2.5607045e-09, 0.030099956, 1.2416471e-08) bones/38/enabled = true bones/38/position = Vector3(2.5607045e-09, 0.030099956, 1.2416471e-08) -bones/38/rotation = Quaternion(1.9557778e-08, 1, -1.7506343e-09, -8.7456776e-08) +bones/38/rotation = Quaternion(4.6566093e-09, 1, 8.765633e-08, -7.2555615e-08) bones/38/scale = Vector3(1.0000001, 0.9999999, 0.9999999) bones/39/name = "RightMiddleProximal" bones/39/parent = 34 bones/39/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0052000335, 0.12159993, -0.00040023506) bones/39/enabled = true bones/39/position = Vector3(0.0052000335, 0.12159993, -0.00040023506) -bones/39/rotation = Quaternion(0.6046183, 0.028586894, 0.03459153, 0.79525036) +bones/39/rotation = Quaternion(0.06796153, 0.0032131374, 0.0697587, 0.995241) bones/39/scale = Vector3(1, 1, 1) bones/40/name = "RightMiddleIntermediate" bones/40/parent = 39 bones/40/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0019999943, 0.04230002, -9.594936e-08) bones/40/enabled = true bones/40/position = Vector3(-0.0019999943, 0.04230002, -9.594936e-08) -bones/40/rotation = Quaternion(0.5162386, 0.077261716, -0.033125486, 0.8523092) +bones/40/rotation = Quaternion(0.070700124, -0.01894638, 0.0015430152, 0.9973165) bones/40/scale = Vector3(1, 1, 1) bones/41/name = "RightMiddleDistal" bones/41/parent = 40 bones/41/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0014999958, 0.033900008, 4.301159e-08) bones/41/enabled = true bones/41/position = Vector3(-0.0014999958, 0.033900008, 4.301159e-08) -bones/41/rotation = Quaternion(0.29623953, 0.013778644, 1.2516977e-06, 0.95501435) +bones/41/rotation = Quaternion(0.06966789, 0.0032404072, 0, 0.99756503) bones/41/scale = Vector3(1, 1, 1) bones/42/name = "middle_04_leaf_r" bones/42/parent = 41 bones/42/rest = Transform3D(-0.99892014, -0.04646147, -2.7325223e-07, -0.04646151, 0.99891984, 6.6721384e-09, 2.9273497e-07, 3.3413276e-08, -0.9999999, -0.0015999991, 0.03440002, 2.7677858e-08) bones/42/enabled = true bones/42/position = Vector3(-0.0015999991, 0.03440002, 2.7677858e-08) -bones/42/rotation = Quaternion(-0.02323703, 0.99973, 1.3300989e-08, -1.4671618e-07) +bones/42/rotation = Quaternion(-0.02323703, 0.99973, 2.8544385e-08, -1.6126707e-07) bones/42/scale = Vector3(1, 0.99999976, 0.9999999) bones/43/name = "RightLittleProximal" bones/43/parent = 34 bones/43/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.040799975, 0.107699946, 0.0015997475) bones/43/enabled = true bones/43/position = Vector3(-0.040799975, 0.107699946, 0.0015997475) -bones/43/rotation = Quaternion(0.80694354, 0.05419756, -0.041671038, 0.5866586) +bones/43/rotation = Quaternion(0.14282705, 0.009592847, 0.18191487, 0.97283894) bones/43/scale = Vector3(1, 1, 1) bones/44/name = "RightLittleIntermediate" bones/44/parent = 43 bones/44/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0026999926, 0.040199965, -4.7321702e-11) bones/44/enabled = true bones/44/position = Vector3(-0.0026999926, 0.040199965, -4.7321702e-11) -bones/44/rotation = Quaternion(0.31627935, 0.13458802, -0.038931996, 0.93826324) +bones/44/rotation = Quaternion(0.16319741, -0.06257492, 0.011865467, 0.9845356) bones/44/scale = Vector3(1, 1, 1) bones/45/name = "RightLittleDistal" bones/45/parent = 44 bones/45/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0018999918, 0.027600035, -1.0417894e-08) bones/45/enabled = true bones/45/position = Vector3(-0.0018999918, 0.027600035, -1.0417894e-08) -bones/45/rotation = Quaternion(0.25646293, 0.017340943, 3.3676624e-06, 0.9663985) +bones/45/rotation = Quaternion(0.15871903, 0.010731831, 1.8179417e-06, 0.98726547) bones/45/scale = Vector3(1, 1, 1) bones/46/name = "pinky_04_leaf_r" bones/46/parent = 45 bones/46/rest = Transform3D(-0.99772197, -0.0674616, -2.5873078e-07, -0.06746164, 0.9977217, 1.503156e-08, 1.7270258e-07, 4.6777405e-08, -0.9999999, -0.001899995, 0.028100003, -1.2148155e-07) bones/46/enabled = true bones/46/position = Vector3(-0.001899995, 0.028100003, -1.2148155e-07) -bones/46/rotation = Quaternion(-0.03375011, 0.99943036, 7.077092e-09, -1.322724e-07) +bones/46/rotation = Quaternion(-0.03375008, 0.99943036, 4.924054e-08, -5.6300305e-08) bones/46/scale = Vector3(1.0000001, 0.99999976, 0.9999999) bones/47/name = "RightRingProximal" bones/47/parent = 34 bones/47/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.017099975, 0.11909993, -0.00010018104) bones/47/enabled = true bones/47/position = Vector3(-0.017099975, 0.11909993, -0.00010018104) -bones/47/rotation = Quaternion(0.7688189, 0.027387554, -0.019950124, 0.6385684) +bones/47/rotation = Quaternion(0.060118727, 0.0021414754, 0.16436438, 0.98456365) bones/47/scale = Vector3(1, 1, 1) bones/48/name = "RightRingIntermediate" bones/48/parent = 47 bones/48/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0013999942, 0.039300077, -2.1747476e-07) bones/48/enabled = true bones/48/position = Vector3(-0.0013999942, 0.039300077, -2.1747476e-07) -bones/48/rotation = Quaternion(0.32148638, 0.10910274, -0.03375864, 0.94000185) +bones/48/rotation = Quaternion(0.071474396, -0.050074168, 0.003676861, 0.9961779) bones/48/scale = Vector3(1, 1, 1) bones/49/name = "RightRingDistal" bones/49/parent = 48 bones/49/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0010999979, 0.030900003, -9.946502e-08) bones/49/enabled = true bones/49/position = Vector3(-0.0010999979, 0.030900003, -9.946502e-08) -bones/49/rotation = Quaternion(0.3906144, 0.0147405695, 3.0696388e-06, 0.9204363) +bones/49/rotation = Quaternion(0.069693655, 0.0026300102, 2.682209e-07, 0.99756503) bones/49/scale = Vector3(1, 1, 1) bones/50/name = "ring_04_leaf_r" bones/50/parent = 49 bones/50/rest = Transform3D(-0.9992889, -0.037708856, -3.9285123e-07, -0.037708916, 0.99928814, 7.1365776e-09, 4.1251042e-07, 3.5821593e-08, -0.9999999, -0.0011999963, 0.031799987, 5.404123e-09) bones/50/enabled = true bones/50/position = Vector3(-0.0011999963, 0.031799987, 5.404123e-09) -bones/50/rotation = Quaternion(-0.018857807, 0.9998222, 1.4018108e-08, -2.0655628e-07) +bones/50/rotation = Quaternion(-0.018857837, 0.9998222, -1.5216909e-08, -2.369153e-07) bones/50/scale = Vector3(1.0000001, 0.99999934, 0.9999999) bones/51/name = "RightThumbMetacarpal" bones/51/parent = 34 bones/51/rest = Transform3D(0, 0.577, -0.816, 0, 0.816, 0.577, 1, 0, 0, 0.03360003, 0.02729996, 0.022799788) bones/51/enabled = true bones/51/position = Vector3(0.03360003, 0.02729996, 0.022799788) -bones/51/rotation = Quaternion(-0.06001975, -0.7160839, -0.2818967, 0.6357324) +bones/51/rotation = Quaternion(-0.21439502, -0.63646096, -0.31083846, 0.6725561) bones/51/scale = Vector3(1, 0.99939233, 0.99939233) bones/52/name = "RightThumbProximal" bones/52/parent = 51 bones/52/rest = Transform3D(0.99999994, 0, 0, 0, 0.9999999, 2.9802322e-08, 0, -2.9802322e-08, 0.9999999, 0.019199956, 0.038166482, 0.005296612) bones/52/enabled = true bones/52/position = Vector3(0.019199956, 0.038166482, 0.005296612) -bones/52/rotation = Quaternion(0.18916614, -0.26830974, 0.13073356, 0.9354864) +bones/52/rotation = Quaternion(0.057934128, -0.0067607053, 0.32589677, 0.9436044) bones/52/scale = Vector3(0.99999994, 0.9999999, 0.9999999) bones/53/name = "RightThumbDistal" bones/53/parent = 52 bones/53/rest = Transform3D(1, 0, 0, 0, 1.0000001, 0, 0, 0, 1.0000001, 0.021899961, 0.04353219, 0.0060271067) bones/53/enabled = true bones/53/position = Vector3(0.021899961, 0.04353219, 0.0060271067) -bones/53/rotation = Quaternion(0.41658878, -0.19039917, -0.13526444, 0.87858146) +bones/53/rotation = Quaternion(-2.9802319e-08, 0, 8.940695e-08, 1) bones/53/scale = Vector3(1, 1.0000001, 1.0000001) bones/54/name = "thumb_04_leaf_r" bones/54/parent = 53 @@ -19833,27 +19865,27 @@ bones/54/rest = Transform3D(0.6015796, 0.4453967, -0.6631166, -0.39881328, 0.887 bones/54/enabled = true bones/54/position = Vector3(0.018199861, 0.03625768, 0.00504987) bones/54/rotation = Quaternion(-0.030814791, -0.37901437, -0.23595548, 0.8942726) -bones/54/scale = Vector3(1.0001454, 1.0004877, 1.0005834) +bones/54/scale = Vector3(1.0001453, 1.0004876, 1.0005833) bones/55/name = "LeftUpperLeg" bones/55/parent = 1 bones/55/rest = Transform3D(-1, 0, 0, 0, -1, 0, 0, 0, 1, 0.089, 0.015400031, 0.051499985) bones/55/enabled = true bones/55/position = Vector3(0.089, 0.015400031, 0.051499985) -bones/55/rotation = Quaternion(-0.00078904, 0.11607768, 0.98681295, -0.11280838) +bones/55/rotation = Quaternion(-0.0010083821, -0.027820975, 0.9891616, -0.14416796) bones/55/scale = Vector3(1, 1, 1) bones/56/name = "LeftLowerLeg" bones/56/parent = 55 bones/56/rest = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, -7.450581e-09, 0.40029997, -0.0027998893) bones/56/enabled = true bones/56/position = Vector3(-7.450581e-09, 0.40029997, -0.0027998893) -bones/56/rotation = Quaternion(0.015998328, 0.98269093, -0.14611013, 0.11275837) +bones/56/rotation = Quaternion(0.04211544, 0.9126826, -0.10421773, 0.39290655) bones/56/scale = Vector3(1, 1, 1) bones/57/name = "LeftFoot" bones/57/parent = 56 bones/57/rest = Transform3D(-1, 0, 0, 0, 0, -1, 0, -1, 0, -7.218184e-09, 0.42809996, 0.034399886) bones/57/enabled = true bones/57/position = Vector3(-7.218184e-09, 0.42809996, 0.034399886) -bones/57/rotation = Quaternion(-0.092097424, 0.7294667, -0.6776705, 0.012619125) +bones/57/rotation = Quaternion(-0.11777024, 0.79136837, -0.59887403, -0.03487399) bones/57/scale = Vector3(1, 1, 1) bones/58/name = "LeftToes" bones/58/parent = 57 @@ -19874,28 +19906,28 @@ bones/60/parent = 1 bones/60/rest = Transform3D(-1, 0, 0, 0, -1, 0, 0, 0, 1, -0.089, 0.015400031, 0.051499985) bones/60/enabled = true bones/60/position = Vector3(-0.089, 0.015400031, 0.051499985) -bones/60/rotation = Quaternion(0.00082032575, -0.1092699, 0.98706883, 0.1172803) +bones/60/rotation = Quaternion(0.001243161, 0.07711153, 0.981053, 0.17772843) bones/60/scale = Vector3(1, 1, 1) bones/61/name = "RightLowerLeg" bones/61/parent = 60 bones/61/rest = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 7.450581e-09, 0.40029997, -0.0027998893) bones/61/enabled = true bones/61/position = Vector3(7.450581e-09, 0.40029997, -0.0027998893) -bones/61/rotation = Quaternion(-0.030194327, 0.9287684, -0.08459321, -0.35961306) +bones/61/rotation = Quaternion(-0.021503527, 0.9737953, -0.11414845, -0.19552632) bones/61/scale = Vector3(1, 1, 1) bones/62/name = "RightFoot" bones/62/parent = 61 bones/62/rest = Transform3D(-1, 0, 0, 0, 0, -1, 0, -1, 0, 7.683263e-09, 0.4280999, 0.034399875) bones/62/enabled = true bones/62/position = Vector3(7.683263e-09, 0.4280999, 0.034399875) -bones/62/rotation = Quaternion(0.17524873, 0.6450124, -0.7437998, 0.0029911033) +bones/62/rotation = Quaternion(0.18900639, 0.81196153, -0.5517746, -0.023236103) bones/62/scale = Vector3(1, 1, 1) bones/63/name = "RightToes" bones/63/parent = 62 bones/63/rest = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 3.5171341e-09, 0.14900002, -0.08849997) bones/63/enabled = true bones/63/position = Vector3(3.5171341e-09, 0.14900002, -0.08849997) -bones/63/rotation = Quaternion(-2.230305e-08, 1, 8.940697e-08, 2.2097256e-08) +bones/63/rotation = Quaternion(-6.397143e-08, 1, 2.9802322e-08, 4.368002e-08) bones/63/scale = Vector3(1, 1, 1) bones/64/name = "ball_leaf_r" bones/64/parent = 63 @@ -19935,7 +19967,7 @@ light_energy = 1.137 [node name="RangedPoint" type="Node3D" parent="Model"] unique_name_in_owner = true -transform = Transform3D(1, -7.450581e-09, 2.2351742e-08, -7.450581e-09, 1, 0, 0, 0, 1, -0.069371, 0.6716403, 0.26833847) +transform = Transform3D(1, -7.450581e-09, 2.2351742e-08, -7.450581e-09, 1, 0, 0, 0, 1, 0, 0, 0) [node name="AnimationPlayer" type="AnimationPlayer" parent="Model"] unique_name_in_owner = true @@ -19950,7 +19982,9 @@ tree_root = SubResource("AnimationNodeStateMachine_80lp4") advance_expression_base_node = NodePath("../../..") anim_player = NodePath("../AnimationPlayer") parameters/Crouch/blend_position = 0.0 +"parameters/Melee Attack/TimeScale/scale" = 1.0 parameters/Motion/blend_position = 0.002057613 +"parameters/Ranged Attack/TimeScale/scale" = 1.0 [node name="MeleeSound" type="AudioStreamPlayer3D" parent="."] stream = SubResource("AudioStreamRandomizer_ghbft")