From 2f76d4742ec91bfa9eab20ffb7e72642d7124968 Mon Sep 17 00:00:00 2001 From: Marco Date: Fri, 2 May 2025 13:10:38 +0200 Subject: [PATCH] Energy weapons --- Resources/Items/LaserWeapon.tres | 25 ++++++++++++++ Resources/Weapons/LaserWeapon.tres | 26 +++++++++++++++ Scenes/Actors/fsm_player.tscn | 3 +- Scenes/Maps/Roguelike.tscn | 1 - Scenes/Maps/RogueliteMaps/Beginner1.tscn | 12 +++++-- Scenes/test.tscn | 31 +++++++++--------- Scripts/Components/FSM/PlayerStateMachine.cs | 2 ++ Scripts/Resources/WeaponResource.cs | 1 + Scripts/Weapon.cs | 27 +++++++++++++--- Sprites/Items/LaserWeapon.aseprite | 3 ++ Sprites/Items/LaserWeapon.png | 3 ++ Sprites/Items/LaserWeapon.png.import | 34 ++++++++++++++++++++ 12 files changed, 144 insertions(+), 24 deletions(-) create mode 100644 Resources/Items/LaserWeapon.tres create mode 100644 Resources/Weapons/LaserWeapon.tres create mode 100644 Sprites/Items/LaserWeapon.aseprite create mode 100644 Sprites/Items/LaserWeapon.png create mode 100644 Sprites/Items/LaserWeapon.png.import diff --git a/Resources/Items/LaserWeapon.tres b/Resources/Items/LaserWeapon.tres new file mode 100644 index 00000000..221d6ed0 --- /dev/null +++ b/Resources/Items/LaserWeapon.tres @@ -0,0 +1,25 @@ +[gd_resource type="Resource" script_class="LootItem" load_steps=4 format=3 uid="uid://ckfqrq8a0uj1t"] + +[ext_resource type="Texture2D" uid="uid://d04hnwyg3sqlu" path="res://Sprites/Items/LaserWeapon.png" id="1_h548w"] +[ext_resource type="Resource" uid="uid://do0jwf5jhx1i5" path="res://Resources/Weapons/LaserWeapon.tres" id="2_rec72"] +[ext_resource type="Script" uid="uid://epnwjptvks3t" path="res://Scripts/Resources/LootItem.cs" id="3_2blkp"] + +[resource] +script = ExtResource("3_2blkp") +ItemName = &"Laser" +ShortName = &"Laser" +ItemDescription = &"Laser" +ItemKey = &"LASER_WEAPON" +Item = 9 +Tier = 0 +Price = 0 +WeaponData = ExtResource("2_rec72") +Amount = 1 +Max = 1 +PickupIfMaxed = false +ConsumeOnUse = false +UiType = 1 +Selectable = true +AutoPickup = false +InventorySprite = ExtResource("1_h548w") +DropScenePath = &"res://Scenes/Items/GenericItem.tscn" diff --git a/Resources/Weapons/LaserWeapon.tres b/Resources/Weapons/LaserWeapon.tres new file mode 100644 index 00000000..3209ad89 --- /dev/null +++ b/Resources/Weapons/LaserWeapon.tres @@ -0,0 +1,26 @@ +[gd_resource type="Resource" script_class="WeaponResource" load_steps=5 format=3 uid="uid://do0jwf5jhx1i5"] + +[ext_resource type="Resource" uid="uid://eu6n6c5175y8" path="res://Resources/Bullets/simple_ice_bullet.tres" id="1_1h0tt"] +[ext_resource type="AudioStream" uid="uid://jsv3yjluv1au" path="res://SFX/Weapons/Reload_01.wav" id="2_h0bjj"] +[ext_resource type="AudioStream" uid="uid://cjg8r7bthkfsy" path="res://SFX/Laser_shoot 11.wav" id="3_iquwk"] +[ext_resource type="Script" uid="uid://b6fmrnipv88bk" path="res://Scripts/Resources/WeaponResource.cs" id="4_70v4a"] + +[resource] +script = ExtResource("4_70v4a") +Name = &"Laser" +BulletData = ExtResource("1_1h0tt") +Priority = 1 +AmmoPerShot = 2 +RateOfFire = 0.3 +BulletCapacity = 5 +ReloadTime = 0.6 +AutoReload = true +InfiniteAmmo = true +ItemKey = &"LASER_WEAPON" +AmmoKey = &"SHIELD" +BulletsPerShot = 1 +SpreadAngle = 5.0 +RandomSpread = 2.5 +_rotationOffset = 0.0 +ReloadSound = ExtResource("2_h0bjj") +ShootSound = ExtResource("3_iquwk") diff --git a/Scenes/Actors/fsm_player.tscn b/Scenes/Actors/fsm_player.tscn index 34f9cbfa..e3bcf7a1 100644 --- a/Scenes/Actors/fsm_player.tscn +++ b/Scenes/Actors/fsm_player.tscn @@ -334,9 +334,10 @@ PlayerFSM = NodePath("StateMachine") InteractionController = NodePath("InteractionController") metadata/_edit_group_ = true -[node name="StateMachine" type="Node2D" parent="." node_paths=PackedStringArray("MotivationResource")] +[node name="StateMachine" type="Node2D" parent="." node_paths=PackedStringArray("MotivationResource", "Shield")] script = ExtResource("1_mpmil") MotivationResource = NodePath("../DamageReceiver/MotivationProvider") +Shield = NodePath("../DamageReceiver/ShieldProvider") [node name="Init" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("_animationProvider", "_storageModule")] script = ExtResource("2_i6wc8") diff --git a/Scenes/Maps/Roguelike.tscn b/Scenes/Maps/Roguelike.tscn index 41e58375..4ea36328 100644 --- a/Scenes/Maps/Roguelike.tscn +++ b/Scenes/Maps/Roguelike.tscn @@ -27,7 +27,6 @@ process_mode = 1 y_sort_enabled = true script = ExtResource("4_jtlua") MapThemes = Array[Object]([ExtResource("25_7gtqx")]) -ManualSeed = "5708733892301100157" [node name="CameraController" type="Camera2D" parent="."] process_mode = 1 diff --git a/Scenes/Maps/RogueliteMaps/Beginner1.tscn b/Scenes/Maps/RogueliteMaps/Beginner1.tscn index 99f112e8..13080061 100644 --- a/Scenes/Maps/RogueliteMaps/Beginner1.tscn +++ b/Scenes/Maps/RogueliteMaps/Beginner1.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=28 format=4 uid="uid://24wh7h2dbljf"] +[gd_scene load_steps=30 format=4 uid="uid://24wh7h2dbljf"] [ext_resource type="Script" uid="uid://b2j00riayxkit" path="res://Scripts/Controllers/RogueliteRoom.cs" id="1_vhsym"] [ext_resource type="Resource" uid="uid://dn3ai56rrxfnk" path="res://Resources/RogueliteMaps/Beginner1.tres" id="2_vhsym"] @@ -24,6 +24,8 @@ [ext_resource type="Resource" uid="uid://diqm2ju0xakkt" path="res://Resources/Items/Yin_Yang_Ammo.tres" id="19_ii24s"] [ext_resource type="Resource" uid="uid://cfod8kephnio6" path="res://Resources/Items/Nuclear_Ammo_Pickup.tres" id="20_15ruc"] [ext_resource type="Resource" uid="uid://ct1fa2huvy34n" path="res://Resources/Items/Ammo1.tres" id="21_5uxd1"] +[ext_resource type="Script" uid="uid://cqoqovfvk83wn" path="res://Scripts/Actors/ItemMarker.cs" id="25_5uxd1"] +[ext_resource type="Resource" uid="uid://ckfqrq8a0uj1t" path="res://Resources/Items/LaserWeapon.tres" id="26_iyfx3"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_u3c1h"] size = Vector2(272, 85) @@ -73,7 +75,7 @@ position = Vector2(248, 56) [node name="Chest" parent="Actors" instance=ExtResource("7_kublc")] position = Vector2(216, 55) -LootTable = Array[ExtResource("8_dbn5e")]([ExtResource("9_5yebg"), ExtResource("9_5yebg"), ExtResource("9_5yebg"), ExtResource("9_5yebg"), ExtResource("9_5yebg"), ExtResource("9_5yebg"), ExtResource("10_6gtn1"), ExtResource("11_0a3am"), ExtResource("12_t3lr8"), ExtResource("13_ii24s"), ExtResource("14_15ruc"), ExtResource("15_5uxd1"), ExtResource("16_iyfx3"), ExtResource("17_45mmk"), ExtResource("18_ipsj4"), ExtResource("19_ii24s"), ExtResource("19_ii24s"), ExtResource("19_ii24s"), ExtResource("20_15ruc"), ExtResource("20_15ruc"), ExtResource("20_15ruc"), ExtResource("21_5uxd1"), ExtResource("21_5uxd1"), ExtResource("21_5uxd1")]) +LootTable = Array[ExtResource("8_dbn5e")]([ExtResource("9_5yebg"), ExtResource("9_5yebg"), ExtResource("9_5yebg"), ExtResource("9_5yebg"), ExtResource("9_5yebg"), ExtResource("9_5yebg"), ExtResource("10_6gtn1"), ExtResource("11_0a3am"), ExtResource("12_t3lr8"), ExtResource("13_ii24s"), ExtResource("14_15ruc"), ExtResource("15_5uxd1"), ExtResource("16_iyfx3"), ExtResource("17_45mmk"), ExtResource("18_ipsj4"), ExtResource("19_ii24s"), ExtResource("19_ii24s"), ExtResource("19_ii24s"), ExtResource("20_15ruc"), ExtResource("20_15ruc"), ExtResource("20_15ruc"), ExtResource("21_5uxd1"), ExtResource("21_5uxd1"), ExtResource("21_5uxd1"), ExtResource("26_iyfx3")]) [node name="Label" type="Label" parent="Actors"] offset_left = 153.0 @@ -132,4 +134,10 @@ offset_bottom = 35.0 text = "Exit test" label_settings = ExtResource("14_c0yr1") +[node name="AmmoMarker4" type="Marker2D" parent="Features"] +position = Vector2(91, 134) +script = ExtResource("25_5uxd1") +Item = ExtResource("26_iyfx3") +AutoSpawn = true + [connection signal="area_entered" from="PlayerEnterDetector" to="." method="OnRoomEntered"] diff --git a/Scenes/test.tscn b/Scenes/test.tscn index 42a7d813..9ae5e1e9 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=167 format=4 uid="uid://bv451a8wgty4u"] +[gd_scene load_steps=166 format=4 uid="uid://bv451a8wgty4u"] [ext_resource type="Script" uid="uid://doxmbokehw8ci" path="res://Scripts/GameManager.cs" id="1_8tmoj"] [ext_resource type="PackedScene" uid="uid://c4pr2707hbeph" path="res://Scenes/Actors/fsm_player.tscn" id="2_ksslq"] @@ -79,7 +79,6 @@ [ext_resource type="Resource" uid="uid://dwwbyyy3fo4bt" path="res://Resources/Items/IcicleRepeater_Advanced.tres" id="53_mgwgx"] [ext_resource type="Resource" uid="uid://c01jixi7b2s7v" path="res://Resources/Items/IceShotgun_T1.tres" id="55_7lma1"] [ext_resource type="PackedScene" uid="uid://bqjcwxene73l2" path="res://Scenes/Actors/ActorEnemyTest.tscn" id="55_chha6"] -[ext_resource type="Script" uid="uid://b5fesrd4lv8t1" path="res://Scripts/Resources/Events/EventResource.cs" id="55_j86ly"] [ext_resource type="Resource" uid="uid://bhllj7r3oxipf" path="res://Resources/Items/IceShotgun_T2.tres" id="56_w8skm"] [ext_resource type="Resource" uid="uid://btk4kojtepwv" path="res://Resources/Items/IceShotgun_Sawed_T1.tres" id="57_jm0wb"] [ext_resource type="Resource" uid="uid://c57od7cpn5kwf" path="res://Resources/Items/IceShotgun_Sawed_T2.tres" id="58_dfo5i"] @@ -292,7 +291,7 @@ ActivationType = 0 Targets = Array[NodePath]([NodePath("../Rumia")]) WaitForCompletion = true -[sub_resource type="Resource" id="Resource_y3li7"] +[sub_resource type="Resource" id="Resource_uh0gg"] resource_local_to_scene = true script = ExtResource("49_0si7g") Target = NodePath(".") @@ -908,7 +907,7 @@ Invisible = true metadata/_edit_group_ = true [node name="ScriptableAreaTrigger" parent="Parallax2D/Factory Tilemaps/LevelProps/DebugTeleporter" instance=ExtResource("43_kf3qc")] -Events = Array[ExtResource("55_j86ly")]([SubResource("Resource_usuub")]) +Events = [SubResource("Resource_usuub")] [node name="BlueKeycard2" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("35_rblsn")] position = Vector2(-1032, -317) @@ -1104,7 +1103,7 @@ position = Vector2(-1423, -188) [node name="LevelStartTrigger" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("43_kf3qc")] position = Vector2(-762, -129) scale = Vector2(1.455, 1.455) -Events = Array[ExtResource("55_j86ly")]([SubResource("Resource_5er5x"), SubResource("Resource_b25hy")]) +Events = [SubResource("Resource_5er5x"), SubResource("Resource_b25hy")] [node name="AreaTrigger2" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Target") instance=ExtResource("28_6au4t")] position = Vector2(-435, -162) @@ -1147,7 +1146,7 @@ metadata/_edit_group_ = true [node name="Script2" type="Node2D" parent="Parallax2D/Factory Tilemaps/LevelProps/Computer2"] position = Vector2(120, 25) script = ExtResource("42_wigyb") -Events = Array[ExtResource("55_j86ly")]([SubResource("Resource_wma5c")]) +Events = [SubResource("Resource_wma5c")] [node name="Computer8" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Targets") instance=ExtResource("31_243ec")] position = Vector2(-2073, -215) @@ -1158,7 +1157,7 @@ metadata/_edit_group_ = true [node name="Script2" type="Node2D" parent="Parallax2D/Factory Tilemaps/LevelProps/Computer8"] position = Vector2(120, 25) script = ExtResource("42_wigyb") -Events = Array[ExtResource("55_j86ly")]([SubResource("Resource_dferh")]) +Events = [SubResource("Resource_dferh")] [node name="Computer6" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Targets") instance=ExtResource("31_243ec")] position = Vector2(-1113, -139) @@ -1168,7 +1167,7 @@ metadata/_edit_group_ = true [node name="Script2" type="Node2D" parent="Parallax2D/Factory Tilemaps/LevelProps/Computer6"] position = Vector2(0, 1) script = ExtResource("42_wigyb") -Events = Array[ExtResource("55_j86ly")]([SubResource("Resource_cxj4w")]) +Events = [SubResource("Resource_cxj4w")] [node name="Computer7" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Targets") instance=ExtResource("31_243ec")] position = Vector2(-1175.36, 213.708) @@ -1179,7 +1178,7 @@ metadata/_edit_group_ = true [node name="Computer7Script" type="Node2D" parent="Parallax2D/Factory Tilemaps/LevelProps/Computer7"] position = Vector2(0, 1) script = ExtResource("42_wigyb") -Events = Array[ExtResource("55_j86ly")]([SubResource("Resource_tcc7d")]) +Events = [SubResource("Resource_tcc7d")] [node name="Computer5" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Targets") instance=ExtResource("31_243ec")] position = Vector2(-1344, -251) @@ -1187,7 +1186,7 @@ Targets = [NodePath("Computer5Script")] [node name="Computer5Script" type="Node2D" parent="Parallax2D/Factory Tilemaps/LevelProps/Computer5"] script = ExtResource("42_wigyb") -Events = Array[ExtResource("55_j86ly")]([SubResource("Resource_fasrq"), SubResource("Resource_mah4x"), SubResource("Resource_0bqta")]) +Events = [SubResource("Resource_fasrq"), SubResource("Resource_mah4x"), SubResource("Resource_0bqta")] [node name="Computer3" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Target") instance=ExtResource("31_243ec")] position = Vector2(-612.57, -358.528) @@ -1195,7 +1194,7 @@ Target = NodePath("Script") [node name="Script" type="Node2D" parent="Parallax2D/Factory Tilemaps/LevelProps/Computer3"] script = ExtResource("42_wigyb") -Events = Array[ExtResource("55_j86ly")]([SubResource("Resource_o2kpk")]) +Events = [SubResource("Resource_o2kpk")] [node name="Computer4" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Target") instance=ExtResource("31_243ec")] position = Vector2(-791, -505) @@ -1203,7 +1202,7 @@ Target = NodePath("Node2D") [node name="Node2D" type="Node2D" parent="Parallax2D/Factory Tilemaps/LevelProps/Computer4"] script = ExtResource("42_wigyb") -Events = Array[ExtResource("55_j86ly")]([SubResource("Resource_s3g2w")]) +Events = [SubResource("Resource_s3g2w")] [node name="Label" type="Label" parent="Parallax2D/Factory Tilemaps/LevelProps/Computer4"] offset_left = -5.0 @@ -1220,11 +1219,11 @@ EnemyData = ExtResource("71_xhinl") [node name="BossBattleEndScript" type="Node2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] position = Vector2(-1628.53, -477.628) script = ExtResource("42_wigyb") -Events = Array[ExtResource("55_j86ly")]([SubResource("Resource_068l7"), SubResource("Resource_l3nop")]) +Events = [SubResource("Resource_068l7"), SubResource("Resource_l3nop")] [node name="BossBattleStartScript" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("43_kf3qc")] position = Vector2(-1487, -396) -Events = Array[ExtResource("55_j86ly")]([SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_y3li7")]) +Events = [SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_uh0gg")] [node name="Enemy13" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("47_u1ve6")] position = Vector2(-1657, -788) @@ -1541,7 +1540,7 @@ position = Vector2(-2232, -203) [node name="ScriptableAreaTrigger" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("43_kf3qc")] position = Vector2(-2063, -232) -Events = Array[ExtResource("55_j86ly")]([SubResource("Resource_l476f"), SubResource("Resource_dskij")]) +Events = [SubResource("Resource_l476f"), SubResource("Resource_dskij")] [node name="ShieldExtendPickup" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_0bqta")] position = Vector2(-1646, 38) @@ -1669,7 +1668,7 @@ position = Vector2(-1633, 391) [node name="MovementSensorLonger" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("112_j86ly")] position = Vector2(-1495, 516) -Events = Array[ExtResource("55_j86ly")]([SubResource("Resource_uslvo")]) +Events = [SubResource("Resource_uslvo")] [node name="WallEmitter" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("113_dferh")] position = Vector2(-1480, 451) diff --git a/Scripts/Components/FSM/PlayerStateMachine.cs b/Scripts/Components/FSM/PlayerStateMachine.cs index 0c9aaed4..634aa5c6 100644 --- a/Scripts/Components/FSM/PlayerStateMachine.cs +++ b/Scripts/Components/FSM/PlayerStateMachine.cs @@ -12,6 +12,8 @@ public partial class PlayerStateMachine : StateMachineBase WeaponData.AmmoKey == _shieldAmmoType; // Called when the node enters the scene tree for the first time. public override void _Ready() @@ -79,8 +82,7 @@ public partial class Weapon : Node2D } else { - // if (_inventoryManager.GetItemCount(WeaponData.AmmoKey) <= 0) return; - var ammoToLoad = _inventoryManager.RemoveItem(WeaponData.AmmoKey, WeaponData.BulletCapacity); + var ammoToLoad = _inventoryManager.RemoveItem(WeaponData.AmmoKey, WeaponData.BulletCapacity - LoadedAmmo); if (ammoToLoad > 0) { @@ -102,8 +104,21 @@ public partial class Weapon : Node2D return; } + // Check for battery if it's used + if (UsesBattery) + { + if (GameManager.Instance.Player.Shield.CurrentResource >= WeaponData.AmmoPerShot) + { + GameManager.Instance.Player.Shield.CurrentResource -= WeaponData.AmmoPerShot; + } + else + { + return; + } + } + // Out of ammo? - if (LoadedAmmo <= 0) + if (LoadedAmmo < WeaponData.AmmoPerShot) { if (WeaponData.AutoReload) { @@ -160,7 +175,11 @@ public partial class Weapon : Node2D bullet.Speed = WeaponData.BulletData.BulletSpeed; } - LoadedAmmo -= 1; + if (!UsesBattery) + { + LoadedAmmo -= WeaponData.AmmoPerShot; + } + //_inventoryManager.NotifyLoadedAmmoChange(WeaponData.ItemKey, LoadedAmmo); // if (!string.IsNullOrWhiteSpace(WeaponData?.AmmoKey)) // { diff --git a/Sprites/Items/LaserWeapon.aseprite b/Sprites/Items/LaserWeapon.aseprite new file mode 100644 index 00000000..880aa1e5 --- /dev/null +++ b/Sprites/Items/LaserWeapon.aseprite @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74eaf4034e35117840d2d24334b7e96b27f4d17cbc2b76a2fa8b4df2294b6c3c +size 580 diff --git a/Sprites/Items/LaserWeapon.png b/Sprites/Items/LaserWeapon.png new file mode 100644 index 00000000..035c2530 --- /dev/null +++ b/Sprites/Items/LaserWeapon.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffeb09d397ddacb7652a695b5deccf3fbd25c7be2af1532fe831767551dd7ce4 +size 192 diff --git a/Sprites/Items/LaserWeapon.png.import b/Sprites/Items/LaserWeapon.png.import new file mode 100644 index 00000000..13196ecc --- /dev/null +++ b/Sprites/Items/LaserWeapon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d04hnwyg3sqlu" +path="res://.godot/imported/LaserWeapon.png-e292e12aa34e57d3d32457a4c9af747e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Sprites/Items/LaserWeapon.png" +dest_files=["res://.godot/imported/LaserWeapon.png-e292e12aa34e57d3d32457a4c9af747e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1