通常來講,游戲的數(shù)據(jù)表現(xiàn)形式,絕大多數(shù)都是黑箱式的,除去獲得官方公開的數(shù)據(jù),通過適當或者不太適當?shù)耐緩将@得源碼或者策劃案之外,大多數(shù)時候,也只能依靠反推這個方案了——反推的可行性評估通?;冢?/p>
A,大多數(shù)戰(zhàn)斗系統(tǒng)或者其他系統(tǒng),通常都依靠具體的算法和公式為核心
B,公式和算法通常不會特別復雜,在網(wǎng)絡游戲時代,計算戰(zhàn)斗過程和結果通常放在服務器端進行,為了應付海量戰(zhàn)斗造成的負擔上升,算法勢必以簡單高效為要求
C,在一個游戲的生命周期內,其底層系統(tǒng)的核心公式通常不會大幅變動(通??赡馨l(fā)生變動的時間是大幅度的更新如游戲資料片,或出現(xiàn)某些不可調和的問題或 bug 時)
而反推方案的可執(zhí)行,對執(zhí)行者的素質要求是:
1,對輸出輸出端的所有數(shù)據(jù),結果,一般現(xiàn)象和特殊現(xiàn)象有足夠的認知和了解
2,能夠構思,建立,驗證簡單數(shù)學模型的能力
3,能夠在游戲中建立測試環(huán)境,對模型進行反復的評估和驗證的條件,或者有方法獲得用于驗證的大量數(shù)據(jù)樣本
4,最好擁有相關游戲開發(fā)的經驗或游戲系統(tǒng)的深入了解
好,下面是具體的例子了:我首先會想起的正是《魔獸世界》(以下簡稱為 WOW),而且是 60 級年代的,最有趣的那個 WOW。
那個時候,整個艾澤拉斯大陸的玩家還沉浸在“我操這個游戲好屌”的情緒中,開發(fā)方也極少透露出和游戲相關的各種數(shù)據(jù),但是仍然有大量的玩家在探求數(shù)據(jù)系統(tǒng)的奧秘,試圖探求黑盒的內部,并且取得了輝煌的結果,更棒的是,他們的結果都后來直接或間接地被證明是正確的。
第一個故事:
骰子和百分比之桌(Attack table)——這個問題爭論之久涵蓋了整個 60 時代,焦點是說,一次普通的攻擊可能造成命中,暴擊,閃避,招架,格擋,碾壓,偏斜還有未命中等等不同的結果——魔獸世界為了凸顯即時戰(zhàn)斗的多樣話和不可預知結果的特性,在一個平砍上就做了這么多的文章。這些數(shù)據(jù)各自被命中率,暴擊率,閃避率,招架率,格擋率(均為百分比數(shù)據(jù))和等級差影響,那么這一大堆數(shù)字應該看哪個,數(shù)學預期到底是怎樣的呢?
艾澤拉斯的民科數(shù)學家們,已經因為分成了兩個陣營分明的派系,各自有不同的說法:
多次骰子派認為,每個百分比都是一個獨立的 100% 中的占比;結果的出現(xiàn)是先用隨機數(shù)決定是否命中,再用隨機數(shù)決定是否招架,再用一次隨機數(shù)決定是否暴擊……
單次骰子派即認為,所有百分比都是同一個 100% 中的占比,一次骰子決定結果
但是后者比較容易遭受質疑的是,顯然某些極端情況下,這些百分比的數(shù)值之和已經遠大于 100 了,因此看起來這個算法就不能成立了
直到官方藍色帖子發(fā)布:
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 制算法——也就是當各種攻防雙方各種非命中數(shù)據(jù)上升時,就好像向一個桌子上擺入更多的杯子,當杯子多到裝不下的時候,名叫普通命中的那種被率先擠出去。
接下來的一大串巨量 combat log 襲來,大量數(shù)據(jù)證明了這個算法是符合實際情況的,這就很好的解釋了大部分現(xiàn)象;其次,部分實驗者又用用等級差和裝備差,以及利用各種技能產生的極端數(shù)據(jù),又一一驗證了這個桌上被擠出去的優(yōu)先順序列。
而 elitistjerks 的 Vulajin,一位深思熟慮的盜賊,對于這一結果在物理傷害技能在 PVP 方面的表現(xiàn)存疑,通過超過 50 天,數(shù)萬次的背刺試驗,得到了技能傷害是獨立于平砍的計算方式,是兩次骰子的形式來決定結果的結論:Backstab: Two Rolls?
到了 70 年代,elitistjerks 的 Lactose,一個疑心病很重的獵人,對于獵人的遠程物理攻擊是否遵循 Attack Table 的一次骰子方式進行了驗證,用豪華裝備加上極端測試環(huán)境,積攢了數(shù)千行有效 combat log,統(tǒng)計并再次驗證了遠程攻擊也完全遵循 Attack table 的結果。
到此,這個復雜的問題得到了圓滿的解決,而之后的 WOW 版本中,更通過減少了碾壓和偏斜的發(fā)生,進一步簡化了平砍的 Table 相關算法:顯然從開發(fā)者的角度評估,如果能夠實現(xiàn)相似的結果,顯然一次骰子的算法,要高效于多次骰子,但如果沒有確實的公式,算法和規(guī)律加以驗證,那么終究難以具有足夠的說服力。
第二個故事:
道具(裝備)哪家強?(Item level)——這個問題更是伴隨了 WOW 多半游戲歷程,直到”裝等“概念已經深入人心,成為普及觀念,也成為衡量一個玩家價值的直接標準(從某種意義上講我并不喜歡這點)的時候,”兩件不同的裝備,究竟哪一件更好“這個問題,才基本上不再有人爭論。
但在游戲的早期,大家對裝備的概念只有紫的比藍的好,藍的比綠的好;到了 60 級中后期,Raid 開始普及紫裝的時候,問題就出來了,同樣是“60 級”的紫裝,到底哪個會更好呢?或者“搶了人女朋友還要不要搶龍人盾呢?”
在 Addon(各種插件)開放的同時,WOW 也提供了大量的 API 給開發(fā)者調用,其中關于道具,可以取得一個叫做 Item level,也就是物品等級的值,但是這個值,普通玩家不能看到(Patch 3.2 之前),只能通過“物品使用等級”來判斷,但是問題如上,到了滿級就看不出哪個更屌了——從 60-95 的史詩裝備,都標注為“最低使用等級:60”。
對應的譯文在這里:[翻譯]物品等級機制
Hyzenthlei 一位牛頭人薩滿,自己琢磨啊計算啊,得到了一個公式
方程
下面是經過對 WOW 物品生成的規(guī)則進行了很多方程的嘗試后得出的結論:
ItemValue = [(StatValueX*StatModX)^1.5+(StatValueY*StatModY)^1.5+ …]^(2/3)/100 (X,Y 代表屬性的數(shù)值,^是指數(shù))
在這個方程里你要注意到:
1)它很簡單(我害怕那些復雜到搞笑的東西),但并非象所有屬性相加那么簡單。這意味著物品平衡并非要用一些亂七八糟極為復雜的東西,一些簡單的數(shù)值就能描繪出這種平衡的方法。
2)每個屬性在公式中的表現(xiàn)都是他本身的 1.5 次方。這樣它不會增長得太快,但又可以更好地平衡超高的單獨屬性。舉個例子,一件物品可以有 +29 力量或者 +18/19 力量 / 耐力,這兩種情況下物品的 ItemValue 大致上相等(數(shù)值足夠相近到同等 ilvl 的程度)。
3)把這些屬性的 1.5 次方加起來以后得出的值再化為它本身的 2/3 次方,這能使 ItemValue 不會螺旋型上升。經過這些改變之后,物品的 ItemValue 將基于 ilvl 線性上升。
嚴格來說我看到“螺旋形上升”就已經想不明白是怎么個意思了,但是,這一條 Item Value(簡寫為 IV 清晰的解釋了道具等級,道具帶來的屬性提升,屬性的價值,這就意味著,除了極少數(shù)明顯數(shù)值錯誤的道具之外,對于”我應該如何選擇道具,能夠使自己的數(shù)值成長更多“這個問題的答案已經非常清晰了:獲得 ILV,并計算出他的價值就是了。
我在 60 年代末期,大家還不知道 ILV 是什么概念的時候,就做了一個 addon,核心公式和界面都是抄的,但是增加了幾個實用方便的功能:
1,自動觀察每一個視野內的玩家,記錄他們的 IV 總值,并存在本地,查詢的時候可以進行排名
2,自動觀察隊友,一鍵生成一個 IV 總值列表合計
3,在裝備對比的時候直接顯示 IV 和 IV 差值
其中 1 只要把號在主城掛幾個小時,基本就能掌握服務器平均 raid 進度,而第二個功能,在 60 級末期剛剛開始有 20 人野團的時候,這玩意能一下判斷出整個團隊的硬件狀況;第三個則是省了你琢磨換還是不換的問題。
第三個故事:
OT 到底該怨誰,神秘的仇恨系統(tǒng)(Threat)——這曾經是最讓每一個 Raid Leader 頭痛的問題,到底仇恨是個什么機制,為什么有時候風平浪靜,有時候 OT 一波接一波。
相對于前幾個問題,你至少還能看到黑箱輸入的所有數(shù)據(jù)和輸出數(shù)據(jù);而仇恨值我們即無法直觀看到輸入數(shù)據(jù),輸出數(shù)據(jù)也只有一個——OT 還是沒有 OT。
因此,這個反推的難度要高太多了,直到整個 60 年代即將結束的時候,Kenco's research on threat這篇帖子的發(fā)布,才宣告仇恨系統(tǒng)的面紗已經被完全揭下。
作者 Kenco 和幾個朋友,建立了一個簡單的設想,即普通的平砍傷害 = 仇恨增加,在這個基礎上,測出了著名的 0.5(治療有效值的 0.5 倍相當于產生仇恨),1.1/1.3 等幾個極為關鍵的數(shù)值(當某個單位的仇恨值超過當前目標,近戰(zhàn)為 1.1,遠程為 1.3 倍時,則發(fā)生 OT),嘲諷的工作原理(瞬間獲得相同于最高仇恨目標的等量仇恨,并強制目標轉向)等等,加上對極為含糊的仇恨數(shù)據(jù)描述(產生“大量”“額外的”“較低的”仇恨)作出了數(shù)據(jù)測評,使得玩家頭一次有一種撥云見日的感覺。
在那之后的一段時間內,各種 Tank 職業(yè)對于如何制造仇恨的技巧大幅增加,而 DPS 們也在如何不 OT 的情況下盡可能增加輸出有了良好的理解。
這一直接影響就是到 70 年代開荒卡拉贊時代,仇恨插件就已經普及,控制仇恨的難度對于 Raid leader 就是件直觀明白的工作了:“那個暗牧少用震爆,馬上 OT 了!”。
仇恨系統(tǒng)是 WOW 從 Ever Quest 借鑒并沿襲最為理想的設定之一,其黑箱程度如上所述,在各個系統(tǒng)中也是最高,但仍然被破解了。
在整個 WOW 的游戲歷程當中,類似的情況非常多,例如護甲的加值和減傷效果的推演,怪物和玩家之間的 Arrgo 關系的等等
既然題主還問了“其他公式”,我們就再講兩個 WOW 以外的故事
第四個故事:
誰有利,誰不利——格斗游戲發(fā)展到現(xiàn)在階段,最大的問題不是反應夠快不夠快,連招練得是不是熟,而是對策是否豐富,而對策是否豐富完全依賴于你對每個角色的數(shù)據(jù)掌握是怎樣的——
不,不是這些,和三圍年齡愛吃什么沒關系,是你需要牢記一大張數(shù)據(jù)表,我們稱之為 Frame Data 幀數(shù)數(shù)據(jù),這個數(shù)據(jù)中最重要的數(shù)據(jù)是——有利和不利。
而(硬直差)有利不利翻譯過來就是“在你打了我一下,我防住了 / 我挨打了”的情況發(fā)生后,誰可以先動的數(shù)據(jù),這個數(shù)據(jù)決定了先發(fā)制人還是后發(fā)被人制,可以說了解硬直差的人在實戰(zhàn)中將有巨大的優(yōu)勢,壓制,強擇,確反都靠它了!
我們強調一下:這個數(shù)據(jù)表只有一個角色全表的 1/3 長,每個角色的數(shù)據(jù)條數(shù)在 70-120 不等,每條至少記下來發(fā)生,硬直,命中硬直差和防御硬直差和傷害值吧 5 條吧,這樣每個角色只需要大概其記 400-600 個數(shù)據(jù),某些不常用可能不用特別記,平均算 200 個吧,街霸 4 這樣 40 來個角色的,需要記的總數(shù)據(jù)可能也就一萬不到,全數(shù)據(jù)則在兩萬條上下)
而在早年,官方沒有提供這種數(shù)據(jù)的時候,怎辦呢……我們的玩家以有些老土的方式,完成了人肉測量:選擇兩個(起跳速度)相同的角色,你踢我一下,我防住了,然后大家都拉住上,這樣大家都會在硬直結束的時候跳起來,然后把這段情況錄下來,用視頻工具逐幀播放:
根據(jù)兩個人的跳躍高度差,就可以反推出幀數(shù)差了,這就是人肉 frame data 的來歷。
你也知道需要多少數(shù)據(jù)量,所以請想想看這個工作是如何完成的,那就是不可思議的頑強毅力。