diff --git a/3D/MapScenes/TestLevel.tscn b/3D/MapScenes/TestLevel.tscn
index c361b848..865a3f6f 100644
--- a/3D/MapScenes/TestLevel.tscn
+++ b/3D/MapScenes/TestLevel.tscn
@@ -103,7 +103,7 @@
[ext_resource type="Resource" uid="uid://bgcgeg187vg1h" path="res://Resources/Items/IcicleRepeater.tres" id="89_awrmj"]
[ext_resource type="Resource" uid="uid://cj5aa7btaw6q0" path="res://Resources/Items/Blue_Keycard.tres" id="89_dt4t5"]
[ext_resource type="PackedScene" uid="uid://yath5bvxo3cn" path="res://3D/Scenes/Props/Wall_Emitter_3D.tscn" id="93_u76qv"]
-[ext_resource type="Resource" uid="uid://qrqsywgiij7i" path="res://Resources/Bullets/simple_enemy_bullet_small_3D.tres" id="94_3vwxl"]
+[ext_resource type="Resource" uid="uid://qrqsywgiij7i" path="res://Resources/Bullets/3D/simple_enemy_bullet_small_3D.tres" id="94_3vwxl"]
[ext_resource type="Script" uid="uid://b5s5mjuk1rng5" path="res://Scripts/Resources/TimeModifier.cs" id="95_s22g3"]
[ext_resource type="Script" uid="uid://bxiprx5nwmpnu" path="res://Scripts/AttackPatterns/ShootingPattern3D.cs" id="96_qyisa"]
[ext_resource type="Script" uid="uid://w8hcpu68ssq" path="res://Scripts/Resources/BulletScripts/BulletScript3D.cs" id="97_8tkgc"]
diff --git a/3D/Scenes/Props/Box_3D_Blue.tscn b/3D/Scenes/Props/Box_3D_Blue.tscn
index 408a4262..ca48f026 100644
--- a/3D/Scenes/Props/Box_3D_Blue.tscn
+++ b/3D/Scenes/Props/Box_3D_Blue.tscn
@@ -2,7 +2,7 @@
[ext_resource type="Script" uid="uid://ccxnvbthsvka3" path="res://Scripts/Actors/Destructible3D.cs" id="1_hsg1w"]
[ext_resource type="PackedScene" uid="uid://hxn4awevjyui" path="res://3D/BlockbenchModels/Box/Box_Blue.gltf" id="1_ropdl"]
-[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/Explosion_Harmless_Small_3D.tres" id="2_cn5xh"]
+[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres" id="2_cn5xh"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsg1w"]
size = Vector3(0.763428, 0.469452, 0.77832)
diff --git a/3D/Scenes/Props/Box_3D_Green.tscn b/3D/Scenes/Props/Box_3D_Green.tscn
index 2221ab86..08df3ce8 100644
--- a/3D/Scenes/Props/Box_3D_Green.tscn
+++ b/3D/Scenes/Props/Box_3D_Green.tscn
@@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://c5k6rsawax3gf" path="res://3D/BlockbenchModels/Box/Box_Green.gltf" id="1_03sp0"]
[ext_resource type="Script" uid="uid://ccxnvbthsvka3" path="res://Scripts/Actors/Destructible3D.cs" id="1_e6kl3"]
-[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/Explosion_Harmless_Small_3D.tres" id="2_bguu7"]
+[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres" id="2_bguu7"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsg1w"]
size = Vector3(0.763428, 0.469452, 0.77832)
diff --git a/3D/Scenes/Props/Box_3D_Red.tscn b/3D/Scenes/Props/Box_3D_Red.tscn
index f6f5faff..b73d1473 100644
--- a/3D/Scenes/Props/Box_3D_Red.tscn
+++ b/3D/Scenes/Props/Box_3D_Red.tscn
@@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://ninnis3a3jbn" path="res://3D/BlockbenchModels/Box/Box_Red.gltf" id="1_fi646"]
[ext_resource type="Script" uid="uid://ccxnvbthsvka3" path="res://Scripts/Actors/Destructible3D.cs" id="1_kvqx7"]
-[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/Explosion_Harmless_Small_3D.tres" id="2_jolck"]
+[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres" id="2_jolck"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsg1w"]
size = Vector3(0.763428, 0.469452, 0.77832)
diff --git a/3D/Scenes/Props/Box_3D_Yellow.tscn b/3D/Scenes/Props/Box_3D_Yellow.tscn
index 6fbb94a4..6be3fcf2 100644
--- a/3D/Scenes/Props/Box_3D_Yellow.tscn
+++ b/3D/Scenes/Props/Box_3D_Yellow.tscn
@@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://cpwolnoq46foq" path="res://3D/BlockbenchModels/Box/Box_Yellow.gltf" id="1_0rxnx"]
[ext_resource type="Script" uid="uid://ccxnvbthsvka3" path="res://Scripts/Actors/Destructible3D.cs" id="1_l0sp5"]
-[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/Explosion_Harmless_Small_3D.tres" id="2_1if0l"]
+[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres" id="2_1if0l"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsg1w"]
size = Vector3(0.763428, 0.469452, 0.77832)
diff --git a/3D/Scenes/Props/Camera_3D.tscn b/3D/Scenes/Props/Camera_3D.tscn
index 6af2931a..8d204622 100644
--- a/3D/Scenes/Props/Camera_3D.tscn
+++ b/3D/Scenes/Props/Camera_3D.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=6 format=3 uid="uid://b0rhxqjs52fsv"]
[ext_resource type="Script" uid="uid://dg3aho2ulfngs" path="res://Scripts/Actors/3D/SecurityCamera3D.cs" id="1_tkk1t"]
-[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/Explosion_Harmless_Small_3D.tres" id="2_1t1m8"]
+[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres" id="2_1t1m8"]
[ext_resource type="PackedScene" uid="uid://bt5weyaiyhtrl" path="res://3D/BlockbenchModels/Camera/Camera.gltf" id="2_ix4p0"]
[ext_resource type="Script" uid="uid://cmgcelj1qxg8o" path="res://addons/tattomoosa.vision_cone_3d/src/VisionCone3D.gd" id="4_f1teg"]
diff --git a/3D/Scenes/Props/Furniture/Can_3D.tscn b/3D/Scenes/Props/Furniture/Can_3D.tscn
index d2ca6c2e..0f9d5767 100644
--- a/3D/Scenes/Props/Furniture/Can_3D.tscn
+++ b/3D/Scenes/Props/Furniture/Can_3D.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://ddi6ch3tuqqri"]
[ext_resource type="Script" uid="uid://ccxnvbthsvka3" path="res://Scripts/Actors/Destructible3D.cs" id="1_r46ds"]
-[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/Explosion_Harmless_Small_3D.tres" id="2_yftba"]
+[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres" id="2_yftba"]
[ext_resource type="PackedScene" uid="uid://b4t2ngnfotn0v" path="res://3D/BlockbenchModels/Furniture/Furniture_Can.gltf" id="3_r46ds"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_yftba"]
diff --git a/3D/Scenes/Props/Furniture/Computer_Tower_3D.tscn b/3D/Scenes/Props/Furniture/Computer_Tower_3D.tscn
index c5b4d1b4..c5659861 100644
--- a/3D/Scenes/Props/Furniture/Computer_Tower_3D.tscn
+++ b/3D/Scenes/Props/Furniture/Computer_Tower_3D.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://5oos364p3wex"]
[ext_resource type="Script" uid="uid://ccxnvbthsvka3" path="res://Scripts/Actors/Destructible3D.cs" id="1_uw6yr"]
-[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/Explosion_Harmless_Small_3D.tres" id="2_mieo6"]
+[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres" id="2_mieo6"]
[ext_resource type="PackedScene" uid="uid://bdegfd1qsmm83" path="res://3D/BlockbenchModels/Furniture/Computer_Tower.gltf" id="3_uw6yr"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsg1w"]
diff --git a/3D/Scenes/Props/Furniture/Shelf_3D.tscn b/3D/Scenes/Props/Furniture/Shelf_3D.tscn
index 74da7c66..4a7b3043 100644
--- a/3D/Scenes/Props/Furniture/Shelf_3D.tscn
+++ b/3D/Scenes/Props/Furniture/Shelf_3D.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://dcv3hwt7p4hgp"]
[ext_resource type="Script" uid="uid://ccxnvbthsvka3" path="res://Scripts/Actors/Destructible3D.cs" id="1_rnn28"]
-[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/Explosion_Harmless_Small_3D.tres" id="2_1of0j"]
+[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres" id="2_1of0j"]
[ext_resource type="PackedScene" uid="uid://cttslkvuo01s4" path="res://3D/BlockbenchModels/Furniture/Furniture_Shelf.gltf" id="3_3irlk"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsg1w"]
diff --git a/3D/Scenes/Props/Furniture/SmallBox_3D.tscn b/3D/Scenes/Props/Furniture/SmallBox_3D.tscn
index 395d292a..663fa772 100644
--- a/3D/Scenes/Props/Furniture/SmallBox_3D.tscn
+++ b/3D/Scenes/Props/Furniture/SmallBox_3D.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://cgxq2tvdxnkil"]
[ext_resource type="Script" uid="uid://ccxnvbthsvka3" path="res://Scripts/Actors/Destructible3D.cs" id="1_njx1r"]
-[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/Explosion_Harmless_Small_3D.tres" id="2_ispe4"]
+[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres" id="2_ispe4"]
[ext_resource type="PackedScene" uid="uid://bsj5pd4e0q4f8" path="res://3D/BlockbenchModels/Furniture/Furniture_Box.gltf" id="3_njx1r"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsg1w"]
diff --git a/3D/Scenes/Props/Furniture/Triangle_Furniture_3D.tscn b/3D/Scenes/Props/Furniture/Triangle_Furniture_3D.tscn
index d04aa9a9..6c04f22a 100644
--- a/3D/Scenes/Props/Furniture/Triangle_Furniture_3D.tscn
+++ b/3D/Scenes/Props/Furniture/Triangle_Furniture_3D.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://dsppxfki3n30g"]
[ext_resource type="Script" uid="uid://ccxnvbthsvka3" path="res://Scripts/Actors/Destructible3D.cs" id="1_td6u3"]
-[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/Explosion_Harmless_Small_3D.tres" id="2_4teip"]
+[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres" id="2_4teip"]
[ext_resource type="PackedScene" uid="uid://ca7snn0abf446" path="res://3D/BlockbenchModels/Furniture/Furniture_Triangle.gltf" id="3_td6u3"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsg1w"]
diff --git a/3D/Scenes/Props/Wall_Fan_3D.tscn b/3D/Scenes/Props/Wall_Fan_3D.tscn
index 1269cdb2..f5be5316 100644
--- a/3D/Scenes/Props/Wall_Fan_3D.tscn
+++ b/3D/Scenes/Props/Wall_Fan_3D.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://cgy5kmem2hrps"]
[ext_resource type="Script" uid="uid://ccxnvbthsvka3" path="res://Scripts/Actors/Destructible3D.cs" id="1_3hjfg"]
-[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/Explosion_Harmless_Small_3D.tres" id="2_loy8v"]
+[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres" id="2_loy8v"]
[ext_resource type="PackedScene" uid="uid://c1acf6anldpax" path="res://3D/BlockbenchModels/WallFan/Wall_Fan.gltf" id="3_3hjfg"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsg1w"]
diff --git a/3D/Scenes/Props/Wooden_Box.tscn b/3D/Scenes/Props/Wooden_Box.tscn
index 6a93f52b..815bf40a 100644
--- a/3D/Scenes/Props/Wooden_Box.tscn
+++ b/3D/Scenes/Props/Wooden_Box.tscn
@@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://etmm2bm8mj06" path="res://3D/BlockbenchModels/WoodenBox/Wooden_Box.gltf" id="1_2t24b"]
[ext_resource type="Script" uid="uid://ccxnvbthsvka3" path="res://Scripts/Actors/Destructible3D.cs" id="1_nnmn3"]
-[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/Explosion_Harmless_Small_3D.tres" id="2_5j3e2"]
+[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres" id="2_5j3e2"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsg1w"]
size = Vector3(1, 0.498138, 0.543457)
diff --git a/3D/Scenes/Props/barrel_3d.tscn b/3D/Scenes/Props/barrel_3d.tscn
index 3be30230..b05da509 100644
--- a/3D/Scenes/Props/barrel_3d.tscn
+++ b/3D/Scenes/Props/barrel_3d.tscn
@@ -2,7 +2,7 @@
[ext_resource type="Texture2D" uid="uid://du8xcvbnf30o2" path="res://ExternalMaterial/Barrel/Barrels.png" id="1_2libs"]
[ext_resource type="Script" uid="uid://ccxnvbthsvka3" path="res://Scripts/Actors/Destructible3D.cs" id="1_gafco"]
-[ext_resource type="Resource" uid="uid://bpreje4f8ok62" path="res://Resources/Bullets/Explosion_3D.tres" id="2_g54tg"]
+[ext_resource type="Resource" uid="uid://bpreje4f8ok62" path="res://Resources/Bullets/3D/Explosion_3D.tres" id="2_g54tg"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_2libs"]
height = 0.564575
diff --git a/Cirno.sln.DotSettings.user b/Cirno.sln.DotSettings.user
index ad575397..514ca554 100644
--- a/Cirno.sln.DotSettings.user
+++ b/Cirno.sln.DotSettings.user
@@ -20,6 +20,7 @@
ForceIncluded
ForceIncluded
ForceIncluded
+ ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
diff --git a/Resources/BossPhases/Rumia/Rumia_NS1_3D.tres b/Resources/BossPhases/Rumia/Rumia_NS1_3D.tres
new file mode 100644
index 00000000..fd771232
--- /dev/null
+++ b/Resources/BossPhases/Rumia/Rumia_NS1_3D.tres
@@ -0,0 +1,54 @@
+[gd_resource type="Resource" script_class="BossPhase" load_steps=9 format=3 uid="uid://cnsmcexyhppdo"]
+
+[ext_resource type="Script" uid="uid://fo8sf11p058s" path="res://Scripts/Resources/BulletScripts/SimpleMovementPattern3D.cs" id="1_yfihc"]
+[ext_resource type="Resource" uid="uid://bmdxhsjh2qla6" path="res://Resources/BossPhases/Rumia/Rumia_NS_1_Chase.tres" id="2_nr3fd"]
+[ext_resource type="Resource" uid="uid://chcinoo8pkkwq" path="res://Resources/Patterns/Rumia_NS_2_3D.tres" id="3_d7m3h"]
+[ext_resource type="Script" uid="uid://cdd6q2h0t1hhq" path="res://Scripts/Resources/BossPhase.cs" id="4_okj7o"]
+
+[sub_resource type="Resource" id="Resource_xfnue"]
+script = ExtResource("1_yfihc")
+relativeTargetPosition = Vector2(-4, 0)
+moveDuration = 2.0
+RelativeToPlayer = true
+transitionType = 0
+easeType = 2
+WaitForCompletion = false
+metadata/_custom_type_script = "uid://fo8sf11p058s"
+
+[sub_resource type="Resource" id="Resource_lrsat"]
+script = ExtResource("1_yfihc")
+relativeTargetPosition = Vector2(0, 0)
+moveDuration = 1.0
+RelativeToPlayer = false
+transitionType = 0
+easeType = 2
+WaitForCompletion = false
+metadata/_custom_type_script = "uid://fo8sf11p058s"
+
+[sub_resource type="Resource" id="Resource_ovn8y"]
+script = ExtResource("1_yfihc")
+relativeTargetPosition = Vector2(4, 0)
+moveDuration = 2.0
+RelativeToPlayer = true
+transitionType = 0
+easeType = 2
+WaitForCompletion = false
+metadata/_custom_type_script = "uid://fo8sf11p058s"
+
+[sub_resource type="Resource" id="Resource_mi6hp"]
+script = ExtResource("1_yfihc")
+relativeTargetPosition = Vector2(0, 0)
+moveDuration = 1.0
+RelativeToPlayer = false
+transitionType = 0
+easeType = 2
+WaitForCompletion = false
+metadata/_custom_type_script = "uid://fo8sf11p058s"
+
+[resource]
+script = ExtResource("4_okj7o")
+PhaseName = ""
+Threshold = 100
+PlayAnimation = false
+Patterns = Array[Object]([SubResource("Resource_xfnue"), ExtResource("2_nr3fd"), ExtResource("3_d7m3h"), SubResource("Resource_lrsat"), ExtResource("2_nr3fd"), ExtResource("3_d7m3h"), SubResource("Resource_ovn8y"), ExtResource("2_nr3fd"), ExtResource("3_d7m3h"), SubResource("Resource_mi6hp"), ExtResource("2_nr3fd"), ExtResource("3_d7m3h")])
+metadata/_custom_type_script = "uid://cdd6q2h0t1hhq"
diff --git a/Resources/BossPhases/Rumia/Rumia_SP1_3D.tres b/Resources/BossPhases/Rumia/Rumia_SP1_3D.tres
new file mode 100644
index 00000000..ad5f53be
--- /dev/null
+++ b/Resources/BossPhases/Rumia/Rumia_SP1_3D.tres
@@ -0,0 +1,88 @@
+[gd_resource type="Resource" script_class="BossPhase" load_steps=12 format=3 uid="uid://cwrjsponw40pd"]
+
+[ext_resource type="Script" uid="uid://cdd6q2h0t1hhq" path="res://Scripts/Resources/BossPhase.cs" id="1_a65t7"]
+[ext_resource type="Resource" uid="uid://cvcpb6u6mo8oo" path="res://Resources/Bullets/3D/rice_bullet_small_blue_3D.tres" id="1_d7vfp"]
+[ext_resource type="Script" uid="uid://b5s5mjuk1rng5" path="res://Scripts/Resources/TimeModifier.cs" id="2_ali57"]
+[ext_resource type="Script" uid="uid://dka43xos84kbw" path="res://Scripts/Resources/Modifiers/DelayedRotationModifier.cs" id="3_gq3ok"]
+[ext_resource type="Script" uid="uid://bxiprx5nwmpnu" path="res://Scripts/AttackPatterns/ShootingPattern3D.cs" id="4_38hmx"]
+[ext_resource type="Script" uid="uid://cg7gi3tva4gvw" path="res://Scripts/AttackPatterns/WaitPattern.cs" id="5_ali57"]
+
+[sub_resource type="Resource" id="Resource_r87xf"]
+script = ExtResource("3_gq3ok")
+TimeInSeconds = 1.0
+ModifierType = 1
+Value = 90.0
+Continuous = false
+metadata/_custom_type_script = "uid://dka43xos84kbw"
+
+[sub_resource type="Resource" id="Resource_4hlom"]
+script = ExtResource("4_38hmx")
+BulletResource = ExtResource("1_d7vfp")
+EmitterOffset = Vector3(0, 0, 0)
+bulletCount = 20
+rotationSpeed = 0.0
+_rotationOffset = 0.0
+duration = 1.0
+spread = 360.0
+burstInterval = 2.0
+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("2_ali57")]([SubResource("Resource_r87xf")])
+WaitForCompletion = false
+metadata/_custom_type_script = "uid://bxiprx5nwmpnu"
+
+[sub_resource type="Resource" id="Resource_d7vfp"]
+script = ExtResource("3_gq3ok")
+TimeInSeconds = 1.0
+ModifierType = 1
+Value = -90.0
+Continuous = false
+metadata/_custom_type_script = "uid://dka43xos84kbw"
+
+[sub_resource type="Resource" id="Resource_ali57"]
+script = ExtResource("4_38hmx")
+BulletResource = ExtResource("1_d7vfp")
+EmitterOffset = Vector3(0, 0, 0)
+bulletCount = 20
+rotationSpeed = 0.0
+_rotationOffset = 0.0
+duration = 1.0
+spread = 360.0
+burstInterval = 2.0
+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("2_ali57")]([SubResource("Resource_d7vfp")])
+WaitForCompletion = false
+metadata/_custom_type_script = "uid://bxiprx5nwmpnu"
+
+[sub_resource type="Resource" id="Resource_gq3ok"]
+script = ExtResource("5_ali57")
+SecondsToWait = 2.0
+WaitForCompletion = true
+metadata/_custom_type_script = "uid://cg7gi3tva4gvw"
+
+[resource]
+script = ExtResource("1_a65t7")
+PhaseName = "Darkness Sign \"Demarcation\""
+Threshold = 50
+PlayAnimation = false
+Patterns = [SubResource("Resource_4hlom"), SubResource("Resource_ali57"), SubResource("Resource_gq3ok")]
+metadata/_custom_type_script = "uid://cdd6q2h0t1hhq"
diff --git a/Resources/BossPhases/Rumia_Boss_Script_3D.tres b/Resources/BossPhases/Rumia_Boss_Script_3D.tres
index 9c5bcc17..3a02472b 100644
--- a/Resources/BossPhases/Rumia_Boss_Script_3D.tres
+++ b/Resources/BossPhases/Rumia_Boss_Script_3D.tres
@@ -1,61 +1,13 @@
-[gd_resource type="Resource" script_class="BossScript" load_steps=11 format=3 uid="uid://1u4y6hvc318e"]
+[gd_resource type="Resource" script_class="BossScript" load_steps=6 format=3 uid="uid://1u4y6hvc318e"]
[ext_resource type="Script" uid="uid://cdd6q2h0t1hhq" path="res://Scripts/Resources/BossPhase.cs" id="1_k3wbt"]
-[ext_resource type="Script" uid="uid://fo8sf11p058s" path="res://Scripts/Resources/BulletScripts/SimpleMovementPattern3D.cs" id="2_mi6hp"]
+[ext_resource type="Resource" uid="uid://cnsmcexyhppdo" path="res://Resources/BossPhases/Rumia/Rumia_NS1_3D.tres" id="2_ovn8y"]
[ext_resource type="Script" uid="uid://inasa76li3ym" path="res://Scripts/Resources/ScriptableBullets/BossScript.cs" id="2_t8f0y"]
-[ext_resource type="Resource" uid="uid://bmdxhsjh2qla6" path="res://Resources/BossPhases/Rumia/Rumia_NS_1_Chase.tres" id="3_ovn8y"]
-[ext_resource type="Resource" uid="uid://chcinoo8pkkwq" path="res://Resources/Patterns/Rumia_NS_2_3D.tres" id="5_mi6hp"]
-
-[sub_resource type="Resource" id="Resource_xfnue"]
-script = ExtResource("2_mi6hp")
-relativeTargetPosition = Vector2(-4, 0)
-moveDuration = 2.0
-RelativeToPlayer = true
-transitionType = 0
-easeType = 2
-WaitForCompletion = false
-metadata/_custom_type_script = "uid://fo8sf11p058s"
-
-[sub_resource type="Resource" id="Resource_lrsat"]
-script = ExtResource("2_mi6hp")
-relativeTargetPosition = Vector2(0, 0)
-moveDuration = 1.0
-RelativeToPlayer = false
-transitionType = 0
-easeType = 2
-WaitForCompletion = false
-metadata/_custom_type_script = "uid://fo8sf11p058s"
-
-[sub_resource type="Resource" id="Resource_ovn8y"]
-script = ExtResource("2_mi6hp")
-relativeTargetPosition = Vector2(4, 0)
-moveDuration = 2.0
-RelativeToPlayer = true
-transitionType = 0
-easeType = 2
-WaitForCompletion = false
-metadata/_custom_type_script = "uid://fo8sf11p058s"
-
-[sub_resource type="Resource" id="Resource_mi6hp"]
-script = ExtResource("2_mi6hp")
-relativeTargetPosition = Vector2(0, 0)
-moveDuration = 1.0
-RelativeToPlayer = false
-transitionType = 0
-easeType = 2
-WaitForCompletion = false
-metadata/_custom_type_script = "uid://fo8sf11p058s"
-
-[sub_resource type="Resource" id="Resource_l0s11"]
-script = ExtResource("1_k3wbt")
-PhaseName = ""
-Threshold = 0
-PlayAnimation = false
-Patterns = Array[Object]([SubResource("Resource_xfnue"), ExtResource("3_ovn8y"), ExtResource("5_mi6hp"), SubResource("Resource_lrsat"), ExtResource("3_ovn8y"), ExtResource("5_mi6hp"), SubResource("Resource_ovn8y"), ExtResource("3_ovn8y"), ExtResource("5_mi6hp"), SubResource("Resource_mi6hp"), ExtResource("3_ovn8y"), ExtResource("5_mi6hp")])
-metadata/_custom_type_script = "uid://cdd6q2h0t1hhq"
+[ext_resource type="Resource" uid="uid://cwrjsponw40pd" path="res://Resources/BossPhases/Rumia/Rumia_SP1_3D.tres" id="3_mi6hp"]
+[ext_resource type="Resource" uid="uid://ddb5dqocmk6x7" path="res://Resources/BossPhases/Rumia_NS2.tres" id="4_xfnue"]
[resource]
script = ExtResource("2_t8f0y")
BossName = &"Rumia"
-Phases = Array[ExtResource("1_k3wbt")]([SubResource("Resource_l0s11")])
+Phases = Array[ExtResource("1_k3wbt")]([ExtResource("3_mi6hp"), ExtResource("2_ovn8y"), ExtResource("4_xfnue")])
metadata/_custom_type_script = "uid://inasa76li3ym"
diff --git a/Resources/BossPhases/Rumia_NS2.tres b/Resources/BossPhases/Rumia_NS2.tres
index f3364041..5141a5b3 100644
--- a/Resources/BossPhases/Rumia_NS2.tres
+++ b/Resources/BossPhases/Rumia_NS2.tres
@@ -23,21 +23,17 @@ Continuous = false
[sub_resource type="Resource" id="Resource_jtuih"]
script = ExtResource("3_ow5fu")
BulletScene = ExtResource("1_as8n2")
+BulletSize = 0.0
BulletSpeed = 20.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = false
Owner = 2
DamageType = 0
-RotateSprite = true
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
-Attributes = 0
+Attributes = 34
TimeModifiers = Array[Object]([SubResource("Resource_cj86d")])
[sub_resource type="Resource" id="Resource_puvpt"]
@@ -74,19 +70,15 @@ Continuous = false
[sub_resource type="Resource" id="Resource_axlrq"]
script = ExtResource("3_ow5fu")
BulletScene = ExtResource("1_as8n2")
+BulletSize = 0.0
BulletSpeed = 20.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = true
Owner = 2
DamageType = 0
-RotateSprite = true
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
TimeModifiers = Array[Object]([SubResource("Resource_pbgtt")])
@@ -118,19 +110,15 @@ WaitForCompletion = true
[sub_resource type="Resource" id="Resource_w7b0n"]
script = ExtResource("3_ow5fu")
BulletScene = ExtResource("4_tek7n")
+BulletSize = 0.0
BulletSpeed = 20.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = false
Owner = 2
DamageType = 0
-RotateSprite = true
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
TimeModifiers = Array[Object]([SubResource("Resource_cj86d")])
@@ -162,19 +150,15 @@ WaitForCompletion = false
[sub_resource type="Resource" id="Resource_3iv0j"]
script = ExtResource("3_ow5fu")
BulletScene = ExtResource("4_tek7n")
+BulletSize = 0.0
BulletSpeed = 20.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = false
Owner = 2
DamageType = 0
-RotateSprite = true
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
TimeModifiers = Array[Object]([SubResource("Resource_pbgtt")])
@@ -206,19 +190,15 @@ WaitForCompletion = true
[sub_resource type="Resource" id="Resource_5jr31"]
script = ExtResource("3_ow5fu")
BulletScene = ExtResource("5_n4xqo")
+BulletSize = 0.0
BulletSpeed = 20.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = false
Owner = 2
DamageType = 0
-RotateSprite = true
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
TimeModifiers = Array[Object]([SubResource("Resource_cj86d")])
@@ -250,19 +230,15 @@ WaitForCompletion = false
[sub_resource type="Resource" id="Resource_mg2qy"]
script = ExtResource("3_ow5fu")
BulletScene = ExtResource("5_n4xqo")
+BulletSize = 0.0
BulletSpeed = 20.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = true
Owner = 2
DamageType = 0
-RotateSprite = true
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
TimeModifiers = Array[Object]([SubResource("Resource_pbgtt")])
@@ -316,19 +292,15 @@ Continuous = false
[sub_resource type="Resource" id="Resource_gfhkm"]
script = ExtResource("3_ow5fu")
BulletScene = ExtResource("7_gsnyb")
+BulletSize = 0.0
BulletSpeed = 80.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = true
Owner = 0
DamageType = 0
-RotateSprite = true
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
TimeModifiers = Array[Object]([SubResource("Resource_ln27r"), SubResource("Resource_nal31")])
@@ -368,19 +340,15 @@ WaitForCompletion = true
[sub_resource type="Resource" id="Resource_4r74g"]
script = ExtResource("3_ow5fu")
BulletScene = ExtResource("7_gsnyb")
+BulletSize = 0.0
BulletSpeed = 80.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = true
Owner = 2
DamageType = 0
-RotateSprite = true
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
TimeModifiers = Array[Object]([SubResource("Resource_ln27r"), SubResource("Resource_nal31")])
@@ -420,19 +388,15 @@ WaitForCompletion = true
[sub_resource type="Resource" id="Resource_vgg5n"]
script = ExtResource("3_ow5fu")
BulletScene = ExtResource("7_gsnyb")
+BulletSize = 0.0
BulletSpeed = 80.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = false
Owner = 2
DamageType = 0
-RotateSprite = true
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
TimeModifiers = Array[Object]([SubResource("Resource_ln27r"), SubResource("Resource_nal31")])
@@ -472,19 +436,15 @@ WaitForCompletion = true
[sub_resource type="Resource" id="Resource_wlhxp"]
script = ExtResource("3_ow5fu")
BulletScene = ExtResource("7_gsnyb")
+BulletSize = 0.0
BulletSpeed = 80.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = false
Owner = 2
DamageType = 0
-RotateSprite = true
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
TimeModifiers = Array[Object]([SubResource("Resource_ln27r"), SubResource("Resource_nal31")])
diff --git a/Resources/BossPhases/Rumia_SP1.tres b/Resources/BossPhases/Rumia_SP1.tres
index 55bb9bc3..d53955db 100644
--- a/Resources/BossPhases/Rumia_SP1.tres
+++ b/Resources/BossPhases/Rumia_SP1.tres
@@ -38,19 +38,15 @@ ScalingFactor = 10.0
[sub_resource type="Resource" id="Resource_2o6nd"]
script = ExtResource("4_juoir")
BulletScene = ExtResource("1_o4um1")
+BulletSize = 0.0
BulletSpeed = 100.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = false
Owner = 2
DamageType = 0
-RotateSprite = false
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
Modifier = SubResource("Resource_80ngy")
@@ -91,19 +87,15 @@ ScalingFactor = 10.0
[sub_resource type="Resource" id="Resource_j7r4h"]
script = ExtResource("4_juoir")
BulletScene = ExtResource("4_ruawj")
+BulletSize = 0.0
BulletSpeed = 100.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = false
Owner = 2
DamageType = 0
-RotateSprite = false
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
Modifier = SubResource("Resource_e6jj0")
diff --git a/Resources/BulletScripts/Emitter_Sprial_Test_Bullets.tres b/Resources/BulletScripts/Emitter_Sprial_Test_Bullets.tres
index 14e81d11..51a5db86 100644
--- a/Resources/BulletScripts/Emitter_Sprial_Test_Bullets.tres
+++ b/Resources/BulletScripts/Emitter_Sprial_Test_Bullets.tres
@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="BulletScript3D" load_steps=6 format=3 uid="uid://bbogxl60hvdp1"]
-[ext_resource type="Resource" uid="uid://wbdspte0ch33" path="res://Resources/Bullets/simple_enemy_bullet_3D.tres" id="1_bjips"]
+[ext_resource type="Resource" uid="uid://wbdspte0ch33" path="res://Resources/Bullets/3D/simple_enemy_bullet_3D.tres" id="1_bjips"]
[ext_resource type="Script" uid="uid://b5s5mjuk1rng5" path="res://Scripts/Resources/TimeModifier.cs" id="2_yjtbi"]
[ext_resource type="Script" uid="uid://bxiprx5nwmpnu" path="res://Scripts/AttackPatterns/ShootingPattern3D.cs" id="3_2rxa2"]
[ext_resource type="Script" uid="uid://w8hcpu68ssq" path="res://Scripts/Resources/BulletScripts/BulletScript3D.cs" id="4_mksdg"]
diff --git a/Resources/Bullets/Explosion_3D.tres b/Resources/Bullets/3D/Explosion_3D.tres
similarity index 100%
rename from Resources/Bullets/Explosion_3D.tres
rename to Resources/Bullets/3D/Explosion_3D.tres
diff --git a/Resources/Bullets/Explosion_Harmless_3D.tres b/Resources/Bullets/3D/Explosion_Harmless_3D.tres
similarity index 100%
rename from Resources/Bullets/Explosion_Harmless_3D.tres
rename to Resources/Bullets/3D/Explosion_Harmless_3D.tres
diff --git a/Resources/Bullets/Explosion_Harmless_Small_3D.tres b/Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres
similarity index 100%
rename from Resources/Bullets/Explosion_Harmless_Small_3D.tres
rename to Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres
diff --git a/Resources/Bullets/icicle_gun_bullets_3D.tres b/Resources/Bullets/3D/icicle_gun_bullets_3D.tres
similarity index 73%
rename from Resources/Bullets/icicle_gun_bullets_3D.tres
rename to Resources/Bullets/3D/icicle_gun_bullets_3D.tres
index ce1d8782..e0deeba5 100644
--- a/Resources/Bullets/icicle_gun_bullets_3D.tres
+++ b/Resources/Bullets/3D/icicle_gun_bullets_3D.tres
@@ -1,24 +1,22 @@
-[gd_resource type="Resource" script_class="BulletResource" load_steps=3 format=3 uid="uid://csmq6hngkx41e"]
+[gd_resource type="Resource" script_class="BulletResource" load_steps=4 format=3 uid="uid://csmq6hngkx41e"]
[ext_resource type="PackedScene" uid="uid://byc67yxbkefyk" path="res://Scenes/Weapons/bullet_3D.tscn" id="1_qojek"]
+[ext_resource type="Texture2D" uid="uid://cybpmpb0d8yva" path="res://Sprites/Projectile.png" id="2_663pf"]
[ext_resource type="Script" uid="uid://dslyrfcej3g2n" path="res://Scripts/Resources/BulletResource.cs" id="3_xep6w"]
[resource]
script = ExtResource("3_xep6w")
BulletScene = ExtResource("1_qojek")
+BulletSprite = ExtResource("2_663pf")
+BulletSize = 0.08
BulletSpeed = 10.0
Direction = Vector2(1, 0)
BulletDamage = 0.5
MaxDamage = 1.2
Knockback = 100.0
LifeTime = 10.0
-DestroyOnCollision = true
Owner = 1
DamageType = 3
-RotateSprite = false
-Controllable = false
-Freezable = true
-Grazeable = false
GrazeValue = 0.2
Attributes = 256
TimeModifiers = []
diff --git a/Resources/Bullets/3D/rice_bullet_small_blue_3D.tres b/Resources/Bullets/3D/rice_bullet_small_blue_3D.tres
new file mode 100644
index 00000000..b74cf423
--- /dev/null
+++ b/Resources/Bullets/3D/rice_bullet_small_blue_3D.tres
@@ -0,0 +1,23 @@
+[gd_resource type="Resource" script_class="BulletResource" load_steps=4 format=3 uid="uid://cvcpb6u6mo8oo"]
+
+[ext_resource type="PackedScene" uid="uid://d28e1t2c0lwbp" path="res://Scenes/Weapons/base_enemy_bullet_3D.tscn" id="1_8m7mi"]
+[ext_resource type="Texture2D" uid="uid://wdw60fumilgh" path="res://Sprites/Bullets/rice_bullet_blue_small.png" id="2_p44mg"]
+[ext_resource type="Script" uid="uid://dslyrfcej3g2n" path="res://Scripts/Resources/BulletResource.cs" id="3_56owm"]
+
+[resource]
+script = ExtResource("3_56owm")
+BulletScene = ExtResource("1_8m7mi")
+BulletSprite = ExtResource("2_p44mg")
+BulletSize = 0.08
+BulletSpeed = 2.5
+Direction = Vector2(1, 0)
+BulletDamage = 20.0
+MaxDamage = 1.0
+Knockback = 1.0
+LifeTime = 20.0
+Owner = 2
+DamageType = 0
+GrazeValue = 0.2
+Attributes = 98
+TimeModifiers = null
+metadata/_custom_type_script = "uid://dslyrfcej3g2n"
diff --git a/Resources/Bullets/simple_enemy_bullet_3D.tres b/Resources/Bullets/3D/simple_enemy_bullet_3D.tres
similarity index 72%
rename from Resources/Bullets/simple_enemy_bullet_3D.tres
rename to Resources/Bullets/3D/simple_enemy_bullet_3D.tres
index 52f3f650..061fd60f 100644
--- a/Resources/Bullets/simple_enemy_bullet_3D.tres
+++ b/Resources/Bullets/3D/simple_enemy_bullet_3D.tres
@@ -1,24 +1,22 @@
-[gd_resource type="Resource" script_class="BulletResource" load_steps=3 format=3 uid="uid://wbdspte0ch33"]
+[gd_resource type="Resource" script_class="BulletResource" load_steps=4 format=3 uid="uid://wbdspte0ch33"]
[ext_resource type="PackedScene" uid="uid://d28e1t2c0lwbp" path="res://Scenes/Weapons/base_enemy_bullet_3D.tscn" id="1_l7ter"]
[ext_resource type="Script" uid="uid://dslyrfcej3g2n" path="res://Scripts/Resources/BulletResource.cs" id="2_5nrie"]
+[ext_resource type="Texture2D" uid="uid://cfldr7l7dearo" path="res://Sprites/Bullets/mid_bullet_red.png" id="2_eh6d2"]
[resource]
script = ExtResource("2_5nrie")
BulletScene = ExtResource("1_l7ter")
+BulletSprite = ExtResource("2_eh6d2")
+BulletSize = 0.161
BulletSpeed = 3.0
Direction = Vector2(1, 0)
BulletDamage = 12.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 10.0
-DestroyOnCollision = true
Owner = 2
DamageType = 0
-RotateSprite = false
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 290
TimeModifiers = []
diff --git a/Resources/Bullets/simple_enemy_bullet_small_3D.tres b/Resources/Bullets/3D/simple_enemy_bullet_small_3D.tres
similarity index 73%
rename from Resources/Bullets/simple_enemy_bullet_small_3D.tres
rename to Resources/Bullets/3D/simple_enemy_bullet_small_3D.tres
index bbbf773a..555c2e89 100644
--- a/Resources/Bullets/simple_enemy_bullet_small_3D.tres
+++ b/Resources/Bullets/3D/simple_enemy_bullet_small_3D.tres
@@ -1,24 +1,22 @@
-[gd_resource type="Resource" script_class="BulletResource" load_steps=3 format=3 uid="uid://qrqsywgiij7i"]
+[gd_resource type="Resource" script_class="BulletResource" load_steps=4 format=3 uid="uid://qrqsywgiij7i"]
[ext_resource type="PackedScene" uid="uid://c133312rx63ps" path="res://Scenes/Weapons/base_enemy_bullet_3D_small.tscn" id="1_pm333"]
[ext_resource type="Script" uid="uid://dslyrfcej3g2n" path="res://Scripts/Resources/BulletResource.cs" id="2_4bl80"]
+[ext_resource type="Texture2D" uid="uid://bdyd0bht18n47" path="res://Sprites/EnemyProjectile.png" id="2_e1tuw"]
[resource]
script = ExtResource("2_4bl80")
BulletScene = ExtResource("1_pm333")
+BulletSprite = ExtResource("2_e1tuw")
+BulletSize = 0.08
BulletSpeed = 2.5
Direction = Vector2(1, 0)
BulletDamage = 8.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 10.0
-DestroyOnCollision = true
Owner = 2
DamageType = 0
-RotateSprite = false
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 290
TimeModifiers = []
diff --git a/Resources/Bullets/Boss/Rumia/Rumia_Red_Chase_Bullet.tres b/Resources/Bullets/Boss/Rumia/Rumia_Red_Chase_Bullet.tres
index f310dafc..c5d7065b 100644
--- a/Resources/Bullets/Boss/Rumia/Rumia_Red_Chase_Bullet.tres
+++ b/Resources/Bullets/Boss/Rumia/Rumia_Red_Chase_Bullet.tres
@@ -19,19 +19,15 @@ Continuous = false
[resource]
script = ExtResource("3_871qc")
BulletScene = ExtResource("1_y6dig")
+BulletSize = 0.0
BulletSpeed = 70.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = true
Owner = 2
DamageType = 0
-RotateSprite = false
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 0.2
Attributes = 34
Modifier = SubResource("Resource_jeq72")
diff --git a/Resources/Enemies/Rumia_3D.tres b/Resources/Enemies/Rumia_3D.tres
index 812c6e7c..60a1c22e 100644
--- a/Resources/Enemies/Rumia_3D.tres
+++ b/Resources/Enemies/Rumia_3D.tres
@@ -51,7 +51,7 @@ script = ExtResource("10_wrko3")
EnemyName = &"Rumia"
EnemyKey = &"RUMIA"
PrefabPath = &"uid://cboj3aamnco2r"
-MaxHealth = 900.0
+MaxHealth = 500.0
MovementSpeed = 2.0
Weapon = ExtResource("9_80fxw")
LootDrops = Array[ExtResource("3_lo74v")]([SubResource("Resource_c8nix"), SubResource("Resource_gs2l3"), SubResource("Resource_sqnvg"), SubResource("Resource_5tyar"), SubResource("Resource_48xq6")])
diff --git a/Resources/Patterns/rumia_ns_2.tres b/Resources/Patterns/rumia_ns_2.tres
index 707de4eb..ad31ddf9 100644
--- a/Resources/Patterns/rumia_ns_2.tres
+++ b/Resources/Patterns/rumia_ns_2.tres
@@ -10,19 +10,15 @@
[sub_resource type="Resource" id="Resource_uv53h"]
script = ExtResource("2_gfvud")
BulletScene = ExtResource("1_4xpdn")
+BulletSize = 0.0
BulletSpeed = 40.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = false
Owner = 2
DamageType = 0
-RotateSprite = false
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
TimeModifiers = []
@@ -54,19 +50,15 @@ WaitForCompletion = true
[sub_resource type="Resource" id="Resource_wtj61"]
script = ExtResource("2_gfvud")
BulletScene = ExtResource("3_gr7a3")
+BulletSize = 0.0
BulletSpeed = 50.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = false
Owner = 2
DamageType = 0
-RotateSprite = false
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
TimeModifiers = []
@@ -98,19 +90,15 @@ WaitForCompletion = true
[sub_resource type="Resource" id="Resource_qbq0m"]
script = ExtResource("2_gfvud")
BulletScene = ExtResource("1_4xpdn")
+BulletSize = 0.0
BulletSpeed = 50.0
Direction = Vector2(1, 0)
BulletDamage = 20.0
MaxDamage = 1.0
Knockback = 1.0
LifeTime = 20.0
-DestroyOnCollision = false
Owner = 2
DamageType = 0
-RotateSprite = false
-Controllable = false
-Freezable = true
-Grazeable = true
GrazeValue = 1.0
Attributes = 0
TimeModifiers = []
diff --git a/Resources/Weapons/EnemyShotgun_3D.tres b/Resources/Weapons/EnemyShotgun_3D.tres
index a04108f8..66433bb6 100644
--- a/Resources/Weapons/EnemyShotgun_3D.tres
+++ b/Resources/Weapons/EnemyShotgun_3D.tres
@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="WeaponResource" load_steps=3 format=3 uid="uid://dtrmtjd7j03k8"]
-[ext_resource type="Resource" uid="uid://qrqsywgiij7i" path="res://Resources/Bullets/simple_enemy_bullet_small_3D.tres" id="1_l2h7p"]
+[ext_resource type="Resource" uid="uid://qrqsywgiij7i" path="res://Resources/Bullets/3D/simple_enemy_bullet_small_3D.tres" id="1_l2h7p"]
[ext_resource type="Script" uid="uid://b6fmrnipv88bk" path="res://Scripts/Resources/WeaponResource.cs" id="2_0kc7l"]
[resource]
diff --git a/Resources/Weapons/EnemyWeapon_Big_3D.tres b/Resources/Weapons/EnemyWeapon_Big_3D.tres
index 4c9f988f..5b9735c4 100644
--- a/Resources/Weapons/EnemyWeapon_Big_3D.tres
+++ b/Resources/Weapons/EnemyWeapon_Big_3D.tres
@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="WeaponResource" load_steps=3 format=3 uid="uid://c6ywv08e6is5o"]
-[ext_resource type="Resource" uid="uid://wbdspte0ch33" path="res://Resources/Bullets/simple_enemy_bullet_3D.tres" id="1_itg3a"]
+[ext_resource type="Resource" uid="uid://wbdspte0ch33" path="res://Resources/Bullets/3D/simple_enemy_bullet_3D.tres" id="1_itg3a"]
[ext_resource type="Script" uid="uid://b6fmrnipv88bk" path="res://Scripts/Resources/WeaponResource.cs" id="2_6m4qy"]
[resource]
diff --git a/Resources/Weapons/EnemyWeapon_Small_3D.tres b/Resources/Weapons/EnemyWeapon_Small_3D.tres
index 2604a685..026d6e3d 100644
--- a/Resources/Weapons/EnemyWeapon_Small_3D.tres
+++ b/Resources/Weapons/EnemyWeapon_Small_3D.tres
@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="WeaponResource" load_steps=3 format=3 uid="uid://co6x2jq0fslql"]
-[ext_resource type="Resource" uid="uid://qrqsywgiij7i" path="res://Resources/Bullets/simple_enemy_bullet_small_3D.tres" id="1_mw07s"]
+[ext_resource type="Resource" uid="uid://qrqsywgiij7i" path="res://Resources/Bullets/3D/simple_enemy_bullet_small_3D.tres" id="1_mw07s"]
[ext_resource type="Script" uid="uid://b6fmrnipv88bk" path="res://Scripts/Resources/WeaponResource.cs" id="2_gpx82"]
[resource]
diff --git a/Resources/Weapons/Ice_Shotgun_T0_3D.tres b/Resources/Weapons/Ice_Shotgun_T0_3D.tres
index 6f17c5e6..9d6947b9 100644
--- a/Resources/Weapons/Ice_Shotgun_T0_3D.tres
+++ b/Resources/Weapons/Ice_Shotgun_T0_3D.tres
@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="WeaponResource" load_steps=5 format=3 uid="uid://bsdi1iudx5431"]
-[ext_resource type="Resource" uid="uid://csmq6hngkx41e" path="res://Resources/Bullets/icicle_gun_bullets_3D.tres" id="1_ublmp"]
+[ext_resource type="Resource" uid="uid://csmq6hngkx41e" path="res://Resources/Bullets/3D/icicle_gun_bullets_3D.tres" id="1_ublmp"]
[ext_resource type="AudioStream" uid="uid://jsv3yjluv1au" path="res://SFX/Weapons/Reload_01.wav" id="2_vgotw"]
[ext_resource type="AudioStream" uid="uid://oyjbk3qjp5cr" path="res://SFX/Chiptone_Source/Shotgun.wav" id="3_uxcop"]
[ext_resource type="Script" uid="uid://b6fmrnipv88bk" path="res://Scripts/Resources/WeaponResource.cs" id="4_u3gqe"]
diff --git a/Resources/Weapons/IcicleGun_3D.tres b/Resources/Weapons/IcicleGun_3D.tres
index 4b3a2886..3051b165 100644
--- a/Resources/Weapons/IcicleGun_3D.tres
+++ b/Resources/Weapons/IcicleGun_3D.tres
@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="WeaponResource" load_steps=5 format=3 uid="uid://bohkmf6g1fi2o"]
-[ext_resource type="Resource" uid="uid://csmq6hngkx41e" path="res://Resources/Bullets/icicle_gun_bullets_3D.tres" id="1_d2kl0"]
+[ext_resource type="Resource" uid="uid://csmq6hngkx41e" path="res://Resources/Bullets/3D/icicle_gun_bullets_3D.tres" id="1_d2kl0"]
[ext_resource type="AudioStream" uid="uid://jsv3yjluv1au" path="res://SFX/Weapons/Reload_01.wav" id="2_sdmjb"]
[ext_resource type="AudioStream" uid="uid://d16xfhll0fujt" path="res://SFX/Ice_Shot.wav" id="3_hj8fq"]
[ext_resource type="Script" uid="uid://b6fmrnipv88bk" path="res://Scripts/Resources/WeaponResource.cs" id="4_ld57e"]
diff --git a/Resources/Weapons/IcicleRepeater_T0_3D.tres b/Resources/Weapons/IcicleRepeater_T0_3D.tres
index 112f2b24..501a964d 100644
--- a/Resources/Weapons/IcicleRepeater_T0_3D.tres
+++ b/Resources/Weapons/IcicleRepeater_T0_3D.tres
@@ -1,6 +1,6 @@
[gd_resource type="Resource" script_class="WeaponResource" load_steps=5 format=3 uid="uid://dhi6ml0xhkka5"]
-[ext_resource type="Resource" uid="uid://csmq6hngkx41e" path="res://Resources/Bullets/icicle_gun_bullets_3D.tres" id="1_nxdsa"]
+[ext_resource type="Resource" uid="uid://csmq6hngkx41e" path="res://Resources/Bullets/3D/icicle_gun_bullets_3D.tres" id="1_nxdsa"]
[ext_resource type="AudioStream" uid="uid://jsv3yjluv1au" path="res://SFX/Weapons/Reload_01.wav" id="2_grfjv"]
[ext_resource type="AudioStream" uid="uid://cjg8r7bthkfsy" path="res://SFX/Laser_shoot 11.wav" id="3_agxp1"]
[ext_resource type="Script" uid="uid://b6fmrnipv88bk" path="res://Scripts/Resources/WeaponResource.cs" id="4_hppsh"]
diff --git a/Scenes/Actors/Generic_Boss_3D.tscn b/Scenes/Actors/Generic_Boss_3D.tscn
index 6adc4799..635d948d 100644
--- a/Scenes/Actors/Generic_Boss_3D.tscn
+++ b/Scenes/Actors/Generic_Boss_3D.tscn
@@ -77,10 +77,11 @@ shape = SubResource("CapsuleShape3D_jgarc")
[node name="StateMachine" type="Node" parent="."]
script = ExtResource("3_nghfy")
-[node name="Init" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "DetectionProvider", "_moduleNodes")]
+[node name="Init" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "DetectionProvider", "HealthProvider", "_moduleNodes")]
script = ExtResource("4_ypm0v")
Storage = NodePath("../../Storage")
DetectionProvider = NodePath("../../PlayerDetectionProvider")
+HealthProvider = NodePath("../../DamageReceiver/HealthProvider")
_moduleNodes = [NodePath("../../AnimationModule")]
[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "GravityProvider", "_moduleNodes")]
diff --git a/Scenes/Actors/Generic_Enemy_FSM_3D.tscn b/Scenes/Actors/Generic_Enemy_FSM_3D.tscn
index ab075e71..5c90cf82 100644
--- a/Scenes/Actors/Generic_Enemy_FSM_3D.tscn
+++ b/Scenes/Actors/Generic_Enemy_FSM_3D.tscn
@@ -75,10 +75,11 @@ shape = SubResource("CapsuleShape3D_jgarc")
[node name="StateMachine" type="Node" parent="."]
script = ExtResource("2_xne4s")
-[node name="Init" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "DetectionProvider", "_moduleNodes")]
+[node name="Init" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "DetectionProvider", "HealthProvider", "_moduleNodes")]
script = ExtResource("4_jgarc")
Storage = NodePath("../../Storage")
DetectionProvider = NodePath("../../PlayerDetectionProvider")
+HealthProvider = NodePath("../../DamageReceiver/HealthProvider")
_moduleNodes = [NodePath("../../AnimationModule")]
[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "PlayerDetection", "GravityProvider", "_moduleNodes")]
diff --git a/Scenes/Utils/pooling_manager.tscn b/Scenes/Utils/pooling_manager.tscn
index 5ae58ef7..88fd9283 100644
--- a/Scenes/Utils/pooling_manager.tscn
+++ b/Scenes/Utils/pooling_manager.tscn
@@ -1,13 +1,13 @@
[gd_scene load_steps=15 format=3 uid="uid://c3t8rhwwdo5cl"]
[ext_resource type="Script" uid="uid://k1pdoan4wie2" path="res://Scripts/Controllers/PoolingManager.cs" id="1_ji88p"]
-[ext_resource type="Resource" uid="uid://bpreje4f8ok62" path="res://Resources/Bullets/Explosion_3D.tres" id="2_jldm7"]
+[ext_resource type="Resource" uid="uid://bpreje4f8ok62" path="res://Resources/Bullets/3D/Explosion_3D.tres" id="2_jldm7"]
[ext_resource type="Script" uid="uid://e3jqtie5u2wp" path="res://Scripts/Controllers/PooledBulletInfo.cs" id="3_45ubr"]
-[ext_resource type="Resource" uid="uid://c22xvpyn5nxof" path="res://Resources/Bullets/Explosion_Harmless_3D.tres" id="4_30kdg"]
-[ext_resource type="Resource" uid="uid://csmq6hngkx41e" path="res://Resources/Bullets/icicle_gun_bullets_3D.tres" id="5_eqibw"]
-[ext_resource type="Resource" uid="uid://wbdspte0ch33" path="res://Resources/Bullets/simple_enemy_bullet_3D.tres" id="6_32utd"]
-[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/Explosion_Harmless_Small_3D.tres" id="7_k5vio"]
-[ext_resource type="Resource" uid="uid://qrqsywgiij7i" path="res://Resources/Bullets/simple_enemy_bullet_small_3D.tres" id="8_ck0dn"]
+[ext_resource type="Resource" uid="uid://c22xvpyn5nxof" path="res://Resources/Bullets/3D/Explosion_Harmless_3D.tres" id="4_30kdg"]
+[ext_resource type="Resource" uid="uid://csmq6hngkx41e" path="res://Resources/Bullets/3D/icicle_gun_bullets_3D.tres" id="5_eqibw"]
+[ext_resource type="Resource" uid="uid://wbdspte0ch33" path="res://Resources/Bullets/3D/simple_enemy_bullet_3D.tres" id="6_32utd"]
+[ext_resource type="Resource" uid="uid://bes254wblt1lm" path="res://Resources/Bullets/3D/Explosion_Harmless_Small_3D.tres" id="7_k5vio"]
+[ext_resource type="Resource" uid="uid://qrqsywgiij7i" path="res://Resources/Bullets/3D/simple_enemy_bullet_small_3D.tres" id="8_ck0dn"]
[sub_resource type="Resource" id="Resource_fco51"]
script = ExtResource("3_45ubr")
diff --git a/Scripts/Components/FSM/Enemy/3D/Init.cs b/Scripts/Components/FSM/Enemy/3D/Init.cs
index 55cbf729..23c027b7 100644
--- a/Scripts/Components/FSM/Enemy/3D/Init.cs
+++ b/Scripts/Components/FSM/Enemy/3D/Init.cs
@@ -1,4 +1,5 @@
-using Cirno.Scripts.Enums;
+using Cirno.Scripts.Components.Actors;
+using Cirno.Scripts.Enums;
using Godot;
namespace Cirno.Scripts.Components.FSM.Enemy._3D;
@@ -10,6 +11,8 @@ public partial class Init : EnemyStateBase3D
[Export] public PlayerDetection3D DetectionProvider { get; private set; }
+ [Export] public ActorResourceProvider HealthProvider { get; private set; }
+
public override void EnterState()
{
//DamageReceiver.HealthProvider.MaxResource = StorageModule.Root.EnemyResource.MaxHealth;
@@ -19,6 +22,10 @@ public partial class Init : EnemyStateBase3D
Storage.HomePosition = MainObject.GlobalPosition;
// TODO: Hide wings
// TODO: Hide aiming reticule
+
+ HealthProvider.MaxResource = Storage.Root.EnemyResource.MaxHealth;
+
+ HealthProvider.FillResource();
StateMachine.SetState(EnemyState.Idle);
}
diff --git a/Scripts/Resources/BulletResource.cs b/Scripts/Resources/BulletResource.cs
index 2c654cb2..59a578d4 100644
--- a/Scripts/Resources/BulletResource.cs
+++ b/Scripts/Resources/BulletResource.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Linq;
using Cirno.Scripts.Components;
+using Cirno.Scripts.Utils;
using Godot;
using Godot.Collections;
@@ -12,6 +13,8 @@ public partial class BulletResource : Resource
{
[Export]
public PackedScene BulletScene { get; set; }
+ [Export] public Texture2D BulletSprite { get; set; }
+ [Export] public float BulletSize { get; set; }
[Export] public PackedScene DestructionParticlesScene { get; set; }
[Export] public float BulletSpeed = 100f;
[Export] public Vector2 Direction = Vector2.Right;
@@ -19,13 +22,8 @@ public partial class BulletResource : Resource
[Export] public float MaxDamage = 1;
[Export] public float Knockback = 1;
[Export] public float LifeTime = 10f;
- [Export] public bool DestroyOnCollision = true;
[Export] public BulletOwner Owner = BulletOwner.None;
[Export] public DamageType DamageType = DamageType.Neutral;
- [Export] public bool RotateSprite = false;
- [Export] public bool Controllable = false;
- [Export] public bool Freezable { get; set; } = true;
- [Export] public bool Grazeable { get; set; } = true;
[Export] public float GrazeValue { get; set; } = 0.2f;
[Export] public BulletFlags Attributes { get; set; }
@@ -51,13 +49,13 @@ public partial class BulletResource : Resource
RotationOffset = rotationOffset,
Modifier = Modifier,
LifeTime = LifeTime,
- DestroyOnCollision = DestroyOnCollision,
+ DestroyOnCollision = Attributes.HasNoFlags(BulletFlags.Piercing),
DestructionParticlesScene = DestructionParticlesScene,
- RotateSprite = RotateSprite,
- Controllabe = Controllable,
- Freezable = Freezable,
+ RotateSprite = Attributes.HasFlag(BulletFlags.Rotateable),
+ Controllabe = Attributes.HasFlag(BulletFlags.Controllable),
+ Freezable = Attributes.HasFlag(BulletFlags.Freezable),
TimeModifiers = TimeModifiers.Select(x => x).ToList(),
- Grazeable = Grazeable,
+ Grazeable = Attributes.HasFlag(BulletFlags.Grazeable),
GrazeValue = GrazeValue,
Attributes = Attributes,
// TimeModifiers = TimeModifiers?.Where(mod => mod is TimeModifier).Cast().Select(m => new ModifierWrapper()
diff --git a/Scripts/Weapons/Bullet3D.cs b/Scripts/Weapons/Bullet3D.cs
index 89856d32..eba0772c 100644
--- a/Scripts/Weapons/Bullet3D.cs
+++ b/Scripts/Weapons/Bullet3D.cs
@@ -45,23 +45,45 @@ public partial class Bullet3D : Area3D, IBullet
private CollisionShape3D _collisionShape;
+ private Sprite3D _sprite;
+
+ private readonly Vector3 _defaultRotation = new(
+ Mathf.DegToRad(-45f),
+ Mathf.DegToRad(45f),
+ 0f
+ );
+
public override void _Ready()
{
_grazeSound = GetNodeOrNull("AudioStreamPlayer");
_grazeParticles = GetNodeOrNull("GrazeParticles");
_collisionShape = GetNode("CollisionShape");
+
+ _sprite = GetNodeOrNull("Sprite");
}
public void Initialize(BulletInfo bulletInfo)
{
_bulletInfo = bulletInfo;
-
_elapsedTime = 0f;
this.Speed = bulletInfo.Speed;
+ _sprite?.SetRotation(_defaultRotation);
+ SpriteRotation = 0f;
+
+ if (_sprite is not null && bulletInfo.OriginalBulletResource.BulletSprite is not null)
+ {
+ _sprite.Texture = _bulletInfo.OriginalBulletResource.BulletSprite;
+ }
+
+ if (_collisionShape.Shape is SphereShape3D sphere && bulletInfo.OriginalBulletResource.BulletSize > 0)
+ {
+ sphere.Radius = bulletInfo.OriginalBulletResource.BulletSize;
+ }
+
// Need to clone them here
// _modifiers = _bulletInfo.TimeModifiers.Select(x => x.MakeClone()).ToList();
@@ -151,7 +173,7 @@ public partial class Bullet3D : Area3D, IBullet
_direction = _direction.Rotated(radians).Normalized(); // Rotate direction
if (!BulletInfo.Attributes.HasFlag(BulletFlags.Rotateable)) return;
- RotateSprite(SpriteRotation + radians);
+ RotateSprite(SpriteRotation + radians + Mathf.DegToRad(45));
//SetRotation(Rotation + radians);
}
@@ -169,15 +191,14 @@ public partial class Bullet3D : Area3D, IBullet
if (!BulletInfo.Attributes.HasFlag(BulletFlags.Rotateable)) return;
SpriteRotation += radians;
- Vector3 axis = Basis.FromEuler(new Vector3(
- Mathf.DegToRad(-45f),
- Mathf.DegToRad(45f),
- 0f
- )).Z;
-
- Rotate(axis, radians);
-
+ var axis = Basis.FromEuler(_defaultRotation).Z;
+ _sprite?.Rotate(axis, radians);
+ //_sprite.SetRotation(new Vector3());
+ //Rotate(axis, radians);
+ //_sprite?.Rotate(Vector3.Forward, radians);
+ //_sprite?.RotateZ(radians);
//SetRotation(Rotation + radians);
+
}
public void FacePlayer()