From 4a04c4ca0189cdfb51259480f6ae952a6be33d11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=A8=E8=90=BD=E5=9F=BA=E5=9B=B4=E8=99=BE?= <3161880837@qq.com> Date: Sat, 22 Nov 2025 16:36:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=AD=A6=E5=99=A8):=20=E4=B8=BA=E7=81=AB?= =?UTF-8?q?=E5=B1=B1=E6=AD=A6=E5=99=A8=E6=B7=BB=E5=8A=A0=E5=B9=BB=E5=BD=B1?= =?UTF-8?q?=E6=94=BB=E5=87=BB=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在火山武器的第4段攻击时发射多支火山幻影,造成额外伤害。修改了动画、伤害计算和武器描述,包括: - 添加count和dmg5属性控制幻影数量和伤害 - 调整幻影动画效果和速度 - 更新武器描述模板和显示文本 --- components/Bullets/Volcano.tscn | 14 ++++++++++++++ components/Bullets/VolcanoShadow.tscn | 10 +++++----- components/Weapons/Volcano.tscn | 9 ++++++--- scripts/Contents/Bullets/Volcano.gd | 23 ++++++++++++++--------- scripts/Contents/Weapons/Volcano.gd | 4 ++++ 5 files changed, 43 insertions(+), 17 deletions(-) diff --git a/components/Bullets/Volcano.tscn b/components/Bullets/Volcano.tscn index 6034d8d..c33553b 100644 --- a/components/Bullets/Volcano.tscn +++ b/components/Bullets/Volcano.tscn @@ -252,6 +252,20 @@ tracks/9/keys = { "times": PackedFloat32Array(0, 0.6, 1.2, 1.45) } tracks/9/use_blend = true +tracks/10/type = "method" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("%texture/..") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(1.45), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"generateShadow" +}] +} [sub_resource type="AnimationLibrary" id="AnimationLibrary_w1utg"] _data = { diff --git a/components/Bullets/VolcanoShadow.tscn b/components/Bullets/VolcanoShadow.tscn index c53bb4c..41bf650 100644 --- a/components/Bullets/VolcanoShadow.tscn +++ b/components/Bullets/VolcanoShadow.tscn @@ -44,7 +44,7 @@ tracks/0/keys = { "times": PackedFloat32Array(0, 0.1, 0.90000004, 1), "transitions": PackedFloat32Array(1, 1, 1, 1), "update": 0, -"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 0.70000005), Color(1, 1, 1, 0.70000005), Color(1, 1, 1, 0)] +"values": [Color(1, 1, 1, 0), Color(1, 1, 1, 0.5), Color(1, 1, 1, 0.5), Color(1, 1, 1, 0)] } tracks/1/type = "value" tracks/1/imported = false @@ -53,10 +53,10 @@ tracks/1/path = NodePath("static:scale") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { -"times": PackedFloat32Array(0, 0.1, 0.90000004, 1), -"transitions": PackedFloat32Array(1, 1, 1, 1), +"times": PackedFloat32Array(0, 0.1, 1), +"transitions": PackedFloat32Array(1, 1, 1), "update": 0, -"values": [Vector2(0, 0), Vector2(0.8, 0.8), Vector2(0.8, 0.8), Vector2(0, 0)] +"values": [Vector2(0, 0), Vector2(1.5, 1.5), Vector2(0, 0)] } [sub_resource type="AnimationLibrary" id="AnimationLibrary_i7b6y"] @@ -70,7 +70,7 @@ size = Vector2(76, 12) [node name="VolcanoShadow" instance=ExtResource("1_4oiyn")] script = ExtResource("2_i7b6y") -speed = 30.0 +speed = 25.0 penerate = 1.0 penerateDamageReduction = 0.2 autoSpawnAnimation = true diff --git a/components/Weapons/Volcano.tscn b/components/Weapons/Volcano.tscn index 8878995..1822dd4 100644 --- a/components/Weapons/Volcano.tscn +++ b/components/Weapons/Volcano.tscn @@ -14,23 +14,26 @@ typeTopic = 2 costBeachball = 300 store = { "atk": 10.0, +"count": 2.0, "dmg1": 1.0, "dmg2": 0.75, "dmg3": 1.5, "dmg4": 1.25, +"dmg5": 0.6, "rotate": 0.05 } storeType = { "atk": 1, +"count": 1, "dmg1": 2, "dmg2": 2, "dmg3": 2, "dmg4": 2, +"dmg5": 2, "rotate": 2 } -descriptionTemplate = "召唤1支[b]火山[/b],以$rotate的效率跟随鼠标指向,进行基础伤害为$atk的4段挥舞攻击。造成的伤害分别为$dmg1,$dmg2,$dmg3,$dmg4。" +descriptionTemplate = "召唤1支[b]火山[/b],以$rotate的效率跟随鼠标指向,进行基础伤害为$atk的4段挥舞攻击。造成的伤害分别为$dmg1,$dmg2,$dmg3,$dmg4,第4段攻击时发射$count支[b]火山幻影[/b],造成$dmg5伤害。" cooldown = 1750.0 -debugRebuild = true [node name="avatar" parent="container/info" index="0"] texture = ExtResource("2_hh01t") @@ -47,4 +50,4 @@ quality = 4 typeTopic = 2 [node name="description" parent="container" index="2"] -text = "[center]召唤1支[b]火山[/b],以[color=cyan]5%[/color]的效率跟随鼠标指向,进行基础伤害为[color=cyan]10[/color]的4段挥舞攻击。造成的伤害分别为[color=cyan]100%[/color],[color=cyan]75%[/color],[color=cyan]150%[/color],[color=cyan]125%[/color]。[/center]" +text = "[center]召唤1支[b]火山[/b],以[color=cyan]5%[/color]的效率跟随鼠标指向,进行基础伤害为[color=cyan]10[/color]的4段挥舞攻击。造成的伤害分别为[color=cyan]100%[/color],[color=cyan]75%[/color],[color=cyan]150%[/color],[color=cyan]125%[/color],第4段攻击时发射[color=cyan]2[/color]支[b]火山幻影[/b],造成[color=cyan]25%[/color]伤害。[/center]" diff --git a/scripts/Contents/Bullets/Volcano.gd b/scripts/Contents/Bullets/Volcano.gd index 5b47ad6..a4356b6 100644 --- a/scripts/Contents/Bullets/Volcano.gd +++ b/scripts/Contents/Bullets/Volcano.gd @@ -5,6 +5,9 @@ class_name Volcano @onready var anchor: Node2D = $%anchor var rotates: float = 0 +var count: int = 0 +var dmg5: float = 0 +var splitAngle: float = 10 func register(): animator.speed_scale = launcher.fields.get(FieldStore.Entity.ATTACK_SPEED) @@ -17,12 +20,14 @@ func ai(): ) func generateShadow(): - for i in BulletBase.generate( - ComponentManager.getBullet("VolcanoShadow"), - launcher, - textureSword.global_position, - anchor.global_rotation, - false, false, true, true - ): - if i is VolcanoShadow: - i.baseDamage = baseDamage + var startAngle = rotation - deg_to_rad(count * splitAngle / 2) + for i in count: + for bullet in BulletBase.generate( + ComponentManager.getBullet("VolcanoShadow"), + launcher, + position, + startAngle + i * deg_to_rad(splitAngle), + false, false, true, true + ): + if bullet is VolcanoShadow: + bullet.baseDamage = baseDamage * dmg5 diff --git a/scripts/Contents/Weapons/Volcano.gd b/scripts/Contents/Weapons/Volcano.gd index 241be9a..3b6a3c2 100644 --- a/scripts/Contents/Weapons/Volcano.gd +++ b/scripts/Contents/Weapons/Volcano.gd @@ -7,6 +7,8 @@ func update(to: int, origin: Dictionary, _entity: EntityBase): origin["dmg2"] += 0.03 * to * soulLevel origin["dmg3"] += 0.03 * to * soulLevel origin["dmg4"] += 0.03 * to * soulLevel + origin["dmg5"] += 0.04 * to * soulLevel + origin["count"] = 1 * soulLevel + 1 origin["atk"] += 1 * to * soulLevel return origin func attack(entity: EntityBase): @@ -20,3 +22,5 @@ func attack(entity: EntityBase): bullet.baseDamage = readStore("atk") bullet.rotates = readStore("rotate") bullet.damageMultipliers = [readStore("dmg1"), readStore("dmg2"), readStore("dmg3"), readStore("dmg4")] + bullet.count = readStore("count") + bullet.dmg5 = readStore("dmg5")