diff --git a/components/Abstracts/WeaponCardBase.tscn b/components/Abstracts/WeaponCardBase.tscn index b0d7a18..948d9b4 100644 --- a/components/Abstracts/WeaponCardBase.tscn +++ b/components/Abstracts/WeaponCardBase.tscn @@ -183,9 +183,16 @@ text = "无灵" label_settings = SubResource("LabelSettings_b3nsw") horizontal_alignment = 1 -[node name="description" type="RichTextLabel" parent="container" unique_id=566230682] +[node name="scroller" type="ScrollContainer" parent="container" unique_id=543588938] +custom_minimum_size = Vector2(0, 100) +layout_mode = 2 +size_flags_vertical = 3 +horizontal_scroll_mode = 0 + +[node name="description" type="RichTextLabel" parent="container/scroller" unique_id=566230682] unique_name_in_owner = true layout_mode = 2 +size_flags_horizontal = 3 bbcode_enabled = true text = "[center]造成[color=cyan]10[/color]点伤害。[/center]" fit_content = true diff --git a/components/Weapons/Tree.tscn b/components/Weapons/Tree.tscn index a3a6dad..598a728 100644 --- a/components/Weapons/Tree.tscn +++ b/components/Weapons/Tree.tscn @@ -60,6 +60,8 @@ descriptionTemplate = "进行[b]格挡[/b],化解敌人的攻击。 [color=red]无法化解伤害[/color]但产生少量击退; 对于[b]魔法或召唤[/b]攻击, [color=red]无法化解伤害[/color]但可以少量储能; +对于[b]爆炸[/b]攻击, + [color=red]无法化解伤害[/color]且[color=red]自身产生[color=yellow]2[/color]枚内伤[/color]; 敌人或自身受到的任意[color=yellow]爆炸类伤害[/color]都会引爆其所有内伤,每枚内伤造成$atk点伤害。 格挡时机越精确,成功率越高。 @@ -83,7 +85,7 @@ typeTopic = 3 [node name="source" parent="container/info/displays" parent_id_path=PackedInt32Array(784441328) index="1" unique_id=365191794] text = "Nine Sols × Terraria" -[node name="description" parent="container" parent_id_path=PackedInt32Array(575698869) index="2" unique_id=566230682] +[node name="description" parent="container/scroller" parent_id_path=PackedInt32Array(543588938) index="0" unique_id=566230682] text = "进行[b]格挡[/b],化解敌人的攻击。 每成功格挡一次,获得一点[b]气力[/b]。 @@ -120,6 +122,8 @@ text = "进行[b]格挡[/b],化解敌人的攻击。 [color=red]无法化解伤害[/color]但产生少量击退; 对于[b]魔法或召唤[/b]攻击, [color=red]无法化解伤害[/color]但可以少量储能; +对于[b]爆炸[/b]攻击, + [color=red]无法化解伤害[/color]且[color=red]自身产生[color=yellow]2[/color]枚内伤[/color]; 敌人或自身受到的任意[color=yellow]爆炸类伤害[/color]都会引爆其所有内伤,每枚内伤造成[color=cyan]10[/color]点伤害。 格挡时机越精确,成功率越高。 diff --git a/scripts/Contents/Bullets/InfinitySword.gd b/scripts/Contents/Bullets/InfinitySword.gd index d314930..af94f58 100644 --- a/scripts/Contents/Bullets/InfinitySword.gd +++ b/scripts/Contents/Bullets/InfinitySword.gd @@ -20,3 +20,4 @@ func hitBullet(bullet: BulletBase): if !is_instance_valid(launcher): return if BulletTool.canDamage(bullet, launcher): baseDamage *= rate2 ** bullet.getDamage() + InternalDamageBullet.generateBall(launcher, bullet.launcher, sqrt(baseDamage)) diff --git a/scripts/Contents/Bullets/InternalDamage.gd b/scripts/Contents/Bullets/InternalDamage.gd index 4dd7bed..6d8ed63 100644 --- a/scripts/Contents/Bullets/InternalDamage.gd +++ b/scripts/Contents/Bullets/InternalDamage.gd @@ -11,3 +11,16 @@ func spawn(): if bullet.motionType == BulletBase.MotionType.EXPLOSION: hitbox.set_deferred("disabled", false) ) + +static func generateBall(by: EntityBase, who: EntityBase, atk: float): + var internalDamages = who.getOrCreateCycleTimer("internalDamages", 3000, 150) + for bullet in BulletBase.generate( + ComponentManager.getBullet("InternalDamage"), + by, + Vector2.ZERO, + 0 + ): + if bullet is InternalDamageBullet: + bullet.baseDamage = atk + bullet.hoster = who + internalDamages.host(bullet) diff --git a/scripts/Contents/Bullets/Parrier.gd b/scripts/Contents/Bullets/Parrier.gd index 7bbd571..d70289e 100644 --- a/scripts/Contents/Bullets/Parrier.gd +++ b/scripts/Contents/Bullets/Parrier.gd @@ -33,18 +33,6 @@ func generateParryBall(bDamage: float): ): if b is ParryBallBullet: b.atk = atk * bDamage -func generateInternalDamage(by: EntityBase, who: EntityBase): - var internalDamages = who.getOrCreateCycleTimer("internalDamages", 3000, 150) - for bullet in BulletBase.generate( - ComponentManager.getBullet("InternalDamage"), - by, - Vector2.ZERO, - 0 - ): - if bullet is InternalDamageBullet: - bullet.baseDamage = atk - bullet.hoster = who - internalDamages.host(bullet) func spawn(): var varians = randi_range(0, 1) @@ -85,7 +73,7 @@ func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞 parryEffect(bullet) bullet.hitbox.set_deferred("disabled", true) generateParryBall(bullet.baseDamage) - generateInternalDamage(launcher, bullet.launcher) + InternalDamageBullet.generateBall(launcher, bullet.launcher, atk) elif bullet.motionType == BulletBase.MotionType.STAB: parryEffect(bullet) penerateEffect(bullet.launcher, bullet.launcher.position * 1.01) @@ -93,21 +81,25 @@ func hitBullet(bullet: BulletBase): # 当前子弹与其他子弹相撞 bullet.launcher.takeDamage(atk * reflectRate * bullet.getDamage()) bullet.launcher.impluse(Vector2.from_angle(bullet.rotation) * -2000) generateParryBall(bullet.baseDamage) - generateInternalDamage(launcher, bullet.launcher) + InternalDamageBullet.generateBall(launcher, bullet.launcher, atk) elif bullet.motionType == BulletBase.MotionType.SPRINT: parryEffect(bullet) bullet.tryDestroy() bullet.launcher.velocity *= 0 generateParryBall(bullet.baseDamage) - generateInternalDamage(launcher, bullet.launcher) + InternalDamageBullet.generateBall(launcher, bullet.launcher, atk) elif bullet.motionType == BulletBase.MotionType.BREATH: penerateEffect(bullet.launcher, launcher.position) bullet.launcher.impluse(Vector2.from_angle(bullet.rotation) * -500) elif bullet.motionType == BulletBase.MotionType.SUMMON || bullet.motionType == BulletBase.MotionType.MAGIC: penerateEffect(bullet.launcher, launcher.position) launcher.storeEnergy(sqrt(bullet.baseDamage)) + elif bullet.motionType == BulletBase.MotionType.EXPLOSION: + penerateEffect(bullet.launcher, launcher.position) + for i in 2: + InternalDamageBullet.generateBall(bullet.launcher, launcher, atk) else: - generateInternalDamage(bullet.launcher, launcher) + InternalDamageBullet.generateBall(bullet.launcher, launcher, atk) func refract(_newBullet: BulletBase, _entity: EntityBase, _index: int, _total: int, _lastBullet: float): return null