diff --git a/components/Bullets/BlockWall.tscn b/components/Bullets/BlockWall.tscn
index b9a0e11..006087b 100644
--- a/components/Bullets/BlockWall.tscn
+++ b/components/Bullets/BlockWall.tscn
@@ -1,6 +1,7 @@
[gd_scene format=3 uid="uid://cch4xtc70ad5c"]
[ext_resource type="PackedScene" uid="uid://crtdkysmnkith" path="res://components/Abstracts/BulletBase.tscn" id="1_3kq6o"]
+[ext_resource type="Script" uid="uid://b6bkhv8nc1ao3" path="res://scripts/Contents/Bullets/BlockWall.gd" id="2_3x2nv"]
[ext_resource type="Texture2D" uid="uid://cqcakyrw4vbfn" path="res://resources/bullets/blockwall/blockwall.svg" id="2_k65pw"]
[sub_resource type="SpriteFrames" id="SpriteFrames_3x2nv"]
@@ -14,7 +15,142 @@ animations = [{
"speed": 5.0
}]
-[node name="BulletBase" unique_id=5571707 instance=ExtResource("1_3kq6o")]
+[sub_resource type="Animation" id="Animation_k65pw"]
+length = 0.001
+tracks/0/type = "bezier"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath(".:rotation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/1/type = "bezier"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath(".:position:x")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"handle_modes": PackedInt32Array(0),
+"points": PackedFloat32Array(0, -0.15, 0, 0.15, 0),
+"times": PackedFloat32Array(0)
+}
+tracks/2/type = "value"
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/path = NodePath(".:modulate")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [Color(1, 1, 1, 1)]
+}
+
+[sub_resource type="Animation" id="Animation_3x2nv"]
+resource_name = "spawn"
+length = 0.2
+step = 0.1
+tracks/0/type = "bezier"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath(".:position:x")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"handle_modes": PackedInt32Array(0, 0),
+"points": PackedFloat32Array(0, 0, 0, 0.2, 0, -100, 0, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.2)
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath(".:modulate")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0, 0.2),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
+}
+
+[sub_resource type="Animation" id="Animation_cdtmv"]
+resource_name = "loop"
+loop_mode = 1
+step = 0.1
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath(".:rotation")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0, 1),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [0.0, 6.28319]
+}
+
+[sub_resource type="Animation" id="Animation_a0fqf"]
+resource_name = "spawn"
+length = 0.2
+step = 0.1
+tracks/0/type = "bezier"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath(".:position:x")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"handle_modes": PackedInt32Array(2, 0),
+"points": PackedFloat32Array(-100, 0, 0, 0, 0, 0, -0.2, 0, 0, 0),
+"times": PackedFloat32Array(0, 0.2)
+}
+tracks/1/type = "value"
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/path = NodePath(".:modulate")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/keys = {
+"times": PackedFloat32Array(0, 0.2),
+"transitions": PackedFloat32Array(1, 1),
+"update": 0,
+"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 1)]
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_y5axk"]
+_data = {
+&"RESET": SubResource("Animation_k65pw"),
+&"destroy": SubResource("Animation_3x2nv"),
+&"loop": SubResource("Animation_cdtmv"),
+&"spawn": SubResource("Animation_a0fqf")
+}
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_k65pw"]
+size = Vector2(734, 56)
+
+[node name="BlockWall" unique_id=5571707 instance=ExtResource("1_3kq6o")]
+script = ExtResource("2_3x2nv")
+speed = -10.0
+baseDamage = 0.0
+penerate = 1.0
+lifeTime = 1000.0
+autoSpawnAnimation = true
+autoDestroyAnimation = true
[node name="texture" parent="." index="0" unique_id=162977358]
sprite_frames = SubResource("SpriteFrames_3x2nv")
+
+[node name="animator" parent="texture" index="0" unique_id=1114087117]
+libraries/ = SubResource("AnimationLibrary_y5axk")
+
+[node name="hitbox" parent="." index="1" unique_id=175349408]
+rotation = 1.5707964
+shape = SubResource("RectangleShape2D_k65pw")
diff --git a/resources/bullets/blockwall/blockwall.svg b/resources/bullets/blockwall/blockwall.svg
index 7ec475e..095244c 100644
--- a/resources/bullets/blockwall/blockwall.svg
+++ b/resources/bullets/blockwall/blockwall.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/scripts/Contents/Bullets/BlockWall.gd b/scripts/Contents/Bullets/BlockWall.gd
new file mode 100644
index 0000000..446e74f
--- /dev/null
+++ b/scripts/Contents/Bullets/BlockWall.gd
@@ -0,0 +1,5 @@
+extends BulletBase
+class_name BlockWallBullet
+
+func succeedToHit(_dmg: float, entity: EntityBase):
+ entity.impluse(Vector2.from_angle(rotation) * 1000)
diff --git a/scripts/Contents/Bullets/BlockWall.gd.uid b/scripts/Contents/Bullets/BlockWall.gd.uid
new file mode 100644
index 0000000..de90e85
--- /dev/null
+++ b/scripts/Contents/Bullets/BlockWall.gd.uid
@@ -0,0 +1 @@
+uid://b6bkhv8nc1ao3
diff --git a/scripts/Contents/Characters/CyberCat.gd b/scripts/Contents/Characters/CyberCat.gd
index 35675c4..ffa7400 100644
--- a/scripts/Contents/Characters/CyberCat.gd
+++ b/scripts/Contents/Characters/CyberCat.gd
@@ -8,10 +8,12 @@ func register():
attackCooldownMap[0] = 6000
attackCooldownMap[1] = 10000
attackCooldownMap[2] = 100
+ attackCooldownMap[3] = 200
func ai():
PresetEntityAI.follow(self , currentFocusedBoss)
for i in 3:
tryAttack(i)
+ PresetEntityAI.distanceAttack(self , currentFocusedBoss, 1000, INF, 3)
func attack(type: int):
if type == 0:
BulletBase.generate(ComponentManager.getBullet("Bengbeng"), self , position, 0)
@@ -19,3 +21,8 @@ func attack(type: int):
heal(percentHealth(0.05))
elif type == 2:
BulletBase.generate(ComponentManager.getBullet("SCBlock"), self , position, 0)
+ elif type == 3:
+ for bullet in BulletBase.generate(ComponentManager.getBullet("BlockWall"), self , currentFocusedBoss.hurtbox.global_position, 0):
+ if bullet is BlockWallBullet:
+ bullet.look_at(position)
+ bullet.position -= Vector2.from_angle(bullet.rotation) * 100
diff --git a/scripts/Contents/Wave.gd b/scripts/Contents/Wave.gd
index 235f7a1..c42148d 100644
--- a/scripts/Contents/Wave.gd
+++ b/scripts/Contents/Wave.gd
@@ -50,8 +50,8 @@ static var WAVE_TESTBOSS_CHICK = [
]
static var WAVE_JUSTJOKE = [
# Wave.create("Kernyr", 0, 0, true, 0, INF, 1),
- # Wave.create("CyberCat", 0, 0, true, 0, INF, 1),
- Wave.create("Deepsea", 0, 0, true, 0, INF, 1)
+ Wave.create("CyberCat", 0, 0, true, 0, INF, 1),
+ # Wave.create("Deepsea", 0, 0, true, 0, INF, 1)
]
static var WAVE_MOWING = [
Wave.create("Hen", 15, 30, false, 0, INF, 1),