有什么替代划痕损坏的方法来解决战斗僵局?


37

刮擦伤害是一种游戏机制,任何成功的攻击总是造成最小程度的伤害。这通常用于减法战斗系统中,在这种系统中,防御是直接从攻击者造成的伤害中减去的。因此,目标将始终受到最小的伤害。

至少对我而言,这种系统的弊端在于它是黑客。它采用一个简单的公式,例如,Damage = Attack - Defense然后将其变成(稍微)更复杂的公式:Damage = max(Attack - Defense, 1)

我也觉得这有损于球员发展角色的能力。不管他们获得多少防御加值,每次攻击都会造成少量伤害。那么,如果这毫无意义的话,为什么还要提高自己的防御能力呢?

此外,这现在鼓励对Hp和损坏使用更大的数量,因此刮擦损坏确实可以忽略不计。毕竟,如果最小伤害是1,而您只有10 Hp,那仍然是您健康的10%。即使20 Hp,也就是5%。我宁愿避免使用更大的数字,除非绝对必要。

但是,刮擦损坏有一个非常重要的方面:它解决了死锁问题。

当任何一方都无法对另一方造成损害时,就会发生死锁。如果您将所有资源投入到防守,几进攻击,那么你的角色可能不会受到伤害,但它们将不能够处理非常任。因此,您可能遇到任何一方都无法造成伤害的遭遇,因此战斗将永远持续下去。尤其是如果您没有像重击一样的随机机制(我也讨厌)。

至少受到刮擦伤害,最终有人会获胜。它可能只是攻击次数最多或攻击次数最多的一种,但是战斗将结束。

所以我喜欢一个总能取得成果的战斗系统。但是我不喜欢有划痕的损坏。我有什么选择?

涉及滚动随机数的替代方法;我希望战斗是100%确定性的。如果进行了相同的战斗,那么必然会发生完全相同的结果。

如果您想在游戏玩法上有细节,可以考虑回合制战斗,在这种战斗中可以自动进行战斗(您可以设计部队,然后与其他部队对抗)。


8
你能做一个不断恶化的装甲系统(每次遭遇)来解决僵局问题吗?
Tetrad

1
我建议您看一下“成功的角色扮演游戏的设计模式”:rpg-design-patterns.speedykitty.com/doku.php/start
2013年

3
魔鬼的倡导者立场:为什么不让玩家决定自己是否愿意使用会死锁的愚蠢版本,而不是强迫玩家发挥自己的安全态度?
Patrick Hughes

3
@PatrickHughes:因为我认为允许游戏者在没有适当预警的情况下将自己置于错误的位置是不良的游戏设计。而且即使有预警,一旦他们看到它正在发生,他们也必须能够摆脱它。如果他们的角色设计选择无法收回,那么他们需要预先知道自己并没有通过做出当时似乎不错的选择而永久地陷入困境。
Nicol Bolas

Answers:


41

您可以实施疲劳/耐力系统。随着攻击的进行越来越多,玩家变得越来越疲劳,这意味着他们无法维持如此良好的防御能力(​​随着挥杆动作的增加,盾臂在挥舞剑50次后突然开始感到非常沉重),防御能力下降。这意味着发展出良好角色的玩家不会在快速遭遇中受到伤害,但长时间的战斗将导致伤害增加,从而避免死锁。


21

这似乎是一个非常开放的问题。防止死锁的解决方案(尚未提及):

  • 允许死锁是可行的最终结果。这是最不期望或最典型的解决方案。例如,在RTS游戏中,这可能是令人不安的停火,或者是暴力平衡中紧张但低调的冲突。
  • 有联系的时间限制
  • 时间限制,其中限制之后的第一个击中/得分/得分获胜(突然死亡/加时)
  • 系统中的随机危险(Super Smash Bros中的炸弹)。这将局势的重心从进攻转移到了防守。
  • 任何导致系统失衡的外部因素(例如,具有高伤害和低装甲的第三特工,双方都同意在没有所有装甲的情况下“决斗”)
  • 防御降低了%(可能是最简单的解决方案,只要防御受到限制)
  • 改变游戏玩法的技能或战术(选择不会造成伤害的选择,例如披风/隐形技能)
  • 造成更高伤害的方式(经典爆击,隐身奖励,身高奖励,地形奖励,将地面随机部分变成熔岩的能力)
  • 损坏或降低护甲,或直接针对高防御角色造成伤害的手段(此技能在计算中会反抗护甲,因此防御力较低的特工受到的伤害较小)
  • 用途有限的物品或技能(例如炸弹,强大但引人入胜的能力)。仅当存在超出僵局的长期目标以平衡有限使用时才有用
  • 人工结束战斗(经典的“逃跑”选项)

7

作为变体,您可能会增加伤口堆积。当然,巨型铜斧不会穿透重型钢铁装甲,但会造成一些钝器损坏,甚至可能使骨头断裂。子弹和背心也是如此。

