diff --git a/DungeonShooting_Godot/excel/excelFile/ActivityBase.xlsx b/DungeonShooting_Godot/excel/excelFile/ActivityBase.xlsx
index 0e93ce5..10deb1a 100644
--- a/DungeonShooting_Godot/excel/excelFile/ActivityBase.xlsx
+++ b/DungeonShooting_Godot/excel/excelFile/ActivityBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/excelFile/ActivityMaterial.xlsx b/DungeonShooting_Godot/excel/excelFile/ActivityMaterial.xlsx
index df603d2..8d9efc9 100644
--- a/DungeonShooting_Godot/excel/excelFile/ActivityMaterial.xlsx
+++ b/DungeonShooting_Godot/excel/excelFile/ActivityMaterial.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/excelFile/AiAttackAttr.xlsx b/DungeonShooting_Godot/excel/excelFile/AiAttackAttr.xlsx
index f909ce4..717252f 100644
--- a/DungeonShooting_Godot/excel/excelFile/AiAttackAttr.xlsx
+++ b/DungeonShooting_Godot/excel/excelFile/AiAttackAttr.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/excelFile/BulletBase.xlsx b/DungeonShooting_Godot/excel/excelFile/BulletBase.xlsx
index 6f1a4d7..30c616f 100644
--- a/DungeonShooting_Godot/excel/excelFile/BulletBase.xlsx
+++ b/DungeonShooting_Godot/excel/excelFile/BulletBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/excelFile/EnemyBase.xlsx b/DungeonShooting_Godot/excel/excelFile/EnemyBase.xlsx
index 52b0385..adbcf30 100644
--- a/DungeonShooting_Godot/excel/excelFile/EnemyBase.xlsx
+++ b/DungeonShooting_Godot/excel/excelFile/EnemyBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/excelFile/LiquidMaterial.xlsx b/DungeonShooting_Godot/excel/excelFile/LiquidMaterial.xlsx
index c13160a..56dd8b6 100644
--- a/DungeonShooting_Godot/excel/excelFile/LiquidMaterial.xlsx
+++ b/DungeonShooting_Godot/excel/excelFile/LiquidMaterial.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/excelFile/Sound.xlsx b/DungeonShooting_Godot/excel/excelFile/Sound.xlsx
index 0c85b96..b8161de 100644
--- a/DungeonShooting_Godot/excel/excelFile/Sound.xlsx
+++ b/DungeonShooting_Godot/excel/excelFile/Sound.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/excelFile/WeaponBase.xlsx b/DungeonShooting_Godot/excel/excelFile/WeaponBase.xlsx
index 49bb79e..595e022 100644
--- a/DungeonShooting_Godot/excel/excelFile/WeaponBase.xlsx
+++ b/DungeonShooting_Godot/excel/excelFile/WeaponBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/prefab/effect/enemy/EbenyDead0001.tscn b/DungeonShooting_Godot/prefab/effect/enemy/EbenyDead0001.tscn
deleted file mode 100644
index d92969c..0000000
--- a/DungeonShooting_Godot/prefab/effect/enemy/EbenyDead0001.tscn
+++ /dev/null
@@ -1,207 +0,0 @@
-[gd_scene load_steps=31 format=3 uid="uid://pr88a1phtxgb"]
-
-[ext_resource type="Script" path="res://src/game/effects/enemy/EnemyDead0001.cs" id="1_1re5v"]
-[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_s7bee"]
-[ext_resource type="Texture2D" uid="uid://cn64eauvwx1uj" path="res://resource/sprite/role/enemy0001/enemy0001_Debris.png" id="3_uinig"]
-[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/common/Smoke.png" id="4_t55wd"]
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_s1mj2"]
-resource_local_to_scene = true
-shader = ExtResource("2_s7bee")
-shader_parameter/blend = Color(0, 0, 0, 0.470588)
-shader_parameter/schedule = 1.0
-shader_parameter/modulate = Color(1, 1, 1, 1)
-shader_parameter/show_outline = true
-shader_parameter/outline_color = Color(0, 0, 0, 1)
-shader_parameter/outline_rainbow = false
-shader_parameter/outline_use_blend = true
-shader_parameter/grey = 0.0
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_08fn3"]
-shader = ExtResource("2_s7bee")
-shader_parameter/blend = Color(1, 1, 1, 1)
-shader_parameter/schedule = 0.0
-shader_parameter/modulate = Color(1, 1, 1, 1)
-shader_parameter/show_outline = false
-shader_parameter/outline_color = Color(0, 0, 0, 1)
-shader_parameter/outline_rainbow = false
-shader_parameter/outline_use_blend = true
-shader_parameter/grey = 0.0
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_cldwb"]
-atlas = ExtResource("3_uinig")
-region = Rect2(0, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_ehtnl"]
-atlas = ExtResource("3_uinig")
-region = Rect2(16, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_j05gd"]
-atlas = ExtResource("3_uinig")
-region = Rect2(32, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_7el6f"]
-atlas = ExtResource("3_uinig")
-region = Rect2(48, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_n7sw3"]
-atlas = ExtResource("3_uinig")
-region = Rect2(64, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_mumsm"]
-atlas = ExtResource("3_uinig")
-region = Rect2(80, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_gx41d"]
-atlas = ExtResource("3_uinig")
-region = Rect2(96, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_r4nx1"]
-atlas = ExtResource("3_uinig")
-region = Rect2(112, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_s8j4o"]
-atlas = ExtResource("3_uinig")
-region = Rect2(128, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_2svrb"]
-atlas = ExtResource("3_uinig")
-region = Rect2(144, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_twd5t"]
-atlas = ExtResource("3_uinig")
-region = Rect2(160, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_8w5ka"]
-atlas = ExtResource("3_uinig")
-region = Rect2(176, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_6iumv"]
-atlas = ExtResource("3_uinig")
-region = Rect2(192, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_lpilf"]
-atlas = ExtResource("3_uinig")
-region = Rect2(208, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_n1a5a"]
-atlas = ExtResource("3_uinig")
-region = Rect2(224, 0, 16, 16)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_q0oeq"]
-atlas = ExtResource("3_uinig")
-region = Rect2(240, 0, 16, 16)
-
-[sub_resource type="SpriteFrames" id="SpriteFrames_15g84"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_cldwb")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_ehtnl")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_j05gd")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_7el6f")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_n7sw3")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_mumsm")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_gx41d")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_r4nx1")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_s8j4o")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_2svrb")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_twd5t")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_8w5ka")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_6iumv")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_lpilf")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_n1a5a")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_q0oeq")
-}],
-"loop": false,
-"name": &"default",
-"speed": 5.0
-}]
-
-[sub_resource type="CircleShape2D" id="CircleShape2D_0xl2q"]
-radius = 4.0
-
-[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_p3lv8"]
-particles_animation = true
-particles_anim_h_frames = 3
-particles_anim_v_frames = 1
-particles_anim_loop = false
-
-[sub_resource type="Gradient" id="Gradient_ryemi"]
-colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0.537255)
-
-[sub_resource type="GradientTexture1D" id="GradientTexture1D_orgu0"]
-gradient = SubResource("Gradient_ryemi")
-
-[sub_resource type="Curve" id="Curve_21dxk"]
-_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.177419, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.0272727), 0.0, 0.0, 0, 0]
-point_count = 3
-
-[sub_resource type="CurveTexture" id="CurveTexture_rutlp"]
-curve = SubResource("Curve_21dxk")
-
-[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_ku1mm"]
-particle_flag_disable_z = true
-angle_max = 360.0
-gravity = Vector3(0, 0, 0)
-scale_min = 0.4
-scale_max = 1.5
-scale_curve = SubResource("CurveTexture_rutlp")
-color = Color(0.811765, 0.0980392, 0.0980392, 0.627451)
-color_ramp = SubResource("GradientTexture1D_orgu0")
-anim_offset_max = 1.0
-
-[node name="Effect0001" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
-collision_layer = 128
-script = ExtResource("1_1re5v")
-ShadowSprite = NodePath("ShadowSprite")
-AnimatedSprite = NodePath("AnimatedSprite")
-Collision = NodePath("Collision")
-
-[node name="ShadowSprite" type="Sprite2D" parent="."]
-z_index = -1
-material = SubResource("ShaderMaterial_s1mj2")
-
-[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
-material = SubResource("ShaderMaterial_08fn3")
-sprite_frames = SubResource("SpriteFrames_15g84")
-
-[node name="Collision" type="CollisionShape2D" parent="."]
-shape = SubResource("CircleShape2D_0xl2q")
-
-[node name="GPUParticles2D" type="GPUParticles2D" parent="."]
-material = SubResource("CanvasItemMaterial_p3lv8")
-emitting = false
-process_material = SubResource("ParticleProcessMaterial_ku1mm")
-texture = ExtResource("4_t55wd")
-fixed_fps = 20
diff --git a/DungeonShooting_Godot/prefab/effect/enemy/EbenyDead0002.tscn b/DungeonShooting_Godot/prefab/effect/enemy/EbenyDead0002.tscn
deleted file mode 100644
index 92f5491..0000000
--- a/DungeonShooting_Godot/prefab/effect/enemy/EbenyDead0002.tscn
+++ /dev/null
@@ -1,129 +0,0 @@
-[gd_scene load_steps=19 format=3 uid="uid://nfx3lhkdhv6a"]
-
-[ext_resource type="Script" path="res://src/game/activity/common/AutoFreezeObject.cs" id="1_iop26"]
-[ext_resource type="Texture2D" uid="uid://x3tjqgdgp43n" path="res://resource/sprite/role/enemy0002/Enemy0002_dead.png" id="2_3cyjy"]
-[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_4hojo"]
-[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/common/Smoke.png" id="4_m7xko"]
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_s1mj2"]
-resource_local_to_scene = true
-shader = ExtResource("2_4hojo")
-shader_parameter/blend = Color(0, 0, 0, 0.470588)
-shader_parameter/schedule = 1.0
-shader_parameter/modulate = Color(1, 1, 1, 1)
-shader_parameter/show_outline = true
-shader_parameter/outline_color = Color(0, 0, 0, 1)
-shader_parameter/outline_rainbow = false
-shader_parameter/outline_use_blend = true
-shader_parameter/grey = 0.0
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_08fn3"]
-resource_local_to_scene = true
-shader = ExtResource("2_4hojo")
-shader_parameter/blend = Color(1, 1, 1, 1)
-shader_parameter/schedule = 0.0
-shader_parameter/modulate = Color(1, 1, 1, 1)
-shader_parameter/show_outline = true
-shader_parameter/outline_color = Color(0, 0, 0, 1)
-shader_parameter/outline_rainbow = false
-shader_parameter/outline_use_blend = true
-shader_parameter/grey = 0.0
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_ag5h2"]
-atlas = ExtResource("2_3cyjy")
-region = Rect2(0, 0, 32, 32)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_toly3"]
-atlas = ExtResource("2_3cyjy")
-region = Rect2(32, 0, 32, 32)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_bqash"]
-atlas = ExtResource("2_3cyjy")
-region = Rect2(64, 0, 32, 32)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_lx5fo"]
-atlas = ExtResource("2_3cyjy")
-region = Rect2(96, 0, 32, 32)
-
-[sub_resource type="SpriteFrames" id="SpriteFrames_vhsqr"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_ag5h2")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_toly3")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_bqash")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_lx5fo")
-}],
-"loop": false,
-"name": &"dead",
-"speed": 5.0
-}]
-
-[sub_resource type="CircleShape2D" id="CircleShape2D_0xl2q"]
-radius = 4.0
-
-[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_p3lv8"]
-particles_animation = true
-particles_anim_h_frames = 3
-particles_anim_v_frames = 1
-particles_anim_loop = false
-
-[sub_resource type="Gradient" id="Gradient_ryemi"]
-colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0.537255)
-
-[sub_resource type="GradientTexture1D" id="GradientTexture1D_orgu0"]
-gradient = SubResource("Gradient_ryemi")
-
-[sub_resource type="Curve" id="Curve_21dxk"]
-_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.177419, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.0272727), 0.0, 0.0, 0, 0]
-point_count = 3
-
-[sub_resource type="CurveTexture" id="CurveTexture_rutlp"]
-curve = SubResource("Curve_21dxk")
-
-[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_ku1mm"]
-particle_flag_disable_z = true
-angle_max = 360.0
-gravity = Vector3(0, 0, 0)
-scale_min = 0.4
-scale_max = 1.5
-scale_curve = SubResource("CurveTexture_rutlp")
-color = Color(0.811765, 0.0980392, 0.0980392, 0.627451)
-color_ramp = SubResource("GradientTexture1D_orgu0")
-anim_offset_max = 1.0
-
-[node name="Effect0002" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
-collision_layer = 128
-script = ExtResource("1_iop26")
-AnimationName = "dead"
-AutoToGrey = true
-ShadowSprite = NodePath("ShadowSprite")
-AnimatedSprite = NodePath("AnimatedSprite")
-Collision = NodePath("Collision")
-ThrowCollisionSize = Vector2(14, 14)
-
-[node name="ShadowSprite" type="Sprite2D" parent="."]
-z_index = -1
-material = SubResource("ShaderMaterial_s1mj2")
-
-[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
-material = SubResource("ShaderMaterial_08fn3")
-sprite_frames = SubResource("SpriteFrames_vhsqr")
-animation = &"dead"
-offset = Vector2(0, -9)
-
-[node name="Collision" type="CollisionShape2D" parent="."]
-shape = SubResource("CircleShape2D_0xl2q")
-
-[node name="GPUParticles2D" type="GPUParticles2D" parent="."]
-material = SubResource("CanvasItemMaterial_p3lv8")
-emitting = false
-process_material = SubResource("ParticleProcessMaterial_ku1mm")
-texture = ExtResource("4_m7xko")
-fixed_fps = 20
diff --git a/DungeonShooting_Godot/prefab/effect/enemy/EnemyDead0001.tscn b/DungeonShooting_Godot/prefab/effect/enemy/EnemyDead0001.tscn
new file mode 100644
index 0000000..d92969c
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/effect/enemy/EnemyDead0001.tscn
@@ -0,0 +1,207 @@
+[gd_scene load_steps=31 format=3 uid="uid://pr88a1phtxgb"]
+
+[ext_resource type="Script" path="res://src/game/effects/enemy/EnemyDead0001.cs" id="1_1re5v"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_s7bee"]
+[ext_resource type="Texture2D" uid="uid://cn64eauvwx1uj" path="res://resource/sprite/role/enemy0001/enemy0001_Debris.png" id="3_uinig"]
+[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/common/Smoke.png" id="4_t55wd"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_s1mj2"]
+resource_local_to_scene = true
+shader = ExtResource("2_s7bee")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_08fn3"]
+shader = ExtResource("2_s7bee")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_cldwb"]
+atlas = ExtResource("3_uinig")
+region = Rect2(0, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ehtnl"]
+atlas = ExtResource("3_uinig")
+region = Rect2(16, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_j05gd"]
+atlas = ExtResource("3_uinig")
+region = Rect2(32, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_7el6f"]
+atlas = ExtResource("3_uinig")
+region = Rect2(48, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_n7sw3"]
+atlas = ExtResource("3_uinig")
+region = Rect2(64, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_mumsm"]
+atlas = ExtResource("3_uinig")
+region = Rect2(80, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_gx41d"]
+atlas = ExtResource("3_uinig")
+region = Rect2(96, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_r4nx1"]
+atlas = ExtResource("3_uinig")
+region = Rect2(112, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_s8j4o"]
+atlas = ExtResource("3_uinig")
+region = Rect2(128, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_2svrb"]
+atlas = ExtResource("3_uinig")
+region = Rect2(144, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_twd5t"]
+atlas = ExtResource("3_uinig")
+region = Rect2(160, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_8w5ka"]
+atlas = ExtResource("3_uinig")
+region = Rect2(176, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_6iumv"]
+atlas = ExtResource("3_uinig")
+region = Rect2(192, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_lpilf"]
+atlas = ExtResource("3_uinig")
+region = Rect2(208, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_n1a5a"]
+atlas = ExtResource("3_uinig")
+region = Rect2(224, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_q0oeq"]
+atlas = ExtResource("3_uinig")
+region = Rect2(240, 0, 16, 16)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_15g84"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_cldwb")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ehtnl")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_j05gd")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_7el6f")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_n7sw3")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_mumsm")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_gx41d")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_r4nx1")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_s8j4o")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_2svrb")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_twd5t")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_8w5ka")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_6iumv")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_lpilf")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_n1a5a")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_q0oeq")
+}],
+"loop": false,
+"name": &"default",
+"speed": 5.0
+}]
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_0xl2q"]
+radius = 4.0
+
+[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_p3lv8"]
+particles_animation = true
+particles_anim_h_frames = 3
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="Gradient" id="Gradient_ryemi"]
+colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0.537255)
+
+[sub_resource type="GradientTexture1D" id="GradientTexture1D_orgu0"]
+gradient = SubResource("Gradient_ryemi")
+
+[sub_resource type="Curve" id="Curve_21dxk"]
+_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.177419, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.0272727), 0.0, 0.0, 0, 0]
+point_count = 3
+
+[sub_resource type="CurveTexture" id="CurveTexture_rutlp"]
+curve = SubResource("Curve_21dxk")
+
+[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_ku1mm"]
+particle_flag_disable_z = true
+angle_max = 360.0
+gravity = Vector3(0, 0, 0)
+scale_min = 0.4
+scale_max = 1.5
+scale_curve = SubResource("CurveTexture_rutlp")
+color = Color(0.811765, 0.0980392, 0.0980392, 0.627451)
+color_ramp = SubResource("GradientTexture1D_orgu0")
+anim_offset_max = 1.0
+
+[node name="Effect0001" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 128
+script = ExtResource("1_1re5v")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_s1mj2")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_08fn3")
+sprite_frames = SubResource("SpriteFrames_15g84")
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("CircleShape2D_0xl2q")
+
+[node name="GPUParticles2D" type="GPUParticles2D" parent="."]
+material = SubResource("CanvasItemMaterial_p3lv8")
+emitting = false
+process_material = SubResource("ParticleProcessMaterial_ku1mm")
+texture = ExtResource("4_t55wd")
+fixed_fps = 20
diff --git a/DungeonShooting_Godot/prefab/effect/enemy/EnemyDead0002.tscn b/DungeonShooting_Godot/prefab/effect/enemy/EnemyDead0002.tscn
new file mode 100644
index 0000000..6b7cab8
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/effect/enemy/EnemyDead0002.tscn
@@ -0,0 +1,128 @@
+[gd_scene load_steps=19 format=3 uid="uid://nfx3lhkdhv6a"]
+
+[ext_resource type="Script" path="res://src/game/effects/enemy/EnemyDead0002.cs" id="1_ghu6a"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_q163q"]
+[ext_resource type="Texture2D" uid="uid://x3tjqgdgp43n" path="res://resource/sprite/role/enemy0002/Enemy0002_dead.png" id="3_l0kbp"]
+[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/common/Smoke.png" id="4_2wygu"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_s1mj2"]
+resource_local_to_scene = true
+shader = ExtResource("2_q163q")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_08fn3"]
+resource_local_to_scene = true
+shader = ExtResource("2_q163q")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ag5h2"]
+atlas = ExtResource("3_l0kbp")
+region = Rect2(0, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_toly3"]
+atlas = ExtResource("3_l0kbp")
+region = Rect2(32, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_bqash"]
+atlas = ExtResource("3_l0kbp")
+region = Rect2(64, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_lx5fo"]
+atlas = ExtResource("3_l0kbp")
+region = Rect2(96, 0, 32, 32)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_vhsqr"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ag5h2")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_toly3")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_bqash")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_lx5fo")
+}],
+"loop": false,
+"name": &"dead",
+"speed": 5.0
+}]
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_0xl2q"]
+radius = 4.0
+
+[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_p3lv8"]
+particles_animation = true
+particles_anim_h_frames = 3
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="Gradient" id="Gradient_ryemi"]
+colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0.537255)
+
+[sub_resource type="GradientTexture1D" id="GradientTexture1D_orgu0"]
+gradient = SubResource("Gradient_ryemi")
+
+[sub_resource type="Curve" id="Curve_21dxk"]
+_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.177419, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.0272727), 0.0, 0.0, 0, 0]
+point_count = 3
+
+[sub_resource type="CurveTexture" id="CurveTexture_rutlp"]
+curve = SubResource("Curve_21dxk")
+
+[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_ku1mm"]
+particle_flag_disable_z = true
+angle_max = 360.0
+gravity = Vector3(0, 0, 0)
+scale_min = 0.4
+scale_max = 1.5
+scale_curve = SubResource("CurveTexture_rutlp")
+color = Color(0.811765, 0.0980392, 0.0980392, 0.627451)
+color_ramp = SubResource("GradientTexture1D_orgu0")
+anim_offset_max = 1.0
+
+[node name="Effect0002" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 128
+script = ExtResource("1_ghu6a")
+AnimationName = "dead"
+AutoToGrey = true
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_s1mj2")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_08fn3")
+sprite_frames = SubResource("SpriteFrames_vhsqr")
+animation = &"dead"
+offset = Vector2(0, -9)
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("CircleShape2D_0xl2q")
+
+[node name="GPUParticles2D" type="GPUParticles2D" parent="."]
+material = SubResource("CanvasItemMaterial_p3lv8")
+emitting = false
+process_material = SubResource("ParticleProcessMaterial_ku1mm")
+texture = ExtResource("4_2wygu")
+fixed_fps = 20
diff --git a/DungeonShooting_Godot/resource/config/ActivityBase.json b/DungeonShooting_Godot/resource/config/ActivityBase.json
index ce102c7..8d049da 100644
--- a/DungeonShooting_Godot/resource/config/ActivityBase.json
+++ b/DungeonShooting_Godot/resource/config/ActivityBase.json
@@ -259,7 +259,7 @@
"Details": "",
"IsStatic": false,
"__Material": "",
- "Prefab": "res://prefab/effect/enemy/EbenyDead0001.tscn",
+ "Prefab": "res://prefab/effect/enemy/EnemyDead0001.tscn",
"Icon": "",
"ShowInMapEditor": false
},
@@ -271,7 +271,7 @@
"Details": "",
"IsStatic": false,
"__Material": "",
- "Prefab": "res://prefab/effect/enemy/EbenyDead0002.tscn",
+ "Prefab": "res://prefab/effect/enemy/EnemyDead0002.tscn",
"Icon": "",
"ShowInMapEditor": false
},
diff --git a/DungeonShooting_Godot/resource/config/LiquidMaterial.json b/DungeonShooting_Godot/resource/config/LiquidMaterial.json
index 156a26d..bd94e3b 100644
--- a/DungeonShooting_Godot/resource/config/LiquidMaterial.json
+++ b/DungeonShooting_Godot/resource/config/LiquidMaterial.json
@@ -14,5 +14,13 @@
"Ffm": 0.7,
"Duration": 4,
"WriteOffSpeed": 0.2
+ },
+ {
+ "Id": "0003",
+ "Remark": "\u8840\u6DB2",
+ "BurshTexture": "res://resource/sprite/brush/Brush4.png",
+ "Ffm": 0.5,
+ "Duration": 6,
+ "WriteOffSpeed": 0.2
}
]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/sprite/brush/Brush4.png b/DungeonShooting_Godot/resource/sprite/brush/Brush4.png
new file mode 100644
index 0000000..5a7a53d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/brush/Brush4.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/brush/Brush4.png.import b/DungeonShooting_Godot/resource/sprite/brush/Brush4.png.import
new file mode 100644
index 0000000..087a811
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/brush/Brush4.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://crprpnkrl3owc"
+path="res://.godot/imported/Brush4.png-56aadb405a3711a8f68b1ef228ca286c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/brush/Brush4.png"
+dest_files=["res://.godot/imported/Brush4.png-56aadb405a3711a8f68b1ef228ca286c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/src/game/GameApplication.cs b/DungeonShooting_Godot/src/game/GameApplication.cs
index 3f57200..04e90b5 100644
--- a/DungeonShooting_Godot/src/game/GameApplication.cs
+++ b/DungeonShooting_Godot/src/game/GameApplication.cs
@@ -106,7 +106,7 @@
//随机化种子
//GD.Randomize();
//固定帧率
- Engine.MaxFps = TargetFps;
+ //Engine.MaxFps = TargetFps;
//调试绘制开关
ActivityObject.IsDebug = false;
//Engine.TimeScale = 0.2f;
diff --git a/DungeonShooting_Godot/src/game/activity/common/AutoFreezeObject.cs b/DungeonShooting_Godot/src/game/activity/common/AutoFreezeObject.cs
index cd245fd..7a3c94a 100644
--- a/DungeonShooting_Godot/src/game/activity/common/AutoFreezeObject.cs
+++ b/DungeonShooting_Godot/src/game/activity/common/AutoFreezeObject.cs
@@ -19,9 +19,21 @@
[Export]
public bool AutoToGrey { get; set; }
+ ///
+ /// 冻结次数
+ ///
+ public int FreezeCount { get; private set; }
+
private bool _playFlag = false;
private float _grey = 0;
+ ///
+ /// 冻结时调用
+ ///
+ protected virtual void OnFreeze()
+ {
+ }
+
public override void OnInit()
{
if (!string.IsNullOrEmpty(AnimationName))
@@ -46,7 +58,9 @@
}
if (AffiliationArea != null)
{
+ OnFreeze();
Freeze();
+ FreezeCount++;
}
else
{
diff --git a/DungeonShooting_Godot/src/game/activity/role/enemy/NoWeaponEnemy.cs b/DungeonShooting_Godot/src/game/activity/role/enemy/NoWeaponEnemy.cs
index 1837b00..32ae476 100644
--- a/DungeonShooting_Godot/src/game/activity/role/enemy/NoWeaponEnemy.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/enemy/NoWeaponEnemy.cs
@@ -9,7 +9,7 @@
public partial class NoWeaponEnemy : Enemy
{
private Vector2I? _prevPosition = null;
- private BrushImageData _brushData3;
+ private BrushImageData _brushData;
public override void OnInit()
{
@@ -17,17 +17,18 @@
NoWeaponAttack = true;
AnimationPlayer.AnimationFinished += OnAnimationFinished;
- _brushData3 = new BrushImageData(ExcelConfig.LiquidMaterial_Map["0002"]);
+ _brushData = LiquidBrushManager.GetBrush("0002");
}
protected override void Process(float delta)
{
base.Process(delta);
+ //测试笔刷
if (AffiliationArea != null)
{
var pos = AffiliationArea.RoomInfo.LiquidCanvas.ToLiquidCanvasPosition(Position);
- AffiliationArea.RoomInfo.LiquidCanvas.DrawBrush(_brushData3, _prevPosition, pos, 0);
+ AffiliationArea.RoomInfo.LiquidCanvas.DrawBrush(_brushData, _prevPosition, pos, 0);
_prevPosition = pos;
}
}
@@ -47,7 +48,7 @@
for (var i = 0; i < 8; i++)
{
var data = bulletData.Clone();
- var tempPos = new Vector2(targetPosition.X + Utils.Random.RandomRangeInt(-30, 30), targetPosition.Y + + Utils.Random.RandomRangeInt(-30, 30));
+ var tempPos = new Vector2(targetPosition.X + Utils.Random.RandomRangeInt(-30, 30), targetPosition.Y + Utils.Random.RandomRangeInt(-30, 30));
FireManager.SetParabolaTarget(data, tempPos);
FireManager.ShootBullet(data, AttackLayer);
}
@@ -57,10 +58,11 @@
{
var realVelocity = GetRealVelocity();
var effPos = Position;
- var debris = Create(Ids.Id_enemy_dead0002);
+ var debris = Create(Ids.Id_enemy_dead0002);
debris.PutDown(effPos, RoomLayerEnum.NormalLayer);
debris.MoveController.AddForce(Velocity + realVelocity);
debris.SetFace(Face);
+ debris.PrevPosition = _prevPosition;
//派发敌人死亡信号
EventManager.EmitEvent(EventEnum.OnEnemyDie, this);
diff --git a/DungeonShooting_Godot/src/game/effects/enemy/EnemyDead0001.cs b/DungeonShooting_Godot/src/game/effects/enemy/EnemyDead0001.cs
index d600a25..ff7ca48 100644
--- a/DungeonShooting_Godot/src/game/effects/enemy/EnemyDead0001.cs
+++ b/DungeonShooting_Godot/src/game/effects/enemy/EnemyDead0001.cs
@@ -8,9 +8,15 @@
[Tool]
public partial class EnemyDead0001 : ActivityObject
{
-
+ ///
+ /// 上一帧笔刷坐标
+ ///
+ public Vector2I? PrevPosition = null;
+ private BrushImageData _brushData;
+
private GpuParticles2D _gpuParticles2D;
private bool _playOver = false;
+ private bool _runBrush = true;
public override void OnInit()
{
@@ -25,6 +31,7 @@
);
StartCoroutine(EmitParticles());
+ _brushData = LiquidBrushManager.GetBrush("0003");
}
protected override void Process(float delta)
@@ -33,6 +40,13 @@
{
MoveController.SetAllVelocity(Vector2.Zero);
Freeze();
+ _runBrush = false;
+ }
+ else if (_runBrush && AffiliationArea != null && Altitude <= 1f) //测试笔刷
+ {
+ var pos = AffiliationArea.RoomInfo.LiquidCanvas.ToLiquidCanvasPosition(Position);
+ AffiliationArea.RoomInfo.LiquidCanvas.DrawBrush(_brushData, PrevPosition, pos, 0);
+ PrevPosition = pos;
}
}
diff --git a/DungeonShooting_Godot/src/game/effects/enemy/EnemyDead0002.cs b/DungeonShooting_Godot/src/game/effects/enemy/EnemyDead0002.cs
new file mode 100644
index 0000000..3786200
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/effects/enemy/EnemyDead0002.cs
@@ -0,0 +1,31 @@
+
+using Godot;
+
+[Tool]
+public partial class EnemyDead0002 : AutoFreezeObject
+{
+ ///
+ /// 上一帧笔刷坐标
+ ///
+ public Vector2I? PrevPosition = null;
+ private BrushImageData _brushData;
+
+ public override void OnInit()
+ {
+ base.OnInit();
+ _brushData = LiquidBrushManager.GetBrush("0002");
+ }
+
+ protected override void Process(float delta)
+ {
+ base.Process(delta);
+
+ //测试笔刷
+ if (FreezeCount == 0 && AffiliationArea != null)
+ {
+ var pos = AffiliationArea.RoomInfo.LiquidCanvas.ToLiquidCanvasPosition(Position);
+ AffiliationArea.RoomInfo.LiquidCanvas.DrawBrush(_brushData, PrevPosition, pos, 0);
+ PrevPosition = pos;
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/manager/LiquidBrushManager.cs b/DungeonShooting_Godot/src/game/manager/LiquidBrushManager.cs
new file mode 100644
index 0000000..88fb064
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/manager/LiquidBrushManager.cs
@@ -0,0 +1,33 @@
+
+using System.Collections.Generic;
+using Config;
+
+///
+/// 液体笔刷管理类
+///
+public static class LiquidBrushManager
+{
+ private static Dictionary _dictionary = new Dictionary();
+
+ ///
+ /// 根据 id 获取笔刷, 该 id 为 LiquidMaterial 表的 id
+ ///
+ public static BrushImageData GetBrush(string id)
+ {
+ if (!_dictionary.TryGetValue(id, out var brush))
+ {
+ brush = new BrushImageData(ExcelConfig.LiquidMaterial_Map[id]);
+ _dictionary.Add(id, brush);
+ }
+
+ return brush;
+ }
+
+ ///
+ /// 清除缓存笔刷数据
+ ///
+ public static void ClearData()
+ {
+ _dictionary.Clear();
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/room/DungeonManager.cs b/DungeonShooting_Godot/src/game/room/DungeonManager.cs
index dc809fc..9ddf478 100644
--- a/DungeonShooting_Godot/src/game/room/DungeonManager.cs
+++ b/DungeonShooting_Godot/src/game/room/DungeonManager.cs
@@ -288,6 +288,7 @@
GameApplication.Instance.DestroyWorld();
yield return 0;
FogMaskHandler.ClearRecordRoom();
+ LiquidBrushManager.ClearData();
BrushImageData.ClearBrushData();
QueueRedraw();
//鼠标还原