diff --git a/Resources/BossPhases/Roguelite/Roguelite_Boss_1.tres b/Resources/BossPhases/Roguelite/Roguelite_Boss_1.tres index 88da36f0..31634b0d 100644 --- a/Resources/BossPhases/Roguelite/Roguelite_Boss_1.tres +++ b/Resources/BossPhases/Roguelite/Roguelite_Boss_1.tres @@ -60,6 +60,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = [] metadata/_custom_type_script = "uid://dslyrfcej3g2n" @@ -138,6 +139,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = [] metadata/_custom_type_script = "uid://dslyrfcej3g2n" @@ -183,6 +185,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = [] metadata/_custom_type_script = "uid://dslyrfcej3g2n" diff --git a/Resources/BossPhases/Rumia_NS2.tres b/Resources/BossPhases/Rumia_NS2.tres index d6622f7a..f3364041 100644 --- a/Resources/BossPhases/Rumia_NS2.tres +++ b/Resources/BossPhases/Rumia_NS2.tres @@ -37,6 +37,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = Array[Object]([SubResource("Resource_cj86d")]) [sub_resource type="Resource" id="Resource_puvpt"] @@ -87,6 +88,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = Array[Object]([SubResource("Resource_pbgtt")]) [sub_resource type="Resource" id="Resource_44j24"] @@ -130,6 +132,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = Array[Object]([SubResource("Resource_cj86d")]) [sub_resource type="Resource" id="Resource_wkxow"] @@ -173,6 +176,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = Array[Object]([SubResource("Resource_pbgtt")]) [sub_resource type="Resource" id="Resource_gcqck"] @@ -216,6 +220,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = Array[Object]([SubResource("Resource_cj86d")]) [sub_resource type="Resource" id="Resource_bxbto"] @@ -259,6 +264,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = Array[Object]([SubResource("Resource_pbgtt")]) [sub_resource type="Resource" id="Resource_q48s1"] @@ -324,6 +330,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = Array[Object]([SubResource("Resource_ln27r"), SubResource("Resource_nal31")]) [sub_resource type="Resource" id="Resource_mpjrl"] @@ -375,6 +382,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = Array[Object]([SubResource("Resource_ln27r"), SubResource("Resource_nal31")]) [sub_resource type="Resource" id="Resource_ncfnl"] @@ -426,6 +434,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = Array[Object]([SubResource("Resource_ln27r"), SubResource("Resource_nal31")]) [sub_resource type="Resource" id="Resource_vkthc"] @@ -477,6 +486,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = Array[Object]([SubResource("Resource_ln27r"), SubResource("Resource_nal31")]) [sub_resource type="Resource" id="Resource_n2gn4"] diff --git a/Resources/BossPhases/Rumia_SP1.tres b/Resources/BossPhases/Rumia_SP1.tres index a90fab64..55bb9bc3 100644 --- a/Resources/BossPhases/Rumia_SP1.tres +++ b/Resources/BossPhases/Rumia_SP1.tres @@ -52,6 +52,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 Modifier = SubResource("Resource_80ngy") TimeModifiers = Array[Object]([]) @@ -104,6 +105,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 Modifier = SubResource("Resource_e6jj0") TimeModifiers = [] diff --git a/Resources/Bullets/Boss/Rumia/LaserBulletTest.tres b/Resources/Bullets/Boss/Rumia/LaserBulletTest.tres index 7c5f2f23..faba85d1 100644 --- a/Resources/Bullets/Boss/Rumia/LaserBulletTest.tres +++ b/Resources/Bullets/Boss/Rumia/LaserBulletTest.tres @@ -25,6 +25,8 @@ BulletScene = ExtResource("1_w3uhv") BulletSpeed = 40.0 Direction = Vector2(1, 0) BulletDamage = 20.0 +MaxDamage = 1.0 +Knockback = 1.0 LifeTime = 20.0 DestroyOnCollision = false Owner = 2 @@ -34,4 +36,5 @@ Controllable = false Freezable = true Grazeable = false GrazeValue = 0.2 +Attributes = 0 TimeModifiers = Array[Object]([SubResource("Resource_3a5dw"), SubResource("Resource_rtncg")]) diff --git a/Resources/Bullets/Boss/Rumia/Rumia_Red_Chase_Bullet.tres b/Resources/Bullets/Boss/Rumia/Rumia_Red_Chase_Bullet.tres index 429a6813..f310dafc 100644 --- a/Resources/Bullets/Boss/Rumia/Rumia_Red_Chase_Bullet.tres +++ b/Resources/Bullets/Boss/Rumia/Rumia_Red_Chase_Bullet.tres @@ -33,5 +33,6 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 0.2 +Attributes = 34 Modifier = SubResource("Resource_jeq72") TimeModifiers = Array[Object]([SubResource("Resource_edsop")]) diff --git a/Resources/Bullets/EmitterTestBullet.tres b/Resources/Bullets/EmitterTestBullet.tres index 47b7c4fd..b6212cc1 100644 --- a/Resources/Bullets/EmitterTestBullet.tres +++ b/Resources/Bullets/EmitterTestBullet.tres @@ -20,4 +20,5 @@ Controllable = false Freezable = true Grazeable = false GrazeValue = 0.2 +Attributes = 2 TimeModifiers = Array[Object]([]) diff --git a/Resources/Bullets/Explosion.tres b/Resources/Bullets/Explosion.tres index 257b79bd..38415e3f 100644 --- a/Resources/Bullets/Explosion.tres +++ b/Resources/Bullets/Explosion.tres @@ -9,11 +9,16 @@ BulletScene = ExtResource("1_bca33") BulletSpeed = 0.0 Direction = Vector2(1, 0) BulletDamage = 8.0 +MaxDamage = 1.0 +Knockback = 1.0 LifeTime = 0.4 DestroyOnCollision = false Owner = 0 DamageType = 4 +RotateSprite = false Controllable = false +Freezable = true Grazeable = false GrazeValue = 1.0 -TimeModifiers = null +Attributes = 16 +TimeModifiers = [] diff --git a/Resources/Bullets/Explosion_Harmless.tres b/Resources/Bullets/Explosion_Harmless.tres index 21b79a59..09cfbd1e 100644 --- a/Resources/Bullets/Explosion_Harmless.tres +++ b/Resources/Bullets/Explosion_Harmless.tres @@ -9,11 +9,16 @@ BulletScene = ExtResource("1_flnsi") BulletSpeed = 0.0 Direction = Vector2(1, 0) BulletDamage = 0.0 +MaxDamage = 1.0 +Knockback = 1.0 LifeTime = 1.0 DestroyOnCollision = false Owner = 0 DamageType = 4 +RotateSprite = false Controllable = false +Freezable = true Grazeable = false GrazeValue = 1.0 -TimeModifiers = null +Attributes = 16 +TimeModifiers = [] diff --git a/Resources/Bullets/Fire_Emitter_Bullet.tres b/Resources/Bullets/Fire_Emitter_Bullet.tres index 84215b5a..804202a5 100644 --- a/Resources/Bullets/Fire_Emitter_Bullet.tres +++ b/Resources/Bullets/Fire_Emitter_Bullet.tres @@ -9,12 +9,17 @@ BulletScene = ExtResource("1_yoaa8") BulletSpeed = 0.0 Direction = Vector2(1, 0) BulletDamage = 10.0 +MaxDamage = 1.0 +Knockback = 1.0 LifeTime = 1.0 DestroyOnCollision = false Owner = 0 DamageType = 2 +RotateSprite = false Controllable = false +Freezable = true Grazeable = false GrazeValue = 0.2 -TimeModifiers = null +Attributes = 16 +TimeModifiers = [] metadata/_custom_type_script = "uid://dslyrfcej3g2n" diff --git a/Resources/Bullets/Reimu_Card_Bullet_Red.tres b/Resources/Bullets/Reimu_Card_Bullet_Red.tres index 7466c480..3969af19 100644 --- a/Resources/Bullets/Reimu_Card_Bullet_Red.tres +++ b/Resources/Bullets/Reimu_Card_Bullet_Red.tres @@ -20,5 +20,6 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 96 TimeModifiers = [] metadata/_custom_type_script = "uid://dslyrfcej3g2n" diff --git a/Resources/Bullets/Spider_Bomb_Bullet.tres b/Resources/Bullets/Spider_Bomb_Bullet.tres index 0a1db120..7123abc8 100644 --- a/Resources/Bullets/Spider_Bomb_Bullet.tres +++ b/Resources/Bullets/Spider_Bomb_Bullet.tres @@ -22,5 +22,6 @@ Controllable = true Freezable = true Grazeable = false GrazeValue = 0.2 +Attributes = 4 TimeModifiers = [] metadata/_custom_type_script = "uid://dslyrfcej3g2n" diff --git a/Resources/Bullets/cheat_bullet.tres b/Resources/Bullets/cheat_bullet.tres index 233c6c40..2909cc00 100644 --- a/Resources/Bullets/cheat_bullet.tres +++ b/Resources/Bullets/cheat_bullet.tres @@ -34,4 +34,5 @@ Controllable = false Freezable = true Grazeable = false GrazeValue = 1.0 +Attributes = 0 TimeModifiers = Array[Object]([SubResource("Resource_26vvh")]) diff --git a/Resources/Bullets/icicle_gun_bullets.tres b/Resources/Bullets/icicle_gun_bullets.tres index a0f60e92..b99535f1 100644 --- a/Resources/Bullets/icicle_gun_bullets.tres +++ b/Resources/Bullets/icicle_gun_bullets.tres @@ -22,4 +22,5 @@ Controllable = false Freezable = true Grazeable = false GrazeValue = 0.2 +Attributes = 0 TimeModifiers = [] diff --git a/Resources/Bullets/player_laser.tres b/Resources/Bullets/player_laser.tres index a2da23d4..b1a7ed59 100644 --- a/Resources/Bullets/player_laser.tres +++ b/Resources/Bullets/player_laser.tres @@ -22,4 +22,5 @@ Controllable = false Freezable = false Grazeable = false GrazeValue = 1.0 +Attributes = 64 TimeModifiers = [] diff --git a/Resources/Bullets/simple_enemy_bullet.tres b/Resources/Bullets/simple_enemy_bullet.tres index 9e0907bd..c99bc806 100644 --- a/Resources/Bullets/simple_enemy_bullet.tres +++ b/Resources/Bullets/simple_enemy_bullet.tres @@ -9,6 +9,8 @@ BulletScene = ExtResource("1_vsj6i") BulletSpeed = 60.0 Direction = Vector2(1, 0) BulletDamage = 12.0 +MaxDamage = 1.0 +Knockback = 1.0 LifeTime = 10.0 DestroyOnCollision = true Owner = 2 @@ -18,4 +20,5 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 34 TimeModifiers = [] diff --git a/Resources/Bullets/simple_enemy_bullet_big.tres b/Resources/Bullets/simple_enemy_bullet_big.tres index b5b0ba4b..115c4f64 100644 --- a/Resources/Bullets/simple_enemy_bullet_big.tres +++ b/Resources/Bullets/simple_enemy_bullet_big.tres @@ -9,6 +9,8 @@ BulletScene = ExtResource("1_qhpt3") BulletSpeed = 70.0 Direction = Vector2(1, 0) BulletDamage = 12.0 +MaxDamage = 1.0 +Knockback = 1.0 LifeTime = 10.0 DestroyOnCollision = true Owner = 2 @@ -18,4 +20,5 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 -TimeModifiers = null +Attributes = 34 +TimeModifiers = [] diff --git a/Resources/Bullets/yin_yang_bullet.tres b/Resources/Bullets/yin_yang_bullet.tres index cada6b6e..baf1ed0a 100644 --- a/Resources/Bullets/yin_yang_bullet.tres +++ b/Resources/Bullets/yin_yang_bullet.tres @@ -34,4 +34,5 @@ Controllable = false Freezable = true Grazeable = false GrazeValue = 1.0 +Attributes = 8 TimeModifiers = Array[Object]([SubResource("Resource_lcgqc")]) diff --git a/Resources/Enemies/Base_Fairy.tres b/Resources/Enemies/Base_Fairy.tres index e486d3da..401c5bc1 100644 --- a/Resources/Enemies/Base_Fairy.tres +++ b/Resources/Enemies/Base_Fairy.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="EnemyResource" load_steps=16 format=3 uid="uid://cocl3qontm3be"] +[gd_resource type="Resource" script_class="EnemyResource" load_steps=17 format=3 uid="uid://cocl3qontm3be"] [ext_resource type="Resource" uid="uid://ct1fa2huvy34n" path="res://Resources/Items/Ammo1.tres" id="1_q1ekm"] [ext_resource type="Texture2D" uid="uid://xgxxdq37pykh" path="res://Sprites/Actors/Fairy.png" id="1_sxbtw"] @@ -9,6 +9,7 @@ [ext_resource type="Resource" uid="uid://clr1gln7nxa1o" path="res://Resources/Items/Power_Pickup.tres" id="6_qvgac"] [ext_resource type="Resource" uid="uid://cdfmedtgp2rcn" path="res://Resources/Weapons/EnemyWeapon.tres" id="7_xkg5o"] [ext_resource type="Script" uid="uid://cd5o0ceb50jki" path="res://Scripts/Resources/EnemyResource.cs" id="8_241b0"] +[ext_resource type="PackedScene" uid="uid://cm1edol8wvxjp" path="res://Scenes/Actors/Generic_Enemy_FSM.tscn" id="8_ppsgt"] [sub_resource type="AtlasTexture" id="AtlasTexture_ppsgt"] atlas = ExtResource("1_sxbtw") @@ -48,7 +49,8 @@ metadata/_custom_type_script = "uid://cq65aed620ijo" script = ExtResource("8_241b0") EnemyName = &"Fairy" EnemyKey = &"FAIRY_BASE" -PrefabPath = &"uid://clieeuln36a7a" +PrefabPath = &"uid://cm1edol8wvxjp" +Prefab = ExtResource("8_ppsgt") MaxHealth = 4.0 MovementSpeed = 30.0 Weapon = ExtResource("7_xkg5o") diff --git a/Resources/Enemies/Base_Fairy_Special.tres b/Resources/Enemies/Base_Fairy_Special.tres index 0e417042..c7ce4471 100644 --- a/Resources/Enemies/Base_Fairy_Special.tres +++ b/Resources/Enemies/Base_Fairy_Special.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="EnemyResource" load_steps=16 format=3 uid="uid://cqfyuurvqb8m6"] +[gd_resource type="Resource" script_class="EnemyResource" load_steps=17 format=3 uid="uid://cqfyuurvqb8m6"] [ext_resource type="Texture2D" uid="uid://callpd48wwnlw" path="res://Sprites/Actors/Fairy_Special.png" id="1_kekqr"] [ext_resource type="Script" uid="uid://cq65aed620ijo" path="res://Scripts/Resources/Loot/LootDrop.cs" id="1_tf7s2"] @@ -9,6 +9,7 @@ [ext_resource type="Resource" uid="uid://clr1gln7nxa1o" path="res://Resources/Items/Power_Pickup.tres" id="6_1cdvd"] [ext_resource type="Resource" uid="uid://d27t8ruig8lie" path="res://Resources/Weapons/EnemyShotgun.tres" id="7_tf7s2"] [ext_resource type="Script" uid="uid://cd5o0ceb50jki" path="res://Scripts/Resources/EnemyResource.cs" id="8_8fxhl"] +[ext_resource type="PackedScene" uid="uid://cm1edol8wvxjp" path="res://Scenes/Actors/Generic_Enemy_FSM.tscn" id="8_c0hok"] [sub_resource type="AtlasTexture" id="AtlasTexture_c0hok"] atlas = ExtResource("1_kekqr") @@ -49,6 +50,7 @@ script = ExtResource("8_8fxhl") EnemyName = &"Special Fairy" EnemyKey = &"FAIRY_BASE_SPECIAL" PrefabPath = &"uid://bq4r28ikbmn0r" +Prefab = ExtResource("8_c0hok") MaxHealth = 12.0 MovementSpeed = 30.0 Weapon = ExtResource("7_tf7s2") diff --git a/Resources/Enemies/Boss_1.tres b/Resources/Enemies/Boss_1.tres index 779d947e..9baf9490 100644 --- a/Resources/Enemies/Boss_1.tres +++ b/Resources/Enemies/Boss_1.tres @@ -1,7 +1,8 @@ -[gd_resource type="Resource" script_class="EnemyResource" load_steps=6 format=3 uid="uid://ng3lpe8ifbsn"] +[gd_resource type="Resource" script_class="EnemyResource" load_steps=7 format=3 uid="uid://ng3lpe8ifbsn"] [ext_resource type="Texture2D" uid="uid://p6cs703f5m3n" path="res://ExternalMaterial/RoboBoss/RoboBoss.png" id="1_bmkgj"] [ext_resource type="Script" uid="uid://cq65aed620ijo" path="res://Scripts/Resources/Loot/LootDrop.cs" id="2_3teuq"] +[ext_resource type="PackedScene" uid="uid://d2xmlov4ee2fc" path="res://Scenes/Actors/Generic_Boss.tscn" id="3_r3p0s"] [ext_resource type="Resource" uid="uid://b54lru8ulinjl" path="res://Resources/Weapons/EnemyWeapon_Big.tres" id="8_w06jt"] [ext_resource type="Script" uid="uid://cd5o0ceb50jki" path="res://Scripts/Resources/EnemyResource.cs" id="9_vykx5"] @@ -14,6 +15,7 @@ script = ExtResource("9_vykx5") EnemyName = &"Boss 1" EnemyKey = &"BOSS_1" PrefabPath = &"uid://clyrne78j3f5a" +Prefab = ExtResource("3_r3p0s") MaxHealth = 100.0 MovementSpeed = 40.0 Weapon = ExtResource("8_w06jt") diff --git a/Resources/Enemies/Fairy_Guard.tres b/Resources/Enemies/Fairy_Guard.tres index e9bdeff2..f851e23d 100644 --- a/Resources/Enemies/Fairy_Guard.tres +++ b/Resources/Enemies/Fairy_Guard.tres @@ -1,6 +1,7 @@ -[gd_resource type="Resource" script_class="EnemyResource" load_steps=16 format=3 uid="uid://qbo6avc7x64b"] +[gd_resource type="Resource" script_class="EnemyResource" load_steps=17 format=3 uid="uid://qbo6avc7x64b"] [ext_resource type="Texture2D" uid="uid://xhwfgbv0fjbr" path="res://Sprites/Actors/FairyGuard.png" id="1_ivudp"] +[ext_resource type="SpriteFrames" uid="uid://ch2ll1on8im2p" path="res://Resources/Sprites/FairyGuard.tres" id="1_n54y5"] [ext_resource type="Script" uid="uid://cd5o0ceb50jki" path="res://Scripts/Resources/EnemyResource.cs" id="1_p31tv"] [ext_resource type="Resource" uid="uid://ct1fa2huvy34n" path="res://Resources/Items/Ammo1.tres" id="1_u7yd8"] [ext_resource type="Script" uid="uid://cq65aed620ijo" path="res://Scripts/Resources/Loot/LootDrop.cs" id="2_ivudp"] @@ -48,7 +49,7 @@ metadata/_custom_type_script = "uid://cq65aed620ijo" script = ExtResource("1_p31tv") EnemyName = &"Fairy Guard" EnemyKey = &"FAIRY_GUARD" -PrefabPath = &"uid://bb32f4p5e671j" +PrefabPath = &"uid://cm1edol8wvxjp" MaxHealth = 10.0 MovementSpeed = 40.0 Weapon = ExtResource("7_u7yd8") @@ -64,4 +65,5 @@ MaxStrafeDistance = 32.0 MinStrafeDistance = 16.0 ResponseTime = 0.5 IconSprite = SubResource("AtlasTexture_n54y5") +AnimationFrames = ExtResource("1_n54y5") metadata/_custom_type_script = "uid://cd5o0ceb50jki" diff --git a/Resources/Enemies/Reimu_Boss.tres b/Resources/Enemies/Reimu_Boss.tres new file mode 100644 index 00000000..484046e1 --- /dev/null +++ b/Resources/Enemies/Reimu_Boss.tres @@ -0,0 +1,59 @@ +[gd_resource type="Resource" script_class="EnemyResource" load_steps=10 format=3 uid="uid://bqdvyxs8sj3qa"] + +[ext_resource type="Script" uid="uid://cq65aed620ijo" path="res://Scripts/Resources/Loot/LootDrop.cs" id="1_0qdnn"] +[ext_resource type="Resource" uid="uid://dlhe7by67eu4v" path="res://Resources/BossPhases/Reimu/Reimu_Boss_Script.tres" id="1_amg33"] +[ext_resource type="Texture2D" uid="uid://bbdrws471xslc" path="res://Sprites/Actors/Rumia-world.png" id="1_gjra5"] +[ext_resource type="Resource" uid="uid://b54lru8ulinjl" path="res://Resources/Weapons/EnemyWeapon_Big.tres" id="2_amg33"] +[ext_resource type="Script" uid="uid://cd5o0ceb50jki" path="res://Scripts/Resources/EnemyResource.cs" id="3_gjra5"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_lukoi"] +atlas = ExtResource("1_gjra5") +region = Rect2(0, 0, 8, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wegsk"] +atlas = ExtResource("1_gjra5") +region = Rect2(8, 0, 8, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a6ruk"] +atlas = ExtResource("1_gjra5") +region = Rect2(16, 0, 8, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_v6t43"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_lukoi") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_wegsk") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_a6ruk") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[resource] +script = ExtResource("3_gjra5") +EnemyName = &"Reimu" +EnemyKey = &"REIMU" +PrefabPath = &"uid://d2xmlov4ee2fc" +MaxHealth = 500.0 +MovementSpeed = 20.0 +Weapon = ExtResource("2_amg33") +LootDrops = Array[ExtResource("1_0qdnn")]([]) +MotivationReward = 4.0 +PredictPlayer = false +PlayerDetectionRange = 90.0 +ViewRange = 120.0 +AlarmReactRange = 0.0 +PlayerDisengageRange = 0.0 +StrafeSpeed = 25.0 +MaxStrafeDistance = 64.0 +MinStrafeDistance = 16.0 +ResponseTime = 0.5 +AnimationFrames = SubResource("SpriteFrames_v6t43") +BossScript = ExtResource("1_amg33") +metadata/_custom_type_script = "uid://cd5o0ceb50jki" diff --git a/Resources/Enemies/Rumia_Boss.tres b/Resources/Enemies/Rumia_Boss.tres new file mode 100644 index 00000000..80c3ce90 --- /dev/null +++ b/Resources/Enemies/Rumia_Boss.tres @@ -0,0 +1,59 @@ +[gd_resource type="Resource" script_class="EnemyResource" load_steps=10 format=3 uid="uid://1jtogtbjk2r5"] + +[ext_resource type="Texture2D" uid="uid://bbdrws471xslc" path="res://Sprites/Actors/Rumia-world.png" id="1_6mall"] +[ext_resource type="Script" uid="uid://cq65aed620ijo" path="res://Scripts/Resources/Loot/LootDrop.cs" id="1_ibtcs"] +[ext_resource type="Resource" uid="uid://d2l607uabv3d6" path="res://Resources/BossPhases/Rumia_Boss_Script.tres" id="1_xjekt"] +[ext_resource type="Resource" uid="uid://b54lru8ulinjl" path="res://Resources/Weapons/EnemyWeapon_Big.tres" id="2_xjekt"] +[ext_resource type="Script" uid="uid://cd5o0ceb50jki" path="res://Scripts/Resources/EnemyResource.cs" id="3_6mall"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_lukoi"] +atlas = ExtResource("1_6mall") +region = Rect2(0, 0, 8, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wegsk"] +atlas = ExtResource("1_6mall") +region = Rect2(8, 0, 8, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a6ruk"] +atlas = ExtResource("1_6mall") +region = Rect2(16, 0, 8, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_v6t43"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_lukoi") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_wegsk") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_a6ruk") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[resource] +script = ExtResource("3_6mall") +EnemyName = &"Rumia" +EnemyKey = &"RUMIA" +PrefabPath = &"uid://d2xmlov4ee2fc" +MaxHealth = 500.0 +MovementSpeed = 20.0 +Weapon = ExtResource("2_xjekt") +LootDrops = Array[ExtResource("1_ibtcs")]([]) +MotivationReward = 4.0 +PredictPlayer = false +PlayerDetectionRange = 90.0 +ViewRange = 120.0 +AlarmReactRange = 0.0 +PlayerDisengageRange = 0.0 +StrafeSpeed = 25.0 +MaxStrafeDistance = 64.0 +MinStrafeDistance = 16.0 +ResponseTime = 0.5 +AnimationFrames = SubResource("SpriteFrames_v6t43") +BossScript = ExtResource("1_xjekt") +metadata/_custom_type_script = "uid://cd5o0ceb50jki" diff --git a/Resources/Patterns/rumia_ns_2.tres b/Resources/Patterns/rumia_ns_2.tres index 3768d6d5..56c773a9 100644 --- a/Resources/Patterns/rumia_ns_2.tres +++ b/Resources/Patterns/rumia_ns_2.tres @@ -24,6 +24,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = [] [sub_resource type="Resource" id="Resource_ne4q3"] @@ -67,6 +68,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = [] [sub_resource type="Resource" id="Resource_kohuh"] @@ -110,6 +112,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = [] [sub_resource type="Resource" id="Resource_depjj"] diff --git a/Resources/Weapons/Enemy/TurretWeapon.tres b/Resources/Weapons/Enemy/TurretWeapon.tres index 64f83825..585f0276 100644 --- a/Resources/Weapons/Enemy/TurretWeapon.tres +++ b/Resources/Weapons/Enemy/TurretWeapon.tres @@ -27,6 +27,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 Modifier = SubResource("Resource_ktwe0") TimeModifiers = Array[Object]([]) metadata/_custom_type_script = "uid://dslyrfcej3g2n" diff --git a/Scenes/Actors/Generic_Boss.tscn b/Scenes/Actors/Generic_Boss.tscn new file mode 100644 index 00000000..60794f9d --- /dev/null +++ b/Scenes/Actors/Generic_Boss.tscn @@ -0,0 +1,274 @@ +[gd_scene load_steps=45 format=3 uid="uid://d2xmlov4ee2fc"] + +[ext_resource type="Script" uid="uid://bi2edpdosngll" path="res://Scripts/Components/FSM/Enemy/EnemyFSMProxy.cs" id="1_c4gmu"] +[ext_resource type="Resource" uid="uid://bqdvyxs8sj3qa" path="res://Resources/Enemies/Reimu_Boss.tres" id="2_glyek"] +[ext_resource type="Script" uid="uid://dn6dbog1s2818" path="res://Scripts/Components/FSM/Enemy/EnemyStateMachine.cs" id="5_5ay45"] +[ext_resource type="Script" uid="uid://rrelumir3g6n" path="res://Scripts/Components/FSM/Enemy/Init.cs" id="6_m4swb"] +[ext_resource type="Script" uid="uid://cprumccndvblc" path="res://Scripts/Components/FSM/Boss/Idle.cs" id="7_6x5ge"] +[ext_resource type="Script" uid="uid://dbmc3klko5x18" path="res://Scripts/Components/FSM/Enemy/Alert.cs" id="8_yc20b"] +[ext_resource type="Script" uid="uid://difn6d5np1pui" path="res://Scripts/Components/FSM/Boss/Shooting.cs" id="9_afh63"] +[ext_resource type="Resource" uid="uid://dlhe7by67eu4v" path="res://Resources/BossPhases/Reimu/Reimu_Boss_Script.tres" id="10_3f6i0"] +[ext_resource type="Script" uid="uid://4hwtlc1ftjsc" path="res://Scripts/Components/FSM/Enemy/Dead.cs" id="11_t2767"] +[ext_resource type="Script" uid="uid://dj37rup1ibnn6" path="res://Scripts/Components/FSM/Enemy/Controlled.cs" id="12_4svw5"] +[ext_resource type="Texture2D" uid="uid://bbdrws471xslc" path="res://Sprites/Actors/Rumia-world.png" id="13_xltp3"] +[ext_resource type="Script" uid="uid://dathhlufbe6gr" path="res://Scripts/Components/FSM/Enemy/EnemyFSMAnimatedSprite.cs" id="14_p6xck"] +[ext_resource type="Script" uid="uid://mb4ugq74a17c" path="res://Scripts/Components/FSM/Enemy/PlayerDetectionModule.cs" id="15_dueum"] +[ext_resource type="Script" uid="uid://bflvr26h52c55" path="res://Scripts/Components/FSM/Enemy/EnemyStorageModule.cs" id="16_xyblu"] +[ext_resource type="Script" uid="uid://cq3hkweplldbr" path="res://Scripts/Components/Actors/GenericDamageReceiver.cs" id="17_afda6"] +[ext_resource type="PackedScene" uid="uid://cm564ue740cpx" path="res://Scenes/Actors/DeadFairyGuard.tscn" id="18_ptfne"] +[ext_resource type="Script" uid="uid://cqwvssstkrdmw" path="res://Scripts/Components/Actors/ActorResourceProvider.cs" id="19_q036b"] +[ext_resource type="Script" uid="uid://ik7s65de723k" path="res://Scripts/Components/FSM/Enemy/NavigationMovementModule.cs" id="20_yquox"] +[ext_resource type="PackedScene" uid="uid://cj63k0dmk7tl1" path="res://Scenes/Weapons/enemy_weapon_base.tscn" id="21_f5ifd"] +[ext_resource type="Resource" uid="uid://csdlihliv4cr8" path="res://Resources/Weapons/EnemyWeapon_simple.tres" id="22_7xl5u"] +[ext_resource type="Script" uid="uid://dhsqsajq537qn" path="res://Scripts/Components/FSM/Enemy/EnemyAlarmModule.cs" id="23_2tfq0"] +[ext_resource type="Script" uid="uid://bo5sgbv1t8ril" path="res://Scripts/Components/Actors/PlayerAnimationProvider.cs" id="24_1mfov"] +[ext_resource type="Material" uid="uid://dnvwgyt2tbqmr" path="res://Resources/Materials/Player_Blink_Teleport_Material.tres" id="25_7jo7s"] +[ext_resource type="Script" uid="uid://dncdgq843sj2f" path="res://Scripts/Components/FSM/Enemy/AnimationModule.cs" id="26_bta7h"] +[ext_resource type="Script" uid="uid://bw4t2clyr6lib" path="res://Scripts/Components/FSM/Enemy/EnemyDropsProvider.cs" id="27_50307"] +[ext_resource type="Texture2D" uid="uid://b2v6j7lsyltrc" path="res://Sprites/Actors/CirnoWings.png" id="28_e4y58"] +[ext_resource type="Script" uid="uid://dq338w2lw5phl" path="res://Scripts/Components/Actors/KeyboardInputProvider.cs" id="29_drs60"] +[ext_resource type="Script" uid="uid://d208gvthkstvc" path="res://Scripts/Components/Actors/PlayerCrosshairProvider.cs" id="30_vipg1"] +[ext_resource type="Texture2D" uid="uid://cf2855sd3hqty" path="res://Sprites/Actors/Aiming_Reticule_Small.png" id="31_o8tp4"] +[ext_resource type="Script" uid="uid://c2mngevyoefky" path="res://Scripts/Components/FSM/Boss/BossScriptHostModule.cs" id="32_vhb3d"] +[ext_resource type="Script" uid="uid://c6467d6yx50qh" path="res://Scripts/Components/BulletSpawner.cs" id="33_a65yl"] +[ext_resource type="PackedScene" uid="uid://cuixq5ex0j40h" path="res://Scenes/enemyBullet.tscn" id="34_vm1xw"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_pnkma"] +radius = 23.0217 + +[sub_resource type="AtlasTexture" id="AtlasTexture_lukoi"] +atlas = ExtResource("13_xltp3") +region = Rect2(0, 0, 8, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wegsk"] +atlas = ExtResource("13_xltp3") +region = Rect2(8, 0, 8, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a6ruk"] +atlas = ExtResource("13_xltp3") +region = Rect2(16, 0, 8, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_v6t43"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_lukoi") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_wegsk") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_a6ruk") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_5wstg"] +radius = 92.0054 + +[sub_resource type="CircleShape2D" id="CircleShape2D_6x22m"] +radius = 24.0156 + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_poxpj"] +particle_flag_disable_z = true +emission_shape = 2 +emission_sphere_radius = 16.0 +orbit_velocity_min = -1.0 +orbit_velocity_max = 1.098 +gravity = Vector3(0, 0, 0) +color = Color(0.0392157, 0.380392, 1, 1) + +[sub_resource type="AtlasTexture" id="AtlasTexture_urwql"] +atlas = ExtResource("28_e4y58") +region = Rect2(0, 0, 16, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_wafqr"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_urwql") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[sub_resource type="AtlasTexture" id="AtlasTexture_12erk"] +atlas = ExtResource("31_o8tp4") +region = Rect2(0, 0, 16, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_biwfl"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_12erk") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[node name="Boss" type="CharacterBody2D" node_paths=PackedStringArray("EnemyFSM")] +collision_layer = 16 +collision_mask = 33 +script = ExtResource("1_c4gmu") +EnemyFSM = NodePath("StateMachine") +EnemyResource = ExtResource("2_glyek") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_pnkma") + +[node name="StateMachine" type="Node2D" parent="."] +script = ExtResource("5_5ay45") + +[node name="Init" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("DamageReceiver", "StorageModule")] +script = ExtResource("6_m4swb") +DamageReceiver = NodePath("../../DamageReceiver") +StorageModule = NodePath("../../Storage") + +[node name="Idle" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("StorageModule", "DamageReceiver", "_moduleNodes")] +script = ExtResource("7_6x5ge") +StorageModule = NodePath("../../Storage") +DamageReceiver = NodePath("../../DamageReceiver") +_moduleNodes = [NodePath("../../AnimationModule")] + +[node name="Alert" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("StorageModule", "PlayerDetection", "DamageReceiver", "NavigationModule", "_moduleNodes")] +script = ExtResource("8_yc20b") +StorageModule = NodePath("../../Storage") +PlayerDetection = NodePath("../../PlayerDetection") +DamageReceiver = NodePath("../../DamageReceiver") +NavigationModule = NodePath("../../NavigationModule") +_moduleNodes = [NodePath("../../AnimationModule")] + +[node name="Shooting" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("DamageReceiver", "EquippedWeapon", "StorageModule", "BossScriptHostModule", "_moduleNodes")] +script = ExtResource("9_afh63") +DamageReceiver = NodePath("../../DamageReceiver") +EquippedWeapon = NodePath("../../EnemyWeapon") +StorageModule = NodePath("../../Storage") +BossScriptHostModule = NodePath("../../ScriptHostModule") +BossScript = ExtResource("10_3f6i0") +_moduleNodes = [NodePath("../../AnimationModule"), NodePath("../../ScriptHostModule")] + +[node name="Dead" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("StorageModule", "DropsProvider")] +script = ExtResource("11_t2767") +StorageModule = NodePath("../../Storage") +DropsProvider = NodePath("../../DropsProvider") + +[node name="Controlled" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("StorageModule", "DamageReceiver", "_inputProvider", "CrosshairProvider", "EquippedWeapon", "_moduleNodes")] +script = ExtResource("12_4svw5") +StorageModule = NodePath("../../Storage") +DamageReceiver = NodePath("../../DamageReceiver") +_inputProvider = NodePath("../../InputProvider") +CrosshairProvider = NodePath("../../CrosshairProvider") +EquippedWeapon = NodePath("../../EnemyWeapon") +_moduleNodes = [NodePath("../../AnimationModule")] + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +sprite_frames = SubResource("SpriteFrames_v6t43") +script = ExtResource("14_p6xck") + +[node name="PlayerDetection" type="Area2D" parent="."] +visible = false +collision_layer = 0 +collision_mask = 2 +script = ExtResource("15_dueum") +ObstaclesCollisionMask = 81 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="PlayerDetection"] +shape = SubResource("CircleShape2D_5wstg") + +[node name="Storage" type="Node2D" parent="." node_paths=PackedStringArray("Root")] +script = ExtResource("16_xyblu") +Root = NodePath("..") + +[node name="DamageReceiver" type="Area2D" parent="." node_paths=PackedStringArray("HealthProvider")] +collision_layer = 64 +collision_mask = 136 +script = ExtResource("17_afda6") +HealthProvider = NodePath("Health") +BulletGroup = 2 +Debris = ExtResource("18_ptfne") +DeleteParentOnDeath = false + +[node name="CollisionShape2D" type="CollisionShape2D" parent="DamageReceiver"] +position = Vector2(0, 3.865) +shape = SubResource("CircleShape2D_6x22m") + +[node name="Health" type="Node2D" parent="DamageReceiver"] +script = ExtResource("19_q036b") +ResourceName = "Health" + +[node name="NavigationModule" type="Node2D" parent="." node_paths=PackedStringArray("StorageModule")] +script = ExtResource("20_yquox") +StorageModule = NodePath("../Storage") + +[node name="NavigationAgent2D" type="NavigationAgent2D" parent="NavigationModule"] +target_desired_distance = 8.0 +path_max_distance = 800.0 +path_postprocessing = 1 +avoidance_enabled = true +debug_path_custom_color = Color(1, 0, 0, 1) + +[node name="EnemyWeapon" parent="." instance=ExtResource("21_f5ifd")] +WeaponData = ExtResource("22_7xl5u") + +[node name="AlarmModule" type="Node2D" parent="." node_paths=PackedStringArray("PlayerDetection")] +script = ExtResource("23_2tfq0") +PlayerDetection = NodePath("../PlayerDetection") + +[node name="AnimationProvider" type="Node2D" parent="." node_paths=PackedStringArray("_animatedSprite", "_shieldParticles")] +script = ExtResource("24_1mfov") +_animatedSprite = NodePath("../AnimatedSprite2D") +_shieldParticles = NodePath("ShieldParticles") +WalkRightAnimationName = &"right" +WalkLeftAnimationName = &"left" +WalkDownAnimationName = &"down" +WalkUpAnimationName = &"up" +BlinkMaterial = ExtResource("25_7jo7s") + +[node name="ShieldParticles" type="GPUParticles2D" parent="AnimationProvider"] +emitting = false +amount = 32 +lifetime = 0.4 +one_shot = true +process_material = SubResource("ParticleProcessMaterial_poxpj") + +[node name="AnimationModule" type="Node2D" parent="." node_paths=PackedStringArray("AnimationProvider", "StorageModule")] +script = ExtResource("26_bta7h") +AnimationProvider = NodePath("../AnimationProvider") +StorageModule = NodePath("../Storage") + +[node name="DropsProvider" type="Node2D" parent="." node_paths=PackedStringArray("StorageModule")] +script = ExtResource("27_50307") +StorageModule = NodePath("../Storage") + +[node name="PossessionWings" type="AnimatedSprite2D" parent="."] +visible = false +sprite_frames = SubResource("SpriteFrames_wafqr") + +[node name="InputProvider" type="Node2D" parent="."] +script = ExtResource("29_drs60") + +[node name="CrosshairProvider" type="Node2D" parent="." node_paths=PackedStringArray("AnimatedSprite")] +visible = false +script = ExtResource("30_vipg1") +AnimatedSprite = NodePath("Crosshair") +CrosshairDistance = 35.0 + +[node name="Crosshair" type="AnimatedSprite2D" parent="CrosshairProvider"] +sprite_frames = SubResource("SpriteFrames_biwfl") + +[node name="ScriptHostModule" type="Node2D" parent="." node_paths=PackedStringArray("StorageModule")] +script = ExtResource("32_vhb3d") +StorageModule = NodePath("../Storage") + +[node name="BulletSpawner" type="Node2D" parent="ScriptHostModule"] +script = ExtResource("33_a65yl") +BulletScene = ExtResource("34_vm1xw") + +[connection signal="area_entered" from="PlayerDetection" to="PlayerDetection" method="_on_area_entered"] +[connection signal="area_exited" from="PlayerDetection" to="PlayerDetection" method="_on_area_exited"] +[connection signal="area_entered" from="DamageReceiver" to="DamageReceiver" method="_on_damage_hitbox_area_entered"] +[connection signal="velocity_computed" from="NavigationModule/NavigationAgent2D" to="NavigationModule" method="_on_navigation_agent_2d_velocity_computed"] diff --git a/Scenes/Actors/Generic_Enemy_FSM.tscn b/Scenes/Actors/Generic_Enemy_FSM.tscn new file mode 100644 index 00000000..1bffa135 --- /dev/null +++ b/Scenes/Actors/Generic_Enemy_FSM.tscn @@ -0,0 +1,239 @@ +[gd_scene load_steps=38 format=3 uid="uid://cm1edol8wvxjp"] + +[ext_resource type="Script" uid="uid://bi2edpdosngll" path="res://Scripts/Components/FSM/Enemy/EnemyFSMProxy.cs" id="1_tao0j"] +[ext_resource type="Resource" uid="uid://qbo6avc7x64b" path="res://Resources/Enemies/Fairy_Guard.tres" id="2_hcd4s"] +[ext_resource type="Script" uid="uid://dn6dbog1s2818" path="res://Scripts/Components/FSM/Enemy/EnemyStateMachine.cs" id="3_7aslx"] +[ext_resource type="Script" uid="uid://rrelumir3g6n" path="res://Scripts/Components/FSM/Enemy/Init.cs" id="4_kvine"] +[ext_resource type="Script" uid="uid://bjrh5q24nuoec" path="res://Scripts/Components/FSM/Enemy/Idle.cs" id="5_i2lcq"] +[ext_resource type="Script" uid="uid://dbmc3klko5x18" path="res://Scripts/Components/FSM/Enemy/Alert.cs" id="6_7k6o5"] +[ext_resource type="Script" uid="uid://7mig30eneu8x" path="res://Scripts/Components/FSM/Enemy/Shooting.cs" id="7_3q5aq"] +[ext_resource type="Script" uid="uid://4hwtlc1ftjsc" path="res://Scripts/Components/FSM/Enemy/Dead.cs" id="8_yyxln"] +[ext_resource type="Script" uid="uid://dj37rup1ibnn6" path="res://Scripts/Components/FSM/Enemy/Controlled.cs" id="9_7h4b6"] +[ext_resource type="SpriteFrames" uid="uid://ch2ll1on8im2p" path="res://Resources/Sprites/FairyGuard.tres" id="10_w7hi2"] +[ext_resource type="Script" uid="uid://mb4ugq74a17c" path="res://Scripts/Components/FSM/Enemy/PlayerDetectionModule.cs" id="11_go0pp"] +[ext_resource type="Script" uid="uid://dathhlufbe6gr" path="res://Scripts/Components/FSM/Enemy/EnemyFSMAnimatedSprite.cs" id="11_hcd4s"] +[ext_resource type="Script" uid="uid://bflvr26h52c55" path="res://Scripts/Components/FSM/Enemy/EnemyStorageModule.cs" id="12_sd60t"] +[ext_resource type="Script" uid="uid://cq3hkweplldbr" path="res://Scripts/Components/Actors/GenericDamageReceiver.cs" id="13_f8y0l"] +[ext_resource type="PackedScene" uid="uid://cm564ue740cpx" path="res://Scenes/Actors/DeadFairyGuard.tscn" id="14_5fbry"] +[ext_resource type="Script" uid="uid://cqwvssstkrdmw" path="res://Scripts/Components/Actors/ActorResourceProvider.cs" id="15_1tcjf"] +[ext_resource type="Script" uid="uid://ik7s65de723k" path="res://Scripts/Components/FSM/Enemy/NavigationMovementModule.cs" id="16_bpjio"] +[ext_resource type="PackedScene" uid="uid://cj63k0dmk7tl1" path="res://Scenes/Weapons/enemy_weapon_base.tscn" id="17_r8s15"] +[ext_resource type="Resource" uid="uid://csdlihliv4cr8" path="res://Resources/Weapons/EnemyWeapon_simple.tres" id="18_hgqoq"] +[ext_resource type="Script" uid="uid://dhsqsajq537qn" path="res://Scripts/Components/FSM/Enemy/EnemyAlarmModule.cs" id="19_rkhkm"] +[ext_resource type="Script" uid="uid://bo5sgbv1t8ril" path="res://Scripts/Components/Actors/PlayerAnimationProvider.cs" id="20_h5uc0"] +[ext_resource type="Material" uid="uid://dnvwgyt2tbqmr" path="res://Resources/Materials/Player_Blink_Teleport_Material.tres" id="21_wuf7p"] +[ext_resource type="Script" uid="uid://dncdgq843sj2f" path="res://Scripts/Components/FSM/Enemy/AnimationModule.cs" id="22_sh6bv"] +[ext_resource type="Script" uid="uid://bw4t2clyr6lib" path="res://Scripts/Components/FSM/Enemy/EnemyDropsProvider.cs" id="23_v2y61"] +[ext_resource type="Texture2D" uid="uid://b2v6j7lsyltrc" path="res://Sprites/Actors/CirnoWings.png" id="24_8r23r"] +[ext_resource type="Script" uid="uid://dq338w2lw5phl" path="res://Scripts/Components/Actors/KeyboardInputProvider.cs" id="25_nwo8y"] +[ext_resource type="Script" uid="uid://d208gvthkstvc" path="res://Scripts/Components/Actors/PlayerCrosshairProvider.cs" id="26_kedky"] +[ext_resource type="Texture2D" uid="uid://cf2855sd3hqty" path="res://Sprites/Actors/Aiming_Reticule_Small.png" id="27_bfvsw"] +[ext_resource type="Script" uid="uid://by1w0oo6nguyv" path="res://Scripts/Components/FSM/Enemy/EnemyKnockbackProvider.cs" id="28_tdhrj"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_pnkma"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_5wstg"] +radius = 29.0 + +[sub_resource type="CircleShape2D" id="CircleShape2D_6x22m"] +radius = 5.0 + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_poxpj"] +particle_flag_disable_z = true +emission_shape = 2 +emission_sphere_radius = 16.0 +orbit_velocity_min = -1.0 +orbit_velocity_max = 1.098 +gravity = Vector3(0, 0, 0) +color = Color(0.0392157, 0.380392, 1, 1) + +[sub_resource type="AtlasTexture" id="AtlasTexture_urwql"] +atlas = ExtResource("24_8r23r") +region = Rect2(0, 0, 16, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_wafqr"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_urwql") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[sub_resource type="AtlasTexture" id="AtlasTexture_12erk"] +atlas = ExtResource("27_bfvsw") +region = Rect2(0, 0, 16, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_biwfl"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_12erk") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[node name="FairyGuardFsm" type="CharacterBody2D" node_paths=PackedStringArray("EnemyFSM")] +collision_layer = 16 +collision_mask = 33 +script = ExtResource("1_tao0j") +EnemyFSM = NodePath("StateMachine") +EnemyResource = ExtResource("2_hcd4s") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("CircleShape2D_pnkma") + +[node name="StateMachine" type="Node2D" parent="."] +script = ExtResource("3_7aslx") + +[node name="Init" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("DamageReceiver", "StorageModule")] +script = ExtResource("4_kvine") +DamageReceiver = NodePath("../../DamageReceiver") +StorageModule = NodePath("../../Storage") + +[node name="Idle" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("StorageModule", "PlayerDetection", "DamageReceiver", "_moduleNodes")] +script = ExtResource("5_i2lcq") +StorageModule = NodePath("../../Storage") +PlayerDetection = NodePath("../../PlayerDetection") +DamageReceiver = NodePath("../../DamageReceiver") +_moduleNodes = [NodePath("../../AlarmModule"), NodePath("../../AnimationModule"), NodePath("../../Knockbackprovider")] + +[node name="Alert" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("StorageModule", "PlayerDetection", "DamageReceiver", "NavigationModule", "_moduleNodes")] +script = ExtResource("6_7k6o5") +StorageModule = NodePath("../../Storage") +PlayerDetection = NodePath("../../PlayerDetection") +DamageReceiver = NodePath("../../DamageReceiver") +NavigationModule = NodePath("../../NavigationModule") +_moduleNodes = [NodePath("../../AnimationModule"), NodePath("../../Knockbackprovider")] + +[node name="Shooting" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("StorageModule", "PlayerDetection", "DamageReceiver", "NavigationModule", "EquippedWeapon", "_moduleNodes")] +script = ExtResource("7_3q5aq") +StorageModule = NodePath("../../Storage") +PlayerDetection = NodePath("../../PlayerDetection") +DamageReceiver = NodePath("../../DamageReceiver") +NavigationModule = NodePath("../../NavigationModule") +EquippedWeapon = NodePath("../../EnemyWeapon") +_moduleNodes = [NodePath("../../AnimationModule"), NodePath("../../Knockbackprovider")] + +[node name="Dead" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("StorageModule", "DropsProvider")] +script = ExtResource("8_yyxln") +StorageModule = NodePath("../../Storage") +DropsProvider = NodePath("../../DropsProvider") + +[node name="Controlled" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("StorageModule", "DamageReceiver", "_inputProvider", "CrosshairProvider", "EquippedWeapon", "_moduleNodes")] +script = ExtResource("9_7h4b6") +StorageModule = NodePath("../../Storage") +DamageReceiver = NodePath("../../DamageReceiver") +_inputProvider = NodePath("../../InputProvider") +CrosshairProvider = NodePath("../../CrosshairProvider") +EquippedWeapon = NodePath("../../EnemyWeapon") +_moduleNodes = [NodePath("../../AnimationModule")] + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +sprite_frames = ExtResource("10_w7hi2") +animation = &"down" +script = ExtResource("11_hcd4s") + +[node name="PlayerDetection" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 2 +script = ExtResource("11_go0pp") +ObstaclesCollisionMask = 81 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="PlayerDetection"] +shape = SubResource("CircleShape2D_5wstg") + +[node name="Storage" type="Node2D" parent="." node_paths=PackedStringArray("Root")] +script = ExtResource("12_sd60t") +Root = NodePath("..") + +[node name="DamageReceiver" type="Area2D" parent="." node_paths=PackedStringArray("HealthProvider")] +collision_layer = 64 +collision_mask = 136 +script = ExtResource("13_f8y0l") +HealthProvider = NodePath("Health") +BulletGroup = 2 +Debris = ExtResource("14_5fbry") +DeleteParentOnDeath = false + +[node name="CollisionShape2D" type="CollisionShape2D" parent="DamageReceiver"] +position = Vector2(0, 3.865) +shape = SubResource("CircleShape2D_6x22m") + +[node name="Health" type="Node2D" parent="DamageReceiver"] +script = ExtResource("15_1tcjf") +ResourceName = "Health" + +[node name="NavigationModule" type="Node2D" parent="." node_paths=PackedStringArray("StorageModule")] +script = ExtResource("16_bpjio") +StorageModule = NodePath("../Storage") + +[node name="NavigationAgent2D" type="NavigationAgent2D" parent="NavigationModule"] +target_desired_distance = 8.0 +path_max_distance = 800.0 +path_postprocessing = 1 +avoidance_enabled = true +debug_path_custom_color = Color(1, 0, 0, 1) + +[node name="EnemyWeapon" parent="." instance=ExtResource("17_r8s15")] +WeaponData = ExtResource("18_hgqoq") + +[node name="AlarmModule" type="Node2D" parent="." node_paths=PackedStringArray("PlayerDetection")] +script = ExtResource("19_rkhkm") +PlayerDetection = NodePath("../PlayerDetection") + +[node name="AnimationProvider" type="Node2D" parent="." node_paths=PackedStringArray("_animatedSprite", "_shieldParticles")] +script = ExtResource("20_h5uc0") +_animatedSprite = NodePath("../AnimatedSprite2D") +_shieldParticles = NodePath("ShieldParticles") +WalkRightAnimationName = &"right" +WalkLeftAnimationName = &"left" +WalkDownAnimationName = &"down" +WalkUpAnimationName = &"up" +BlinkMaterial = ExtResource("21_wuf7p") + +[node name="ShieldParticles" type="GPUParticles2D" parent="AnimationProvider"] +emitting = false +amount = 32 +lifetime = 0.4 +one_shot = true +process_material = SubResource("ParticleProcessMaterial_poxpj") + +[node name="AnimationModule" type="Node2D" parent="." node_paths=PackedStringArray("AnimationProvider", "StorageModule", "HealthProvider")] +script = ExtResource("22_sh6bv") +AnimationProvider = NodePath("../AnimationProvider") +StorageModule = NodePath("../Storage") +HealthProvider = NodePath("../DamageReceiver/Health") + +[node name="DropsProvider" type="Node2D" parent="." node_paths=PackedStringArray("StorageModule")] +script = ExtResource("23_v2y61") +StorageModule = NodePath("../Storage") + +[node name="PossessionWings" type="AnimatedSprite2D" parent="."] +visible = false +sprite_frames = SubResource("SpriteFrames_wafqr") + +[node name="InputProvider" type="Node2D" parent="."] +script = ExtResource("25_nwo8y") + +[node name="CrosshairProvider" type="Node2D" parent="." node_paths=PackedStringArray("AnimatedSprite")] +script = ExtResource("26_kedky") +AnimatedSprite = NodePath("Crosshair") +CrosshairDistance = 35.0 + +[node name="Crosshair" type="AnimatedSprite2D" parent="CrosshairProvider"] +sprite_frames = SubResource("SpriteFrames_biwfl") + +[node name="Knockbackprovider" type="Node2D" parent="." node_paths=PackedStringArray("DamageReceiver", "StorageModule")] +script = ExtResource("28_tdhrj") +DamageReceiver = NodePath("../DamageReceiver") +StorageModule = NodePath("../Storage") + +[connection signal="area_entered" from="PlayerDetection" to="PlayerDetection" method="_on_area_entered"] +[connection signal="area_exited" from="PlayerDetection" to="PlayerDetection" method="_on_area_exited"] +[connection signal="area_entered" from="DamageReceiver" to="DamageReceiver" method="_on_damage_hitbox_area_entered"] +[connection signal="velocity_computed" from="NavigationModule/NavigationAgent2D" to="NavigationModule" method="_on_navigation_agent_2d_velocity_computed"] diff --git a/Scenes/Actors/Reimu_Boss.tscn b/Scenes/Actors/Reimu_Boss.tscn index 741ce9dd..6941c711 100644 --- a/Scenes/Actors/Reimu_Boss.tscn +++ b/Scenes/Actors/Reimu_Boss.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=47 format=3 uid="uid://culg3euj7mdv3"] +[gd_scene load_steps=48 format=3 uid="uid://culg3euj7mdv3"] [ext_resource type="Script" uid="uid://bi2edpdosngll" path="res://Scripts/Components/FSM/Enemy/EnemyFSMProxy.cs" id="1_0gxmm"] [ext_resource type="Script" uid="uid://cq65aed620ijo" path="res://Scripts/Resources/Loot/LootDrop.cs" id="2_wegsk"] @@ -16,6 +16,7 @@ [ext_resource type="Script" uid="uid://mb4ugq74a17c" path="res://Scripts/Components/FSM/Enemy/PlayerDetectionModule.cs" id="12_ip1so"] [ext_resource type="Script" uid="uid://bflvr26h52c55" path="res://Scripts/Components/FSM/Enemy/EnemyStorageModule.cs" id="13_7ebnx"] [ext_resource type="Script" uid="uid://cq3hkweplldbr" path="res://Scripts/Components/Actors/GenericDamageReceiver.cs" id="14_7d52v"] +[ext_resource type="Script" uid="uid://dathhlufbe6gr" path="res://Scripts/Components/FSM/Enemy/EnemyFSMAnimatedSprite.cs" id="14_a6ruk"] [ext_resource type="PackedScene" uid="uid://cm564ue740cpx" path="res://Scenes/Actors/DeadFairyGuard.tscn" id="15_8sayc"] [ext_resource type="Script" uid="uid://cqwvssstkrdmw" path="res://Scripts/Components/Actors/ActorResourceProvider.cs" id="16_xnpg3"] [ext_resource type="Script" uid="uid://ik7s65de723k" path="res://Scripts/Components/FSM/Enemy/NavigationMovementModule.cs" id="17_tmqpi"] @@ -189,6 +190,7 @@ _moduleNodes = [NodePath("../../AnimationModule")] [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] sprite_frames = SubResource("SpriteFrames_v6t43") +script = ExtResource("14_a6ruk") [node name="PlayerDetection" type="Area2D" parent="."] visible = false diff --git a/Scenes/Maps/PlayerFSMTest.tscn b/Scenes/Maps/PlayerFSMTest.tscn index d681cc8d..9fded423 100644 --- a/Scenes/Maps/PlayerFSMTest.tscn +++ b/Scenes/Maps/PlayerFSMTest.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=133 format=4 uid="uid://dqyfnby0t7gu1"] +[gd_scene load_steps=127 format=4 uid="uid://dqyfnby0t7gu1"] [ext_resource type="Script" uid="uid://doxmbokehw8ci" path="res://Scripts/GameManager.cs" id="1_c3v4x"] [ext_resource type="Script" uid="uid://epnwjptvks3t" path="res://Scripts/Resources/LootItem.cs" id="2_g20dv"] @@ -71,9 +71,7 @@ [ext_resource type="PackedScene" uid="uid://du37oyues6klq" path="res://Scenes/Weapons/BaseAutonomousBulletEmitter.tscn" id="56_amdeb"] [ext_resource type="PackedScene" uid="uid://iooa4gqy2uu2" path="res://Scenes/Items/Nuclear_Gun_Pickup.tscn" id="56_iv5wi"] [ext_resource type="Script" uid="uid://rqtkxuqmo7gi" path="res://Scripts/Resources/ScriptableBullets/ParallelPatternGroup.cs" id="56_vto58"] -[ext_resource type="Resource" uid="uid://bpc2kyft8q2qq" path="res://Resources/Bullets/simple_enemy_bullet_big.tres" id="57_0e6ic"] [ext_resource type="Script" uid="uid://ca6atry8iniub" path="res://Scripts/AttackPatterns/CreateEmitterPattern.cs" id="58_6khjs"] -[ext_resource type="Script" uid="uid://bgwt0pml2omnf" path="res://Scripts/AttackPatterns/NodeMovementPattern.cs" id="58_rgw1q"] [ext_resource type="PackedScene" uid="uid://ey71mxa5ocpn" path="res://Scenes/Items/Shield_Extend_Pickup.tscn" id="60_bjd5y"] [ext_resource type="PackedScene" uid="uid://ck6f08w1fy5fa" path="res://Scenes/Weapons/Bullets/enemyBullet_rice_yellow.tscn" id="60_rgw1q"] [ext_resource type="Script" uid="uid://dslyrfcej3g2n" path="res://Scripts/Resources/BulletResource.cs" id="61_g20dv"] @@ -88,7 +86,7 @@ script = ExtResource("4_u1i8n") EggIndex = 0 StartingEquipment = Array[ExtResource("2_g20dv")]([ExtResource("3_6314l")]) -RemoveEquipment = Array[ExtResource("2_g20dv")]([]) +RemoveEquipment = [] metadata/_custom_type_script = "uid://mja0rk7n2kln" [sub_resource type="Resource" id="Resource_1tvdd"] @@ -290,63 +288,18 @@ script = ExtResource("39_83jc5") Patterns = Array[Object]([SubResource("Resource_4mkc6")]) metadata/_custom_type_script = "uid://bngko08ho85p6" -[sub_resource type="Resource" id="Resource_g20dv"] -script = ExtResource("58_rgw1q") -relativeTargetPosition = Vector2(60, 0) -moveDuration = 2.0 -EaseType = 0 -WaitForCompletion = false -metadata/_custom_type_script = "uid://bgwt0pml2omnf" - -[sub_resource type="Resource" id="Resource_tf3yy"] -script = ExtResource("40_o56je") -BulletResource = ExtResource("57_0e6ic") -EmitterOffset = Vector2(0, 0) -bulletCount = 16 -rotationSpeed = 0.0 -_rotationOffset = 0.0 -duration = 3.0 -spread = 360.0 -burstInterval = 0.5 -ShotsPerBurst = 100 -BurstRate = 0.0 -_targetPlayer = false -_predictPlayer = false -OverrideOwner = false -Owner = 0 -OverrideDamageType = false -DamageType = 0 -OverrideControllable = false -Controllable = false -OverrideCreationModifier = false -TimeModifiers = Array[ExtResource("50_6khjs")]([]) -WaitForCompletion = true -metadata/_custom_type_script = "uid://c0ndqalsc4jve" - -[sub_resource type="Resource" id="Resource_56glb"] -script = ExtResource("39_83jc5") -Patterns = Array[Object]([SubResource("Resource_g20dv"), SubResource("Resource_tf3yy")]) -metadata/_custom_type_script = "uid://bngko08ho85p6" - [sub_resource type="Resource" id="Resource_w73bs"] script = ExtResource("58_6khjs") SpawnOffset = Vector2(-96, 0) -Script = SubResource("Resource_56glb") Prefab = ExtResource("56_amdeb") CreateAsChild = false LifeTime = 10.0 WaitForCompletion = false metadata/_custom_type_script = "uid://ca6atry8iniub" -[sub_resource type="Resource" id="Resource_6khjs"] -script = ExtResource("39_83jc5") -Patterns = Array[Object]([SubResource("Resource_g20dv"), SubResource("Resource_tf3yy")]) -metadata/_custom_type_script = "uid://bngko08ho85p6" - [sub_resource type="Resource" id="Resource_n5tt7"] script = ExtResource("58_6khjs") SpawnOffset = Vector2(96, 0) -Script = SubResource("Resource_6khjs") Prefab = ExtResource("56_amdeb") CreateAsChild = false LifeTime = 10.0 @@ -370,6 +323,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = [] [sub_resource type="Resource" id="Resource_8qe0x"] @@ -414,6 +368,7 @@ Controllable = false Freezable = true Grazeable = true GrazeValue = 1.0 +Attributes = 0 TimeModifiers = [] [sub_resource type="Resource" id="Resource_v4yda"] @@ -478,7 +433,7 @@ TimeModifiers = Array[ExtResource("50_6khjs")]([]) WaitForCompletion = true metadata/_custom_type_script = "uid://c0ndqalsc4jve" -[sub_resource type="Resource" id="Resource_okvfm"] +[sub_resource type="Resource" id="Resource_6khjs"] resource_local_to_scene = true script = ExtResource("39_83jc5") Patterns = Array[Object]([SubResource("Resource_kuo18")]) @@ -812,7 +767,7 @@ InvertSignal = true [node name="FloorEmitter2" parent="Tilemaps/Actors" instance=ExtResource("44_b8ffn")] position = Vector2(601, 147) -Script = SubResource("Resource_okvfm") +Script = SubResource("Resource_6khjs") InvertSignal = true [node name="Camera" parent="Tilemaps/Actors" instance=ExtResource("48_r562v")] diff --git a/Scenes/test.tscn b/Scenes/test.tscn index bfa907f8..2c8c3c00 100644 --- a/Scenes/test.tscn +++ b/Scenes/test.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=170 format=4 uid="uid://bv451a8wgty4u"] +[gd_scene load_steps=173 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"] @@ -134,6 +134,9 @@ [ext_resource type="PackedScene" uid="uid://pcjp4du4mahg" path="res://Scenes/Props/Stacked_Box_Wood.tscn" id="125_7lma1"] [ext_resource type="PackedScene" uid="uid://bmif3jo03yuol" path="res://Scenes/camera_controller.tscn" id="125_ldb17"] [ext_resource type="Script" uid="uid://upq0b4sx7nhw" path="res://Scripts/Misc/CameraTarget.cs" id="126_7lma1"] +[ext_resource type="Script" uid="uid://8umfjejbkcsm" path="res://Scripts/Actors/RogueliteEnemySpawner.cs" id="127_dfo5i"] +[ext_resource type="Resource" uid="uid://qbo6avc7x64b" path="res://Resources/Enemies/Fairy_Guard.tres" id="128_pt47r"] +[ext_resource type="Resource" uid="uid://cocl3qontm3be" path="res://Resources/Enemies/Base_Fairy.tres" id="129_pt47r"] [sub_resource type="NavigationPolygon" id="NavigationPolygon_j86ly"] vertices = PackedVector2Array(-1738, 822, -1814, 822, -1814, 762, -1738, 762, -1655, 344, -1626, 344, -1626, 390, -1658, 390, -1672, 518, -1658, 474, -1640, 474, -1640, 484, -1658, 534, -1670, 534, -1626, 484, -1626, 534, -1658, 618, -1626, 618, -1626, 822, -1702, 822, -1702, 618, -1670, 618, -1672, 534, -1704, 518, -1704, 502, -1686, 474, -1718, 502, -1718, 484, -1704, 484, -1704, 474, -1686, 390, -1718, 390, -1718, 376, -1704, 376, -1704, 340, -1703, 340, -1703, 344, -1672, 344, -1672, 330, -1655, 330, -1514, 822, -1590, 822, -1590, 762, -1514, 762, -1738, 694, -1814, 694, -1814, 650, -1738, 650, -1514, 694, -1590, 694, -1590, 650, -1514, 650, -1206, 374, -1206, 346, -1162, 346, -1162, 374, -1114, 374, -1114, 406, -1258, 406, -1242, 374, -1258, 474, -1242, 474, -1242, 518, -1256, 518, -1320, 486, -1256, 534, -1272, 534, -1272, 550, -1320, 550, -1370, 486, -1370, 518, -1400, 518, -1432, 488, -1400, 534, -1432, 534, -1432, 550, -1528, 550, -1478, 538, -1528, 534, -1576, 534, -1576, 518, -1528, 500, -1514, 500, -1590, 518, -1590, 484, -1576, 484, -1576, 474, -1528, 474, -1514, 538, -1478, 488, -1432, 474, -1270, 474, -1270, 346, -1242, 346, -1433, 338, -1418, 338, -1418, 390, -1462, 390, -1462, 358, -1498, 358, -1498, 406, -1499, 406, -1499, 390, -1510, 390, -1510, 358, -1546, 358, -1546, 406, -1576, 406, -1576, 390, -1590, 390, -1590, 340, -1576, 340, -1576, 328, -1560, 328, -1560, 314, -1433, 314, -1326.2, 245, -1326.2, 234, -1318, 234, -1318, 248, -1336, 248, -1359.7, 245, -1336, 262, -1370, 262, -1370, 330, -1367, 330, -1367, 344, -1368, 358, -1336, 344, -1336, 372, -1368, 374, -1335, 372, -1335, 374, -1382, 358, -1382, 243, -1368, 243, -1368, 234, -1359.7, 234, -1144, 200, -1114, 154, -1078, 154, -1078, 178, -1096, 198, -1144, 214, -1066, 178, -1066, 198, -1096, 214, -1174, 200, -1174, 196, -1160, 196, -1160, 154, -1126, 154, -1114, 106, -1126, 106, -932.078, 186, -919, 186, -919, 195, -1030, 214, -944, 189.188, -888, 195, -888, 196, -858, 196, -858, 214, -955.922, 186, -984, 196, -1030, 200, -1000, 200, -1000, 196, -984, 186, -34.9375, 129.43, -64.9531, 194.07, -146.813, 182.609, -132.227, 118.891, -360, 84, -330, 84, -330, 102, -426, 102, -426, 182, -454, 182, -454, 170, -438, 170, -438, 84, -424, 84, -360, 66, -376, 68, -424, 68, -376, 66, -938, 118, -938, 130.406, -944, 128.813, -950, 118, -950, 130.406, -903, 88, -887, 88, -887, 104, -886, 104, -886, 118, -966, 118, -966, 88, -936, 88, -903, 84, -936, 84, -1946, -76, -1928, -76, -1928, -60, -1927, -60, -1927, -26, -1946, -26, -1946, 42, -1912, 42, -1912, 52, -1960, 70, -1960, 54, -1864, 52, -1864, 42, -1846, 42, -1848, 54, -1846, -22, -1834, -22, -1834, 42, -1798, 42, -1798, -22, -1786, -22, -1786, 42, -1754, 42, -1754, 54, -1768, 54, -1768, 70, -1800, 70, -1800, 54, -1848, 70, -2006, 54, -2006, 42, -1958, 42, -1958, -26, -2006, -26, -2006, -44, -1992, -44, -1992, -76, -1958, -76, -1946, -92, -1958, -92, -1642, 70, -1718, 70, -1718, 26, -1642, 26, -1050, 22, -1078, 22, -1078, 8, -1050, 8, -1079, 6, -1094, 6, -1094, -6, -1079, -6, -1984, -108, -1984, -106, -2032, -106, -2038, -108, -2038, -54, -2032, -26, -2070, -26, -2070, -44, -2040, -44, -2040, -54, -938, -26, -950, -26, -950, -38, -938, -38, -904, -204, -872, -204, -872, -188, -890, -154, -902, -154, -858, -188, -858, -154, -902, -106, -890, -122, -887, -122, -887, -104, -890, -74, -858, -104, -858, -90, -872, -90, -872, -74, -890, -42, -887, -42, -887, -26, -902, -26, -936, -106, -936, -122, -902, -122, -950, -154, -950, -214, -904, -214, -1754, -108, -1754, -90, -1784, -90, -1784, -106, -1864, -108, -1815, -106, -1864, -90, -1815, -90, -1064, -127, -1050, -127, -1050, -90, -1112, -90, -1112, -122, -1128, -122, -1128, -134, -1064, -134, -1911, -106, -1920, -106, -1920, -108, -1911, -108, -806, -106, -822, -106, -822, -108, -806, -108, -2064, -166, -2058, -166, -2058, -154, -2064, -154, -2064, -122, -2070, -122, -2070, -188, -2064, -188, -1946, -122, -1958, -122, -1958, -140, -1946, -140, -1368.7, -126, -1354, -126, -1354, -122, -1370, -122, -1370, -134, -1368.7, -134, -1984, -138, -2038, -138, -2038, -140, -1984, -140, -1754, -138, -1920, -138, -1920, -140, -1754, -140, -1368, -236, -1338, -236, -1338, -202, -1370, -202, -1382, -234, -1370, -152, -1382, -152, -1430, -234, -1430, -236, -1416, -236, -1416, -246, -1368, -246, -1754, -170, -2038, -170, -2038, -172, -1754, -172, -1144, -412, -1144, -422, -1128, -422, -1128, -412, -1080, -412, -1080, -422, -1048, -422, -1048, -396, -1034, -396, -1034, -344, -1046, -344, -1128, -346, -1046, -314, -1098, -314, -1098, -246, -1082, -246, -1082, -218, -1126, -218, -1126, -246, -1110, -246, -1110, -314, -1128, -314, -1148, -346, -1148, -394, -1274, -362, -1226, -362, -1226, -352, -1274, -314, -1286, -314, -1288, -330, -1220, -352, -1220, -346, -1196, -346, -1196, -362, -1172, -362, -1172, -330, -1178, -330, -1178, -314, -1194, -314, -1194, -250, -1206, -250, -1206, -314, -1274, -246, -1258, -246, -1258, -218, -1272, -218, -1272, -202, -1288, -202, -1302, -246, -1286, -246, -1288, -186, -1302, -186, -1288, -314, -1302, -330, -1302, -364, -1292, -364, -1274, -394, -1292, -394, -1302, -394, -1302, -412, -1272, -412, -1192, -412, -1272, -422, -1192, -422, -1928, -202, -1960, -202, -1960, -204, -1944, -204, -1928, -220, -1944, -220, -1879, -202, -1896, -202, -1896, -204, -1879, -204, -1800, -220, -1754, -220, -1754, -202, -1832, -202, -1832, -220, -1816, -220, -1800, -230, -1816, -230, -2058, -298, -2058, -285.578, -2064, -287.188, -2070, -298, -2072, -316, -2070, -285.578, -2088, -332, -2072, -332, -2120, -298, -2056, -316, -2056, -298, -2120, -348, -2088, -348, -1656, -796, -1592, -796, -1592, -778, -1626, -778, -1626, -710, -1624, -710, -1624, -684, -1626, -632, -1610, -684, -1610, -630, -1558, -630, -1558, -652, -1530, -652, -1530, -650, -1494, -650, -1494, -678, -1482, -678, -1482, -650, -1446, -650, -1446, -668, -1418, -668, -1418, -634, -1448, -634, -1448, -602, -1482, -602, -1482, -518, -1448, -518, -1448, -508, -1512, -410, -1418, -508, -1418, -410, -1448, -410, -1448, -394, -1482, -394, -1482, -298, -1494, -298, -1494, -394, -1512, -394, -1544, -410, -1544, -426, -1528, -504, -1494, -518, -1558, -426, -1558, -504, -1528, -518, -1494, -602, -1558, -602, -1558, -618, -1610, -586, -1654, -586, -1654, -606, -1626, -606, -1610, -618, -1654, -632, -1654, -710, -1638, -710, -1638, -778, -1672, -778, -1672, -806, -1656, -806, -714, -602, -758, -602, -758, -614, -714, -614, -394, -458, -438, -458, -438, -486, -394, -486, -1962, -886, -1962, -842, -1994, -842, -2038, -886, -1994, -710, -1978, -710, -1978, -602, -2008, -602, -2056, -684, -2008, -586, -2024, -586, -2024, -570, -2056, -570, -2086, -684, -2056, -554, -2168, -554, -2086, -566, -2168, -566, -2056, -710, -2006, -710, -2006, -842, -2038, -842, -1120, -796, -1120, -778, -1258, -778, -1174, -790, -1258, -678, -1192, -678, -1192, -668, -1226, -666, -1160, -668, -1160, -678, -1094, -678, -1094, -666, -1094, -694, -1082, -694, -1082, -662, -1018, -662, -1018, -618, -1082, -618, -1111, -570, -1111, -554, -1126, -554, -1126, -582, -1094, -582, -1082, -570, -1226, -650, -1239, -650, -1239, -618, -1240, -618, -1304, -648, -1288, -668, -1270, -678, -1240, -588, -1226, -588, -1226, -586, -1318, -586, -1318, -648, -1304, -668, -1288, -678, -1270, -778, -1304, -778, -1304, -780, -1288, -780, -1288, -790, -1174, -796, -1018, -570, -1046, -570, -1046, -582, -1018, -582, -1866, -710, -1866, -586, -1912, -586, -1912, -602, -1880, -700, -1926, -602, -1926, -700, -1880, -710, -2218, -634, -2230, -634, -2230, -678, -2218, -678, -1354, -634, -1382, -634, -1382, -646, -1354, -646, -2128, -650, -2144, -650, -2144, -668, -2128, -668, -1018, -762, -1032, -762, -1032, -764, -1018, -764, -682, -970, -774, -970, -774, -982, -682, -982, -1210, -1002, -1286, -1002, -1286, -1062, -1210, -1062, -906, -1002, -934, -1002, -934, -1078, -906, -1078, -1098, -1018, -1110, -1018, -1110, -1078, -1098, -1078, -986, -1034, -1046, -1034, -1046, -1062, -986, -1062, -858, -1034, -870, -1034, -870, -1078, -858, -1078, -682, -1034, -774, -1034, -774, -1062, -682, -1062, -1146, -1050, -1174, -1050, -1174, -1078, -1146, -1078, -1242, -1098, -1254, -1098, -1254, -1126, -1242, -1126, -986, -1114, -1030, -1114, -1030, -1126, -986, -1126, -890, -1130, -918, -1130, -918, -1142, -890, -1142, -631, 182, -631, 214, -647, 214, -680, 212, -680, 134, -776, -108, -774, -122, -760, -140, -746, -140, -746, -128, -774, -106, -740, -128, -740, -122, -746, -106, -774, -74, -716, -122, -716, -134, -712, -134, -712, -124, -680, -124, -680, -134, -618, -134, -618, -122, -647, -122, -647, -106, -746, -74, -618, -74, -618, -58, -666, -58, -710, 74, -710, 42, -630, 42, -618, 166, -619, 166, -630, 10, -618, 10, -619, 182, -778, 74, -760, 134, -807, 79, -760, 212, -647, 230, -808, 230, -808, 214, -822, 214, -822, 186, -806, 186, -806, 150, -822, 150, -822, 79, -807, 49, -778, 6, -808, 49, -808, 6, -822, 6, -822, -6, -694, -6, -666, 6, -694, -58, -796, -58, -796, -74, -779, -106, -779, -108, -776, -122, -774, -154, -822, -154, -822, -166, -760, -166, -679, -330, -966, -330, -856, -332, -760, -332, -936, -332, -663, -778, -727, -778, -920, -792, -919, -792, -458, -454, -458, -394, -570, -394, -616, -396, -614, -406, -570, -454, -824, -728, -727, -744, -634, -744, -634, -694, -678, -650, -794, -650, -712, -824, -712, -858, -663, -858, -776, -792, -759, -824, -776, -826, -759, -858, -696, -442, -696, -412, -719.203, -418, -719.203, -457, -824, -762, -871, -762, -570, -678, -474, -650, -474, -550, -570, -490, -614, -474, -678, -566, -936, -360, -966, -364, -938, -364, -679, -394, -712, -332, -712, -360, -695, -396, -855, -870, -855, -826, -871, -826, -966, -870, -840, -792, -840, -824, -808, -824, -807, -792, -808, -870, -634, -870, -634, -858, -807, -826, -904, -728, -871, -728, -954, -586, -904, -762, -951, -762, -951, -792, -570, -694, -470, -678, -470, -694, -458, -694, -458, -650, -794, -618, -826, -618, -826, -586, -954, -422, -936, -422, -936, -412, -938, -408, -966, -408, -904, -412, -904, -422, -870, -422, -848, -384, -870, -490, -918, -490, -918, -518, -826, -518, -826, -490, -858, -490, -858, -422, -822, -422, -822, -414, -848, -414, -822, -384, -822, -380, -778, -380, -778, -422, -758, -422, -752.703, -418, -760, -360, -758, -474, -790, -474, -790, -566, -458, -550, -458, -490, -682, -474, -682, -442, -695, -412, -616, -406, -570, -330, -632, -330, -632, -394, -951, -728, -856, -360, -752.703, -457, -871, -792, -888, -792, -888, -826, -919, -826, -920, -826, -951, -826, -1272, 40, -1178, 54, -1510, 54, -1319, 40, -1258, -6, -1178, -6, -1272, 6, -1478, -252, -1466, -252, -1466, -166, -1478, -250, -1418, -166, -1418, -138, -1466, -138, -1478, -166, -1466, -106, -1482, -106, -1510, -150, -1510, -166, -1482, -38, -1472, -38, -1472, -6, -1296, -6, -1296, -24, -1258, -24, -1319, 6, -1510, 40, -1448, 40, -1448, 6, -1510, 6, -1510, -38, -1494, -38, -1494, -106, -1510, -106, -1510, -138, -1562, -138, -1562, -122, -1576, -122, -1610, -150, -1576, -106, -1718, -106, -1658, -166, -1718, -202, -1702, -202, -1702, -246, -1674, -246, -1674, -202, -1658, -202, -1610, -166, -1510, -250, -1510, -266, -1478, -266, -2122, -198, -2122, -138, -2136, -138, -2152, -140, -2152, -186, -2200, -198, -2184, -186, -2200, -188, -2136, -122, -2216, -122, -2184, -140, -2216, -154, -2230, -188, -2230, -154) @@ -301,7 +304,7 @@ ActivationType = 0 Targets = Array[NodePath]([NodePath("../Rumia")]) WaitForCompletion = true -[sub_resource type="Resource" id="Resource_w8skm"] +[sub_resource type="Resource" id="Resource_pt47r"] resource_local_to_scene = true script = ExtResource("49_0si7g") Target = NodePath(".") @@ -1260,7 +1263,7 @@ Events = Array[ExtResource("62_w8skm")]([SubResource("Resource_068l7"), SubResou [node name="BossBattleStartScript" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("43_kf3qc")] position = Vector2(-1487, -396) -Events = Array[ExtResource("62_w8skm")]([SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_w8skm")]) +Events = Array[ExtResource("62_w8skm")]([SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_pt47r")]) [node name="Enemy13" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("47_u1ve6")] position = Vector2(-1657, -788) @@ -1347,11 +1350,6 @@ position = Vector2(-1928, -659) DefeatScript = NodePath("../VerticalDoor3") ActivationType = 5 -[node name="Turret363" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("DefeatScript") instance=ExtResource("62_h0jm4")] -position = Vector2(-1504, 376) -DefeatScript = NodePath("../VerticalDoor3") -ActivationType = 5 - [node name="AcidBridge" type="Area2D" parent="Parallax2D/Factory Tilemaps/LevelProps" groups=["Acid"]] position = Vector2(-1760, -641) rotation = 1.5708 @@ -1579,51 +1577,6 @@ position = Vector2(-1097.18, -108.733) [node name="ThermatronFsm" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("80_f37sa")] position = Vector2(-1840, -16) -[node name="FairyFsm" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("104_0bqta")] -position = Vector2(-680, -5) - -[node name="FairyFsm2" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("104_0bqta")] -position = Vector2(-653, 159) - -[node name="FairyGuardFsm" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-669, 55) - -[node name="FairyGuardFsm2" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-787, 99) - -[node name="FairyGuardFsm3" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-1015, 207) - -[node name="FairyFsm3" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("104_0bqta")] -position = Vector2(-921, 197) - -[node name="FairyFsm4" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("104_0bqta")] -position = Vector2(-945, 98) - -[node name="FairyFsm5" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("104_0bqta")] -position = Vector2(-1095, 159) - -[node name="FairyFsm6" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("104_0bqta")] -position = Vector2(-1257, 30) - -[node name="FairyGuardFsm4" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-1469, -22) - -[node name="FairyFsm7" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("104_0bqta")] -position = Vector2(-1462, -150) - -[node name="FairyGuardFsm5" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-1680, -131) - -[node name="FairyGuardFsm6" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-1965, -37) - -[node name="FairyGuardFsm7" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-1895, 68) - -[node name="FairyFsm8" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("104_0bqta")] -position = Vector2(-1616, -164) - [node name="FairyFsm9" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("104_0bqta")] position = Vector2(-1257, -344) @@ -1657,15 +1610,6 @@ position = Vector2(-1246, -587) [node name="FairyGuardFsm13" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] position = Vector2(-1615, -661) -[node name="FairyFsm14" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("104_0bqta")] -position = Vector2(-1988, 45) - -[node name="FairyGuardFsm14" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-927, -159) - -[node name="FairyGuardFsm15" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-865, -102) - [node name="KeycardReaderYellow" parent="Parallax2D/Factory Tilemaps/LevelProps" node_paths=PackedStringArray("Targets") instance=ExtResource("109_j6vrf")] position = Vector2(-1499, -189) Targets = [NodePath("../HorizontalForceField4")] @@ -1679,21 +1623,6 @@ ActivationType = 5 [node name="FairyFsm15" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("108_cxj4w")] position = Vector2(-1292, -216) -[node name="FairyFsm16" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("104_0bqta")] -position = Vector2(-1540, 320) - -[node name="FairyFsm17" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("104_0bqta")] -position = Vector2(-1684, 348) - -[node name="FairyGuardFsm16" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-1478, 320) - -[node name="FairyGuardFsm17" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-1551, 387) - -[node name="ThermatronFsm2" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("80_f37sa")] -position = Vector2(-1633, 391) - [node name="MovementSensorLonger" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("112_j86ly")] position = Vector2(-1495, 516) Events = Array[ExtResource("62_w8skm")]([SubResource("Resource_uslvo")]) @@ -1704,18 +1633,9 @@ BulletResource = ExtResource("114_fuaed") EmitCoolDown = 0.5 BurstCoolDown = 0.0 -[node name="FairyGuardFsm18" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-1581, 489) - [node name="FairyGuardFsm19" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] position = Vector2(-1384, 484) -[node name="FairyGuardFsm20" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-1296, 534) - -[node name="FairyGuardFsm21" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-1659, 525) - [node name="Fridge" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("115_dferh")] position = Vector2(-1343, 225) @@ -1728,12 +1648,6 @@ position = Vector2(-1352, -146) [node name="Fridge4" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("115_dferh")] position = Vector2(-1416, -688) -[node name="FairyGuardFsm22" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-1707, 498) - -[node name="FairyGuardFsm23" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("103_f37sa")] -position = Vector2(-1473, 540) - [node name="HorizontalForceField6" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("66_nxn3h")] position = Vector2(-1264, 448) @@ -1820,6 +1734,114 @@ curve = SubResource("Curve2D_jm0wb") [node name="Wood Box" parent="Parallax2D/Factory Tilemaps/LevelProps" instance=ExtResource("125_7lma1")] position = Vector2(-833, -402) +[node name="RogueliteEnemySpawner7" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-786, 99) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("128_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner13" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-1015.12, 205.511) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("128_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner23" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-873.198, -97.3991) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("128_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner24" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-924, -163) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("128_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner16" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-1474.32, -14.414) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("128_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner19" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-1675.78, -134.053) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("128_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner22" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-1904.2, 68.2777) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("128_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner20" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-1955.52, -48.429) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("128_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner10" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-687, 57) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("128_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner8" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-650, 162) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("129_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner11" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-882.287, 205.218) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("129_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner14" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-1093, 164) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("129_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner15" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-1218.04, 22.8266) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("129_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner17" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-1443.54, -148.422) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("129_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner18" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-1625.63, -159.271) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("129_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner21" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-1976, 43) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("129_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner12" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-945.919, 98.4808) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("129_pt47r") +AutoSpawn = true + +[node name="RogueliteEnemySpawner9" type="Marker2D" parent="Parallax2D/Factory Tilemaps/LevelProps"] +position = Vector2(-680, -5) +script = ExtResource("127_dfo5i") +Enemy = ExtResource("129_pt47r") +AutoSpawn = true + [node name="PlayerParent" type="Node2D" parent="Parallax2D/Factory Tilemaps"] [node name="BeamShadows" type="TileMapLayer" parent="Parallax2D/Factory Tilemaps"] diff --git a/Scripts/Actors/RogueliteEnemySpawner.cs b/Scripts/Actors/RogueliteEnemySpawner.cs index b41dce84..8cd94ef3 100644 --- a/Scripts/Actors/RogueliteEnemySpawner.cs +++ b/Scripts/Actors/RogueliteEnemySpawner.cs @@ -26,6 +26,8 @@ public partial class RogueliteEnemySpawner : Marker2D } } + [Export] public bool AutoSpawn { get; set; } = false; + [Export] public int Wave { get; private set; } = 0; public bool Spawned { get; private set; } = false; @@ -48,32 +50,51 @@ public partial class RogueliteEnemySpawner : Marker2D QueueRedraw(); } - public EnemyFSMProxy Spawn(RogueliteMapTheme mapTheme) + public override void _Ready() + { + if (Engine.IsEditorHint()) return; + if (!AutoSpawn) return; + + Spawn(); + + } + + public EnemyFSMProxy Spawn() { if (Engine.IsEditorHint()) return null; if (Spawned) return _spawnedEnemy; var enemyScene = GD.Load(Enemy.PrefabPath); + _spawnedEnemy = this.CreateSibling(enemyScene); + _spawnedEnemy.Init(Enemy); + Spawned = true; + + _spawnedEnemy.Death += SpawnedEnemyOnDeath; + return _spawnedEnemy; + } - _spawnedEnemy.OverrideLoot = true; - _spawnedEnemy.ExtraLoot.Add(new LootDrop() + public EnemyFSMProxy Spawn(RogueliteMapTheme mapTheme) + { + if (Engine.IsEditorHint()) return null; + if (Spawned) return _spawnedEnemy; + + var spawnedEnemy = Spawn(); + + spawnedEnemy.OverrideLoot = true; + spawnedEnemy.ExtraLoot.Add(new LootDrop() { Item = mapTheme.EnemiesLootTable.Items.ToList().Shuffle().First(), Chance = mapTheme.EnemyDropChance }); - _spawnedEnemy.ExtraLoot.Add(new LootDrop() + spawnedEnemy.ExtraLoot.Add(new LootDrop() { Item = mapTheme.PointItemResource, Chance = 100 }); - - Spawned = true; - _spawnedEnemy.Death += SpawnedEnemyOnDeath; - - return _spawnedEnemy; + return spawnedEnemy; } private void SpawnedEnemyOnDeath(EnemyFSMProxy enemy) diff --git a/Scripts/AttackPatterns/CreateEmitterPattern.cs b/Scripts/AttackPatterns/CreateEmitterPattern.cs index c5538f4a..1c39094a 100644 --- a/Scripts/AttackPatterns/CreateEmitterPattern.cs +++ b/Scripts/AttackPatterns/CreateEmitterPattern.cs @@ -6,6 +6,7 @@ using Godot.Collections; namespace Cirno.Scripts.AttackPatterns; [GlobalClass] +[Tool] public partial class CreateEmitterPattern : AttackPattern { [Export] public Vector2 SpawnOffset { get; set; } diff --git a/Scripts/AttackPatterns/LaserPattern.cs b/Scripts/AttackPatterns/LaserPattern.cs index c4799832..f8a73a06 100644 --- a/Scripts/AttackPatterns/LaserPattern.cs +++ b/Scripts/AttackPatterns/LaserPattern.cs @@ -4,6 +4,7 @@ using Godot; namespace Cirno.Scripts.AttackPatterns; [GlobalClass] +[Tool] public partial class LaserPattern : SpiralPattern { [ExportGroup("Laser")][Export] public float SpawnDelay { get; set; } = 0.3f; // Delay before beam appears diff --git a/Scripts/AttackPatterns/MovementPattern.cs b/Scripts/AttackPatterns/MovementPattern.cs index b2a9c7b5..474aa360 100644 --- a/Scripts/AttackPatterns/MovementPattern.cs +++ b/Scripts/AttackPatterns/MovementPattern.cs @@ -5,6 +5,7 @@ using Godot; namespace Cirno.Scripts.AttackPatterns; [GlobalClass] +[Tool] public partial class MovementPattern : AttackPattern { [Export] public Vector2 relativeTargetPosition; diff --git a/Scripts/AttackPatterns/NodeMovementPattern.cs b/Scripts/AttackPatterns/NodeMovementPattern.cs index 0b6eeb67..82a01a5d 100644 --- a/Scripts/AttackPatterns/NodeMovementPattern.cs +++ b/Scripts/AttackPatterns/NodeMovementPattern.cs @@ -8,6 +8,7 @@ using GTweensGodot.Extensions; namespace Cirno.Scripts.AttackPatterns; [GlobalClass] +[Tool] public partial class NodeMovementPattern : AttackPattern { [Export] private Vector2 relativeTargetPosition; diff --git a/Scripts/AttackPatterns/SpiralPattern.cs b/Scripts/AttackPatterns/SpiralPattern.cs index 41e3a5a2..0fd6d959 100644 --- a/Scripts/AttackPatterns/SpiralPattern.cs +++ b/Scripts/AttackPatterns/SpiralPattern.cs @@ -12,6 +12,7 @@ using Array = System.Array; namespace Cirno.Scripts.AttackPatterns; [GlobalClass] +[Tool] public partial class SpiralPattern : AttackPattern { [Export] public BulletResource BulletResource { get; set; } diff --git a/Scripts/Components/BulletFlags.cs b/Scripts/Components/BulletFlags.cs new file mode 100644 index 00000000..2f55b179 --- /dev/null +++ b/Scripts/Components/BulletFlags.cs @@ -0,0 +1,14 @@ +using System; + +namespace Cirno.Scripts.Components; + +[Flags] +public enum BulletFlags +{ + Freezable = 1 << 1, + Controllable = 1 << 2, + Bouncy = 1 << 3, + Piercing = 1 << 4, + Grazeable = 1 << 5, + Rotateable = 1 << 6, +} \ No newline at end of file diff --git a/Scripts/Components/BulletFlags.cs.uid b/Scripts/Components/BulletFlags.cs.uid new file mode 100644 index 00000000..9d1a12f4 --- /dev/null +++ b/Scripts/Components/BulletFlags.cs.uid @@ -0,0 +1 @@ +uid://d6fmk6vngnxi diff --git a/Scripts/Components/BulletInfo.cs b/Scripts/Components/BulletInfo.cs new file mode 100644 index 00000000..b84ea645 --- /dev/null +++ b/Scripts/Components/BulletInfo.cs @@ -0,0 +1,45 @@ +using System.Collections.Generic; +using Cirno.Scripts.Resources; +using Godot; + +namespace Cirno.Scripts.Components; + +public class BulletInfo(BulletResource originalBulletResource) +{ + public BulletResource OriginalBulletResource { get; set; } = originalBulletResource; + public Vector2 Position { get; set; } + public Vector2 Direction { get; set; } + public float Speed { get; set; } + public float LifeTime { get; set; } + public bool DestroyOnCollision { get; set; } + public BulletOwner Owner { get; set; } + public DamageType DamageType { get; set; } + public float Damage { get; set; } + public float Knockback { get; set; } + public int BulletCount { get; set; } + public float RotationSpeed { get; set; } + public float RotationOffset { get; set; } + //public double Time { get; set; } + public float Spread { get; set; } + public bool RotateSprite { get; set; } = false; + public bool Controllabe { get; set; } = false; + public bool Freezable { get; set; } = true; + public PackedScene BulletScene { get; set; } + public PackedScene DestructionParticlesScene { get; set; } + public IBulletModifier Modifier { get; set; } + public List TimeModifiers { get; set; } = new List(); + + public bool Grazeable { get; set; } + public float GrazeValue { get; set; } + + public BulletFlags Attributes { get; set; } + + #region Laser + public bool IsLaser { get; set; } + public float SpawnDelay { get; set; } = 0.3f; // Delay before beam appears + public float PreFireTime { get; set; } = 0.5f; // Time before laser becomes lethal + public float LethalTime { get; set; } = 1.5f; // Time laser remains lethal + public Color PreFireColor { get; set; } = new Color(1, 0, 0, 0.5f); // Thin red beam + public Color LethalColor { get; set; } = new Color(1, 0, 0, 1.0f); // Thicker beam + #endregion +} \ No newline at end of file diff --git a/Scripts/Components/BulletInfo.cs.uid b/Scripts/Components/BulletInfo.cs.uid new file mode 100644 index 00000000..9a7c33f3 --- /dev/null +++ b/Scripts/Components/BulletInfo.cs.uid @@ -0,0 +1 @@ +uid://r80khe0f3jj8 diff --git a/Scripts/Components/BulletSpawner.cs b/Scripts/Components/BulletSpawner.cs index 342f8269..4fdac929 100644 --- a/Scripts/Components/BulletSpawner.cs +++ b/Scripts/Components/BulletSpawner.cs @@ -1,6 +1,4 @@ using System; -using System.Collections.Generic; -using Cirno.Scripts.Resources; using Cirno.Scripts.Weapons; using Godot; using Godot.Collections; @@ -90,42 +88,4 @@ public partial class BulletSpawner : Node2D // Vector2 direction = (target - position).Normalized(); // SpawnBullet(position, direction, speed, owner, burstCount, spread: spread, bulletScene: bulletScene, modifier: modifier); // } -} - -public class BulletInfo(BulletResource originalBulletResource) -{ - public BulletResource OriginalBulletResource { get; set; } = originalBulletResource; - public Vector2 Position { get; set; } - public Vector2 Direction { get; set; } - public float Speed { get; set; } - public float LifeTime { get; set; } - public bool DestroyOnCollision { get; set; } - public BulletOwner Owner { get; set; } - public DamageType DamageType { get; set; } - public float Damage { get; set; } - public float Knockback { get; set; } - public int BulletCount { get; set; } - public float RotationSpeed { get; set; } - public float RotationOffset { get; set; } - //public double Time { get; set; } - public float Spread { get; set; } - public bool RotateSprite { get; set; } = false; - public bool Controllabe { get; set; } = false; - public bool Freezable { get; set; } = true; - public PackedScene BulletScene { get; set; } - public PackedScene DestructionParticlesScene { get; set; } - public IBulletModifier Modifier { get; set; } - public List TimeModifiers { get; set; } = new List(); - - public bool Grazeable { get; set; } - public float GrazeValue { get; set; } - - #region Laser - public bool IsLaser { get; set; } - public float SpawnDelay { get; set; } = 0.3f; // Delay before beam appears - public float PreFireTime { get; set; } = 0.5f; // Time before laser becomes lethal - public float LethalTime { get; set; } = 1.5f; // Time laser remains lethal - public Color PreFireColor { get; set; } = new Color(1, 0, 0, 0.5f); // Thin red beam - public Color LethalColor { get; set; } = new Color(1, 0, 0, 1.0f); // Thicker beam - #endregion -} +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Boss/Shooting.cs b/Scripts/Components/FSM/Boss/Shooting.cs index 224622e2..454a5607 100644 --- a/Scripts/Components/FSM/Boss/Shooting.cs +++ b/Scripts/Components/FSM/Boss/Shooting.cs @@ -36,6 +36,16 @@ public partial class Shooting : EnemyStateBase public float CurrentHealth => DamageReceiver.HealthProvider.CurrentResource; + public override void Init(IStateMachine machine) + { + base.Init(machine); + + if (StorageModule.Root.EnemyResource.BossScript is not null) + { + this.BossScript = StorageModule.Root.EnemyResource.BossScript; + } + } + public override void EnterState() { base.EnterState(); diff --git a/Scripts/Components/FSM/Enemy/EnemyFSMAnimatedSprite.cs b/Scripts/Components/FSM/Enemy/EnemyFSMAnimatedSprite.cs new file mode 100644 index 00000000..ae385eab --- /dev/null +++ b/Scripts/Components/FSM/Enemy/EnemyFSMAnimatedSprite.cs @@ -0,0 +1,16 @@ +using Godot; + +namespace Cirno.Scripts.Components.FSM.Enemy; + +public partial class EnemyFSMAnimatedSprite : AnimatedSprite2D +{ + public override void _Ready() + { + var enemyFsmProxy = this.GetParentOrNull(); + + if (enemyFsmProxy?.EnemyResource?.AnimationFrames != null) + { + this.SpriteFrames = enemyFsmProxy.EnemyResource.AnimationFrames; + } + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/EnemyFSMAnimatedSprite.cs.uid b/Scripts/Components/FSM/Enemy/EnemyFSMAnimatedSprite.cs.uid new file mode 100644 index 00000000..bdac628f --- /dev/null +++ b/Scripts/Components/FSM/Enemy/EnemyFSMAnimatedSprite.cs.uid @@ -0,0 +1 @@ +uid://dathhlufbe6gr diff --git a/Scripts/Components/FSM/Enemy/EnemyFSMProxy.cs b/Scripts/Components/FSM/Enemy/EnemyFSMProxy.cs index 5f83c3fd..2376d9fc 100644 --- a/Scripts/Components/FSM/Enemy/EnemyFSMProxy.cs +++ b/Scripts/Components/FSM/Enemy/EnemyFSMProxy.cs @@ -27,6 +27,12 @@ public partial class EnemyFSMProxy : CharacterBody2D, IActivable [Signal] public delegate void DeathEventHandler(EnemyFSMProxy enemy); + public void Init(EnemyResource enemyResource) + { + this.EnemyResource = enemyResource; + + } + public void TriggerDeath() { EmitSignalDeath(this); diff --git a/Scripts/Resources/AttackPattern.cs b/Scripts/Resources/AttackPattern.cs index 24330459..f0277139 100644 --- a/Scripts/Resources/AttackPattern.cs +++ b/Scripts/Resources/AttackPattern.cs @@ -5,6 +5,7 @@ using Godot; namespace Cirno.Scripts.Resources; [GlobalClass] +[Tool] public abstract partial class AttackPattern : Resource { //public Node2D Parent; diff --git a/Scripts/Resources/BossPhase.cs b/Scripts/Resources/BossPhase.cs index 37a432b5..32ea0bdc 100644 --- a/Scripts/Resources/BossPhase.cs +++ b/Scripts/Resources/BossPhase.cs @@ -6,6 +6,7 @@ using Godot.Collections; namespace Cirno.Scripts.Resources; [GlobalClass] +[Tool] public partial class BossPhase : Resource { [Export] public string PhaseName = string.Empty; diff --git a/Scripts/Resources/BulletResource.cs b/Scripts/Resources/BulletResource.cs index bea9f2a5..2c654cb2 100644 --- a/Scripts/Resources/BulletResource.cs +++ b/Scripts/Resources/BulletResource.cs @@ -28,6 +28,8 @@ public partial class BulletResource : Resource [Export] public bool Grazeable { get; set; } = true; [Export] public float GrazeValue { get; set; } = 0.2f; + [Export] public BulletFlags Attributes { get; set; } + [Export] public BulletCreationModifier Modifier; [Export] public Array TimeModifiers; @@ -57,6 +59,7 @@ public partial class BulletResource : Resource TimeModifiers = TimeModifiers.Select(x => x).ToList(), Grazeable = Grazeable, GrazeValue = GrazeValue, + Attributes = Attributes, // TimeModifiers = TimeModifiers?.Where(mod => mod is TimeModifier).Cast().Select(m => new ModifierWrapper() // { // TimeModifier = m, diff --git a/Scripts/Resources/BulletScript.cs b/Scripts/Resources/BulletScript.cs index f1c4d6aa..41ffbb1d 100644 --- a/Scripts/Resources/BulletScript.cs +++ b/Scripts/Resources/BulletScript.cs @@ -6,6 +6,7 @@ using Godot.Collections; namespace Cirno.Scripts.Resources; [GlobalClass] +[Tool] public partial class BulletScript : Resource { [Export] diff --git a/Scripts/Resources/EnemyResource.cs b/Scripts/Resources/EnemyResource.cs index 73780542..f9508850 100644 --- a/Scripts/Resources/EnemyResource.cs +++ b/Scripts/Resources/EnemyResource.cs @@ -1,4 +1,5 @@ using Cirno.Scripts.Resources.Loot; +using Cirno.Scripts.Resources.ScriptableBullets; using Godot; using Godot.Collections; @@ -33,5 +34,8 @@ public partial class EnemyResource : Resource [Export] public float ResponseTime { get; private set; } = 0.5f; [Export] public Texture2D IconSprite { get; private set; } + [Export] public SpriteFrames AnimationFrames { get; private set; } + + [Export] public BossScript BossScript { get; private set; } } \ No newline at end of file diff --git a/Scripts/Resources/FSMMovementPattern.cs b/Scripts/Resources/FSMMovementPattern.cs index 1900879c..c0999eae 100644 --- a/Scripts/Resources/FSMMovementPattern.cs +++ b/Scripts/Resources/FSMMovementPattern.cs @@ -5,6 +5,7 @@ using Godot; namespace Cirno.Scripts.Resources; [GlobalClass] +[Tool] public partial class FSMMovementPattern : AttackPattern { [Export] private Vector2 relativeTargetPosition; diff --git a/Scripts/Resources/PatternGroup.cs b/Scripts/Resources/PatternGroup.cs index 2489bb0a..f6f0e95f 100644 --- a/Scripts/Resources/PatternGroup.cs +++ b/Scripts/Resources/PatternGroup.cs @@ -7,6 +7,7 @@ using Godot.Collections; namespace Cirno.Scripts.Resources; [GlobalClass] +[Tool] public partial class PatternGroup : AttackPattern { [Export] private Array patterns; diff --git a/Scripts/Resources/ScriptableBullets/BossScript.cs b/Scripts/Resources/ScriptableBullets/BossScript.cs index ace0b7f7..3137c23b 100644 --- a/Scripts/Resources/ScriptableBullets/BossScript.cs +++ b/Scripts/Resources/ScriptableBullets/BossScript.cs @@ -4,6 +4,7 @@ using Godot.Collections; namespace Cirno.Scripts.Resources.ScriptableBullets; [GlobalClass] +[Tool] public partial class BossScript : Resource { [Export] diff --git a/Scripts/Resources/ScriptableBullets/ParallelPatternGroup.cs b/Scripts/Resources/ScriptableBullets/ParallelPatternGroup.cs index c88f5c96..da7380e5 100644 --- a/Scripts/Resources/ScriptableBullets/ParallelPatternGroup.cs +++ b/Scripts/Resources/ScriptableBullets/ParallelPatternGroup.cs @@ -6,6 +6,7 @@ using Godot.Collections; namespace Cirno.Scripts.Resources.ScriptableBullets; [GlobalClass] +[Tool] public partial class ParallelPatternGroup : AttackPattern { [Export(PropertyHint.None, "suffix:s")] public float Duration { get; private set; } = 10f; diff --git a/Scripts/Resources/SimpleMovementPattern.cs b/Scripts/Resources/SimpleMovementPattern.cs index 75b7ea9e..98c1b3bc 100644 --- a/Scripts/Resources/SimpleMovementPattern.cs +++ b/Scripts/Resources/SimpleMovementPattern.cs @@ -5,6 +5,7 @@ using Godot; namespace Cirno.Scripts.Resources; [GlobalClass] +[Tool] public partial class SimpleMovementPattern : AttackPattern { [Export] private Vector2 relativeTargetPosition;