如何反推一個遊戲的戰鬥公式?

請問如何去反推一個遊戲的戰鬥公式,或者是其他什麼公式?作為遊戲策劃我想學一下,雖然數學很渣TAT


通常來講,遊戲的數據表現形式,絕大多數都是黑箱式的,即可直觀見到遊戲事件的發生和結果,但控制遊戲事件進行的系統不公開,因此不可見,甚至難於理解。
除去獲得官方公開的數據;通過適當或者不太適當的途徑獲得遊戲內部數據,源碼或者策劃案之外;大多數時候,也只能依靠反推這個方案了——顯而易見的這是一種相對而言最為可行的探求黑箱內部的方案。

如果要通過事件發生和結果的數據,進行反推,我們認為其可行的評估通常基於:
A,大多數戰鬥系統或者其他系統,通常都依靠具體的演算法和公式為核心
B,公式和演算法通常不會特別複雜,在網路遊戲時代,計算戰鬥過程和結果通常放在伺服器端進行,為了應付海量戰鬥造成的負擔上升,演算法勢必以簡單高效為要求
C,在一個遊戲的生命周期內,其底層系統的核心公式通常不會大幅變動(通常可能發生變動的時間是大幅度的更新如遊戲資料片,或出現某些不可調和的問題或bug時)
萬幸,符合這樣規律的遊戲是大多數,所以我們就有了反推的基礎。

而反推方案的可執行,對執行者的素質要求是:
1,對輸出輸出端的所有數據,結果,一般現象和特殊現象有足夠的認知和了解
2,能夠通過歸納和分析,建立並驗證簡單數學模型的能力
3,能夠在遊戲中建立測試環境,對模型進行反覆的評估和驗證的能力和手段,或者有方法獲得用於驗證的大量數據樣本
4,最好擁有相關遊戲開發的經驗或遊戲系統的深入了解
這樣我們就可以準備著手進行反推了

好,下面是具體的例子了:我首先會想起的正是《魔獸世界》(以下簡稱為WOW),而且是60級年代的,最有趣的那個WOW。
那個時候,整個艾澤拉斯大陸的玩家還沉浸在「我操這個遊戲好屌」的情緒中,開發方也極少透露出和遊戲相關的各種數據,但是仍然有大量的玩家在思考數據系統的奧秘,試圖探求黑盒的內部,並且取得了輝煌的結果,更棒的是,他們的結果都後來直接或間接地被證明是正確的。


第一個故事:骰子和百分比之桌(Attack table)——這個問題爭論之久涵蓋了整個60時代,焦點是說,一次普通的攻擊可能造成命中,暴擊,閃避,招架,格擋,碾壓,偏斜還有未命中等等不同的結果——魔獸世界為了凸顯即時戰鬥的多樣化和不可預知結果的特性,在一個平砍上就做了這麼多的文章。這些數據各自被命中率,暴擊率,閃避率,招架率,格擋率(均為百分比數據)和等級差影響,那麼這一大堆數字應該看哪個,數學預期到底是怎樣的呢?
艾澤拉斯的民科數學家們,已經因為分成了兩個陣營分明的派系,各自有不同的說法:
多次骰子派認為,每個百分比都是一個獨立的100%中的佔比;結果的出現是先用隨機數決定是否命中,再用隨機數決定是否招架,再用一次隨機數決定是否暴擊……
單次骰子派即認為,所有百分比都是同一個100%中的佔比,一次骰子決定結果
但是後者比較容易遭受質疑的是,顯然某些極端情況下,這些百分比的數值之和已經遠大於100了,因此看起來這個演算法就不能成立了

直到官方藍色帖子發布:

Info on crit and hit chances | 2006-08-25 09:54 | Aeus
The way WoW calculates crit rate is over ALL attacks. Crit rate is not based on hits only. In other words, if you have a 5% crit rate, that 5% chance includes misses.

