遊戲數值策劃:傷害計算公式問題,求大神指導?
物理攻擊:
傷害=攻擊力*(1-傷害減免百分比)*隨機數(0.9~1.1)傷害減免百分比:與物理防禦掛鉤,數值控制在(20%~35%)我算了下,1-60級,同職業,同等級,同裝備裸裝:30次~40次的普通攻擊,可以使對方死亡全裝:31.4次~32.3次的普通攻擊次數,可以使對方死亡
我現在期望的次數是普攻30次(可能以後會改變這個次數),就這個公式來說,這樣算,可行嗎?技能傷害=攻擊力*(1-傷害減免百分比)*隨機數(0.9~1.1)*技能附加傷害百分比求大神們指導,我客串一下數值策劃(這裡沒策劃)大概就這樣,非要用比較複雜的公式嗎?有什麼合理的公式計算傷害的,求大神們指教。
30次普攻才能擊殺真的大丈夫?
貼一篇Einsphoton的老文上來,或許有些幫助,原文地址:如何高效設計遊戲--遊戲傷害公式的量身定做 - GameRes遊資網
自從開始寫博文,已經一年之久了,其中受到很多讀者的認可,也有很多讀者發出許多不同意見,筆者全都感激。
這篇博文是應一位讀者的要求而寫。內容上可能會比較基礎且坑長。但是就筆者觀點,就算是資深遊戲設計者,我們也可以就此一些概念進行一下想法的交流。
傷害公式,可能是大多數遊戲類型中都會接觸到的一部分內容,無論是RPG、SLG、ACT、STG還是其他一些怪異類型的遊戲,只要伴隨著攻擊(可能在某些遊戲中被換概念)與傷害,就有傷害公式的存在。傷害公式可謂是遊戲規則中比較重要的一塊內容。在這裡我將和大家一起來討論一下關於傷害公式的一些課題。
按照傳統,我先來吐槽一下業內的一些認識。
按照我們大家熟知的,業內普遍把遊戲策劃分了好多類型,什麼「主策劃」、「系統策劃」、「文案策劃」、「腳本策劃」、「視覺策劃」以及「數值策劃」等等。種類繁多啊~~可能按照部分人的想法,只要這幾種策劃分工明確,各守其責,就能夠設計出好的遊戲。這個槽點太大了,不用筆者來吐。當有人討論及數值策劃是做什麼的時候,會有一部分人跳出來,然後行雲流水一樣的背誦:「數值策劃負責遊戲內部的數值模型搭建,整個遊戲的經濟體系搭建…………」,這也無可厚非。但是有人直接一句話概括,數值策劃就是負責遊戲的平衡,這我就想稍微吐槽一下了。現在業內已經形成一定的慣性思維了,不管什麼遊戲我都要去平衡,無論什麼,只要掛一個「平衡」的招牌就對了。筆者想說,這個東西還真不能一刀切,要看你的遊戲類型,遊戲想要達成什麼樣的目標,因地適宜,不是什麼遊戲都要追求平衡的,遊戲遊戲你去追求各種平衡反而會造成不良體驗,失去樂趣。舉個最淺的例子,決定要不要做平衡之前,先要看看你的遊戲PVP細分多不多,或者是不是幫派分化式(種族式地)地策略競爭遊戲。本身就是一款單機RPG,或者本身遊戲就是讓玩家去進階的遊戲,要平衡何用?這些都可以歸納為遊戲的設計目的(設計意圖)。我覺得以後招遊戲策劃或者評價一個遊戲策劃,把「能夠平衡遊戲」改為「能夠時刻明確設計目的,或者能夠根據設計目的設計出合適的遊戲規則」為好。總的來說,筆者想表達兩點:①策劃不要分那麼多的界限,否則設計不出好遊戲。策劃的前提是一名遊戲愛好者,對於遊戲愛好者來說,這些分類自然會都有涉獵。②不要盲目的追求平衡,要時刻想著目的意圖。
言歸正傳,我覺得理解了上面兩條,會對我們下面接著要討論的傷害公式的設計有所幫助。
傷害公式在邏輯上的發展歷程傷害公式是什麼?
業內的東西,又不是學術研究,所以沒什麼明確定義。就是看誰講的有理,誰概括的全,誰認同誰了。所以這裡筆者也斗膽嘗試給出一個傷害公式的定義:
傷害公式:就是為了能夠實現定量或者按照一定的邏輯規則扣除目標一定HP的計算方式。
這就是傷害公式,我覺得我的設計意圖達到了!我就是想要設計出一個能夠按照預期的效果扣除目標HP的一種規則。
傷害公式是如何在邏輯上演化發展的?在講傷害公式之前,我們先來看看常用的角色基本屬性是如何演化發展的。
以下內容可能會有點流水化
起初,我們先有了角色的概念。若我們想要兩個角色在遊戲中發生戰鬥,那遊戲設計師就需要組建一個裁判組,其中計算機充當裁判,遊戲設計者來制定遊戲規則。就像幾個小夥伴用猜拳的方式來角逐一樣,我們在遊戲軟體中會採用一些更加細化並且量化的形式來制定規則。這時我們通常會引入HP(Health Point)來描述該角色所能夠承受的最大傷害,這時我們能夠做到的規則就是每次發生攻擊,傷害為恆值,直到一方HP為0為止。但是這樣做顯然會出現維度太少而帶來的結果恆定化,並且也顯得無聊。
下一步,我們引進ATK的概念,來形容該角色對目標所造成的傷害。這時,我們可以制定的規則是targetHP-a*ATK,或者有好事者可以這麼干targetHP/(a*ATK),未嘗不可。因為ATK已經成為角色的屬性了,我們也可以在遊戲中對ATK進行成長。至此戰鬥結果還是顯得無聊。
接著,我們引進DEF這一屬性,來形容該角色對所受到的傷害的減少量。這時我們可以指定的規則有這種targetHP-(a*ATK-b*targetDEF),有這種targetHP-(a*ATK/F(b*targetDEF)),還有這種targetHP-F(ATK,DEF)等繁多種類(無窮無盡,無法枚舉)。剩下的就要看讀者們想用那種,或者需要那種了。
至此,我們的戰鬥規則稍有起色,但是總感覺還是稍有欠缺,因為這場戰鬥不是那麼的刺激。原因可能是少了那麼一份「驚喜感」,因為每次戰鬥結果都一樣。為此我們我們需要在前者的基礎上加一點未知元素。於是我們有targetHP-DMG*Random(a,b)或者targetHP-DMG+Random(a,b)(其中DMG則為之前通過ATK與DEF計算出來的傷害),通常使用前者較多。這樣會對結果產生更多隨機的未知的處理,使得這場戰鬥更加趣味化。
神馬?!覺得還不夠刺激?!!!那好吧。我們為此引入Critical%的概念。此屬性無法在傷害公式層面上存在,只能安排到戰鬥邏輯上。例如,我們投一個骰子,如果這個骰子的值落在(0,Critical%)區間內,則系統判定該角色攻擊為暴擊,傷害大量提高為a*DMG。
神馬?!還不夠刺激?!這樣唯有引入Dodge%的概念了。同樣的,此屬性也無法存在於傷害公式層面上,只能安排到戰鬥邏輯上。例如,我們投一個骰子,如果這個骰子的值落在(0,Dodge%)區間內,則系統判定為該角色閃避此次攻擊,所受到的傷害為0。
在此注意一件事情。在遊戲的戰鬥傷害公式與邏輯上有很多對立的屬性存在,其中我們已經介紹了ATK與DEF的演化發展思路。同樣的也有Critical屬性與Anti-Critical(部分遊戲可能叫做暴擊與韌性)以及Dodge與Anti-Dodge(閃避與命中)等一些列對立屬性。我們從設計目的來看,之所以存在對立屬性,是因為可能從某種商業化或者趣味的角度出發,我們需要Critical以及Dodge無限增長或者可增長的空間較大,為了能使這一設計決定不失偏頗,才會想辦法去引入另一個屬性來進行壓制。這在行業內來看是一種包裝概念來做收入的手段。
傷害公式的種類下面來介紹一些常用的傷害公式。
DMG=a*ATK-b*targetDEF類(俗稱加法公式,或減法公式)適用情況俗話說,最簡單的反而是最好用的。此公式特點,形式最為簡單,結果最為直接,但是需要設計者在整個遊戲數值架構內花更多的心思去搭建。這類公式最適合所有ATK與DEF的成長空間有限,並且ATK與DEF成長比例一定的情況下。當然不排除特殊處理過的情況,可能會帶來意想不到的效果。
問題處理
這類公式通常會遇到一個問題,就是當b*targetDEF &> a*ATK時,所得傷害是負數,如果直接扣血會發現越扣血越多。此時我們需要在戰鬥邏輯中補一個漏洞。
如果(a*ATK – b*targetDEF)≤0,則DMG=1。
公式變式使用這種公式可能還會遇到一個問題。戰鬥雙方如果實力差距較大時,會發生極端壓制情況,既所謂的秒殺。這樣,我們可以適當的構造一個減函數F(X),最終修正公式為
DMG=(a*ATK – b*targetDEF)*F(Diff(ATK,targetDEF)) (其中Diff為形容ATK與DEF差的函數)
DMG=a*ATK*F(targetDEF)類(俗稱乘法公式,或者除法公式)
如果把上一種公式形象描述為「抵消傷害」的話,那麼這種公式可以形容為「折損傷害」。這種公式比較適合ATK與DEF的成長空間無限大(就是那種街頭泛濫的網友,無限砸裝備,無限成長的那種)。
問題處理這類公式需要注意F(X)的處理。通常F(x)都會構造出一個帶有下界且下界大於0的函數,如圖。
或者構造一個關於ATK與DEF的函數F(ATK,DEF)並且也需同樣造成上圖的效果。
其他類公式DMG=F(ATK,targetDEF)由於已經歸類為其他,所以實在是太繁多了,所以不枚舉了。在這裡只是提一個常用的一種公式DMG=ATK^2/(ATK + targetDEF)。
如圖所示,紅線代表傷害關於攻擊力的函數曲線,橙黃色代表傷害關於防禦力的函數曲線。從這兩個函數分析得出,當攻擊方攻擊力大於防禦方防禦力時,曲線接近直線既每點攻擊力帶來的傷害增益為1點。當防禦方小於攻擊方攻擊力時,曲線接近直線既從普遍情況來看,每點防禦力帶來的傷害減少為0.5點。所以使用這種傷害公式,我們再設計角色屬性以及屬性的成長的時候,盡量控制ATK大於DEF的情況,這樣結果看起來比較好看。
如何量身定做自己的傷害公式我們按照目標導向型思路來分析。
1.我們遊戲需不需要傷害公式,能否直接扣除固定量的HP,或者ATK的值,通常這種設定適合休閑類遊戲,或者塔防遊戲。
2.遊戲中參戰角色的基本屬性有哪些,這些屬性是如何定義的?戰鬥時需要用到哪些屬性?
3.有沒有Critical%,有沒有Dodge%,有沒有Anti-Critical%,有沒有Anti-Dodge%
4.傷害結果需不需要帶有波動性?
5.屬性的成長空間是否有限?決定選擇哪種類型的公式。
6.戰鬥節奏的要求?調整ATK與DEF的係數,以及規劃HP、ATK、DEF的成長。
7.公式初步選定之後。用控制變數法來觀察ATK與DMG的關係以及DEF與DMG的關係,畫出曲線圖來分析是否達到需求。
8.有沒有需要添加戰鬥邏輯來達到某種目的?
9.最後看運算效率如何。計算機執行冪函數的效率遠遠低於多項式函數。
總結其實本文所講的戰鬥公式都是基礎。如果想要達到特殊的目標或者更好的體驗還需要在邏輯層面上下功夫。公式結合邏輯,可能會造就出無限多的優良戰鬥系統。
本文一再強調目標導向型的設計思路,是希望設計者們掌握這一成熟的方法,從而達到以不變應萬變。
歡迎有想法的人提出意見,幫助改善。
Einsphoton
2013.07.21
剛好在整理一些數值方面的東西,就乘法戰鬥公式這塊我貼一下我整理的文章為題主提供一個參考:
最基本的公式:攻方傷害=攻方攻擊力*係數
係數包括且不限於以下幾個方面的乘積:
1. 防禦減傷率:根據受擊方的護甲/防禦力而產生的一個減傷的係數
a) 這個係數設計的基本思路有:
i. 護甲越高,防禦減傷率越高。
ii. 護甲越高,所帶來防禦減傷率的邊際收益越低。
iii. 護甲值趨向於無限大的情況下,防禦減傷率趨向於小於1的一個定值。
b) 具體的一些思路/例子:
i. 基本的反比例函數,構建一個滿足上述條件的反比例函數。以DotA普攻為例,這個減 傷率=護甲*0.06/(1+護甲*0.06),在護甲值趨向於無窮大的情況下,減傷率趨向於1,由於遊戲特性,這個值一般不會超高100,模擬出來的函數曲線是這樣的:
ii. 分段函數:對於數值比較大,不斷引入新系統投放防禦屬性的遊戲(頁游/端游),單純的一個函數便不能滿足需求,這時候需要根據屬性投放制定分階段的防禦減傷率函數。下面拿之前項目的公式舉個栗子:階段1:當0≤數值防禦≤500時
防禦免傷率=1-1/(1+數值防禦/4500)
階段2:當500&<數值防禦《7000時
防禦免傷率=1-1/(125/117+數值防禦/11700)
階段3:當7000&<數值防禦《30000
防禦免傷率=1-1/(108/69+數值防禦/69000)
階段4:當數值防禦&>30000
防禦御免傷率=0.5+0.1*((數值防禦-30000)/30000/((數值防禦-30000)/30000+1)
模擬出來的曲線是這樣的:
2. 隨機變動:為了增加戰鬥的隨機性、觀賞性抑或不穩定因素,或者是為了增加小屬性的投放(數值言中的「挖坑」),往往會引入一些隨機因素。主要的隨機因素可能有以下一些:
a) 隨機數:純粹的使得在特定的攻擊者和攻擊對象的情況下,多次傷害值在較小範圍內浮動。產生這個隨機數的常用做法有:
i. 固定傷害值*單純的在1左右隨機,例如:Random(0.9~1.1),一般大數值的遊戲常用這種做法。
ii. 固定傷害值+數字數*骰子面數:DnD規則,後來魔獸爭霸也沿用了這個設定,即為特定的單位定義骰子數,骰子面數,最終的值是拋擲骰子數次所得骰子面數的總和。例如使用3D9,即3個9面的骰子,攻擊的浮動下限為3,上限為27。這種做法一般用在小數值的遊戲裡面。
b) 暴擊、格擋、破擊、傷害加深/傷害減免等,這些係數的特點是有一個前提判定,如果判定成功,則一個係數生效:例如暴擊成立,則傷害*2;格擋成立,則傷害*0.5;破擊成立,則傷害*1.5;傷害加深,則傷害*(1+加深係數);受擊方傷害減免,則傷害*(1-減免次數)。這些係數一般都是相乘的關係,對於判定的做法一般是這樣的:
- 計算公式為:產生概率
— 抵抗概率 = 理想概率 - Random(1%—100%)得出實際概率
- 實際概率 ≤ 理想概率,判定生效
- 實際概率 > 理想概率,判定無效
最後,
- 如果隨機數用的是隨機係數的話,攻方傷害就是這樣的:
- 攻方傷害=攻方攻擊力*(1-防禦免傷率)*隨機數*暴擊係數*格擋係數*破擊係數*(1+攻方傷害加深)*(1-守方傷害減免)
- 如果隨機數用的是骰子的話,攻方的傷害就是這樣的:
- 攻方傷害=攻方攻擊力*(1-防禦免傷率)*暴擊係數*格擋係數*破擊係數*(1+攻方傷害加深)*(1-守方傷害減免)+骰子數*骰子面數
那麼來回答下題主的問題吧:
我算了下,1-60級,同職業,同等級,同裝備
裸裝:30次~40次的普通攻擊,可以使對方死亡全裝:31.4次~32.3次的普通攻擊次數,可以使對方死亡我現在期望的次數是普攻30次(可能以後會改變這個次數),就這個公式來說,這樣算,可行嗎?
我認為是可以實現的(實現方案後續補上),但是體驗會很不好:從裸裝到全裝的次數差異只有十次左右,裝備獲取所帶來的成長感會很不平滑:攻防雙方均獲取一件裝備只帶來了1次左右的攻方減少,這對於30次這個基數來說體驗太微弱了。好的體驗是讓攻防雙方都能感受到明顯的成長,即攻方攻擊次數較明顯減少,守方承受傷害較明顯增加,這樣才能帶來成長感嘛!而且在「1-60級,同職業,同等級,同裝備"都是相近的戰鬥體驗不會太枯燥了嗎?
最後要說的是:做數值始於公式與拉表,但好的數值從來都不是表一拉就成了的。不明白你想做什麼,如果只是保證每次戰鬥都需要30個回合的話,只給出傷害公式,不給出攻擊力和血量成長公式,那麼肯定可以達標的。
就像一個方程,有兩個未知數,那麼它的解是無窮個。
建議你先別考慮防禦力,先從有效血量和攻擊力成長考慮戰鬥模型構建。你給的戰鬥公式是用來從有效血量倒推實際血量的。我還在做遊戲的時候,我發現很多國內的遊戲策劃可以不用學數學。
我不做遊戲刷知乎的時候,我發現很多國內的遊戲策劃竟然連語文都可以不用學了。哪位語文成績能得滿分的去理解下題主改一下題目然後我看懂了再來回答怎麼設計可好……還有樓上那麼多回答的,你們真的看懂題主問的是什麼,你們回答的是什麼嗎……你瞧我這水平,又回去看了一遍,怎麼還是看不懂呢……公式沒有什麼合理不合理。看你想做什麼樣的遊戲了。單純說。只有血量和攻擊兩個屬性能不能做出一套完美的成長線?不考慮多樣性上兩個屬性已經完全足夠了。你要的到底是什麼?要有防禦型,攻擊型,爆髮型,概率型?要這些的話你是打算:做一級屬性直算。做二級屬性轉化運算。甚至三級屬性轉化+概率影響。表面上或者說外行看,就是有這個東西而已。但是策劃,或者說數值策劃要用哪個,需要明確知道三種方法的影響,以及自己本身的目的。數值永遠不是為了做而做的。明確目的吧。
簡單做個表,讓excel幫你一下好了
不太理解題主究竟想問什麼。如果僅僅是問現在的戰鬥公式是否可用,那答案是沒問題呀。想要30次普攻幹掉對方,不需要調公式,調HP就夠了啊。
大致看了下問題,回答一下吧。
樓主的公式:Dmg=攻擊力*(1-傷害減免百分比)*隨機數(0.9~1.1),這個公式沒問題,但是這只是最表層的公式,所以你老大才會跟你說你的公式太簡單,並不是樓主所理解的屬性太少的簡單。為什麼說簡單?
往公式再深一層看:傷害減免百分比,就叫減傷率吧,按照樓主的要求,在公式設計的一開始就是需要定下來一個預設值的(就比如樓主說的35%),如何設計減傷率公式使得減傷率在人物等級成長的情況下一直保持在35%(其他率也一樣的理念),從而保持1~60的戰鬥時間不變,這個才是關鍵。這樣的套路,最典型的例子就是魔獸世界那一套了,每一級的成長值是不變的,但是在對應的公式下,只要你的裝備能夠達標,就能夠保持從1~60級不變的減傷率等等,在這些率不變的基礎上,再讓DPS和血量能夠等比增長,那麼整個戰鬥的節奏就會保持不變了,1~60級都是一樣的時間。
具體的減傷率原型公式是這樣的:減傷率=防禦/(防禦+等級削減係數*f(lv)),暴擊率由於是攻擊屬性,在公式中和防禦屬性處在不同的位置,是這樣的形式:暴擊率=暴擊/(等級削減係數*f(lv)),當然,這兩個等級削減係數是不一樣的,而接下來只需要確定各個屬性公式里的等級削減係數是多少,然後添加一些屬性的係數,美化一下每一級增長的屬性量。 這樣算出來的是一個人物各等級滿屬性的值,想要達到你說的裸裝和全裝的差異,具體的你調整一下分配在角色成長模塊的比例和裝備模塊的比例就行了。你就不能拉個表么。。。寫在紙上你寫著藍瘦我們看著香菇。。。
傷害=攻擊力*(1-傷害減免百分比)*隨機數(0.9~1.1)
全裝:31.4次~32.3次的普通攻擊次數,可以使對方死亡
上下10%的傷害 算出來次數上下只有1次你很可能算錯了雖然我也不是很懂除法公式,但是本著幫助你儘快解決問題的態度,給你些建議:
1.即使是否是客串數值,你這種寫在紙上的做法,也不太能讓人接受。
沒人願意拿著你的小本子,一個個屬性的對,然後來回的翻頁。你的字還行,但總沒有微軟雅黑好看…
這樣即使你的公式通過了,也是沒法維護和擴展的,請把你的思考過程挪到excel表格裡面。不然即使數值真的沒問題,老闆也可能因為不想看而回絕你。
(所以後面的那些什麼滿裝屬性的值,我都沒看…)
2.系統成長放心用等差
看了一眼,你的裝備屬性成長。3,4,3,4,… 什麼鬼。想用等差就好好的用,要從數值模型-&>數值的角度思考。如果你的裝備就是升升升,那麼就等差。如果還分品質,那麼就基準值等差,按品質做偏移。
3.HOLD不住那麼多屬性,就先從簡單的來
先做攻、防、血;再做命中、閃避;再做暴擊、抗暴;再做攻速;再做你的什麼施法速度,什麼生命恢復。
如果你只是想寫出來,讓你的老大知道你的這套體系很豐富,那當我沒說。如果你想把它算到你的公式里。請先把基本屬性搞定再說。
4.說說公式
傷害=攻擊力*(1-傷害減免百分比),公式沒問題。但這是最基本的公式。
你首先要邁過的第一道坎,是防禦-傷害減免百分比之間的關係。如果你希望兩個裝備水平相同的人,無論在什麼等級,都會有相同的「生存時間」(能承受普攻次數)。這個防禦-免傷關係可以往 免傷=防禦/某個函數 上走。這個函數可以是一個等級相關的值,比如基準攻擊(演算上每等級能達到的標準攻擊屬性)。
你的老大也許想看到的就是你所謂的「與防禦掛鉤,到底是如何掛鉤的」
5.補充一句
最終的公式肯定不會這樣的簡單,而複雜的公式都是由簡單公式+新的屬性+新的體驗需求堆積起來的。
如果老大還是覺得你的公式不夠複雜,你可以嘗試理解為老大覺得你的公式覆蓋的還不夠完整。到時候你把命中、閃避、暴擊、抗暴、攻速、施法速度、攻擊距離、破防值、PVP傷害屬性全都搞進去。想不複雜都不行,是吧。
思路錯了,先定DPS和幾刀砍死,然後得到HP,然後DPS拆分攻防
沒有太明白題主的意思,以下根據我的猜測作答你現在是希望玩家在對戰中更快的結束戰鬥是嗎?感覺可以將護甲的減傷比例調整至15%~30%嘛,既可以縮短戰鬥時長,也拉開了減傷上下限的倍數。
EXCEL這麼強大的幫手,題主怎麼不用啊?!話說回來,傷害公式只有合適的,誰知道你具體什麼需求...
真是辛苦了,期待有人用修改器
公式沒問題,能達到你設計目的的公式就是好公式。好了,現在問題來了。說說缺點。在你這個公式里,攻擊力防禦力的價值浮動變化太大,你讓玩家怎麼理解你的公式和屬性的價值呢?從可以角度加以改進,祝你成功。
推薦閱讀:
※遊戲策劃中,數值策劃是一個中國特色的職位嗎?
※請問遊戲中大海的海面是如何處理和渲染的?
※植物大戰殭屍、憤怒的小鳥、Tiny Wings 讓人感動的背景故事是否是這些小遊戲成功的強力因素?
※田中謙介和宮崎英高,玩家究竟更討厭哪一個?
※電子遊戲誕生時,其消費者設定是否就有性別傾向(偏向男性),還是只是不曾預料到的結果?