1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-06-27 14:02:29 +08:00

Compare commits

...

9 Commits

Author SHA1 Message Date
fallingshrimp 7a964d1f64 fix(statemachine): 调整钻石初始库存数量为100
将实体的钻石初始库存从10修改为100,优化初始道具配置
2026-06-12 17:51:15 +08:00
fallingshrimp 43a8c5329e Merge branch 'master' of https://github.com/Rundll86/Dog-Lynx-And-HCN 2026-06-12 16:39:00 +08:00
fallingshrimp 9389794e5a 1 2026-06-12 16:38:44 +08:00
fallingshrimp 6dd9e5bc58 refactor(LaserSummoner): 修复资源ID命名不规范并更新引用
统一替换场景内的子资源随机ID为更易区分的命名,修正粒子材质对曲线、渐变纹理的引用指向
2026-06-12 16:37:44 +08:00
fallingshrimp 07f1334cc7 chore: 删除todo.md中未完成的框架开发任务
移除了过时的待办条目,清理项目文档
2026-05-13 22:49:24 +08:00
fallingshrimp 2a864ae607 fix: 调整两个角色的技能平衡参数
调整Lynx的冲刺倍率从2改为1.5,下调牧羊犬的技能冷却时间从1000ms到500ms,并更新其技能描述文本
2026-05-12 22:43:27 +08:00
fallingshrimp 2abe9ec8b0 chore: 调整多名角色数值与技能逻辑
1. 下调Lynx冲刺倍率至2,同步更新其卡片属性
2. 重写牧羊犬技能为伤害吸血,替换原格挡逻辑
3. 上调氰化氢击杀储能数值,优化其描述文本
4. 新增全局伤害触发信号,完善实体伤害上报逻辑
2026-05-12 22:41:47 +08:00
fallingshrimp d4b9999e44 feat(MuyangDog): add Tree weapon to the character's weapon store
add Tree weapon resource and attach it to MuyangDog's weapon slot 1
2026-05-12 22:28:25 +08:00
fallingshrimp 8a75adc580 fix(volcano bullet): adjust animation speed, cuttable time and hitbox
调整了火山子弹的动画播放速度、可切割时长,修改了动画轨道参数与碰撞箱位置旋转角度
2026-05-12 22:13:30 +08:00
11 changed files with 48 additions and 45 deletions
+14 -14
View File
@@ -19,42 +19,42 @@ shader_parameter/wave_width = 0.5
shader_parameter/edge_nonalpha = 0.6 shader_parameter/edge_nonalpha = 0.6
shader_parameter/alpha = 1.0 shader_parameter/alpha = 1.0
[sub_resource type="Curve" id="Curve_itlbo"] [sub_resource type="Curve" id="Curve_5qhrw"]
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] _data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 2 point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_xathl"] [sub_resource type="CurveTexture" id="CurveTexture_e7vrf"]
curve = SubResource("Curve_itlbo") curve = SubResource("Curve_5qhrw")
[sub_resource type="Curve" id="Curve_75ctq"] [sub_resource type="Curve" id="Curve_ws1jd"]
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] _data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
point_count = 2 point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_my7uy"] [sub_resource type="CurveTexture" id="CurveTexture_ypwek"]
curve = SubResource("Curve_75ctq") curve = SubResource("Curve_ws1jd")
[sub_resource type="Gradient" id="Gradient_62xhh"] [sub_resource type="Gradient" id="Gradient_3diwe"]
offsets = PackedFloat32Array(0, 0.60687) offsets = PackedFloat32Array(0, 0.60687)
colors = PackedColorArray(1, 1, 1, 1, 1, 0, 0, 1) colors = PackedColorArray(1, 1, 1, 1, 1, 0, 0, 1)
[sub_resource type="GradientTexture1D" id="GradientTexture1D_yix5j"] [sub_resource type="GradientTexture1D" id="GradientTexture1D_tn8hw"]
gradient = SubResource("Gradient_62xhh") gradient = SubResource("Gradient_3diwe")
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_m7jvq"] [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_nu1m4"]
particle_flag_disable_z = true particle_flag_disable_z = true
emission_shape = 3 emission_shape = 3
emission_box_extents = Vector3(0, 1000, 1) emission_box_extents = Vector3(0, 1000, 1)
angle_min = 1.07288e-05 angle_min = 1.07288e-05
angle_max = 360.0 angle_max = 360.0
angle_curve = SubResource("CurveTexture_my7uy") angle_curve = SubResource("CurveTexture_ypwek")
spread = 15.0 spread = 15.0
initial_velocity_min = -500.0 initial_velocity_min = -500.0
initial_velocity_max = 500.0 initial_velocity_max = 500.0
gravity = Vector3(0, 0, 0) gravity = Vector3(0, 0, 0)
scale_min = 3.0 scale_min = 3.0
scale_max = 15.0 scale_max = 15.0
color_ramp = SubResource("GradientTexture1D_yix5j") color_ramp = SubResource("GradientTexture1D_tn8hw")
alpha_curve = SubResource("CurveTexture_xathl") alpha_curve = SubResource("CurveTexture_e7vrf")
[sub_resource type="Animation" id="Animation_1rif1"] [sub_resource type="Animation" id="Animation_1rif1"]
length = 0.001 length = 0.001
@@ -230,7 +230,7 @@ position = Vector2(50, 1000)
amount = 400 amount = 400
lifetime = 0.25 lifetime = 0.25
visibility_rect = Rect2(-100, -1000, 200, 2000) visibility_rect = Rect2(-100, -1000, 200, 2000)
process_material = SubResource("ParticleProcessMaterial_m7jvq") process_material = SubResource("ParticleProcessMaterial_nu1m4")
[node name="launcher" type="Polygon2D" parent="texture/rect" index="1" unique_id=1254071384] [node name="launcher" type="Polygon2D" parent="texture/rect" index="1" unique_id=1254071384]
position = Vector2(50, -21) position = Vector2(50, -21)
+7 -7
View File
@@ -156,8 +156,8 @@ tracks/1/interp = 1
tracks/1/loop_wrap = true tracks/1/loop_wrap = true
tracks/1/keys = { tracks/1/keys = {
"handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0), "handle_modes": PackedInt32Array(0, 0, 0, 0, 0, 0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0, 0, -0.25, 0, 0.2, 0, 0.7853982, -0.1, 0, 0.25, 0, -0.7853982, 0, 0, 0, -2, -0.7853982, -0.1, 0, 0.2, 0, 3.142, -0.2, 3, 0, 0), "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.3, 0.6, 0.888264, 1.2, 1.45) "times": PackedFloat32Array(0, 0.2, 0.4, 0.888264, 1.2, 1.45)
} }
tracks/2/type = "bezier" tracks/2/type = "bezier"
tracks/2/imported = false tracks/2/imported = false
@@ -167,7 +167,7 @@ tracks/2/interp = 1
tracks/2/loop_wrap = true tracks/2/loop_wrap = true
tracks/2/keys = { tracks/2/keys = {
"handle_modes": PackedInt32Array(0, 0), "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) "times": PackedFloat32Array(1.45, 1.7)
} }
tracks/3/type = "value" tracks/3/type = "value"
@@ -254,7 +254,7 @@ tracks/8/path = NodePath("anchor/textureSword/trailRight:visible")
tracks/8/interp = 1 tracks/8/interp = 1
tracks/8/loop_wrap = true tracks/8/loop_wrap = true
tracks/8/keys = { tracks/8/keys = {
"times": PackedFloat32Array(0, 0.8, 0.95, 1.35), "times": PackedFloat32Array(0, 0.75, 0.95, 1.35),
"transitions": PackedFloat32Array(1, 1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1, 1),
"update": 1, "update": 1,
"values": [false, true, false, false] "values": [false, true, false, false]
@@ -290,7 +290,7 @@ tracks/11/path = NodePath("%textureSword/trailLine:modulate")
tracks/11/interp = 1 tracks/11/interp = 1
tracks/11/loop_wrap = true tracks/11/loop_wrap = true
tracks/11/keys = { tracks/11/keys = {
"times": PackedFloat32Array(0, 1.8, 2), "times": PackedFloat32Array(0, 1.65, 2),
"transitions": PackedFloat32Array(1, 1, 1), "transitions": PackedFloat32Array(1, 1, 1),
"update": 0, "update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)] "values": [Color(1, 1, 1, 1), Color(1, 1, 1, 1), Color(1, 1, 1, 0)]
@@ -399,8 +399,8 @@ local_coords = true
process_material = SubResource("ParticleProcessMaterial_1sgli") process_material = SubResource("ParticleProcessMaterial_1sgli")
[node name="hitbox" parent="." index="1" unique_id=175349408 node_paths=PackedStringArray("target")] [node name="hitbox" parent="." index="1" unique_id=175349408 node_paths=PackedStringArray("target")]
position = Vector2(199.99998, 0.081461266) position = Vector2(399.99997, 0.16292253)
rotation = 0.00040731629 rotation = 0.32215786
shape = SubResource("RectangleShape2D_1sgli") shape = SubResource("RectangleShape2D_1sgli")
script = ExtResource("7_1sgli") script = ExtResource("7_1sgli")
target = NodePath("../texture/anchor/textureSword") target = NodePath("../texture/anchor/textureSword")
+3 -3
View File
@@ -20,9 +20,9 @@ theme_override_styles/panel = SubResource("StyleBoxFlat_1yfsg")
displayName = "氰化氢" displayName = "氰化氢"
slogan = "微量便可颠覆生机" slogan = "微量便可颠覆生机"
avatar = ExtResource("2_1yfsg") avatar = ExtResource("2_1yfsg")
description = "击杀敌人时储能。" description = "击杀敌人时少量储能。"
fields = Array[int]([18, 10, 1]) 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] [node name="avatarTexture" parent="wrapper" parent_id_path=PackedInt32Array(2023039659) index="0" unique_id=1334645594]
texture = ExtResource("2_1yfsg") texture = ExtResource("2_1yfsg")
@@ -34,4 +34,4 @@ text = "氰化氢"
text = "“微量便可颠覆生机”" text = "“微量便可颠覆生机”"
[node name="descriptionLabel" parent="wrapper/infoContainer" parent_id_path=PackedInt32Array(143242635) index="1" unique_id=808054282] [node name="descriptionLabel" parent="wrapper/infoContainer" parent_id_path=PackedInt32Array(143242635) index="1" unique_id=808054282]
text = "击杀敌人时储能。" text = "击杀敌人时少量储能。"
+1 -1
View File
@@ -22,7 +22,7 @@ slogan = "栖于寒域密林,孤影独行世间"
avatar = ExtResource("2_1s675") avatar = ExtResource("2_1s675")
description = "拥有更大的冲刺速度。" description = "拥有更大的冲刺速度。"
fields = Array[int]([3, 4, 10]) 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 clickToRebuild = true
[node name="avatarTexture" parent="wrapper" parent_id_path=PackedInt32Array(2023039659) index="0" unique_id=1334645594] [node name="avatarTexture" parent="wrapper" parent_id_path=PackedInt32Array(2023039659) index="0" unique_id=1334645594]
+5 -4
View File
@@ -19,10 +19,10 @@ theme_override_styles/panel = SubResource("StyleBoxFlat_fi2nw")
displayName = "牧羊犬" displayName = "牧羊犬"
slogan = "恪守使命不离不弃" slogan = "恪守使命不离不弃"
avatar = ExtResource("2_fi2nw") avatar = ExtResource("2_fi2nw")
description = "每隔3秒发动格挡。" description = "造成伤害时少量吸血,
每0.5秒最多触发一次。"
fields = Array[int]([0, 8, 3]) fields = Array[int]([0, 8, 3])
fieldValues = Array[float]([100.0, 0.2, -0.45]) fieldValues = Array[float]([35.0, 0.2, -0.5])
clickToRebuild = true
[node name="avatarTexture" parent="wrapper" parent_id_path=PackedInt32Array(2023039659) index="0" unique_id=1334645594] [node name="avatarTexture" parent="wrapper" parent_id_path=PackedInt32Array(2023039659) index="0" unique_id=1334645594]
texture = ExtResource("2_fi2nw") texture = ExtResource("2_fi2nw")
@@ -34,4 +34,5 @@ text = "牧羊犬"
text = "“恪守使命不离不弃”" text = "“恪守使命不离不弃”"
[node name="descriptionLabel" parent="wrapper/infoContainer" parent_id_path=PackedInt32Array(143242635) index="1" unique_id=808054282] [node name="descriptionLabel" parent="wrapper/infoContainer" parent_id_path=PackedInt32Array(143242635) index="1" unique_id=808054282]
text = "每隔3秒发动格挡。" text = "造成伤害时少量吸血,
每0.5秒最多触发一次。"
+3
View File
@@ -3,9 +3,12 @@
[ext_resource type="PackedScene" uid="uid://bs863g2s8r770" path="res://components/Abstracts/PlayerBase.tscn" id="1_y3l4w"] [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="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://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")] [node name="MuyangDog" unique_id=1711205167 instance=ExtResource("1_y3l4w")]
script = ExtResource("2_mr6nm") script = ExtResource("2_mr6nm")
displayName = "牧羊犬" displayName = "牧羊犬"
[node name="Volcano" parent="weaponStore" parent_id_path=PackedInt32Array(1319091445) index="0" unique_id=204992396 instance=ExtResource("3_e236u")] [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")]
+2 -2
View File
@@ -10,8 +10,8 @@ var dmg5: float = 0
var splitAngle: float = 10 var splitAngle: float = 10
func spawn(): func spawn():
animator.speed_scale = 0.75 animator.speed_scale = 0.85
setupCuttable(0.2) setupCuttable(0.75)
func ai(): func ai():
PresetBulletAI.lockLauncher(self , launcher, true) PresetBulletAI.lockLauncher(self , launcher, true)
rotation = lerp_angle( rotation = lerp_angle(
+1 -1
View File
@@ -2,4 +2,4 @@ extends PlayerBase
func register(): func register():
super.register() super.register()
sprintMultiplier += 3 sprintMultiplier += 1.5
+8 -9
View File
@@ -1,12 +1,11 @@
extends PlayerBase extends PlayerBase
var parryCounter: CooldownTimer = CooldownTimer.new(3000) var healCounter = CooldownTimer.new(500)
func ai(): func register():
super.ai() super.register()
if parryCounter.isCooldowned(): madeDamage.connect(
var track = getTrackingAnchor() func(_w, _b):
var bullet = BulletTool.findClosetBulletCanDamage(track, get_tree(), self , 300) if healCounter.start():
if is_instance_valid(bullet): heal(1)
BulletBase.generate(ComponentManager.getBullet("Parrier"), self , track, track.angle_to_point(bullet.position)) )
parryCounter.start()
+4 -1
View File
@@ -6,6 +6,7 @@ signal healed(amount: float)
signal healthChanged(health: float) signal healthChanged(health: float)
signal died() signal died()
signal killEnemy(who: EntityBase, by: BulletBase) signal killEnemy(who: EntityBase, by: BulletBase)
signal madeDamage(who: EntityBase, by: BulletBase)
signal energyChanged(energy: float, dontChangeDirection: bool) signal energyChanged(energy: float, dontChangeDirection: bool)
@@ -69,7 +70,7 @@ var inventory = {
ItemStore.ItemType.BEACHBALL: 0, ItemStore.ItemType.BEACHBALL: 0,
ItemStore.ItemType.SOUL: 0, ItemStore.ItemType.SOUL: 0,
ItemStore.ItemType.CRYSTAL: 0, ItemStore.ItemType.CRYSTAL: 0,
ItemStore.ItemType.DIAMOND: 10 ItemStore.ItemType.DIAMOND: 100
} }
var inventoryMax = { var inventoryMax = {
ItemStore.ItemType.BASEBALL: INF, # 无限 ItemStore.ItemType.BASEBALL: INF, # 无限
@@ -172,6 +173,7 @@ func _ready():
healthChanged.emit(health) healthChanged.emit(health)
energyChanged.emit(energy, false) energyChanged.emit(energy, false)
killEnemy.connect(func(_w, _b): return ) killEnemy.connect(func(_w, _b): return )
madeDamage.connect(func(_w, _b): return )
spawn() spawn()
func _process(_delta): func _process(_delta):
health = clamp(health, 0, fields.get(FieldStore.Entity.MAX_HEALTH)) 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) hit.emit(damage, bullet, crit)
health -= damage health -= damage
healthChanged.emit(health) healthChanged.emit(health)
bullet.launcher.madeDamage.emit(self , bullet)
DamageLabel.create(damage, crit || perfectMiss, damageAnchor.global_position + MathTool.sampleInCircle(GameRule.damageLabelSpawnOffset)) DamageLabel.create(damage, crit || perfectMiss, damageAnchor.global_position + MathTool.sampleInCircle(GameRule.damageLabelSpawnOffset))
if isBoss and bullet.launcher.isPlayer(): if isBoss and bullet.launcher.isPlayer():
bullet.launcher.setBoss(self ) bullet.launcher.setBoss(self )
-3
View File
@@ -1,3 +0,0 @@
# Todo
1. 完成Godockly UGC框架。