如何开发RPG伤害公式?


117

我正在开发经典的2D RPG(类似于最终幻想),我想知道是否有人对如何破坏公式/与资源/示例的链接有一些建议?我将说明当前的设置。希望我不会对这个问题过分解决,如果我的问题太大/太广泛,我深表歉意

我的角色统计信息包括以下内容:

enum Stat
{
    HP = 0,
    MP = 1,
    SP = 2,
    Strength = 3,
    Vitality = 4,
    Magic = 5,
    Spirit = 6,
    Skill = 7,
    Speed = 8, //Speed/Agility are the same thing
    Agility = 8,
    Evasion = 9,
    MgEvasion = 10,
    Accuracy = 11,
    Luck = 12,
};

活力基本上是抵御物理攻击的能力,精神是抵御魔术攻击的能力。

所有统计信息都有固定的最大值(HP 9999,MP / SP 999,其余255)。有了异能,可以增加最大值(HP为99999,HP / SP为9999,其余为999),能力+装备+等之前/之后的典型值(在100级)将为8000 / 20,000,HP,800 / SP / MP为2000,其他统计为180/350

后期游戏敌人的HP通常将在数百万以下(超级老板的最大数目为1200万)。

我想知道人们如何真正开发正确缩放比例的适当伤害公式?例如,基于这些数据,以最终幻想X的伤害公式为基础看起来非常有希望。这里有完整的参考资料http://www.gamefaqs.com/ps2/197344-final-fantasy-x/faqs/31381,但作为一个简单的例子:Str = 127,使用了“攻击”命令,敌人的Def = 34。

1. Physical Damage Calculation:
Step 1 ------------------------------------- [{(Stat^3 ÷ 32) + 32} x DmCon ÷16]
Step 2 ---------------------------------------- [{(127^3 ÷ 32) + 32} x 16 ÷ 16]
Step 3 -------------------------------------- [{(2048383 ÷ 32) + 32} x 16 ÷ 16]
Step 4 --------------------------------------------------- [{(64011) + 32} x 1]
Step 5 -------------------------------------------------------- [{(64043 x 1)}]
Step 6 ---------------------------------------------------- Base Damage = 64043
Step 7 ----------------------------------------- [{(Def - 280.4)^2} ÷ 110] + 16
Step 8 ------------------------------------------ [{(34 - 280.4)^2} ÷ 110] + 16
Step 9 ------------------------------------------------- [(-246)^2) ÷ 110] + 16
Step 10 ---------------------------------------------------- [60516 ÷ 110] + 16
Step 11 ------------------------------------------------------------ [550] + 16
Step 12 ---------------------------------------------------------- DefNum = 566
Step 13 ---------------------------------------------- [BaseDmg * DefNum ÷ 730]
Step 14 --------------------------------------------------- [64043 * 566 ÷ 730]
Step 15 ------------------------------------------------------ [36248338 ÷ 730]
Step 16 ------------------------------------------------- Base Damage 2 = 49655
Step 17 ------------ Base Damage 2 * {730 - (Def * 51 - Def^2 ÷ 11) ÷ 10} ÷ 730
Step 18 ---------------------- 49655 * {730 - (34 * 51 - 34^2 ÷ 11) ÷ 10} ÷ 730
Step 19 ------------------------- 49655 * {730 - (1734 - 1156 ÷ 11) ÷ 10} ÷ 730
Step 20 ------------------------------- 49655 * {730 - (1734 - 105) ÷ 10} ÷ 730
Step 21 ------------------------------------- 49655 * {730 - (1629) ÷ 10} ÷ 730
Step 22 --------------------------------------------- 49655 * {730 - 162} ÷ 730
Step 23 ----------------------------------------------------- 49655 * 568 ÷ 730
Step 24 -------------------------------------------------- Final Damage = 38635

我只是简单地修改了分频器,以包括武器的攻击等级和装甲的装甲等级。