單Roll派才恍然大悟,提出了Table制演算法——也就是當各種攻防雙方各種非命中數據上升時,就好像向一個桌子上擺入更多的杯子,當杯子多到裝不下的時候,名叫普通命中的那種被率先擠出去。
接下來的一大串巨量combat log襲來,大量數據證明了這個演算法是符合實際情況的,這就很好的解釋了大部分現象;其次,部分實驗者又用用等級差和裝備差,以及利用各種技能產生的極端數據,又一一驗證了這個桌上被擠出去的優先順序列。
而elitistjerks 的Vulajin,一位深思熟慮的盜賊,對於這一結果在物理傷害技能在PVP方面的表現存疑,通過超過50天,數萬次的背刺試驗,得到了技能傷害是獨立於平砍的計算方式,是兩次骰子的形式來決定結果的結論:Backstab: Two Rolls?
到了70年代,elitistjerks的Lactose,一個疑心病很重的獵人,對於獵人的遠程物理攻擊是否遵循Attack Table的一次骰子方式進行了驗證,用豪華裝備加上極端測試環境,積攢了數千行有效combat log,統計並再次驗證了遠程攻擊也完全遵循Attack table的結果。

到此,這個複雜的問題得到了圓滿的解決,而之後的WOW版本中,更通過移除了碾壓和偏斜的發生,進一步簡化了普通攻擊的Table相關演算法:顯然從開發者的角度評估,如果能夠實現相似的結果,顯然一次骰子的演算法,要高效於多次骰子,但如果沒有確實的公式,演算法和規律加以驗證,那麼終究難以具有足夠的說服力。

第二個故事:道具(裝備)哪家強?(Item level)——這個問題更是伴隨了WOW多半遊戲歷程,直到」裝等「概念已經深入人心,成為普及觀念,也成為衡量一個玩家價值的直接標準(從某種意義上講我並不喜歡這點)的時候,」兩件不同的裝備,究竟哪一件更好「這個問題,才基本上不再有人爭論。

但在遊戲的早期,大家對裝備的概念只有紫的比藍的好,藍的比綠的好;到了60級中後期,Raid開始普及紫裝的時候,問題就出來了,同樣是」60級「的紫裝,到底哪個會更好呢",或者「搶了人女朋友還要不要搶龍人盾呢?」

在Addon(各種插件)開放的同時,WOW也提供了大量的API給開發者調用,其中關於道具,可以取得一個叫做Item level,也就是物品等級的值,但是這個值,普通玩家不能看到(Patch 3.2之前),只能通過」物品使用等級「來判斷,但是問題如上,到了滿級就看不出哪個更屌了——從60-95的史詩裝備,都標註為「最低使用等級:60」。
對應的譯文在這裡:[翻譯]物品等級機制

Hyzenthlei 一位牛頭人薩滿,自己琢磨啊計算啊,得到了一個公式,並發布在了BLZ的WOW官方論壇上:

方程

下面是經過對WOW物品生成的規則進行了很多方程的嘗試後得出的結論:

ItemValue = [(StatValueX*StatModX)^1.5+(StatValueY*StatModY)^1.5+ …]^(2/3)/100 (X,Y代表屬性的數值,^是指數)

在這個方程里你要注意到:
1)它很簡單(我害怕那些複雜到搞笑的東西),但並非象所有屬性相加那麼簡單。這意味著物品平衡並非要用一些亂七八糟極為複雜的東西,一些簡單的數值就能描繪出這種平衡的方法。

2)每個屬性在公式中的表現都是他本身的1.5次方。這樣它不會增長得太快,但又可以更好地平衡超高的單獨屬性。舉個例子,一件物品可以有+29力量或者+18/19 力量/耐力,這兩種情況下物品的ItemValue大致上相等(數值足夠相近到同等ilvl的程度)。

3)把這些屬性的1.5次方加起來以後得出的值再化為它本身的2/3次方,這能使ItemValue不會螺旋型上升。經過這些改變之後,物品的ItemValue將基於ilvl線性上升。

