XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

DeathMod

【Terraria】DeathMod (now aka Soul Harvest)

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/DeathMod

重做百分比穿透并提高命定层数上限

851a59e
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

9 个文件 +46 -31
Modified Common/MyGlobalNPC.cs +3 -0
@@ -47,6 +47,9 @@ public class MyGlobalNPC : GlobalNPC
47 47 if (item.ModItem is not (NormalSickle or LegacyDeath))
48 48 return;
49 49
50 if (item.ModItem is NormalSickle sickle)
51 modifiers.ScalingArmorPenetration += sickle.ArmorPenetrationPercent;
52
50 53 if (Main.netMode == NetmodeID.MultiplayerClient)
51 54 {
52 55 if (player.whoAmI != Main.myPlayer)
Modified Common/MyGlobalProjectile.cs +6 -3
@@ -1,5 +1,6 @@
1 1 using DeathMod.Items;
2 2 using DeathMod.Projectiles;
3 using System;
3 4 using System.IO;
4 5 using Terraria;
5 6 using Terraria.DataStructures;
@@ -60,7 +61,7 @@ public class MyGlobalProjectile : GlobalProjectile
60 61 }
61 62
62 63 IsSickleProjectile = true;
63 projectile.ArmorPenetration = ArmorPenetrationLevel;
64 projectile.ArmorPenetration = 0;
64 65 projectile.usesIDStaticNPCImmunity = false;
65 66 projectile.usesLocalNPCImmunity = true;
66 67 projectile.localNPCHitCooldown = HitCooldownFrames;
@@ -96,7 +97,7 @@ public class MyGlobalProjectile : GlobalProjectile
96 97 FatedStacksPerHit = binaryReader.ReadByte();
97 98 FatedMaximumStacks = binaryReader.ReadByte();
98 99 FatedDurationFrames = binaryReader.ReadUInt16();
99 projectile.ArmorPenetration = ArmorPenetrationLevel;
100 projectile.ArmorPenetration = 0;
100 101 projectile.usesIDStaticNPCImmunity = false;
101 102 projectile.usesLocalNPCImmunity = true;
102 103 projectile.localNPCHitCooldown = HitCooldownFrames;
@@ -122,7 +123,7 @@ public class MyGlobalProjectile : GlobalProjectile
122 123 HitCooldownFrames = NormalSickle.BaseHitCooldownFrames;
123 124 }
124 125
125 projectile.ArmorPenetration = ArmorPenetrationLevel;
126 projectile.ArmorPenetration = 0;
126 127 projectile.usesIDStaticNPCImmunity = false;
127 128 projectile.usesLocalNPCImmunity = true;
128 129 projectile.localNPCHitCooldown = HitCooldownFrames;
@@ -135,6 +136,8 @@ public class MyGlobalProjectile : GlobalProjectile
135 136 if (!sickleHit || projectile.owner < 0 || projectile.owner >= Main.maxPlayers)
136 137 return;
137 138
139 modifiers.ScalingArmorPenetration += Math.Clamp(ArmorPenetrationLevel, 0, NormalSickle.MaxArmorPenetrationLevel) / 100f;
140
138 141 if (Main.netMode == NetmodeID.MultiplayerClient)
139 142 {
140 143 if (projectile.owner == Main.myPlayer)
Modified Items/NormalSickle.cs +18 -9
@@ -48,7 +48,8 @@ public class NormalSickle : ModItem, IDeathAltarUpgradeable
48 48 public const int MaxAttackSpeedLevel = 10;
49 49 public const int MaxKnockbackLevel = 10;
50 50 public const int MaxHitCooldownLevel = 10;
51 public const int MaxFatedStackCapacity = 10;
51 public const int MaxFatedStackLevel = 10;
52 public const int MaxFatedStackCapacity = 1 + (MaxFatedStackLevel - 1) * 3;
52 53 public const int MaxFatedStacksPerHitLevel = 5;
53 54 public const int MaxFatedDurationLevel = 10;
54 55 public const int BaseFatedDurationFrames = 60 * 3;
@@ -133,8 +134,9 @@ public class NormalSickle : ModItem, IDeathAltarUpgradeable
133 134 public int AttackUseTime => BaseUseTime - (AttackSpeedLevel - 1);
134 135 public float KnockbackBonus => (KnockbackLevel - 1) * 0.5f;
135 136 public float TotalBaseKnockback => BaseKnockback + KnockbackBonus;
137 public float ArmorPenetrationPercent => ArmorPenetrationLevel / 100f;
136 138 public int HitCooldownFrames => BaseHitCooldownFrames - (HitCooldownLevel - 1);
137 public int FatedMaximumStacks => FatedUnlocked ? FatedMaximumStacksLevel : 0;
139 public int FatedMaximumStacks => FatedUnlocked ? GetFatedMaximumStacks(FatedMaximumStacksLevel) : 0;
138 140 public int FatedStacksPerHit => FatedUnlocked ? FatedStacksPerHitLevel : 0;
139 141 public int FatedDurationFrames => FatedUnlocked ? BaseFatedDurationFrames + (FatedDurationLevel - 1) * 60 : 0;
140 142 public IReadOnlyList<DeathAltarUpgradeType> AltarUpgradeTypes => AlternateNextSickleType == ItemID.None
@@ -347,7 +349,7 @@ public class NormalSickle : ModItem, IDeathAltarUpgradeable
347 349 DeathAltarUpgradeType.FatedUnlock => FatedUnlocked
348 350 ? DeathAltarPrice.Unavailable
349 351 : DeathAltarPrice.Essence(1),
350 DeathAltarUpgradeType.FatedMaxStacks => !FatedUnlocked || FatedMaximumStacksLevel >= MaxFatedStackCapacity
352 DeathAltarUpgradeType.FatedMaxStacks => !FatedUnlocked || FatedMaximumStacksLevel >= MaxFatedStackLevel
351 353 ? DeathAltarPrice.Unavailable
352 354 : DeathAltarPrice.Essence(FatedMaximumStacksLevel),
353 355 DeathAltarUpgradeType.FatedStacksPerHit => !FatedUnlocked || FatedStacksPerHitLevel >= MaxFatedStacksPerHitLevel
@@ -376,7 +378,7 @@ public class NormalSickle : ModItem, IDeathAltarUpgradeable
376 378 DeathAltarUpgradeType.AttackSpeed => Language.GetTextValue("Mods.DeathMod.UI.UpgradeValues.Frames", AttackUseTime),
377 379 DeathAltarUpgradeType.Knockback => TotalBaseKnockback.ToString("0.0"),
378 380 DeathAltarUpgradeType.ProjectileCount => $"×{ProjectileCount}",
379 DeathAltarUpgradeType.ArmorPenetration => ArmorPenetrationLevel.ToString(),
381 DeathAltarUpgradeType.ArmorPenetration => $"{ArmorPenetrationLevel}%",
380 382 DeathAltarUpgradeType.HitCooldown => Language.GetTextValue("Mods.DeathMod.UI.UpgradeValues.Frames", HitCooldownFrames),
381 383 DeathAltarUpgradeType.LifeSteal => $"{LifeStealLevel}%",
382 384 DeathAltarUpgradeType.FatedUnlock => Language.GetTextValue(FatedUnlocked ? "Mods.DeathMod.UI.Enabled" : "Mods.DeathMod.UI.Disabled"),
@@ -397,11 +399,11 @@ public class NormalSickle : ModItem, IDeathAltarUpgradeable
397 399 DeathAltarUpgradeType.AttackSpeed => Language.GetTextValue("Mods.DeathMod.UI.UpgradeValues.Frames", AttackUseTime - 1),
398 400 DeathAltarUpgradeType.Knockback => (TotalBaseKnockback + 0.5f).ToString("0.0"),
399 401 DeathAltarUpgradeType.ProjectileCount => $"×{ProjectileCount + 1}",
400 DeathAltarUpgradeType.ArmorPenetration => (ArmorPenetrationLevel + 1).ToString(),
402 DeathAltarUpgradeType.ArmorPenetration => $"{ArmorPenetrationLevel + 1}%",
401 403 DeathAltarUpgradeType.HitCooldown => Language.GetTextValue("Mods.DeathMod.UI.UpgradeValues.Frames", HitCooldownFrames - 1),
402 404 DeathAltarUpgradeType.LifeSteal => $"{LifeStealLevel + 1}%",
403 405 DeathAltarUpgradeType.FatedUnlock => Language.GetTextValue("Mods.DeathMod.UI.Enabled"),
404 DeathAltarUpgradeType.FatedMaxStacks => Language.GetTextValue("Mods.DeathMod.UI.UpgradeValues.Stacks", FatedMaximumStacksLevel + 1),
406 DeathAltarUpgradeType.FatedMaxStacks => Language.GetTextValue("Mods.DeathMod.UI.UpgradeValues.Stacks", GetFatedMaximumStacks(FatedMaximumStacksLevel + 1)),
405 407 DeathAltarUpgradeType.FatedStacksPerHit => Language.GetTextValue("Mods.DeathMod.UI.UpgradeValues.StacksPerHit", FatedStacksPerHitLevel + 1),
406 408 DeathAltarUpgradeType.FatedDuration => Language.GetTextValue("Mods.DeathMod.UI.UpgradeValues.Seconds", (BaseFatedDurationFrames + FatedDurationLevel * 60) / 60f),
407 409 _ => string.Empty
@@ -573,7 +575,7 @@ public class NormalSickle : ModItem, IDeathAltarUpgradeable
573 575 KnockbackLevel = Math.Clamp(tag.GetInt(nameof(KnockbackLevel)), 1, MaxKnockbackLevel);
574 576 HitCooldownLevel = Math.Clamp(tag.GetInt(nameof(HitCooldownLevel)), 1, MaxHitCooldownLevel);
575 577 FatedUnlocked = tag.GetBool(nameof(FatedUnlocked));
576 FatedMaximumStacksLevel = Math.Clamp(tag.GetInt(nameof(FatedMaximumStacksLevel)), 1, MaxFatedStackCapacity);
578 FatedMaximumStacksLevel = Math.Clamp(tag.GetInt(nameof(FatedMaximumStacksLevel)), 1, MaxFatedStackLevel);
577 579 FatedStacksPerHitLevel = Math.Clamp(tag.GetInt(nameof(FatedStacksPerHitLevel)), 1, MaxFatedStacksPerHitLevel);
578 580 FatedDurationLevel = Math.Clamp(tag.GetInt(nameof(FatedDurationLevel)), 1, MaxFatedDurationLevel);
579 581 ApplyDynamicStats();
@@ -604,7 +606,7 @@ public class NormalSickle : ModItem, IDeathAltarUpgradeable
604 606 KnockbackLevel = Math.Clamp((int)reader.ReadByte(), 1, MaxKnockbackLevel);
605 607 HitCooldownLevel = Math.Clamp((int)reader.ReadByte(), 1, MaxHitCooldownLevel);
606 608 FatedUnlocked = reader.ReadBoolean();
607 FatedMaximumStacksLevel = Math.Clamp((int)reader.ReadByte(), 1, MaxFatedStackCapacity);
609 FatedMaximumStacksLevel = Math.Clamp((int)reader.ReadByte(), 1, MaxFatedStackLevel);
608 610 FatedStacksPerHitLevel = Math.Clamp((int)reader.ReadByte(), 1, MaxFatedStacksPerHitLevel);
609 611 FatedDurationLevel = Math.Clamp((int)reader.ReadByte(), 1, MaxFatedDurationLevel);
610 612 ApplyDynamicStats();
@@ -621,7 +623,14 @@ public class NormalSickle : ModItem, IDeathAltarUpgradeable
621 623
622 624 internal void ApplyDynamicStats()
623 625 {
624 Item.ArmorPenetration = Math.Clamp(ArmorPenetrationLevel, 1, MaxArmorPenetrationLevel);
626 // Percentage penetration is applied through NPC.HitModifiers so this must not
627 // also contribute vanilla's flat armor penetration.
628 Item.ArmorPenetration = 0;
629 }
630
631 private static int GetFatedMaximumStacks(int level)
632 {
633 return 1 + (Math.Clamp(level, 1, MaxFatedStackLevel) - 1) * 3;
625 634 }
626 635
627 636 private int GetScaledDamage(int level)
Modified Localization/en-US.hjson +2 -2
@@ -130,7 +130,7 @@ Mods: {
130 130 SickleStats:
131 131 '''
132 132 Altar upgrades: Damage Lv.{0} (current-form base damage {1}) | Speed {5}f | Knockback {6}
133 Projectiles {2} | Armor penetration {3} | Life steal {4}% | Hit cooldown {7}f
133 Projectiles {2} | Penetration {3} | Life steal {4}% | Hit cooldown {7}f
134 134 '''
135 135 ChargeHint: Right-click to charge with a separate soul-gathering pose, then release a high-multiplier heavy slash and empowered projectile pattern
136 136 AlternateCooldown: Right-click cooldown: {0:0.##}s
@@ -207,7 +207,7 @@ Mods: {
207 207 AttackSpeed: Attack speed
208 208 Knockback: Knockback
209 209 ProjectileCount: Projectile multiplication
210 ArmorPenetration: Armor penetration
210 ArmorPenetration: Penetration
211 211 HitCooldown: Hit cooldown
212 212 LifeSteal: Life steal
213 213 FatedUnlock: Unlock Fated
Modified Localization/zh-Hans.hjson +2 -2
@@ -130,7 +130,7 @@ Mods: {
130 130 SickleStats:
131 131 '''
132 132 祭坛改造:攻击 Lv.{0}(当前阶段基础伤害 {1}) | 攻速 {5}帧 | 击退 {6}
133 弹幕 {2} | 穿甲 {3} | 吸血 {4}% | 伤害间隔 {7}帧
133 弹幕 {2} | 穿透 {3} | 吸血 {4}% | 伤害间隔 {7}帧
134 134 '''
135 135 ChargeHint: 右键蓄力:使用独立聚魂动作,松开后施展高倍率重斩与强化弹幕
136 136 AlternateCooldown: 右键冷却:{0:0.##}秒
@@ -207,7 +207,7 @@ Mods: {
207 207 AttackSpeed: 攻速改造
208 208 Knockback: 击退改造
209 209 ProjectileCount: 弹幕增殖
210 ArmorPenetration: 穿甲改造
210 ArmorPenetration: 穿透
211 211 HitCooldown: 伤害间隔
212 212 LifeSteal: 吸血改造
213 213 FatedUnlock: 点亮命定
Modified README.md +4 -4
@@ -92,13 +92,13 @@ At the altar, unlock Fated on any regular sickle for 1 Soul Essence. The skill t
92 92
93 93 | Fated node | Initial unlocked value | Maximum | Upgrade cost |
94 94 | --- | ---: | ---: | --- |
95 | Stack cap | 1 | 10 | Current cap in Soul Essence |
95 | Stack cap | 1 | 28 | +3 stacks per upgrade; current level in Soul Essence |
96 96 | Stacks per hit | 1 | 5 | 2 × current level in Soul Essence |
97 97 | Duration | 3 s | 12 s | Rises from 1 to 5 Soul Essence |
98 98
99 99 Every Fated stack deals damage once per second equal to one third of a normal enemy's maximum life. Bosses and boss bodies use a reduced 1% maximum-life rate per stack. Fated damage inherits the life-steal level of the player who applied each stack. Each stack has its own duration timer, and the target displays a magenta icon, stack count, and inward-moving particles.
100 100
101 Projectile count, armor penetration, hit cooldown, and life steal consume Soul Essence from their first purchase. Damage, attack speed, and knockback retain soul-injection steps at low levels before switching to essence later. Life steal restores its purchased percentage of damage against missing life and creates one returning blood-soul wisp per 20 life actually restored, with one minimum feedback wisp for smaller heals.
101 Projectile count, percentage penetration, hit cooldown, and life steal consume Soul Essence from their first purchase. Penetration ignores the displayed percentage of the target's armor. Damage, attack speed, and knockback retain soul-injection steps at low levels before switching to essence later. Life steal restores its purchased percentage of damage against missing life and creates one returning blood-soul wisp per 20 life actually restored, with one minimum feedback wisp for smaller heals.
102 102
103 103 After entering Hardmode, craft Wings of Death from Souls of Flight and train flight time, horizontal speed, acceleration, and vertical power. Max all four branches to unlock infinite flight. The Death Robe can be trained in defense, maximum life, regeneration, mobility, minions, sentries, placement range, lava immunity, utility immunities, and 15 separately purchased debuff immunities.
104 104
@@ -120,10 +120,10 @@ The Death Necklace unfolds a small field while equipped and enabled with the **T
120 120 | Attack speed | 25 frames | 16 frames | Early souls, later essence |
121 121 | Knockback | 4.0 | 8.5 | Early souls, later essence |
122 122 | Projectile count | 1 | 7 | Essence only; unavailable on Harvest |
123 | Armor penetration | 1 | 20 | Essence only |
123 | Penetration | 1% | 20% | Percentage of target armor ignored; Essence only |
124 124 | Hit cooldown | 15 frames | 6 frames | Essence only; requires a projectile form |
125 125 | Life steal | 0% | 5% | Essence only |
126 | Fated stack cap | Locked | 10 | Essence-only skill tree |
126 | Fated stack cap | Locked | 28 | +3 stacks per upgrade; Essence-only skill tree |
127 127
128 128 All sickle upgrade data, prefixes, and favorite state survive form advancement.
129 129
Modified README.zh-Hans.md +4 -4
@@ -70,13 +70,13 @@ Soul Harvest(内部模组名 `DeathMod`)是一款围绕死神镰刀、人物
70 70
71 71 所有常规镰刀都能在祭坛消耗 1 灵魂精华点亮“命定”。技能树会随镰刀进阶继承,并可分别提升:
72 72
73 - 层数上限:1 层起步,最高 10 层。
73 - 层数上限:1 层起步,每级增加 3 层,最高 28 层。
74 74 - 单次命中叠层:每次 +1 层起步,最高 +5 层。
75 75 - 持续时间:3 秒起步,最高 12 秒。
76 76
77 77 命定每层每秒对普通敌人造成 `33.33% 最大生命`伤害,对 Boss 及其主体部件降低为 `1% 最大生命`。命定伤害会继承对应层施加者当时的吸血等级;目标头顶会显示洋红色图标与层数,并产生向内收束粒子。
78 78
79 弹幕数量、穿甲、伤害间隔与吸血从第一次升级起就需要灵魂精华。攻击、攻速、击退仍可在低级阶段直接注入人物灵魂。吸血按造成伤害的等级百分比回复实际缺失生命,每回复 20 点生成 1 个沿曲线飞回人物的血魂;不足 20 点时仍生成 1 个反馈粒子。
79 弹幕数量、穿透、伤害间隔与吸血从第一次升级起就需要灵魂精华。穿透按显示百分比无视目标护甲。攻击、攻速、击退仍可在低级阶段直接注入人物灵魂。吸血按造成伤害的等级百分比回复实际缺失生命,每回复 20 点生成 1 个沿曲线飞回人物的血魂;不足 20 点时仍生成 1 个反馈粒子。
80 80
81 81 困难模式后可以制作死亡之翼,分别提升飞行时间、水平速度、加速度与垂直能力,四项满级后解锁无限飞行。死神长袍则可提升防御、生命、回复、机动、仆从、哨兵、放置距离、熔岩免疫及功能免疫;15 种减益免疫必须逐项购买。
82 82
@@ -97,10 +97,10 @@ Soul Harvest(内部模组名 `DeathMod`)是一款围绕死神镰刀、人物
97 97 | 攻速 | 25 帧 | 16 帧 | 低级灵魂、高级精华 |
98 98 | 击退 | 4.0 | 8.5 | 低级灵魂、高级精华 |
99 99 | 弹幕数量 | 1 | 7 | 仅灵魂精华;收魂形态不可用 |
100 | 穿甲 | 1 | 20 | 仅灵魂精华 |
100 | 穿透 | 1% | 20% | 按比例无视目标护甲;仅灵魂精华 |
101 101 | 伤害间隔 | 15 帧 | 6 帧 | 仅灵魂精华;需要弹幕形态 |
102 102 | 吸血 | 0% | 5% | 仅灵魂精华 |
103 | 命定层数上限 | 未点亮 | 10 | 灵魂精华技能树 |
103 | 命定层数上限 | 未点亮 | 28 | 每次升级增加 3 层;灵魂精华技能树 |
104 104
105 105 所有镰刀改造、前缀与收藏状态都会在形态进阶后保留。
106 106
Modified docs/PLAY_GUIDE.md +3 -3
@@ -110,7 +110,7 @@ The letter `L` below means the current level. `N` means the current projectile c
110 110 | Attack speed | 25 to 16 use frames | `25L` souls below Lv. 6; essence afterward |
111 111 | Knockback | 4.0 to 8.5 | `15L` souls below Lv. 6; essence afterward |
112 112 | Projectile count | 1 to 7 | Essence only: 1, 2, 4, 8, 16, 32 |
113 | Armor penetration | 1 to 20 | Essence only: `1 + floor((L-1)/3)` |
113 | Penetration | 1% to 20% | Ignores that percentage of target armor; essence only: `1 + floor((L-1)/3)` |
114 114 | Hit cooldown | 15 to 6 frames | Essence only: `1 + floor((L-1)/2)` |
115 115 | Life steal | 0% to 5% | Essence only: 1, 3, 5, 7, 9 |
116 116
@@ -142,7 +142,7 @@ Every regular sickle begins with Fated locked. Unlock it at the Death Altar for
142 142 | Node | On unlock | Maximum | Cost to buy next level |
143 143 | --- | ---: | ---: | --- |
144 144 | Unlock Fated | Enables all sickle hits | — | 1 essence |
145 | Stack cap | 1 | 10 | Current cap: 1 through 9 essence |
145 | Stack cap | 1 | 28 | Each upgrade adds 3; costs 1 through 9 essence |
146 146 | Stacks per hit | 1 | 5 | 2, 4, 6, 8 essence |
147 147 | Duration | 3 s | 12 s | 1, 1, 2, 2, 3, 3, 4, 4, 5 essence |
148 148
@@ -167,7 +167,7 @@ Fated is an altar skill shared by all forms. Form identity still adds a separate
167 167 | Frost Soul | Frostburn |
168 168 | Void | Shadowflame |
169 169
170 Both the melee arc and spawned projectiles carry the sickle's purchased armor penetration, hit cooldown, life steal, Death Mark, Fated configuration, and form debuff.
170 Both the melee arc and spawned projectiles carry the sickle's purchased percentage penetration, hit cooldown, life steal, Death Mark, Fated configuration, and form debuff.
171 171
172 172 ## 9. Death Robe and Wings of Death
173 173
Modified docs/PLAY_GUIDE.zh-Hans.md +4 -4
@@ -110,7 +110,7 @@ Boss 不会直接掉落灵魂精华;请通过灵魂罐将奖励凝聚为精华
110 110 | 攻速 | 25 帧降至 16 帧 | 6 级前消耗 `25L` 灵魂,之后消耗精华 |
111 111 | 击退 | 4.0 提升至 8.5 | 6 级前消耗 `15L` 灵魂,之后消耗精华 |
112 112 | 弹幕数量 | 1 提升至 7 | 仅精华:1、2、4、8、16、32 |
113 | 穿甲 | 1 提升至 20 | 仅精华:`1 + floor((L-1)/3)` |
113 | 穿透 | 1% 提升至 20% | 按显示比例无视目标护甲;仅精华:`1 + floor((L-1)/3)` |
114 114 | 伤害间隔 | 15 帧降至 6 帧 | 仅精华:`1 + floor((L-1)/2)` |
115 115 | 吸血 | 0% 提升至 5% | 仅精华:1、3、5、7、9 |
116 116
@@ -142,7 +142,7 @@ Boss 不会直接掉落灵魂精华;请通过灵魂罐将奖励凝聚为精华
142 142 | 节点 | 点亮后的初始值 | 上限 | 下一级费用 |
143 143 | --- | ---: | ---: | --- |
144 144 | 点亮命定 | 允许所有镰刀命中施加命定 | — | 1 精华 |
145 | 层数上限 | 1 | 10 | 当前上限,即 1—9 精华 |
145 | 层数上限 | 1 | 28 | 每次升级增加 3 层;费用为 1—9 精华 |
146 146 | 单次命中叠层 | 1 | 5 | 2、4、6、8 精华 |
147 147 | 持续时间 | 3 秒 | 12 秒 | 1、1、2、2、3、3、4、4、5 精华 |
148 148
@@ -167,7 +167,7 @@ Boss 不会直接掉落灵魂精华;请通过灵魂罐将奖励凝聚为精华
167 167 | 霜魂 | 霜火 |
168 168 | 虚空 | 暗影焰 |
169 169
170 近战弧斩与派生弹幕都会继承所持镰刀的穿甲、伤害间隔、吸血、死亡标记、命定配置与阶段异常。
170 近战弧斩与派生弹幕都会继承所持镰刀的百分比穿透、伤害间隔、吸血、死亡标记、命定配置与阶段异常。
171 171
172 172 ## 九、死神长袍与死亡之翼
173 173
@@ -216,7 +216,7 @@ Boss 不会直接掉落灵魂精华;请通过灵魂罐将奖励凝聚为精华
216 216
217 217 1. 用总计 148 精华完成路线,获得死神镰刀。
218 218 2. 同步培养命定上限与单次叠层,确保实战能够达到上限。
219 3. 根据流派补满攻击、弹幕、穿甲、伤害间隔与吸血。
219 3. 根据流派补满攻击、弹幕、穿透、伤害间隔与吸血。
220 220 4. 困难模式培养死亡之翼,并优先购买当前 Boss 所需的长袍减益免疫。
221 221 5. 999 精华的旧版“死亡”应视作可选的流程后收藏遗物。
222 222