From 5451f0b31fd999bd9c591636860e5dd970b851a3 Mon Sep 17 00:00:00 2001 From: Zenny Date: Tue, 10 Feb 2026 18:42:46 -0800 Subject: [PATCH] Persuader --- .../Equipment/Tags/WeaponTag.cs | 3 +- .../src/items/ammo/resources/Bullet.tres | 29 + .../items/weapons/PersuaderProjectile.tscn | 597 ++++++++++++++++++ .../items/weapons/resources/Persuader.tres | 31 + Zennysoft.Game.Ma/src/player/Player.cs | 39 +- Zennysoft.Game.Ma/src/player/Player.tscn | 16 +- 6 files changed, 700 insertions(+), 15 deletions(-) create mode 100644 Zennysoft.Game.Ma/src/items/ammo/resources/Bullet.tres create mode 100644 Zennysoft.Game.Ma/src/items/weapons/PersuaderProjectile.tscn create mode 100644 Zennysoft.Game.Ma/src/items/weapons/resources/Persuader.tres diff --git a/Zennysoft.Game.Ma.Implementation/Equipment/Tags/WeaponTag.cs b/Zennysoft.Game.Ma.Implementation/Equipment/Tags/WeaponTag.cs index 96313888c..608acd459 100644 --- a/Zennysoft.Game.Ma.Implementation/Equipment/Tags/WeaponTag.cs +++ b/Zennysoft.Game.Ma.Implementation/Equipment/Tags/WeaponTag.cs @@ -13,5 +13,6 @@ public enum WeaponTag DegradeOnSwing, DoubleAttack, TripleAttack, - ElementalProjectile + ElementalProjectile, + KineticProjectile } diff --git a/Zennysoft.Game.Ma/src/items/ammo/resources/Bullet.tres b/Zennysoft.Game.Ma/src/items/ammo/resources/Bullet.tres new file mode 100644 index 000000000..b927a3fc4 --- /dev/null +++ b/Zennysoft.Game.Ma/src/items/ammo/resources/Bullet.tres @@ -0,0 +1,29 @@ +[gd_resource type="Resource" script_class="AmmoStats" load_steps=3 format=3 uid="uid://ccmnjavqxfykq"] + +[ext_resource type="Texture2D" uid="uid://br8bo6b52q3lh" path="res://src/items/ammo/textures/ammo1.png" id="1_ghqt2"] +[ext_resource type="Script" uid="uid://cmfwvjjargi0s" path="res://src/items/ammo/AmmoStats.cs" id="2_nkb67"] + +[resource] +script = ExtResource("2_nkb67") +AmmoElement = 0 +InitialCount = 5 +Name = "Bullet" +Description = "Can be used with a Persuader." +SpawnRate = 0.5 +BonusAttack = 0 +BonusDefense = 0 +BonusLuck = 5 +BonusHP = 0 +BonusVT = 0 +AeolicResistance = 0 +TelluricResistance = 0 +HydricResistance = 0 +IgneousResistance = 0 +FerrumResistance = 0 +HolyResistance = 0 +CurseResistance = 0 +ThrowSpeed = 12.0 +ThrowDamage = 5 +ItemTag = 0 +Texture = ExtResource("1_ghqt2") +metadata/_custom_type_script = "uid://cmfwvjjargi0s" diff --git a/Zennysoft.Game.Ma/src/items/weapons/PersuaderProjectile.tscn b/Zennysoft.Game.Ma/src/items/weapons/PersuaderProjectile.tscn new file mode 100644 index 000000000..f0ff9fdaf --- /dev/null +++ b/Zennysoft.Game.Ma/src/items/weapons/PersuaderProjectile.tscn @@ -0,0 +1,597 @@ +[gd_scene load_steps=72 format=3 uid="uid://d3nx0suvhbcda"] + +[ext_resource type="Script" uid="uid://cqm6u7qa8japr" path="res://src/system/Projectile.cs" id="1_7ykt2"] +[ext_resource type="Script" uid="uid://ctshiyffvt4y5" path="res://src/system/AttackDataResource.cs" id="2_3v8me"] +[ext_resource type="Texture2D" uid="uid://c1x4iaqgj2rur" path="res://src/vfx/Items Etc/smokepuff.png" id="3_7ykt2"] + +[sub_resource type="Resource" id="Resource_14f5p"] +script = ExtResource("2_3v8me") +Damage = 99 +ElementType = 0 +metadata/_custom_type_script = "uid://ctshiyffvt4y5" + +[sub_resource type="AtlasTexture" id="AtlasTexture_3v8me"] +atlas = ExtResource("3_7ykt2") +region = Rect2(0, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fqyvm"] +atlas = ExtResource("3_7ykt2") +region = Rect2(512, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_dd88y"] +atlas = ExtResource("3_7ykt2") +region = Rect2(1024, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_dh58r"] +atlas = ExtResource("3_7ykt2") +region = Rect2(1536, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_dkte1"] +atlas = ExtResource("3_7ykt2") +region = Rect2(2048, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_blqrc"] +atlas = ExtResource("3_7ykt2") +region = Rect2(2560, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_arywf"] +atlas = ExtResource("3_7ykt2") +region = Rect2(3072, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8qbn2"] +atlas = ExtResource("3_7ykt2") +region = Rect2(3584, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_t4sid"] +atlas = ExtResource("3_7ykt2") +region = Rect2(4096, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jsygo"] +atlas = ExtResource("3_7ykt2") +region = Rect2(4608, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_kgaue"] +atlas = ExtResource("3_7ykt2") +region = Rect2(5120, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qyxji"] +atlas = ExtResource("3_7ykt2") +region = Rect2(5632, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8ss7g"] +atlas = ExtResource("3_7ykt2") +region = Rect2(6144, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_87a2b"] +atlas = ExtResource("3_7ykt2") +region = Rect2(6656, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_6xin2"] +atlas = ExtResource("3_7ykt2") +region = Rect2(7168, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vleot"] +atlas = ExtResource("3_7ykt2") +region = Rect2(7680, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_70ig7"] +atlas = ExtResource("3_7ykt2") +region = Rect2(8192, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_snqpl"] +atlas = ExtResource("3_7ykt2") +region = Rect2(8704, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_spu52"] +atlas = ExtResource("3_7ykt2") +region = Rect2(9216, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rnfxb"] +atlas = ExtResource("3_7ykt2") +region = Rect2(9728, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_oywdj"] +atlas = ExtResource("3_7ykt2") +region = Rect2(10240, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_t6bla"] +atlas = ExtResource("3_7ykt2") +region = Rect2(10752, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_k40vd"] +atlas = ExtResource("3_7ykt2") +region = Rect2(11264, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0wdl3"] +atlas = ExtResource("3_7ykt2") +region = Rect2(11776, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_d1m4j"] +atlas = ExtResource("3_7ykt2") +region = Rect2(12288, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qs5lg"] +atlas = ExtResource("3_7ykt2") +region = Rect2(12800, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_uwjde"] +atlas = ExtResource("3_7ykt2") +region = Rect2(13312, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pgllj"] +atlas = ExtResource("3_7ykt2") +region = Rect2(13824, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_mcef2"] +atlas = ExtResource("3_7ykt2") +region = Rect2(14336, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_6rbxw"] +atlas = ExtResource("3_7ykt2") +region = Rect2(14848, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ng4rb"] +atlas = ExtResource("3_7ykt2") +region = Rect2(15360, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_xuahn"] +atlas = ExtResource("3_7ykt2") +region = Rect2(15872, 0, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_dsa18"] +atlas = ExtResource("3_7ykt2") +region = Rect2(0, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_hvxd8"] +atlas = ExtResource("3_7ykt2") +region = Rect2(512, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jfuun"] +atlas = ExtResource("3_7ykt2") +region = Rect2(1024, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gmolx"] +atlas = ExtResource("3_7ykt2") +region = Rect2(1536, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rq7q0"] +atlas = ExtResource("3_7ykt2") +region = Rect2(2048, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ehup4"] +atlas = ExtResource("3_7ykt2") +region = Rect2(2560, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_v46bh"] +atlas = ExtResource("3_7ykt2") +region = Rect2(3072, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_mn1q0"] +atlas = ExtResource("3_7ykt2") +region = Rect2(3584, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_57r4m"] +atlas = ExtResource("3_7ykt2") +region = Rect2(4096, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_cv4sa"] +atlas = ExtResource("3_7ykt2") +region = Rect2(4608, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_287xc"] +atlas = ExtResource("3_7ykt2") +region = Rect2(5120, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_igxdn"] +atlas = ExtResource("3_7ykt2") +region = Rect2(5632, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_yowi7"] +atlas = ExtResource("3_7ykt2") +region = Rect2(6144, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_74d6p"] +atlas = ExtResource("3_7ykt2") +region = Rect2(6656, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_37ncv"] +atlas = ExtResource("3_7ykt2") +region = Rect2(7168, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_f5mpf"] +atlas = ExtResource("3_7ykt2") +region = Rect2(7680, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rbj0v"] +atlas = ExtResource("3_7ykt2") +region = Rect2(8192, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_kj88y"] +atlas = ExtResource("3_7ykt2") +region = Rect2(8704, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_li0qy"] +atlas = ExtResource("3_7ykt2") +region = Rect2(9216, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_6lgr3"] +atlas = ExtResource("3_7ykt2") +region = Rect2(9728, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jd6k4"] +atlas = ExtResource("3_7ykt2") +region = Rect2(10240, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0wyru"] +atlas = ExtResource("3_7ykt2") +region = Rect2(10752, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ei8cw"] +atlas = ExtResource("3_7ykt2") +region = Rect2(11264, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_c6y4b"] +atlas = ExtResource("3_7ykt2") +region = Rect2(11776, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_j1hc4"] +atlas = ExtResource("3_7ykt2") +region = Rect2(12288, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vbf54"] +atlas = ExtResource("3_7ykt2") +region = Rect2(12800, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rrfn3"] +atlas = ExtResource("3_7ykt2") +region = Rect2(13312, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_hng4w"] +atlas = ExtResource("3_7ykt2") +region = Rect2(13824, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_0rgn5"] +atlas = ExtResource("3_7ykt2") +region = Rect2(14336, 512, 512, 512) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a3qva"] +atlas = ExtResource("3_7ykt2") +region = Rect2(14848, 512, 512, 512) + +[sub_resource type="SpriteFrames" id="SpriteFrames_pck2g"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_3v8me") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fqyvm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_dd88y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_dh58r") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_dkte1") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_blqrc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_arywf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8qbn2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_t4sid") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jsygo") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_kgaue") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qyxji") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8ss7g") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_87a2b") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_6xin2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vleot") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_70ig7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_snqpl") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_spu52") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rnfxb") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_oywdj") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_t6bla") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_k40vd") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0wdl3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_d1m4j") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qs5lg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_uwjde") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_pgllj") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_mcef2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_6rbxw") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ng4rb") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_xuahn") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_dsa18") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_hvxd8") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jfuun") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gmolx") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rq7q0") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ehup4") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_v46bh") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_mn1q0") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_57r4m") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_cv4sa") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_287xc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_igxdn") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_yowi7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_74d6p") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_37ncv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_f5mpf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rbj0v") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_kj88y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_li0qy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_6lgr3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jd6k4") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0wyru") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ei8cw") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_c6y4b") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_j1hc4") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vbf54") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rrfn3") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_hng4w") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_0rgn5") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_a3qva") +}], +"loop": false, +"name": &"default", +"speed": 24.0 +}] + +[sub_resource type="SphereShape3D" id="SphereShape3D_kct8n"] + +[sub_resource type="Animation" id="Animation_xrn7e"] +resource_name = "fire" +length = 1.11667 +step = 0.0166667 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"default"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.416667), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [1, 67] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("%ProjectileHitbox:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 1.1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector3(0, 2.1, 0), Vector3(0, 2.1, -40)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("%ProjectileHitbox/CollisionShape3D:disabled") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.0166667, 1.11667), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [true, false, true] +} + +[sub_resource type="Animation" id="Animation_8qeb2"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:animation") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"default"] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath(".:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("%ProjectileHitbox:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 0)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("%ProjectileHitbox/CollisionShape3D:disabled") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_q8n6h"] +_data = { +&"Fire": SubResource("Animation_xrn7e"), +&"RESET": SubResource("Animation_8qeb2") +} + +[node name="Persuader" type="Node3D"] +script = ExtResource("1_7ykt2") +AttackData = SubResource("Resource_14f5p") + +[node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.1, -2) +pixel_size = 0.0025 +billboard = 1 +sprite_frames = SubResource("SpriteFrames_pck2g") + +[node name="Bullet" type="Node3D" parent="."] + +[node name="ProjectileHitbox" type="Area3D" parent="Bullet"] +unique_name_in_owner = true +collision_layer = 0 +collision_mask = 2048 +monitorable = false + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Bullet/ProjectileHitbox"] +shape = SubResource("SphereShape3D_kct8n") +disabled = true + +[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="Bullet"] +unique_name_in_owner = true + +[node name="AnimationPlayer" type="AnimationPlayer" parent="Bullet"] +unique_name_in_owner = true +root_node = NodePath("../../AnimatedSprite3D") +libraries = { +&"": SubResource("AnimationLibrary_q8n6h") +} diff --git a/Zennysoft.Game.Ma/src/items/weapons/resources/Persuader.tres b/Zennysoft.Game.Ma/src/items/weapons/resources/Persuader.tres new file mode 100644 index 000000000..dedf1e26d --- /dev/null +++ b/Zennysoft.Game.Ma/src/items/weapons/resources/Persuader.tres @@ -0,0 +1,31 @@ +[gd_resource type="Resource" script_class="WeaponStats" load_steps=3 format=3 uid="uid://ct3n45l8ktl4w"] + +[ext_resource type="Texture2D" uid="uid://dl87hjpq6dcxg" path="res://src/items/weapons/textures/persuader1.png" id="1_tjgtg"] +[ext_resource type="Script" uid="uid://cc7byqeolw5y4" path="res://src/items/weapons/WeaponStats.cs" id="2_jtddk"] + +[resource] +script = ExtResource("2_jtddk") +AttackSpeed = 1.0 +WeaponElement = 0 +WeaponTag = 12 +SelfDamage = 0 +SoundEffect = 22 +Name = "Persuader" +Description = "" +SpawnRate = 0.1 +BonusAttack = 15 +BonusDefense = 0 +BonusLuck = 5 +BonusHP = 0 +BonusVT = 0 +AeolicResistance = 0 +TelluricResistance = 0 +HydricResistance = 0 +IgneousResistance = 0 +FerrumResistance = 0 +HolyResistance = 0 +CurseResistance = 0 +ThrowSpeed = 12.0 +ThrowDamage = 5 +ItemTag = 0 +Texture = ExtResource("1_tjgtg") diff --git a/Zennysoft.Game.Ma/src/player/Player.cs b/Zennysoft.Game.Ma/src/player/Player.cs index 8fda50c62..ddc447e2d 100644 --- a/Zennysoft.Game.Ma/src/player/Player.cs +++ b/Zennysoft.Game.Ma/src/player/Player.cs @@ -95,6 +95,8 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide [Node] private Projectile FireReactor { get; set; } = default!; [Node] private Projectile AirReactor { get; set; } = default!; [Node] private Projectile WaterReactor { get; set; } = default!; + [Node] private Projectile PersuaderBullet { get; set; } = default!; + [Node] private Sprite2D PersuaderCrosshair { get; set; } = default!; #endregion @@ -280,6 +282,9 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide VTComponent.RaiseMaximumVT(equipable.BonusVT, false); EquipmentComponent.Equip(equipable); + + if (equipable is Weapon weapon && weapon.WeaponTag == WeaponTag.KineticProjectile) + PersuaderCrosshair.Show(); } public void Unequip(EquipableItem equipable) @@ -288,6 +293,9 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide VTComponent.SetMaximumVT(VTComponent.MaximumVT.Value - equipable.BonusVT); EquipmentComponent.Unequip(equipable); + + if (equipable is Weapon weapon && weapon.WeaponTag == WeaponTag.KineticProjectile) + PersuaderCrosshair.Hide(); } private static Vector3 GlobalInputVector @@ -324,7 +332,7 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide private void Attack() { var weapon = EquipmentComponent.EquippedWeapon.Value as Weapon; - if (weapon.WeaponTag == WeaponTag.ElementalProjectile) + if (weapon.WeaponTag == WeaponTag.ElementalProjectile || weapon.WeaponTag == WeaponTag.KineticProjectile) { HandleProjectile(weapon); return; @@ -349,19 +357,24 @@ public partial class Player : CharacterBody3D, IPlayer, IProvide if (ammo == null || ammo.Count <= 0) return; - if (weapon.WeaponTag != WeaponTag.ElementalProjectile) - return; + if (weapon.WeaponTag == WeaponTag.ElementalProjectile) + { + var fired = false; + if (ammo.AmmoElement == ElementType.Igneous) + fired = FireReactor.Fire(); + if (ammo.AmmoElement == ElementType.Aeolic) + fired = AirReactor.Fire(); + if (ammo.AmmoElement == ElementType.Hydric) + fired = WaterReactor.Fire(); - var fired = false; - if (ammo.AmmoElement == ElementType.Igneous) - fired = FireReactor.Fire(); - if (ammo.AmmoElement == ElementType.Aeolic) - fired = AirReactor.Fire(); - if (ammo.AmmoElement == ElementType.Hydric) - fired = WaterReactor.Fire(); - - if (!fired) - return; + if (!fired) + return; + } + else if (weapon.WeaponTag == WeaponTag.KineticProjectile) + { + var fired = false; + fired = PersuaderBullet.Fire(); + } ammo.SetCount(ammo.Count - 1); if (ammo.Count <= 0) diff --git a/Zennysoft.Game.Ma/src/player/Player.tscn b/Zennysoft.Game.Ma/src/player/Player.tscn index 59471880c..0481aa87b 100644 --- a/Zennysoft.Game.Ma/src/player/Player.tscn +++ b/Zennysoft.Game.Ma/src/player/Player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=1583 format=3 uid="uid://cfecvvav8kkp6"] +[gd_scene load_steps=1585 format=3 uid="uid://cfecvvav8kkp6"] [ext_resource type="Script" uid="uid://yxmiqy7i0t7r" path="res://src/player/Player.cs" id="1_xcol5"] [ext_resource type="PackedScene" uid="uid://didc6vnf5ftlg" path="res://src/camera/ShakeCamera.tscn" id="2_jtmj1"] @@ -508,9 +508,11 @@ [ext_resource type="Texture2D" uid="uid://bvqsilbdfyqd1" path="res://src/vfx/Items Etc/persiko/persiko125.png" id="399_b1hpb"] [ext_resource type="Texture2D" uid="uid://bwoccwmlevwm1" path="res://src/vfx/Items Etc/persiko/persiko126.png" id="400_nmop6"] [ext_resource type="Texture2D" uid="uid://dwfqyfjsj8nro" path="res://src/vfx/Items Etc/persiko/persiko127.png" id="401_28ame"] +[ext_resource type="Texture2D" uid="uid://pv56eou8fuw6" path="res://src/vfx/Items Etc/crosshair.png" id="508_sq73w"] [ext_resource type="PackedScene" uid="uid://igpvnbi8qi6e" path="res://src/items/weapons/FireReactorProjectile.tscn" id="509_14f5p"] [ext_resource type="PackedScene" uid="uid://nnns2ade62al" path="res://src/items/weapons/AirReactorProjectile.tscn" id="510_k6pkx"] [ext_resource type="PackedScene" uid="uid://7p2sh52lj42o" path="res://src/items/weapons/WaterReactorProjectile.tscn" id="511_sq73w"] +[ext_resource type="PackedScene" uid="uid://d3nx0suvhbcda" path="res://src/items/weapons/PersuaderProjectile.tscn" id="512_k6pkx"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_dw45s"] radius = 1.0 @@ -10491,6 +10493,12 @@ sprite_frames = SubResource("SpriteFrames_krly2") frame = 63 frame_progress = 1.0 +[node name="PersuaderCrosshair" type="Sprite2D" parent="ScreenFX"] +unique_name_in_owner = true +visible = false +position = Vector2(723, 575) +texture = ExtResource("508_sq73w") + [node name="HitWallSound" type="AudioStreamPlayer" parent="."] unique_name_in_owner = true bus = &"SFX" @@ -10509,3 +10517,9 @@ unique_name_in_owner = true [node name="WaterReactor" parent="Projectiles" instance=ExtResource("511_sq73w")] unique_name_in_owner = true + +[node name="PersuaderBullet" parent="Projectiles" instance=ExtResource("512_k6pkx")] +unique_name_in_owner = true +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -1.125) + +[editable path="Projectiles/PersuaderBullet"]