每次击中一个角色时,将穿刺和砍砍的伤害部分转化为钝器伤害,并累积。在达到一定的阈值后(例如,取决于耐力),累积的伤害将干扰角色的战斗技能。这里的一些选项:

  • 当击中同一身体部位时,护甲的效率可能会降低。

  • 重大伤口:周期性损伤,因疼痛而虚弱。

  • 严重伤口:短期意识丧失(使角色非常脆弱)。

  • 严重伤口:永久性属性损失(如果角色设法生存)。

相关:矮人要塞中的伤害机制


2
我打算建议给每支武器加粗的伤害,而这不能被装甲所阻挡。剑和匕首的击打能力较小,但斧头和狼牙棒会非常有效。
jmegaffin

5

使用仅能防御某些类型伤害的装甲实施不同类型的伤害。例如,动力损坏,酸损坏,火灾损坏等。任何装甲都不能防止每种类型的损坏。

用户可以分层装甲以防御所有类型的伤害,但是他们不能同时防御所有类型的伤害。这也会在战斗中实施一些策略,玩家必须切换伤害类型才能穿破各个装甲层。


4

您可能只是没有防御数据,而给更大的敌人更大的马力。我知道您想避免庞大的数字,但如果您要使用确定性,回合制游戏,那么攻击并非直接基于玩家的输入(没有人为错误将攻击弄乱了),防御统计似乎显得毫无意义也一样

如果您担心演示方面的问题,可以将HP细分为Hearts或Health pips EG 100 hp = 1 heart。当角色失去HP时,心灵开始变黑,然后完全消失。这样一来,玩家比129301239103123hp更容易理解,但您不必担心平衡某些魔术方程式。

如果您担心现实主义,可以总是使它充满生气,看起来像攻击的目标成功地被阻挡了,或者只是被轻微地刮擦,直到造成致命一击。


1
如果您需要确定性,回合制游戏,而攻击并非基于玩家的直接输入,则防御统计数据似乎也没有意义。 ”防御并非基于“机会优先”的概念小姐”。这更像是D&D的减少伤害,而不是THAC0(或近来他们所说的)。防御是指如果拥有30防御,则40攻击的伤害可以减少为10的伤害。我看不出这是多么“毫无意义。”
Nicol Bolas

1
我知道数学有一些不同,但是在游戏玩法上,只给角色适当比例的生命值和减少一定程度的伤害之间并没有太大的区别。如果必须始终有某种方法可以对目标造成伤害,则不是这样。编辑:这是假设没有任何忽略防御或其他游戏修饰符的特殊攻击。
刘易斯·韦克福德

拥有一个减法防御属性,不仅会给您带来Hp(除了您所拥有的所有东西之外,例如特殊攻击或修饰语)。它会在长期损坏用户和高损害用户之间建立分层。多次攻击但伤害较低的角色会与高防御角色发生冲突,而速度较慢,高伤害的角色会随时间造成更多伤害。仅仅命中点不会产生这种分层。
Nicol Bolas

4

添加磨损的机械师进行防御。使每次攻击略微降低了目标的防御力。

最终,即使是微弱的攻击也将削弱目标防御能力,足以造成实际伤害。


3

如果您可以退出整数世界并愿意加减法,可以使用Warlords Battlecry III中的减损算法:

damage = attack

while DR > 0:
    usedDR = DR
    if DR > damage
        usedDR = damage
    damage = damage - usedDR * 0.5
    DR = (DR - usedDR) / 2

HP = HP - damage

该函数的行为与上述伪代码非常相似:

damage(attack, DR) = attack * 2 ^ -(DR/attack)

当DR小于攻击(传入伤害)时,其行为类似于攻击-k * DR,其中k为0.693(ln(2)准确地说)。当DR接近或大于DR时,传入的损害要比损害减半DR/attack。例如,对于DR = 30而攻击= 10,则伤害为1.25(攻击减半3次)。

对于人类来说,它看起来似乎更复杂且更难评估,但它不受黑客攻击,并且两个参数的更改都相关。如果攻击者获得了额外的攻击能力,或者防御者获得或失去了少量DR,则所造成的损害将会改变。


1

使用浮点数。

即使您向播放器提供了整数HP,也要使用float来表示hp,使用float来造成损坏。

我现在使用分数装甲等级,其中1.0的盔甲无敌,而0.0的盔甲意味着“受到完全伤害”。伤害降低为:

float hpReduction = hp - dmg*(1.f - armor) ;

通过将装甲设置为-1,该公式具有允许“双重伤害”的效果。

我也将伤害分为几类,请参阅《星际争霸》的震荡/爆炸伤害类型或夏娃的伤害类型系统

因此,现在,抓挠您的.99级装甲的小小的冲击最终将使 Cherry Tap死亡,但攻击似乎并未对玩家造成伤害(当他从1.15 hp升至1.1499 hp时,他将保持1 hp的伤害)。下次攻击..)


0

技能图可以将一些应付伤害的技能作为高级防御技能的先决条件,以降低玩家进行高度非对称建造的能力。

