diff --git a/components/Characters/KukeMC.tscn b/components/Characters/KukeMC.tscn
index cc56fc4..4becdb0 100644
--- a/components/Characters/KukeMC.tscn
+++ b/components/Characters/KukeMC.tscn
@@ -1,8 +1,11 @@
-[gd_scene load_steps=6 format=3 uid="uid://d4lfjwy0hkidu"]
+[gd_scene load_steps=10 format=3 uid="uid://d4lfjwy0hkidu"]
[ext_resource type="PackedScene" uid="uid://cvogxi7mktumf" path="res://components/Abstracts/EntityBase.tscn" id="1_r4q7y"]
[ext_resource type="Script" uid="uid://cekuqnfohprpb" path="res://scripts/Contents/Characters/KukeMC.gd" id="2_s2dg5"]
-[ext_resource type="Texture2D" uid="uid://c6thlmj566h82" path="res://resources/characters/kukemc/cy.png" id="3_wafrb"]
+[ext_resource type="Texture2D" uid="uid://mnockp3ai4ju" path="res://resources/characters/kukemc/pico-a.svg" id="3_1s5d7"]
+[ext_resource type="Texture2D" uid="uid://fsiyiwek5awa" path="res://resources/characters/kukemc/pico-b.svg" id="4_xjfsq"]
+[ext_resource type="Texture2D" uid="uid://dem14qyqmrp52" path="res://resources/characters/kukemc/pico-c.svg" id="5_rfpp4"]
+[ext_resource type="Texture2D" uid="uid://cvig26vtcyqmd" path="res://resources/characters/kukemc/pico-d.svg" id="6_kcxk2"]
[sub_resource type="SpriteFrames" id="SpriteFrames_x576j"]
animations = [{
@@ -17,14 +20,43 @@ animations = [{
"speed": 5.0
}]
+[sub_resource type="SpriteFrames" id="SpriteFrames_bxbcp"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("3_1s5d7")
+}],
+"loop": true,
+"name": &"idle",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("3_1s5d7")
+}, {
+"duration": 1.0,
+"texture": ExtResource("4_xjfsq")
+}, {
+"duration": 1.0,
+"texture": ExtResource("5_rfpp4")
+}, {
+"duration": 1.0,
+"texture": ExtResource("6_kcxk2")
+}],
+"loop": true,
+"name": &"walk",
+"speed": 5.0
+}]
+
[sub_resource type="RectangleShape2D" id="RectangleShape2D_farlp"]
-size = Vector2(221, 150)
+size = Vector2(148, 194)
[node name="KukeMC" instance=ExtResource("1_r4q7y")]
script = ExtResource("2_s2dg5")
displayName = "酷可mc"
drops = Array[int]([0, 1])
dropCounts = Array[Vector2]([Vector2(20, 40), Vector2(25, 50)])
+useStatic = true
metadata/_edit_vertical_guides_ = [76.0]
[node name="collect" parent="sounds" index="4"]
@@ -36,14 +68,19 @@ sprite_frames = SubResource("SpriteFrames_x576j")
[node name="staticBackground" parent="texture" index="0"]
position = Vector2(0, -19.999998)
scale = Vector2(0.61562973, 0.61562973)
-texture = ExtResource("3_wafrb")
+
+[node name="staticAnimation" parent="texture" index="1"]
+position = Vector2(0, -49)
+scale = Vector2(1.507288, 1.507288)
+sprite_frames = SubResource("SpriteFrames_bxbcp")
+animation = &"walk"
[node name="hitbox" parent="texture/hurtbox" index="0"]
-position = Vector2(70, -25)
+position = Vector2(0, -49)
shape = SubResource("RectangleShape2D_farlp")
[node name="normal" type="Node2D" parent="texture/weapons" index="0"]
position = Vector2(-22, 18)
[node name="statebar" parent="." index="4"]
-position = Vector2(75, -169)
+position = Vector2(0, -217)
diff --git a/resources/characters/kukemc/pico-a.svg b/resources/characters/kukemc/pico-a.svg
new file mode 100644
index 0000000..6ef7421
--- /dev/null
+++ b/resources/characters/kukemc/pico-a.svg
@@ -0,0 +1,19 @@
+
\ No newline at end of file
diff --git a/resources/characters/kukemc/pico-a.svg.import b/resources/characters/kukemc/pico-a.svg.import
new file mode 100644
index 0000000..bbc59aa
--- /dev/null
+++ b/resources/characters/kukemc/pico-a.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://mnockp3ai4ju"
+path="res://.godot/imported/pico-a.svg-9db0830fa39a152b3a56a9e5db59640c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resources/characters/kukemc/pico-a.svg"
+dest_files=["res://.godot/imported/pico-a.svg-9db0830fa39a152b3a56a9e5db59640c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/resources/characters/kukemc/pico-b.svg b/resources/characters/kukemc/pico-b.svg
new file mode 100644
index 0000000..a02c6d5
--- /dev/null
+++ b/resources/characters/kukemc/pico-b.svg
@@ -0,0 +1,23 @@
+
\ No newline at end of file
diff --git a/resources/characters/kukemc/pico-b.svg.import b/resources/characters/kukemc/pico-b.svg.import
new file mode 100644
index 0000000..8bf6fb1
--- /dev/null
+++ b/resources/characters/kukemc/pico-b.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://fsiyiwek5awa"
+path="res://.godot/imported/pico-b.svg-bf7962f0a8f938cadf82d80cc077bee5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resources/characters/kukemc/pico-b.svg"
+dest_files=["res://.godot/imported/pico-b.svg-bf7962f0a8f938cadf82d80cc077bee5.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/resources/characters/kukemc/pico-c.svg b/resources/characters/kukemc/pico-c.svg
new file mode 100644
index 0000000..4bf8944
--- /dev/null
+++ b/resources/characters/kukemc/pico-c.svg
@@ -0,0 +1,31 @@
+
\ No newline at end of file
diff --git a/resources/characters/kukemc/pico-c.svg.import b/resources/characters/kukemc/pico-c.svg.import
new file mode 100644
index 0000000..dfa5292
--- /dev/null
+++ b/resources/characters/kukemc/pico-c.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dem14qyqmrp52"
+path="res://.godot/imported/pico-c.svg-5ecde95f499ee70657c1022037931523.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resources/characters/kukemc/pico-c.svg"
+dest_files=["res://.godot/imported/pico-c.svg-5ecde95f499ee70657c1022037931523.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/resources/characters/kukemc/pico-d.svg b/resources/characters/kukemc/pico-d.svg
new file mode 100644
index 0000000..3cb0680
--- /dev/null
+++ b/resources/characters/kukemc/pico-d.svg
@@ -0,0 +1,23 @@
+
\ No newline at end of file
diff --git a/resources/characters/kukemc/pico-d.svg.import b/resources/characters/kukemc/pico-d.svg.import
new file mode 100644
index 0000000..e6f66f0
--- /dev/null
+++ b/resources/characters/kukemc/pico-d.svg.import
@@ -0,0 +1,43 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cvig26vtcyqmd"
+path="res://.godot/imported/pico-d.svg-70b0eb2ee6f86ca392e82f97c8126ba0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resources/characters/kukemc/pico-d.svg"
+dest_files=["res://.godot/imported/pico-d.svg-70b0eb2ee6f86ca392e82f97c8126ba0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/uastc_level=0
+compress/rdo_quality_loss=0.0
+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/channel_remap/red=0
+process/channel_remap/green=1
+process/channel_remap/blue=2
+process/channel_remap/alpha=3
+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
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/scripts/Contents/Characters/KukeChild.gd b/scripts/Contents/Characters/KukeChild.gd
index 75ac187..f95ca61 100644
--- a/scripts/Contents/Characters/KukeChild.gd
+++ b/scripts/Contents/Characters/KukeChild.gd
@@ -4,7 +4,7 @@ class_name KukeChild
var masterMine: KukeMC
func register():
- fields[FieldStore.Entity.MAX_HEALTH] = 20
+ fields[FieldStore.Entity.MAX_HEALTH] = 30
fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.35
attackCooldownMap[0] = 100
attackCooldownMap[1] = 8000
@@ -22,4 +22,4 @@ func attack(type):
BulletBase.generate(ComponentManager.getBullet("HeavyCrystal"), self, findWeaponAnchor("normal"), position.angle_to_point(currentFocusedBoss.position))
func kill():
if is_instance_valid(masterMine):
- masterMine.tryHeal(100)
+ masterMine.tryHeal(percentHealth(0.05))
diff --git a/scripts/Contents/Characters/KukeMC.gd b/scripts/Contents/Characters/KukeMC.gd
index 0abd1b3..3abcafb 100644
--- a/scripts/Contents/Characters/KukeMC.gd
+++ b/scripts/Contents/Characters/KukeMC.gd
@@ -3,27 +3,29 @@ class_name KukeMC
var canSummon: bool = true
+func spawn():
+ texture.play("walk")
func register():
fields[FieldStore.Entity.MAX_HEALTH] = 3500
fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.5
- attackCooldownMap[0] = 2000
- attackCooldownMap[1] = 5000
+ attackCooldownMap[0] = 4000
+ attackCooldownMap[1] = 4000
attackCooldownMap[2] = 20000
- attackCooldownMap[3] = 2000
+ attackCooldownMap[3] = 8000
inventory[ItemStore.ItemType.APPLE] = INF
healthChanged.connect(
- func(h):
- if h < fields[FieldStore.Entity.MAX_HEALTH] * 0.25:
+ func(_h):
+ if getHealthPercent() < 0.25:
canSummon = false
for child in EntityTool.findEntityByClass("KukeChild", get_tree()):
if child.masterMine == self:
child.tryKill()
- tryHeal(200)
+ tryHeal(percentHealth(0.1))
)
func ai():
PresetEntityAI.follow(self, currentFocusedBoss, 500)
for i in len(attackCooldownMap.keys()):
- tryAttack(i)
+ tryAttack(i, i in [0])
func attack(type):
if type == 0:
for i in randi_range(8, 16):
@@ -32,18 +34,18 @@ func attack(type):
if bullet is BulletBase:
bullet.baseDamage *= 0.5
await TickTool.millseconds(randi_range(10, 50))
- elif type == 1 and health < fields[FieldStore.Entity.MAX_HEALTH] * 0.5 and canSummon:
+ elif type == 1 and getHealthPercent() < 0.5 and canSummon:
for i in randi_range(1, 2):
var child = EntityBase.generate(ComponentManager.getCharacter("KukeChild"), position + MathTool.sampleInCircle(500))
child.currentFocusedBoss = currentFocusedBoss
child.masterMine = self
elif type == 2:
- var countOfBullet = randi_range(40, 50)
- var countOfBranch = randi_range(1, 3)
- for bulletIndex in countOfBullet:
- for branchIndex in countOfBranch:
+ var bulletCount = randi_range(20, 40)
+ var branchCount = randi_range(1, 3)
+ for bulletIndex in bulletCount:
+ for branchIndex in branchCount:
fields[FieldStore.Entity.OFFSET_SHOOT] = 0
- for bullet in BulletBase.generate(ComponentManager.getBullet("PurpleCrystal"), self, findWeaponAnchor("normal"), deg_to_rad(360.0 / countOfBullet * bulletIndex + 360.0 / countOfBranch * branchIndex)):
+ for bullet in BulletBase.generate(ComponentManager.getBullet("PurpleCrystal"), self, findWeaponAnchor("normal"), deg_to_rad(360.0 / bulletCount * bulletIndex + 360.0 / branchCount * branchIndex)):
if bullet is BulletBase:
bullet.baseDamage *= 0.5
await TickTool.millseconds(100)
diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd
index e7916df..c4a63d9 100644
--- a/scripts/Statemachine/EntityBase.gd
+++ b/scripts/Statemachine/EntityBase.gd
@@ -407,6 +407,8 @@ func getItem(items: Dictionary):
inventory[item] = clamp(inventory[item] + items[item], 0, inventoryMax[item])
func getHealthPercent():
return health / fields[FieldStore.Entity.MAX_HEALTH]
+func percentHealth(percent: float):
+ return fields[FieldStore.Entity.MAX_HEALTH] * percent
func getMySummons() -> Array[SummonBase]:
var result: Array[SummonBase] = []
for entity in get_tree().get_nodes_in_group("players" if isPlayer() else "mobs"):