返回提交历史
Modified
Common/MyGlobalNPC.cs
+3
-0
Modified
Common/MyGlobalProjectile.cs
+6
-3
Modified
Items/NormalSickle.cs
+18
-9
Modified
Localization/en-US.hjson
+2
-2
Modified
Localization/zh-Hans.hjson
+2
-2
Modified
README.md
+4
-4
Modified
README.zh-Hans.md
+4
-4
Modified
docs/PLAY_GUIDE.md
+3
-3
Modified
docs/PLAY_GUIDE.zh-Hans.md
+4
-4
XFEstudio/DeathMod
重做百分比穿透并提高命定层数上限
851a59e
代码差异
9 个文件
+46
-31
@@ -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)
@@ -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)
@@ -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)
@@ -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
@@ -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: 点亮命定
@@ -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
@@ -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
@@ -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
@@ -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