只要个人的防御能力不高,暴击就可以造成一定的伤害。如果使它们成为周期性的而不是随机的,那么您仍然会有确定性的战斗。

多次失败击中后,您可能会自动降低攻击速度,以增加击中机会和伤害。您的超快刮刮角色每秒进行十次攻击;现在,经过15次无伤害攻击后,每秒获得3次攻击,命中+ 50%,伤害+ 200%。这与严重点击相似,但是在这种情况下更快。

您可以使用基于百分比的护甲伤害减免,但要使其比提高您的最大生命值的另一种方法更有趣,可以使命中率较低时的减免百分比更大。例如,对于1-20hp的伤害,减少90%,对20-30的伤害减少60%,对其他所有东西减少30%。

最后,不用担心数量太多。与较小的控件相比,它们可以为您提供更好的控制程度。拥有1个等级的角色时,其生命值是100,这意味着您可以杀死7个而不是5个来杀死它们。这意味着,随着时间的流逝,您可能会遭受毒药伤害和其他伤害,而这些伤害并不会造成毁灭性的破坏(如果您愿意,也可以造成一些破坏)。如果您不喜欢显示大数字,请找到一种不显示大数字的方法。


0

您说您希望始终有一个解决方案,但这一定是胜利吗?

考虑一下Dominions所采用的方法-攻击者在50岁时自动溃败。防御者在第75回合会自动溃败。(溃败不会自动进行,某些部队无法进行路由选择,即使一个静止的部队溃败也无法实际离开。)在第100回合,所有剩下的东西都会被杀死。

尽管我不同意它的确切运行方式(在某些情况下,杀死对方的时间太长了),但基本思想仍然有效。

我的建议是:

看一下双方力量的某种度量。(命中率是一个明显的起点,但是要小心,Dominions在这方面存在一个问题,即计算不重要的命中率“损失”-变形,召唤等。甚至不花任何时间。)跟踪已达到的最小值,并记下自设置新的最小值以来已转过几圈。如果时间太长而没有设置新的最小值,则您将遇到某种僵局,攻击者应撤退。


0

我还没有看到的另一种选择是,由于您的装甲值使攻击性变为负数,因此您可以为真正的方块添加一些RNG:

const stratchDamage = 1;
var armour = 10; 
var blockCount = 0;

function registerAttack (incomingAttack)
{
    var incomingDamage = incomingAttack - armour;

    // Nothing unusual, deal damage
    if( incomingDamage > 0 ) 
    {
        dealDamage(incomingDamage);
    } 

    // Armour cancels out attack, deal scratch damage
    else if( incomingDamage == 0 ) 
    {
        dealDamage(scratchDamage);
    }

    // Armour over attack value, check if can block
    else
    {
        var trueBlockChance = armour - incomingDamage;

        // blockCount starts at 0, will always block first attack
        if( trueBlockChance  > blockCount ) 
        {
            // Can technically do nothing, or trigger block animations etc
            block();
            blockCount ++; // Increment block so they can't block forever
        }
        else
        {
            dealDamage(stratchDamage);
            blockCount = 0;
        }
    }
}

考虑到装甲后的伤害损失越高,角色在受到另一次刮擦伤害之前可以阻挡的攻击越多。

这为防御性统计数据提供了一点额外的规模,同时又不致使它们无懈可击,并且,如果您希望防御性统计数据通过攻击,则可以通过该阻止机制进行攻击,从而自然可以防止死锁。

如果您在防御犯罪方面积累了一些统计数据,那么战斗可能会花费很长时间,但最终还是可以实现的。


OP的报价:我希望战斗能够100%确定性。这不允许100%确定性战斗。
Charanor

然后,该遮挡物也可以回合,对于一次攻击的trueBlock等级,敌人必须攻击多次以达到刮擦伤害。同样的想法可以适用。
Tom'Blue'Piddock

@Charanor-将答案调整为100%确定性。
汤姆·布鲁德·皮多克(Tom'Blue'Piddock)'17年

-1

许多3D格斗游戏可避免刮擦损坏。例如《铁拳》和《魂剑2》。它们通过使完美的防御变得困难而避免了这种情况。有些攻击实在太快了,无法做出反应。我认为这是一个很好的解决方案。


-1

我认为降低国防效力不是一个好选择。使玩家失去能力会导致不良的游戏体验。为什么不走相反的方向呢?

随着时间的流逝,为什么不启动攻击。这使刮擦损伤随时间增加,减少了粘连的动机。在中后期游戏中,一个角色可以在防守时对他哭喊而杀死另一个。

一些pnp rpg实现“张力机制”。每转张力增加一。所有的掷骰都增加了张力值的修改量,从而使战斗结束了。

来自格斗游戏的另一个想法是经过防御的攻击。我不知道您的游戏是回合制还是实时游戏,但是这种攻击还可能使对手陷入连击,或暂时使他或他的某些能力失效。

我相信诀窍不在于削弱防御能力。做出与防御一样好的其他选择,或者减少防御是好的选择的时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.