嚴格來說我看到「螺旋形上升」就已經想不明白是怎麼個意思了,但是,這一條Item Value(簡寫為IV清晰的解釋了道具等級,道具帶來的屬性提升,屬性的價值,這就意味著,除了極少數明顯數值錯誤的道具之外,對於」我應該如何選擇道具,能夠使自己的數值成長更多「這個問題的答案已經非常清晰了:獲得ILV,並計算出他的價值就是了。
我在60年代末期,大家還不知道ILV是什麼概念的時候,就做了一個addon,核心公式和界面都是抄的,但是增加了幾個實用方便的功能:
1,自動觀察每一個視野內的玩家,記錄他們的IV總值,並存在本地,查詢的時候可以進行排名
2,自動觀察隊友,一鍵生成一個IV總值列表合計
3,在裝備對比的時候直接顯示IV和IV差值
其中1隻要把號在主城掛幾個小時,基本就能掌握伺服器平均raid進度,而第二個功能,在60級末期剛剛開始有20人野團的時候,這玩意能一下判斷出整個團隊的硬體狀況;第三個則是省了你琢磨換還是不換的問題。

第三個故事:OT到底該怨誰,神秘的仇恨系統(Threat)——這曾經是最讓每一個Raid Leader頭痛的問題,到底仇恨是個什麼機制,為什麼有時候風平浪靜,有時候OT一波接一波。

相對於前幾個問題,你至少還能看到黑箱輸入的所有數據和輸出數據;而仇恨值我們即無法直觀看到輸入數據,更無法看到輸出數據,準確地說,只能看到現象,也就是:OT還是沒有OT。
因此,試圖反推的難度要高太多了,直到整個60年代即將結束的時候,Kenco"s research on threat這篇帖子的發布,才宣告仇恨系統的面紗已經被完全揭下。
作者Kenco和幾個朋友,建立了一個簡單的設想,即普通的平砍傷害=仇恨增加,在這個基礎上,測出了著名的0.5(治療有效值的0.5倍相當於產生仇恨),1.1/1.3等幾個極為關鍵的數值(當某個單位的仇恨值超過當前目標,近戰為1.1,遠程為1.3倍時,則發生OT),嘲諷的工作原理(瞬間獲得相同於最高仇恨目標的等量仇恨,並強制目標轉向)等等,加上對極為含糊的仇恨數據描述(產生」大量「」額外的「」較低的「仇恨)作出了數據測評,使得玩家頭一次有一種撥雲見日的感覺。
在那之後的一段時間內,各種Tank職業對於如何製造仇恨的技巧大幅增加,而DPS們也在如何不OT的情況下儘可能增加輸出有了良好的理解。

這一直接影響就是到70年代開荒卡拉贊時代,仇恨插件就已經普及,控制仇恨的難度對於Raid leader就是件直觀明白的工作了:」那個暗牧少用震爆,馬上OT了!「。
(圖應為Omen,不是最早但是普及最廣的仇恨插件之一)

仇恨系統是WOW從Ever Quest借鑒並沿襲最為理想的設定之一,其黑箱程度如上所述,在各個系統中也是最高,但仍然被破解了。

在整個WOW的遊戲歷程當中,類似的情況非常多,例如護甲的加值和減傷效果的推演,怪物和玩家之間的Arrgo關係的等等
既然題主還問了「其他公式」,我們就再講兩個WOW以外的故事

第四個故事:誰有利,誰不利——格鬥遊戲發展到現在階段,最大的問題不是反應夠快不夠快,連招練得是不是熟,而是對策是否豐富,而對策是否豐富完全依賴於你對每個角色的數據掌握是怎樣的——

不,不是這些,和三圍年齡愛吃什麼沒關係,是你需要牢記一大張數據表,我們稱之為Frame Data幀數數據,這個數據中最重要的數據是——有利和不利

而(硬直差)有利不利翻譯過來就是"在你打了我一下,我防住了/我挨打了」的情況發生後,誰可以先動的數據,這個數據決定了先發制人還是後發被人制,可以說了解硬直差的人在實戰中將有巨大的優勢,壓制,強擇,確反都靠它了!

我們強調一下:這個數據表只有一個角色全表的1/3長,每個角色的數據條數在70-120不等,每條至少記下來發生,硬直,命中硬直差和防禦硬直差和傷害值吧5條吧,這樣每個角色只需要大概其記400-600個數據,某些不常用可能不用特別記,平均算200個吧,街霸4這樣40來個角色的,需要記的總數據可能也就一萬不到,全數據則在兩萬條上下)

而在早年,官方沒有提供這種數據的時候,怎辦呢……我們的玩家以有些老土的方式,完成了人肉測量:選擇兩個(起跳速度)相同的角色,你踢我一下,我防住了,然後大家都拉住上,這樣大家都會在硬直結束的時候跳起來,然後把這段情況錄下來,用視頻工具逐幀播放