魔法伤害的计算公式如下:魔力= 255,使用了终极,敌人的MDef = 1

Step 1 ----------------------------------- [DmCon * ([Stat^2 ÷ 6] + DmCon) ÷ 4]
Step 2 ------------------------------------------ [70 * ([255^2 ÷ 6] + 70) ÷ 4]
Step 3 ------------------------------------------ [70 * ([65025 ÷ 6] + 70) ÷ 4]
Step 4 ------------------------------------------------ [70 * (10837 + 70) ÷ 4]
Step 5 ----------------------------------------------------- [70 * (10907) ÷ 4]
Step 6 ------------------------------------ Base Damage = 190872 [cut to 99999]
Step 7 ---------------------------------------- [{(MDef - 280.4)^2} ÷ 110] + 16
Step 8 ------------------------------------------- [{(1 - 280.4)^2} ÷ 110] + 16
Step 9 ---------------------------------------------- [{(-279.4)^2} ÷ 110] + 16
Step 10 -------------------------------------------------- [(78064) ÷ 110] + 16
Step 11 ------------------------------------------------------------ [709] + 16
Step 12 --------------------------------------------------------- MDefNum = 725
Step 13 --------------------------------------------- [BaseDmg * MDefNum ÷ 730]
Step 14 --------------------------------------------------- [99999 * 725 ÷ 730]
Step 15 ------------------------------------------------- Base Damage 2 = 99314
Step 16 ---------- Base Damage 2 * {730 - (MDef * 51 - MDef^2 ÷ 11) ÷ 10} ÷ 730
Step 17 ------------------------ 99314 * {730 - (1 * 51 - 1^2 ÷ 11) ÷ 10} ÷ 730
Step 18 ------------------------------ 99314 * {730 - (51 - 1 ÷ 11) ÷ 10} ÷ 730
Step 19 --------------------------------------- 99314 * {730 - (49) ÷ 10} ÷ 730
Step 20 ----------------------------------------------------- 99314 * 725 ÷ 730
Step 21 -------------------------------------------------- Final Damage = 98633

问题在于,一旦统计数据开始超过255,公式就会完全崩溃。特别是当防御值超过300左右时,就会开始产生真正奇怪的行为。例如,高强度+防御统计数据会导致巨大的负值。虽然我可以修改公式以使其在我的用例中正常工作,但是使用全新的公式可能会更容易。人们实际上是如何制定伤害公式的?我当时正在考虑开放excel并尝试以这种方式建立公式(例如,将“攻击统计”与“防御统计”相对应),但我想知道是否有更简单的方法?虽然我无法在此处传达游戏的完整游戏机制,但有人可以为构建伤害公式提供一个良好的起点吗?

谢谢


1
我认为您首先要做的是正确的事情,首先设置所需的统计数据,HP等。这是玩家体验的一部分,数学应该适合这些值。尽管拥有如此多的统计数据,玩家应该直观地知道哪些统计数据会影响他的魔法攻击,物理攻击等。因此,第一个大问题是哪些统计数据对应于一次攻击,哪些统计数据可抵御这些统计数据(对于前PhDef 只能防御PhAtk)。
乔纳森·康奈尔

平衡是一个很大的问题,创建一个交互式程序(例如,用C#或其他快速工具)可能是一个好主意,您可以在其中更改统计信息并查看获得什么样的结果。如果您可以在运行时更改公式,那也将有所帮助:)
Jonathan Connell

4
考虑使用Excel来执行此操作。似乎非常适合该任务,您无需编写任何代码。
Alex Schearer 2011年

2
最重要的问题是:哪个公式可以给玩家带来最大的乐趣?(在页面上搜索“ fun”,但没有答案提到它:P)如果它的统计数据或损害上升得太快,玩家会变得不敏感,如果上升或缓慢,他们会感到无聊。玩家在获得关卡时需要感到高兴,因此他们需要感觉自己已经投入其中,并且它对游戏性能会有明显的影响。(这是我的2便士)
安南

3
“(Def-280.4)^ 2”是吗?好吧,我希望对于Def> 255或Def> 300不会感到奇怪,而对于Def> 280.4则非常准确;)之后,在公式的这一点上,较高的def将实际上意味着较低的def,同时继续表现为预计在其他时间。顺便说一句,您可以使用Wolfram Alpha来绘制这些东西。修复足够多的变量以仅保留两个变量,您将获得一个漂亮的曲面图。
基督教徒

