mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-05-27 22:41:56 +08:00
Compare commits
15 Commits
8bc6c11611
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 07f1334cc7 | |||
| 2a864ae607 | |||
| 2abe9ec8b0 | |||
| d4b9999e44 | |||
| 8a75adc580 | |||
| fb5488b10d | |||
| 4026caf0de | |||
| 68259981f4 | |||
| 53d1be6749 | |||
| 97f52a5dda | |||
| b1e25afb02 | |||
| d22a86b7c8 | |||
| bae3a21cf9 | |||
| f5f63ee602 | |||
| 2ebcdbee25 |
@@ -67,6 +67,66 @@ tracks/4/keys = {
|
||||
"update": 1,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/5/type = "value"
|
||||
tracks/5/imported = false
|
||||
tracks/5/enabled = true
|
||||
tracks/5/path = NodePath("%hitbox:disabled")
|
||||
tracks/5/interp = 1
|
||||
tracks/5/loop_wrap = true
|
||||
tracks/5/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/6/type = "value"
|
||||
tracks/6/imported = false
|
||||
tracks/6/enabled = true
|
||||
tracks/6/path = NodePath("anchor/textureSword/trailRight:visible")
|
||||
tracks/6/interp = 1
|
||||
tracks/6/loop_wrap = true
|
||||
tracks/6/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("anchor/textureSword/trailLine:visible")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [true]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("%textureSword/trailLeft:visible")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [false]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("%textureSword/trailLine:modulate")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_oinqg"]
|
||||
resource_name = "destroy"
|
||||
@@ -85,7 +145,7 @@ tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0, 2),
|
||||
"points": PackedFloat32Array(150, -0.25, 0, 0.25, 0, 500, -0.083333336, -8.333334, 0, 0, 150, -0.01666667, 83.333336, 0, 0),
|
||||
"points": PackedFloat32Array(200, 0, 0, 0.1, 0, 500, -0.2, 0, 0.02, 0, 200, -0.05, -100, 0, 0),
|
||||
"times": PackedFloat32Array(0, 0.2, 0.3)
|
||||
}
|
||||
tracks/1/type = "bezier"
|
||||
@@ -96,8 +156,8 @@ tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0),
|
||||
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.25, 0, 0.7853982, -0.06585455, -0.14365458, 0.2, 0, -0.7853982, -0.06666666, 0.2617994, 0, 0, -0.7853982, -0.033333343, 0, 0, 0, 3.142, -0.041666668, 0.91629785, 0, 0),
|
||||
"times": PackedFloat32Array(0, 0.3, 0.6, 0.888264, 1.2, 1.45)
|
||||
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.1, 0, 0.7853982, -0.1, 0, 0.4, 0, -0.7853982, 0, 0.3, 0, -2, -0.7853982, -0.1, 0, 0.2, 0, 3.142, -0.2, 3, 0, 0),
|
||||
"times": PackedFloat32Array(0, 0.2, 0.4, 0.888264, 1.2, 1.45)
|
||||
}
|
||||
tracks/2/type = "bezier"
|
||||
tracks/2/imported = false
|
||||
@@ -107,7 +167,7 @@ tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"handle_modes": PackedInt32Array(0, 0),
|
||||
"points": PackedFloat32Array(1, 0, 0, 0.2, 0, -1, 0, 0, 0, 0),
|
||||
"points": PackedFloat32Array(1, 0, 0, 0.2, 0, -2, 0, 0, 0, 0),
|
||||
"times": PackedFloat32Array(1.45, 1.7)
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
@@ -175,6 +235,66 @@ tracks/6/keys = {
|
||||
"update": 1,
|
||||
"values": [6, 0, 6]
|
||||
}
|
||||
tracks/7/type = "value"
|
||||
tracks/7/imported = false
|
||||
tracks/7/enabled = true
|
||||
tracks/7/path = NodePath("%hitbox:disabled")
|
||||
tracks/7/interp = 1
|
||||
tracks/7/loop_wrap = true
|
||||
tracks/7/keys = {
|
||||
"times": PackedFloat32Array(0, 0.05, 0.2, 0.7, 0.9, 1.2, 1.35, 1.65, 1.8),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [true, false, true, false, true, false, true, false, true]
|
||||
}
|
||||
tracks/8/type = "value"
|
||||
tracks/8/imported = false
|
||||
tracks/8/enabled = true
|
||||
tracks/8/path = NodePath("anchor/textureSword/trailRight:visible")
|
||||
tracks/8/interp = 1
|
||||
tracks/8/loop_wrap = true
|
||||
tracks/8/keys = {
|
||||
"times": PackedFloat32Array(0, 0.75, 0.95, 1.35),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true, false, false]
|
||||
}
|
||||
tracks/9/type = "value"
|
||||
tracks/9/imported = false
|
||||
tracks/9/enabled = true
|
||||
tracks/9/path = NodePath("anchor/textureSword/trailLine:visible")
|
||||
tracks/9/interp = 1
|
||||
tracks/9/loop_wrap = true
|
||||
tracks/9/keys = {
|
||||
"times": PackedFloat32Array(0, 0.15, 0.2, 1.65),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true, false, true]
|
||||
}
|
||||
tracks/10/type = "value"
|
||||
tracks/10/imported = false
|
||||
tracks/10/enabled = true
|
||||
tracks/10/path = NodePath("%textureSword/trailLeft:visible")
|
||||
tracks/10/interp = 1
|
||||
tracks/10/loop_wrap = true
|
||||
tracks/10/keys = {
|
||||
"times": PackedFloat32Array(0, 1.2, 1.35),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [false, true, false]
|
||||
}
|
||||
tracks/11/type = "value"
|
||||
tracks/11/imported = false
|
||||
tracks/11/enabled = true
|
||||
tracks/11/path = NodePath("%textureSword/trailLine:modulate")
|
||||
tracks/11/interp = 1
|
||||
tracks/11/loop_wrap = true
|
||||
tracks/11/keys = {
|
||||
"times": PackedFloat32Array(0, 1.65, 2),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_w1utg"]
|
||||
_data = {
|
||||
@@ -183,8 +303,53 @@ _data = {
|
||||
&"spawn": SubResource("Animation_o5h0y")
|
||||
}
|
||||
|
||||
[sub_resource type="Curve" id="Curve_1sgli"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_b5nxd"]
|
||||
curve = SubResource("Curve_1sgli")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_xrrxo"]
|
||||
particle_flag_disable_z = true
|
||||
direction = Vector3(1, 1, 0)
|
||||
spread = 0.0
|
||||
initial_velocity_min = 100.0
|
||||
initial_velocity_max = 100.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
tangential_accel_min = 99.99999
|
||||
tangential_accel_max = 99.99999
|
||||
alpha_curve = SubResource("CurveTexture_b5nxd")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_b5nxd"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_xrrxo"]
|
||||
curve = SubResource("Curve_b5nxd")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_b5pv2"]
|
||||
particle_flag_disable_z = true
|
||||
direction = Vector3(-1, -1, 0)
|
||||
spread = 0.0
|
||||
initial_velocity_min = 100.0
|
||||
initial_velocity_max = 100.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
tangential_accel_min = -100.0
|
||||
tangential_accel_max = -100.0
|
||||
alpha_curve = SubResource("CurveTexture_xrrxo")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_1sgli"]
|
||||
particle_flag_disable_z = true
|
||||
direction = Vector3(-1, 1, 0)
|
||||
spread = 0.0
|
||||
initial_velocity_min = 150.0
|
||||
initial_velocity_max = 150.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
alpha_curve = SubResource("CurveTexture_b5nxd")
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_1sgli"]
|
||||
size = Vector2(23.999994, 124)
|
||||
size = Vector2(23.999994, 153)
|
||||
|
||||
[node name="Volcano" unique_id=2046549391 instance=ExtResource("1_gd3m7")]
|
||||
script = ExtResource("2_w1utg")
|
||||
@@ -209,9 +374,33 @@ texture = ExtResource("2_wwxm2")
|
||||
|
||||
[node name="audio" type="AudioStreamPlayer2D" parent="texture/anchor/textureSword" index="0" unique_id=167399724]
|
||||
|
||||
[node name="trailRight" type="GPUParticles2D" parent="texture/anchor/textureSword" index="1" unique_id=1304800613]
|
||||
z_index = -1
|
||||
amount = 12
|
||||
texture = ExtResource("2_wwxm2")
|
||||
preprocess = 2.0
|
||||
local_coords = true
|
||||
process_material = SubResource("ParticleProcessMaterial_xrrxo")
|
||||
|
||||
[node name="trailLeft" type="GPUParticles2D" parent="texture/anchor/textureSword" index="2" unique_id=1450319379]
|
||||
visible = false
|
||||
z_index = -1
|
||||
texture = ExtResource("2_wwxm2")
|
||||
preprocess = 2.0
|
||||
local_coords = true
|
||||
process_material = SubResource("ParticleProcessMaterial_b5pv2")
|
||||
|
||||
[node name="trailLine" type="GPUParticles2D" parent="texture/anchor/textureSword" index="3" unique_id=946145693]
|
||||
z_index = -1
|
||||
amount = 12
|
||||
texture = ExtResource("2_wwxm2")
|
||||
preprocess = 2.0
|
||||
local_coords = true
|
||||
process_material = SubResource("ParticleProcessMaterial_1sgli")
|
||||
|
||||
[node name="hitbox" parent="." index="1" unique_id=175349408 node_paths=PackedStringArray("target")]
|
||||
position = Vector2(149.99998, 0.06109595)
|
||||
rotation = 0.00040731629
|
||||
position = Vector2(399.99997, 0.16292253)
|
||||
rotation = 0.32215786
|
||||
shape = SubResource("RectangleShape2D_1sgli")
|
||||
script = ExtResource("7_1sgli")
|
||||
target = NodePath("../texture/anchor/textureSword")
|
||||
|
||||
@@ -20,9 +20,9 @@ theme_override_styles/panel = SubResource("StyleBoxFlat_1yfsg")
|
||||
displayName = "氰化氢"
|
||||
slogan = "微量便可颠覆生机"
|
||||
avatar = ExtResource("2_1yfsg")
|
||||
description = "击杀敌人时储能。"
|
||||
description = "击杀敌人时少量储能。"
|
||||
fields = Array[int]([18, 10, 1])
|
||||
fieldValues = Array[float]([3.0, 0.15, -0.15])
|
||||
fieldValues = Array[float]([4.0, 0.2, -0.2])
|
||||
|
||||
[node name="avatarTexture" parent="wrapper" parent_id_path=PackedInt32Array(2023039659) index="0" unique_id=1334645594]
|
||||
texture = ExtResource("2_1yfsg")
|
||||
@@ -34,4 +34,4 @@ text = "氰化氢"
|
||||
text = "“微量便可颠覆生机”"
|
||||
|
||||
[node name="descriptionLabel" parent="wrapper/infoContainer" parent_id_path=PackedInt32Array(143242635) index="1" unique_id=808054282]
|
||||
text = "击杀敌人时储能。"
|
||||
text = "击杀敌人时少量储能。"
|
||||
|
||||
@@ -22,7 +22,7 @@ slogan = "栖于寒域密林,孤影独行世间"
|
||||
avatar = ExtResource("2_1s675")
|
||||
description = "拥有更大的冲刺速度。"
|
||||
fields = Array[int]([3, 4, 10])
|
||||
fieldValues = Array[float]([0.15, 0.04, -0.3])
|
||||
fieldValues = Array[float]([0.2, 0.04, -0.3])
|
||||
clickToRebuild = true
|
||||
|
||||
[node name="avatarTexture" parent="wrapper" parent_id_path=PackedInt32Array(2023039659) index="0" unique_id=1334645594]
|
||||
|
||||
@@ -19,9 +19,10 @@ theme_override_styles/panel = SubResource("StyleBoxFlat_fi2nw")
|
||||
displayName = "牧羊犬"
|
||||
slogan = "恪守使命不离不弃"
|
||||
avatar = ExtResource("2_fi2nw")
|
||||
description = "每隔3秒发动格挡。"
|
||||
description = "造成伤害时少量吸血,
|
||||
每0.5秒最多触发一次。"
|
||||
fields = Array[int]([0, 8, 3])
|
||||
fieldValues = Array[float]([50.0, 0.15, -0.35])
|
||||
fieldValues = Array[float]([35.0, 0.2, -0.5])
|
||||
|
||||
[node name="avatarTexture" parent="wrapper" parent_id_path=PackedInt32Array(2023039659) index="0" unique_id=1334645594]
|
||||
texture = ExtResource("2_fi2nw")
|
||||
@@ -33,4 +34,5 @@ text = "牧羊犬"
|
||||
text = "“恪守使命不离不弃”"
|
||||
|
||||
[node name="descriptionLabel" parent="wrapper/infoContainer" parent_id_path=PackedInt32Array(143242635) index="1" unique_id=808054282]
|
||||
text = "每隔3秒发动格挡。"
|
||||
text = "造成伤害时少量吸血,
|
||||
每0.5秒最多触发一次。"
|
||||
|
||||
@@ -3,12 +3,9 @@
|
||||
[ext_resource type="PackedScene" uid="uid://bs863g2s8r770" path="res://components/Abstracts/PlayerBase.tscn" id="1_eeneu"]
|
||||
[ext_resource type="Script" uid="uid://bevc4f6apql4t" path="res://scripts/Contents/Characters/HCN.gd" id="2_f7uj3"]
|
||||
[ext_resource type="PackedScene" uid="uid://yq7vmijwvgx1" path="res://components/Weapons/AcidWind.tscn" id="3_2fpmn"]
|
||||
[ext_resource type="PackedScene" uid="uid://cxabqjo7skxev" path="res://components/Weapons/BigLaser.tscn" id="4_4gd8a"]
|
||||
|
||||
[node name="HCN" unique_id=1711205167 instance=ExtResource("1_eeneu")]
|
||||
script = ExtResource("2_f7uj3")
|
||||
displayName = "氰化氢"
|
||||
|
||||
[node name="AcidWind" parent="weaponStore" parent_id_path=PackedInt32Array(1319091445) index="0" unique_id=1599717188 instance=ExtResource("3_2fpmn")]
|
||||
|
||||
[node name="BigLaser" parent="weaponStore" parent_id_path=PackedInt32Array(1319091445) index="1" unique_id=906291376 instance=ExtResource("4_4gd8a")]
|
||||
|
||||
@@ -3,9 +3,12 @@
|
||||
[ext_resource type="PackedScene" uid="uid://bs863g2s8r770" path="res://components/Abstracts/PlayerBase.tscn" id="1_y3l4w"]
|
||||
[ext_resource type="Script" uid="uid://bbmb572iba42l" path="res://scripts/Contents/Characters/MuyangDog.gd" id="2_mr6nm"]
|
||||
[ext_resource type="PackedScene" uid="uid://u0djqwuuysp8" path="res://components/Weapons/Volcano.tscn" id="3_e236u"]
|
||||
[ext_resource type="PackedScene" uid="uid://cx7nogfnv7s8t" path="res://components/Weapons/Tree.tscn" id="4_im5m5"]
|
||||
|
||||
[node name="MuyangDog" unique_id=1711205167 instance=ExtResource("1_y3l4w")]
|
||||
script = ExtResource("2_mr6nm")
|
||||
displayName = "牧羊犬"
|
||||
|
||||
[node name="Volcano" parent="weaponStore" parent_id_path=PackedInt32Array(1319091445) index="0" unique_id=204992396 instance=ExtResource("3_e236u")]
|
||||
|
||||
[node name="Tree" parent="weaponStore" parent_id_path=PackedInt32Array(1319091445) index="1" unique_id=185228402 instance=ExtResource("4_im5m5")]
|
||||
|
||||
@@ -9,6 +9,9 @@ var count: int = 0
|
||||
var dmg5: float = 0
|
||||
var splitAngle: float = 10
|
||||
|
||||
func spawn():
|
||||
animator.speed_scale = 0.85
|
||||
setupCuttable(0.75)
|
||||
func ai():
|
||||
PresetBulletAI.lockLauncher(self , launcher, true)
|
||||
rotation = lerp_angle(
|
||||
@@ -17,7 +20,7 @@ func ai():
|
||||
rotates
|
||||
)
|
||||
func succeedToHit(_dmg: float, entity: EntityBase):
|
||||
entity.impluse((entity.getTrackingAnchor() - position).normalized() * 500)
|
||||
entity.impluse((entity.getTrackingAnchor() - position).normalized() * 400)
|
||||
ParryEntityEffect.createEffectEntity(entity, self )
|
||||
|
||||
func generateShadow():
|
||||
|
||||
@@ -3,17 +3,17 @@ class_name Maodie
|
||||
|
||||
func register():
|
||||
fields[FieldStore.Entity.MAX_HEALTH] = 75
|
||||
fields[FieldStore.Entity.MOVEMENT_SPEED] = randf_range(0.5, 0.8)
|
||||
fields[FieldStore.Entity.MOVEMENT_SPEED] = randf_range(0.4, 0.65)
|
||||
attackCooldownMap[0] = randi_range(5000, 8000)
|
||||
sprintMultiplier = randf_range(5, 15)
|
||||
func spawn():
|
||||
texture.play("walk")
|
||||
func ai():
|
||||
PresetEntityAI.follow(self, currentFocusedBoss)
|
||||
PresetEntityAI.follow(self , currentFocusedBoss)
|
||||
tryAttack(0, true)
|
||||
func attack(type: int):
|
||||
if type == 0:
|
||||
BulletBase.generate(ComponentManager.getBullet("ChickSprint"), self, position, 0)
|
||||
BulletBase.generate(ComponentManager.getBullet("ChickSprint"), self , position, 0)
|
||||
trySprint()
|
||||
return true
|
||||
func sprint():
|
||||
|
||||
@@ -4,7 +4,7 @@ func register():
|
||||
fields[FieldStore.Entity.MAX_HEALTH] = 120
|
||||
fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.2
|
||||
fields[FieldStore.Entity.OFFSET_SHOOT] = 0
|
||||
attackCooldownMap[0] = randi_range(100, 500)
|
||||
attackCooldownMap[0] = randi_range(1000, 3000)
|
||||
func spawn():
|
||||
texture.play("walk")
|
||||
func ai():
|
||||
|
||||
@@ -27,6 +27,7 @@ func attack(type: int):
|
||||
for bullet in BulletBase.generate(ComponentManager.getBullet("SwingSword"), self , getTrackingAnchor(), getTrackingAnchor().angle_to_point(currentFocusedPosition)):
|
||||
if bullet is SwingSwordBullet:
|
||||
await bullet.destroied
|
||||
await TickTool.millseconds(1000)
|
||||
elif type == 1:
|
||||
for bullet in BulletBase.generate(ComponentManager.getBullet("Broom"), self , getTrackingAnchor(), getTrackingAnchor().angle_to_point(currentFocusedPosition)):
|
||||
if is_instance_valid(currentBroom): break
|
||||
@@ -38,6 +39,7 @@ func attack(type: int):
|
||||
await chargeUp()
|
||||
trySprint()
|
||||
currentBroom.animator.play("attack")
|
||||
await TickTool.millseconds(1000)
|
||||
elif type == 2:
|
||||
for i in 3:
|
||||
for bullet in BulletBase.generate(ComponentManager.getBullet("BroomGun"), self , position, position.angle_to_point(currentFocusedPosition)):
|
||||
@@ -51,6 +53,7 @@ func attack(type: int):
|
||||
bullet.animator.play("rotate")
|
||||
await bullet.destroied
|
||||
fields[FieldStore.Entity.MOVEMENT_SPEED] /= 3
|
||||
await TickTool.millseconds(4000)
|
||||
elif type == 4:
|
||||
BulletBase.generate(ComponentManager.getBullet("BroomBoomerang"), self , position, position.angle_to_point(currentFocusedPosition))
|
||||
elif type == 5:
|
||||
|
||||
@@ -5,15 +5,14 @@ func register():
|
||||
fields[FieldStore.Entity.MAX_HEALTH] = 100
|
||||
fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.3
|
||||
fields[FieldStore.Entity.OFFSET_SHOOT] = 10
|
||||
attackCooldownMap[0] = randi_range(2000, 5000)
|
||||
func spawn():
|
||||
texture.play("walk")
|
||||
func ai():
|
||||
attackCooldownMap[0] = randi_range(1500, 4000)
|
||||
PresetEntityAI.follow(self, currentFocusedBoss, 300)
|
||||
PresetEntityAI.follow(self , currentFocusedBoss, 300)
|
||||
tryAttack(0)
|
||||
func attack(type):
|
||||
if type == 0:
|
||||
var weaponPos = findWeaponAnchor("normal")
|
||||
for i in randi_range(1, 4):
|
||||
BulletBase.generate(ComponentManager.getBullet("Star"), self, weaponPos, (currentFocusedBoss.position - position).angle())
|
||||
BulletBase.generate(ComponentManager.getBullet("Star"), self , weaponPos, (currentFocusedBoss.position - position).angle())
|
||||
return true
|
||||
|
||||
@@ -2,4 +2,4 @@ extends PlayerBase
|
||||
|
||||
func register():
|
||||
super.register()
|
||||
sprintMultiplier += 3
|
||||
sprintMultiplier += 1.5
|
||||
|
||||
@@ -6,7 +6,7 @@ var MIN_ATTACK_DISTANCE = 400
|
||||
|
||||
func register():
|
||||
fields[FieldStore.Entity.MAX_HEALTH] = 400
|
||||
fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.9
|
||||
fields[FieldStore.Entity.MOVEMENT_SPEED] = 0.7
|
||||
attackCooldownMap[0] = 4000
|
||||
attackCooldownMap[1] = 3000
|
||||
attackCooldownMap[2] = 500
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
extends PlayerBase
|
||||
|
||||
var parryCounter: CooldownTimer = CooldownTimer.new(3000)
|
||||
var healCounter = CooldownTimer.new(500)
|
||||
|
||||
func ai():
|
||||
super.ai()
|
||||
if parryCounter.isCooldowned():
|
||||
var track = getTrackingAnchor()
|
||||
var bullet = BulletTool.findClosetBulletCanDamage(track, get_tree(), self , 300)
|
||||
if is_instance_valid(bullet):
|
||||
BulletBase.generate(ComponentManager.getBullet("Parrier"), self , track, track.angle_to_point(bullet.position))
|
||||
parryCounter.start()
|
||||
func register():
|
||||
super.register()
|
||||
madeDamage.connect(
|
||||
func(_w, _b):
|
||||
if healCounter.start():
|
||||
heal(1)
|
||||
)
|
||||
|
||||
@@ -131,13 +131,13 @@ func setupCuttable(cutSpeed: float):
|
||||
func(body):
|
||||
var entity = EntityTool.fromHurtbox(body)
|
||||
if entity:
|
||||
speedScale = cutSpeed
|
||||
animator.speed_scale *= cutSpeed
|
||||
)
|
||||
area_exited.connect(
|
||||
func(body):
|
||||
var entity = EntityTool.fromHurtbox(body)
|
||||
if entity:
|
||||
speedScale = 1
|
||||
animator.speed_scale /= cutSpeed
|
||||
)
|
||||
func getDamage():
|
||||
return baseDamage * damageMultipliers[usingDamageMultiplier]
|
||||
|
||||
@@ -17,7 +17,7 @@ func getStateAngle(index: int):
|
||||
func forceFilter():
|
||||
bullets = bullets.filter(
|
||||
func(b):
|
||||
if b is BulletBase:
|
||||
if is_instance_valid(b) && b is BulletBase:
|
||||
return !b.destroying
|
||||
else:
|
||||
return false
|
||||
|
||||
@@ -6,6 +6,7 @@ signal healed(amount: float)
|
||||
signal healthChanged(health: float)
|
||||
signal died()
|
||||
signal killEnemy(who: EntityBase, by: BulletBase)
|
||||
signal madeDamage(who: EntityBase, by: BulletBase)
|
||||
|
||||
signal energyChanged(energy: float, dontChangeDirection: bool)
|
||||
|
||||
@@ -172,6 +173,7 @@ func _ready():
|
||||
healthChanged.emit(health)
|
||||
energyChanged.emit(energy, false)
|
||||
killEnemy.connect(func(_w, _b): return )
|
||||
madeDamage.connect(func(_w, _b): return )
|
||||
spawn()
|
||||
func _process(_delta):
|
||||
health = clamp(health, 0, fields.get(FieldStore.Entity.MAX_HEALTH))
|
||||
@@ -304,6 +306,7 @@ func bulletHit(bullet: BulletBase, crit: bool, damageOverride = "none"):
|
||||
hit.emit(damage, bullet, crit)
|
||||
health -= damage
|
||||
healthChanged.emit(health)
|
||||
bullet.launcher.madeDamage.emit(self , bullet)
|
||||
DamageLabel.create(damage, crit || perfectMiss, damageAnchor.global_position + MathTool.sampleInCircle(GameRule.damageLabelSpawnOffset))
|
||||
if isBoss and bullet.launcher.isPlayer():
|
||||
bullet.launcher.setBoss(self )
|
||||
|
||||
@@ -116,15 +116,19 @@ static var entityMinValueMap = {
|
||||
Entity.DAMAGE_MULTIPILER: 0.01
|
||||
}
|
||||
static var entityApplier = {
|
||||
Entity.MAX_HEALTH: func(entity: EntityBase, value):
|
||||
Entity.MAX_HEALTH: func(entity: EntityBase, value: float):
|
||||
entity.health += value
|
||||
entity.statebar.forceSync()
|
||||
return true
|
||||
,
|
||||
Entity.EXTRA_APPLE_MAX: func(entity, value):
|
||||
Entity.EXTRA_APPLE_MAX: func(entity: EntityBase, value: float):
|
||||
entity.inventoryMax[ItemStore.ItemType.APPLE] += value
|
||||
return true
|
||||
,
|
||||
Entity.MAX_ENERGY: func(entity: EntityBase, value: float):
|
||||
entity.energy += value
|
||||
return true
|
||||
,
|
||||
}
|
||||
static var entityViewCastMap = {
|
||||
Entity.EXTRA_APPLE_MAX: func(entity, _value):
|
||||
|
||||
Reference in New Issue
Block a user