根據兩個人的跳躍高度差,就可以反推出幀數差了,這就是人肉frame data的來歷。
你也知道需要多少數據量,所以請想想看這個工作是如何完成的,那就是不可思議的頑強毅力。
最後一個故事:我一個沒怎麼玩過夢幻西遊的人如何反推亂敏現象的機制——這個是我的一個答案
很多回合制遊戲都有亂敏現象,請問該設定的初衷和原理是什麼? - 網路遊戲
基於兩個道理——如果一個數值會造成不平衡,如何平衡;所有能夠達到平衡的手段中最簡方案是什麼;建立一套更複雜的模型來實現同樣的效果這種蠢事,聰明的遊戲開發不會做的。


收集所有數據後放入Excel然後數據擬合,出來根曲線,那就是了。
但是我不會告訴你經過遊戲上線前的一兩個月調整,特別是前面一段早都已經是手工修正的了,你看到的公式要多詭異有多詭異


曾經在國內top2遊戲公司實習過,逆推過市場上幾款知名ARPG遊戲的公式。由於涉及公司保密,我不說遊戲名字,也不說推導結果。僅僅寫出推導的思路,覺得有用的可以自己去試試。

目標:1.戰鬥力公式;2.裝備屬性公式;3.其他系統和技能。

方法:
1.戰鬥力公式是由不同的屬性組成的,生命,攻擊,防禦,暴擊,抗暴等等人物所有屬性再加上裝備屬性。裝備屬性後面說,人物屬性的解構方法很簡單,從一級開始記錄每級戰力和裸裝人物屬性,給不同的屬性賦予不同的權重,相加就是戰力。比方說1生命值=0.5戰鬥力等等。數據很多,彼此交叉驗證即可。權重來源於大膽假設,小心求證。

2.有了基礎的人物屬性,裝備屬性就簡單多了。相同的屬性對於戰力數值都是一樣的,按照裸裝的數值再往上繼續加成即可。不同的屬性還按照方法1,在諸多數據的驗證下推算出來。

3.其他系統的戰力,比方說寵物系統,在做到前面兩步的基礎上就很簡單了,已知的屬性按照權重往上加,未知的繼續推算。
技能的戰力比較難一些,因為技能很多都是百分比形式,比方說增加25%攻擊力等等。這個和人物的屬性息息相關,會不斷變化。因此最後把技能單列出來,算作其他加成的戰力。

好了,現在我們已經知道遊戲中所有的戰力構成,這才是剛剛開始。分析數據,形成圖表,獲得結論才是重點。可能的研究方向包括戰鬥力的成長,戰鬥力的各部分組成比例,技能的組合搭配,裝備的屬性設計,人物的屬性成長等等諸多方面,同樣涉及到保密,這部分的內容自己想想,可以有自己的見解會更好一些。

我也不知道其他的解構方法是什麼樣的,我這個方法可以說比較笨,工作量非常大,但是結論保證正確,對遊戲的理解也有好處。

不過對於我自己來說,做完這個研究,反而堅定了我不做這樣的遊戲的決心………


就和物理理論的建立一樣嘛,收集數據,提出假定公式,用假定公式預測新的實驗結果

反正艦娘的公式都好變態-&>_-&>,驗證出來的都是甘地


每次修改一個變數,對比結果


1、收集數據
2、提出假設。比如加成是用什麼演算法。多個加成相疊加的時候,是多次疊乘,還是係數相加乘以基礎數值。
3、注意考慮取整。一般有三種取整,向下取整,向上取整和四捨五入。
4、然後把收集到的數據帶進去驗算。
EXCEL和計算器是你的好幫手。尤其是EXCEL。

一般情況屬性值的加成會好算一些。知道攻防算傷害會複雜一些不太好算,因為很多地方的傷害是浮動的,而且不好確定套用的什麼傷害公式。

反推公式超有趣的。這兩天也推了一個。加油~


1、想辦法取數據,2、在表裡整理好數據,3、分段添加趨勢線,4對比與微調。


扒數據要小心,為了防止被輕易抄襲,現在經常會故意偽裝數據。比如面板顯示的某一級升級加了50某數值,其實內部加的是40。照抄會亂掉


逆向工程,直接反出彙編代碼。(可行性好像有點低。。。嘎嘎嘎)


推薦閱讀:

唐詩三百首能背下來可以當遊戲策劃么?
實力新興遊戲音樂工作室該如何渠道運營呢?怎麼接觸到一個新客戶呢?
如何在簡單的交流中了解一個遊戲策劃的水平?

TAG:遊戲 | 遊戲設計 | 網頁遊戲 | 遊戲策劃 | 遊戲數值策劃 |