Answers:


140

创建这样的公式需要了解基本的数学函数 -您在代数和预演算类中学到的东西。

一旦掌握了这些,就问问自己(用“损害”,“健康”,“速度”或其他任何东西代替“值”)

  • 您是否希望价值以恒定的速度增长?使用线性函数
  • 您是否想让价值起初缓慢增长,然后又迅速增长?使用多项式指数函数
  • 您是否希望该值首先快速增长,然后再减慢速度?使用nth-root对数函数
  • 您是否希望值在开始/结束时缓慢增长而在中间快速增长?还是您希望它快速增长但仍然有上限?使用S型曲线,如atanlogistic函数
  • 您想让价值波动吗?使用一些 其他波。

然后只需对其进行调整(添加/相乘,更改基值等),直到感觉良好为止。图形计算器将帮助您可视化参数的更改将如何影响功能。


顺便说一句,您遇到的问题是由于整数溢出造成的

使用足够容纳您正在使用的数字的变量类型。在C ++中,大小因平台而异,但是使用32位Visual Studio编译器时,大小unsigned int为32位,而unsigned __int64 (特定于MS)为64位。还可以考虑使用double

此外,请尝试重新组织您的操作,以便一开始就不会遇到这么大的数目(例如,而不是MDef * MDef / 110do (int)((float)MDef / 110 * MDef)


3
如果您遇到整数溢出,则转换为浮点数(仅可靠地支持24位整数部分)会带来一系列不同的精度问题。

@Joe:我已经撤消了您的修改;我特别选择__int64了它,uint64_t因为stdint.h在Visual Studio 2008及更低版本中不可用,并且我不想使这个可怜的男孩比他本已更加困惑。
BlueRaja-Danny Pflughoeft

1
@BlueRaja:我看不到询问者正在使用Visual Studio的任何证据,它存在于所有其他标准工具链(包括Visual Studio 2010)中。

我想,您也省略了一个重要的变体:如果您希望损害具有可以接近但永远无法达到的上限,则可以使用S形函数。
Martin Sojka

1
user127817:真正重要的是功能如何增长。其余的,只需对其进行测试,直到感觉平衡为止。如果您觉得角色太强大,请降低其伤害。如果您认为杀死特定的上司或敌人花费的时间太长,请降低该敌人的生命值或盔甲。等等。
BlueRaja-Danny Pflughoeft

31

我的角色统计信息包括以下内容:

真正的问题是:您先定义统计信息,然后再定义这些统计信息的实际含义。你把马车放在马的前面。

查看D&D(桌面)的工作方式。“力量”本身并不意味着任何东西;它只是意味着某种意义,因为有一条规则说:“在近战攻击中增加力量加成。” 该规则是D&D作战规则的一部分。没有战斗规则,“力量”通常是毫无意义的数量。

您需要问自己的第一个问题是:我希望角色之间有多少区别?再次,看看D&D。那里,他们有6个基本属性。这些统计数据定义角色的不同玩法。敏捷度高的角色与敏捷度低的角色会有不同的选择。

但是,即使产生这种差异的原因也都归结为规则。敏捷度高意味着远程攻击会加成。您可以更频繁地进行远程攻击。因此,在“力量”和“敏捷”之间,您有两个玩法:远程与近战。

智力和智慧也构成了某种配对,但它们与特定类别的互动更多。诠释使巫师和其他奥术施法者更好(或在某些规则集下可能),智慧对于牧师和其他神圣的施法者至关重要。由于神咒和奥术咒语具有不同的咒语列表,因此这两个状态涉及游戏的不同维度。

定义增长进度函数等之前,您需要定义围绕统计信息的基本规则。您不需要细节;您无需说“随机掷骰中增加了每个强度点来确定是否有近战攻击。” 您需要的是元规则,例如“灵巧可以使远程攻击者变得更好”。您可以确切地知道如何使其在以后变得更好。

有多种提高角色角色的方法。常见的老式“最终幻想”技巧是简单地使用角色的等级作为其伤害计算的一部分。这可能只是简单地将级别乘以适当的统计信息,或者可能意味着将功能应用于角色的级别。假设是二次方级数,因此角色的伤害率将逐级增加。

但是,如果您希望自己的战斗功能起作用,则它们需要考虑进阶情况。您的功能需要挂钩以进行升级。

D&D有一种有趣的进步方式。它是基于零件类的;每次升级时,您都会获得新的职业特色,并根据角色类别获得一定的额外奖励。但是,某些类功能本身会变得更好。D&D中的法术将内置进阶。一个咒语可能会比第一个施法者每2个等级造成1d4伤害。因此,每个其他向导级别都会使该咒语更好。

D&D还大量使用基于项目的进度。在第4版之前,基于项目的进度主要用于战斗角色,但即使在较旧的版本中,施法者的物品也会赋予他们稳定的状态或其他调整(或完全为他们提供咒语)。

因此,物品是战斗功能需要考虑的另一件事。装备时物品会只是增强一个或多个属性,还是其他作用?D&D有点奇怪,因为统计数据很少更改;武器只是造成XdY伤害,可能根据您的一项统计获得加成。就是这样。因此,在战斗中造成更大伤害的唯一方法是找到更好的武器。在许多电子游戏RPG中,除了武器外,它们还考虑了等级。


6
这是您的真正问题:您在定义统计数据实际含义之前先定义了统计数据。您将购物车放在了马的前面。 ” 我非常不同意;数字本身只是告知玩家力量的一种方式,这游戏设计的一部分。如果以相反的方式进行下去,最终可能会遇到147hp的最终老板……谁真的想要那个?
乔纳森·康奈尔

8
好吧,Sarevok(在Baldurs Gate)只有135 HP ...
Martin Sojka

12
@ 3nixios:如果最终老板的压力为147Hp,那有什么关系?重要的是最后的老板是否是具有挑战性的,有趣的,最重要的奖励打败。拥有大量Hp的老板并不有趣。这是浪费时间。可能会惹麻烦您的团队的老板,需要随时随地变化的特殊策略,这要求您必须充分利用自己拥有的一切才能,这才是最终出色的老板。每天,我都会用有趣的147Hp老板来应对无聊的Hp。
Nicol Bolas

@Nicol Bolas我完全同意你的看法,我试图支持为什么我认为起点必须来自统计数据。玩家开始时的统计信息是玩家在游戏过程中所玩的主要指示和游戏玩法。我同意不必为老板设置巨大的HP限制,它可以使玩家更好地表明什么是对付老板的最佳设置,哪些统计武器等更为有效。当然,数量与您的计算方式无关,因为您可以将最终计算结果除以常数c或将其乘以常数c即可完成计算。
乔纳森·康奈尔

2
@ 3nixios:但这是我的观点的一部分。D&D的敏捷性可以使近战专家角色和远程专家有所区别。如果没有近战和远程攻击的概念(例如,在许多FF游戏中就没有这种概念),则不需要存在这种区别。您可以摆脱5个统计数据而不是6个数据。定义Hp范围是一回事,但是定义您拥有的基本统计数据是另一回事。统计信息需要规则,然后才能理解它们,并且您必须知道统计信息打算做什么之后,才能说拥有该统计信息是个好主意。
Nicol Bolas

22

您的公式似乎非常复杂。我不确定专业的RPG开发人员如何处理此问题,但建议您着重于简单性。尝试找到可能的最简单公式,该公式仍包含您要使用的统计信息范围。例如,您是否可以让统计人员在计算损害之前先互相修改,而不是在计算期间修改损害?一旦您想到了公式,我将尝试以图表形式显示各种可能的值,以查看其在玩家升级时的表现。显然,您拥有的变量越少,它们将越可行。

此外,BlueRaja还提供了一个重要的解释,说明为什么在较高的统计级别上可能会看到意外的值。使用无符号类型并检查溢出将很重要。


10
+1简单。任何人都可以制作出非常复杂的东西,但这并不是一个好的游戏。
aaaaaaaaaaaaaa

8
@Randolf,除非您在Apple 2或更高版本上运行,否则在这里删除倍数或除数是否会以任何可衡量的方式影响性能都是令人怀疑的。
四分

8
@Randolf RPG中的一场激战可能意味着每秒大约10次破坏计算,现代CPU每秒可以完成数十亿次操作。您可以放心地认为,任何此类“可见”数学对性能的影响都可以忽略不计。在这种情况下,简单是为了设计和玩游戏的人,而不是为我们的计算机。
aaaaaaaaaaaaaa

6
@Randolf Richardson:在这种情况下,我只是认为您可能会错过目标。对于MMO而言,良好的快速无脂肪协议至关重要,并且在设计重物(如物理)时必须考虑性能。但是损害计算是核心游戏玩法,在设计时应该考虑游戏玩法,如果您将性能问题纳入此类问题,则可能会损害游戏玩法部分。在重要的时候谈论绩效,您可能会给人留下这样的印象,那就是这是一个重要的优化领域,因此会吸引真正的绩效罪人的注意力。
aaaaaaaaaaaaaa

5
@Randolf:我的意思不是什么。我说的是优化不是瓶颈的内容是浪费时间。
Nicol Bolas

11

后期游戏敌人的HP通常将在数百万以下(超级老板的最大数目为1200万)。

这是我的问题。您应该围绕自己认为球员应该能够应付的事情建立老板。您正在建立想要的老板模样的球员并与之抗衡。

一旦建立了战斗机制和角色,就可以决定如何设计老板,因为这应该在玩家可以造成/吸收的伤害与老板可以造成/吸收的伤害之间取得良好的平衡。


4
+1敌人的生命值应基于玩家当时可以合理处理的内容,而不是相反。
BlueRaja-Danny Pflughoeft 2014年

7

您引用的这些数字可能来自于对数千次运行进行的模拟调整。

因此,您应该编写一个模拟游戏来创建一个20级角色,并观察他如何应对200场战斗,与当时应该战斗的敌人类型进行战斗。再次使用30级角色(大概是世界的下一部分)。

要花一些时间才能解决问题,但是编写自动仿真肯定会比仅凭猜测和手动进行模拟要容易得多。


5

我认为您犯了一个错误,即您在创建公式时没有考虑适当的设计。

首先从设计开始,然后开始考虑用公式表示设计。设计越清晰,就越容易找到简单和/或精确的公式。

尝试实施敌人的“类型”,例如“装甲” =>如果是物理类型的玩家攻击减少50%。不要让战斗流程抽象,要考虑什么是相关的,什么是不相关的。

如果您的设计说“装甲的敌人”对魔术无能为力,对物理伤害却无能为力,请在代码中加以说明。但是请记住,您已经进行了很多测试,因为在您第一次编写代码时,这些值无法神奇地起作用。尝试创建设计,将逻辑放入代码中,始终检查这是否是您所想到的技术表示形式,以及直到确定时才更改值。


我已经在讨论那种事情-装甲等级会降低物理攻击力,除非攻击标记为穿甲或使用基于百分比的伤害公式
user127817

5

尽管我的设计还没有离开电子表格阶段,但是我得出了有关为RPG设计数学的一个结论:

使它们尽可能简单。在我从事的设计中,我使用了非常简单的公式,足以满足半无类系统的要求。就是 火球法术造成30点伤害。

BaseSpellDamage * Attribute (5 * 6)

我们还可以添加如下修饰符:

Result = (BaseSpellDamage * Attribute) (5*6)
Result = Result + (Result * 50%) (30 = 30 + (30 * 50%))

因此最终结果是45点伤害。我发现使用百分比乘数非常容易,并且可以使用非常灵活的解决方案。而不是使用带有复杂数学运算的奇数来找出我们想要的结果。

现在我们可以计算损坏的抵抗力,这将计算针对特定损坏类型的防御力。有两种方法,老实说,我还没有决定哪种方法更合适,但是它们都既简单又可行:

DamageResult = Resistance * Damage ( 50% * 45)

因此最终结果将是22损坏(我只是削减了部分结果)。

其他公式:

DamageResult = Damage - Resistnace (45 - 22).

因此最终结果将为23。如果碰巧抵抗力大于所受到的伤害,那么角色将无法获得任何伤害。当然,除了在您希望的情况下,要确保这种情况不存在。

尽管我必须承认,集中度扩展在某种程度上更易于平衡和扩展。但这也取决于您的基数。如果您从100以上开始,百分比缩放最有效。如果您使用较小的数字(坦率地说,任何数字都低于100),它都会变得很笨拙,因为您将开始获得浮点结果,这将很难平衡,并且实际上会对它们执行任何有趣的操作。

在这种情况下,可能的最佳解决方案是在它们认为合适时使用两种方法。或者,如果您是大量粉丝,则从1000开始。

并在最后。我还没有完全得出这个结论。实际上,我已经花了很多时间阅读各种RPG手册(Hero,DnD)。尤其是DnD很有帮助,因为它遵循类似的原理,但是与其使用属性而不是属性来代替公式,它们有时可能会更复杂。比我在这里介绍的要多。

无论如何,最好的建议是:尝试使它们尽可能简单。当您必须同时处理87234其他问题时,请勿使用任何高级数学或冗长的方程式,因为它们容易出错,很难发现。


3

正如其他人所提到的,最终幻想X公式非常复杂。通常对于该系列游戏,游戏越晚,公式就越复杂。将伤害公式完全基于其他游戏可能会更容易。但总的来说,我认为应该从一个非常概括的角度来讨论您可以在世界上找到什么样的伤害公式,以及如何基于这些公式来制作游戏。您需要决定的第一件事是,您希望在游戏结束时能造成多少伤害,以及您希望玩家能够拥有什么样的数据?一旦有了这些,就可以选择一个公式系统,然后优化公式和武器值以反映一段时间内的范围。

纯粹基于统计

如果您希望角色在挑战敌人的水平方面保持灵活性,这是一个好主意。这样的公式仅取决于玩家的属性,他们的装备以及敌人的属性。这些公式通常非常简单。《最终幻想传奇II》(例如,请参见http://www.shenafu.com/ffl2/weapon.php,该武器具有根据以下简单公式造成伤害的武器:

(Stat+StatBonus)*WeaponStrength - Defense*4

如果您想要一种非常简单的估算伤害的方法,或者希望基于技能和元素弱点等其他因素快速修改损失的起点,则这样的公式将非常有用。

为了说明这种公式的适用范围,请考虑Android和IOS游戏Inflation RPG的损坏公式(请参阅http://inflation-rpg.wikia.com/wiki/Calculations)。该公式在很大程度上取决于统计数据和设备。每件装备都有两个属性-ATK属性的加值和乘数。有些设备的乘数较低,但奖金较高,另一些设备的奖励较低,但乘数较高。对于只有10个ATK的角色,拥有5000 ATK奖金但低145%乘数的战斧是一个不错的选择。总伤害为(10+5000)*1.45 = 7264,但是Estoc的奖励为0,乘数为300%,这是一个错误的选择-伤害为(10+0)*3 = 30。在游戏的后期,有5000次攻击的角色更喜欢切换武器。

基于统计和级别:

最终幻想V,VI和最终幻想XII就是一个很好的例子(例如,请参阅http://www.gamefaqs.com/ps2/459841-final-fantasy-xii/faqs/45900)。FFXII中剑的公式为:

DMG = [ATK x RANDOM(1~1.125) - DEF] x [1 + STR x (Lv+STR)/256]

冷却壁的损坏公式为:

DMG = [ATK x RANDOM(1~1.125) - DEF] x [1 + STR x (Lv+MAG)/256]

它们非常相似,但是请注意,剑的配方仅取决于强度和水平,而法杖的配方则取决于强度,魔术和水平。这种公式的优点在于,它允许玩家有两种增长途径-建立他们的数据或建立他​​们的等级。不利的一面是,它也会同时对两种字符进行惩罚。最终的目的是让玩家升级以增加他们的伤害输出(对于FFXII,当您将统计收益考虑在内时,这会使他们的伤害输出在50级左右的水平上增加〜4%),以帮助自定义难度舒适度。

固定伤害:

固定伤害公式并不取决于角色的属性或等级,而仅取决于武器本身的内部伤害公式。它们仍然可以在一定范围内变化,但是无论用户如何,它们都造成相同的伤害(除非有任何其他特殊效果或角色特征)。如果武器要进行固定破坏并且装备武器的能力取决于状态和/或等级,则最好使用它们。例如,暗黑破坏神2就是这样做的,就像许多流氓一样,它们的武器取决于掷骰。话虽这么说,“固定伤害”并没有暗示“非随机” -而事实上有通常的伤害随机性的一些元素。

如果您想拥有易于在角色之间转移的武器,或者仔细控制角色在游戏中特定点所能产生的伤害输出(如果您知道他们可以使用哪些装备(通过掉落桌子,箱子或箱子)),则这是一种很好的方法并窃取表格)。

您可能会遇到的另一个地方是《最终幻想》中的某些类型的设备或物品。例如,1000针总会造成1000伤害。在《最终幻想传奇II》中,武术根据以下公式造成伤害:

Damage = WeaponStrength*(90-UsesLeft) - 4*Defense

《最终幻想XII》对枪支也有一定的固定伤害,根据以下公式造成伤害:

DMG = [ATK x RANDOM(1~1.125)]^2

尽管损坏是随机的,但在整个范围内仅造成26.5%的变化,因此可以保证您平均随时间造成一定程度的损坏。这些类型的攻击对于游戏中统计数据较低且水平较低的角色非常有用,这些角色通常会造成伤害。另外,他们会忽略目标的防御(尽管您可以根据需要轻松地对公式进行修改以适合防御)。


2

由于您遇到的问题,最终幻想系列中的所有游戏的统计上限均为255。100级的统计数据为255。

您说过要通过能力和装备来增加统计数据,我记得在游戏中看到过这一点,但是这样做的方式在公式中。还有一个额外的步骤,用于检查能力和装备修改器,并在使用统计信息后应用它们。

在您的情况下,将是步骤21:应用能力修改器步骤22:应用设备修改器步骤23:最终伤害。

如果您对Google的最终幻想公式感兴趣,那么这些公式就在那里。我有实际战斗机制的副本,包括最终幻想4、6、7和9的AI。人们在为模拟器创建rom时从原始游戏中破解了它们。如果您看起来足够努力的话,那就很难找到。

创建公式的最大方法是测试。设置脚本以在两侧运行您的战斗并进行数百次战斗。改变怪物和属性,看看它是否有效,或者40级杀死所有东西,老板很有可能实际上无法杀死哈哈。提示是关闭所有动画,因为令人印象深刻的是,没有人观看时,AI的战斗速度有多快。


2

我想知道人们如何真正开发正确缩放比例的适当伤害公式?

前两件事是:

  • 确定“正确”是什么意思-您对“正确损害”的看法是什么?
  • 决定“规模”是什么意思-哪些值将改变,您希望这些改变产生什么影响?

知道这一点后,您就有足够的信息来使用BlueRaja在其答案中提到的数学公式。请记住,没有所谓的“适当”伤害公式-只是一个与您的设计相匹配的,想要您的玩家拥有的体验类型的公式。


这是极其无益的评论。它总结为“我不知道”,因此浪费了每个人的时间。标记删除。
Krythic '16

1

或者,如果您要查找一个非常简单的公式,请执行以下操作:

(请注意,这是我对公式的想法,)

首先,对于简单的攻击公式,您只需要几个统计信息。玩家的攻击统计(根据移动类型,可以是力量或魔法。)

然后,创建一个名为MovePower的变量。这将取决于移动,更好的移动将具有更好的MovePower。对于我的公式,常规的“攻击”命令的MovePower为5。

然后,将防御设为基于百分比的属性,(当然,不可能实现100%的防御防御)

然后,在攻击阶段,只需将攻击状态乘以移动力量,并根据敌人的防御力消除伤害!简单!

您还可以选择使用其他修改器,例如此举是否会击中(准确度),该举动是否具有其他附加效果(生物,造成毒药)并选择击中该修饰符(再次准确度)具有伤害升级/降级更改统计信息的动作等。玩得开心!


避免将装甲视为百分位数问题(从而允许其值看起来相同)的另一种选择是计算损坏与装甲的比较,以作为乘数的比较。以Ln(atk / def)为底的东西。随着时间的推移,防御装甲的统计数据可以按相同的方式扩展。找出如何获得基本的期望伤害范围,以便在伤害和护甲属性相同时从那里推断出来。这确实使“回避装甲”攻击需要技巧,但这是创造力的一部分。
Aviose 2015年

1

本质上,您需要弄清楚两件事。

  1. 如何正确执行大量的计算。
  2. 对弱者和强者的攻击行为期望和期望如何。

1个

您可以是用户double库,也可以是大量库。进行大量计算(例如在单击/闲置游戏中通常依赖于如此大的数量库)。在您的情况下,数字相对较小,因此使用64位浮点将具有所需的灵活性。

2

您希望游戏表现如何?一些例子:

  • 一种方法是ATK根据武器决定是否命中并掷出具有已知伤害等级的骰子:例如长剑1d8,两把剑1d10,匕首1d4。如果hp可以不断增长,那么扩展规模将不会令人惊讶。如果ATK用于确定角色是否命中或未命中,则可以在成功命中后以ATK80%*的概率进行另一次投掷,以确定糖果。
  • 如果要使用伤害公式,则伤害公式可以像(ATK - DEF) +/- 20%在《世界尽头》(RPG策略游戏)中所做的那样简单。这意味着对强方对手的攻击DEF根本不会造成伤害。对于instace ATK = 10ENEMY DEF = 12(ATK - DEF) = -2同时也意味着高攻VS略低闪避,可以做小的损害,可能使战斗随HP更长。例如,使用ATK = 1010ENEMY DEF = 1005伤害将为5。如果将伤害ATK增加很小的百分比,则损害也将急剧增加。例如ATK = 1055,只会增加%5的ATK值,造成900%的额外伤害。
  • 为避免这种情况,您可以执行以下操作:ATK / DEF * WEAPON_DAMAGEATKDEF增加时,此操作将逐渐扩展,并允许弱者攻击具有强力的生物DEF

tl; dr您需要负责任地对待您的数字,并弄清楚您希望游戏在不同情况下的表现。一些问题要问自己:

  1. 击败该首领/奴才需要几次攻击(回合)?
  2. 不同的技能,buff,debuff如何影响x战斗?应该是没有希望的,获胜的y%可能性应该少/多吗?
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.