如何盡量精確反向網遊中的數值?

為了更好的理解熱門網遊中的數值設計,最近在進行網遊數值反向解析工程,有些系統中的數值設計思路比較好理解,就能推算出數值公式。但是像戰鬥系統中的傷害公式因為有很多變種,反向起來比較困難,請問大神們有沒有好的方法能夠反向出傷害公式?最好以實際網遊解析範例來說明,非常感謝!


(發現知乎是可以用tex的,更新一下格式)

平時玩玩小遊戲rpg什麼的,非玩家,不是搞軟體設計的,也不清楚遊戲設計。只是偶爾看到這個題,感覺不是那麼難。

一句話來回答就是做線性回歸

我按照我的理解,把題主的問題重複一遍。

假設一個遊戲里主角的攻擊力輸出公式如下:

輸出=0.9*劍的攻擊力+ 0.45*腰帶寶石法力+0.35*鞋子速度

題主想反向出0.9,0.45,0.35這三個數值是么?

我再用數學語言重複一遍問題

y=eta_1x_1+eta_2x_2+eta_3x_3

已知:

攻擊輸出:y

劍的攻擊力: x_1

腰帶寶石法力:x_2

鞋子速度:x_3

求:

x_1所佔輸出的權重:eta_1

x_2所佔輸出的權重:eta_2

x_3所佔輸出的權重:eta_3

如果是這樣,完全可以解。

這就是一個典型的線性回歸問題。

題主要做這三步工作:

第一步就是要設計你的x_1,x_2,x_3,即設計你的攻擊輸出y到底和什麼有關。這裡你可以利用遊戲存檔中人物和裝備所有屬性數值作為你的x。假設一個小遊戲的有p個屬性,那麼你就有x_1,x_2,ldots,x_p。注意,這些數值是你可以觀察到和採集到的。也就是下面提到的第二步。

第二步就是採集數據。需要採集的是x_1,x_2,ldots,x_p和對應的y

你可以打一下怪,記錄一下y值和當時的x值,為y_1x_{11},x_{12},ldots,x_{1p}

然後換個劍或是換個鞋什麼的,這時你的x值變了。再打一下怪,記錄一下y值和當時的x值,為y_2x_{21},x_{22},ldots,x_{2p}。如此一直記錄下去。如果你有p個屬性,則至少記錄p次,多多益善。

第三歩就是計算。比如說你記錄了n次,那麼現在你的yx應該長這個樣子。

你要求的是那p個屬性分別對應的eta

簡潔點寫成矩陣和向量的形式,就是這樣

其中epsilon是一個高斯雜訊項。是因為以下兩點考慮

  • 你可能無法想到所有相關屬性;

  • 遊戲本身的攻擊輸出含有一定隨機性(但注意,這個epsilon只能描述正態分布的雜訊)。

至此,我們已知了mathbf{y},mathbf{X}要求eta, 其解為

就可以了。以上幾個公式圖片來自於wiki,懶得敲了。

最後,提幾個我能想到的問題:

  • 如果輸出公式跟1000多項人物屬性有關怎麼辦?

    一樣做。只不過多採集點數據。但我覺得一般遊戲不會這麼設計吧。。。不懂~
  • 如果你覺得輸出公式跟1000多項人物屬性有關,但實際只跟3個屬性有關怎麼辦?

    一樣做。只不過這時候求出的eta在其餘的997項所對應值會很小很小,很貼近於0。另一種比較嚴密的方法,就是在eta上加一些ell_1 regularization,使得學出來的eta非常稀疏(即大部分都為0)。
  • 怎麼驗證學到的公式是否準確?

    一樣做。只不過把你採集到的數據分成兩份。一份用來求eta, 另一份用來驗證你的輸出公式和真正的遊戲輸出是否貼近。
  • 如果遊戲的輸出公式是非線性的怎麼辦?

    則上面的方法不適用。你需要用非線性回歸的模型。一般來說,你反向出的模型會比較複雜,你需要採集的數據也會更多。但我得遊戲一般不會用非線性的輸出公式吧。。。不懂~

希望對題主有幫助。


-

謝邀

反扒為的不是公式,為的是通過反推達到目標效果。

注意,盡量不要去翻「設計目的」這種東西,因為「設計目的」要看單獨系統在整個遊戲框架中的整體作用,對遊戲了解不夠很容易誤入歧途,所以只看效果和實現途徑,少做「動機揣測」。

反扒本來就是個性價比極低的活,反扒的目的就是把設計效果具象化,反推達成優良感受的路徑

一般路線是「得到優良感受 → 有針對性地分析部分數值和公式 → 從感受和數值反推優良感受的達成方式」

有一說一,盡量精確地反扒數值和公式可以讓你更精確地獲取目標遊戲的優良體驗達成方式,更有助於提高個人的數學能力,新手階段有時間的話多玩一玩還是不錯的,但過了新手期就算了。

1,可見數值取樣:

面板上的靜態可見數值,是反扒數值的第一步,也是最容易的一步。

一般採樣在十幾次之後,就可以excel加趨勢線擬合了。

擬合過後再採樣幾次驗證一下。需要注意的是不是所有數值全是一個函數下來的,要麼是個反算數值(例如經驗的先有產出後有上限,數值上不容易看出函數關係),要麼人家是分段函數,你採樣那一段過了人家函數變掉了。

這個也需要你對數值敏感一些,如果發現感受上和之前不一樣了再回過頭來擬合一次。

如果你體驗的是比較有名的遊戲,網上會有很多攻略有你想要的數值,偷懶可以拿來一用。

2,參數(中間數值)還原

擬合完畢以後你得到的一般是一堆很亂的公式。

如果遊戲結構比較簡單的話,你是可以試著推出公式中參數來源的。

這步的意義是「辨識一個數值的影響因素」

3,反推公式

我反推公式比較偷懶,基本是「推完公式性能就完事」,方法更偷懶,是「往經典模型上試」

因為遊戲中的戰鬥數值都亮在外面,它是玩家追求的一個標度。

玩家不會去反推公式,但他會對比效果。這個效果不直觀或影響因素太多,會導致追求不明確,不利遊戲留存和收費。

需要注意的是,由於反推公式時間長且回報率低,你從中得到的有效信息還是一個個的性能點,數值中有離散數值會讓你的反推驗證難度加大,但中間一旦有未能發現的錯誤則可能讓自己誤入歧途,所以這裡要謹慎。

反推性能,我的方法一般是「描線法」

舉個栗子:

一個回合制遊戲中防禦的性能

1,把自己的防禦降下來,一般最少降到攻擊力的5%以下。讓固定無數值影響特效(只會普攻)的怪物攻擊自己,計數10次取平均

2,把自己的防禦加到剛才的兩倍,四倍,六倍,八倍,重複1(其實就是不可見數值採樣啦),重複1過程

3,把得到的傷害值寫在表上,畫圖,擬合出線,看其數理關係。

4,角色等級提升10級,重複1-3。

5,攻防互換執行1-4

1-4中,不同等級下攻防線性關係,即防禦與免傷點數在任意等級下都是相同的相關形式,那麼一般是減法公式無疑。而且一般來說,如果純回合制遊戲(非即時回合),優先往減法公式上靠雖然是經驗主義了一點,但蒙中概率一般會高一些。

1-5中,如果防禦不變的情況下攻擊改變,測出的免傷百分比在任意等級下相關形式相同,那麼一般就是乘法公式了。一般ARPG和即時回合制遊戲用乘法公式多一些。不過相比之下,乘法公式的情況通常更複雜一些,因為減法公式公式化簡到最後一般就是防禦點數乘一個參數加一個偏移值,但乘法公式會有線性,指數,對數外加各種偏移值的情況。

4,從數值和感受反推感受路徑

需要再強調一遍的是,分析最終得到的結論一定不能是「這裡這麼設計的目的是什麼」,而是「這裡是如何實現這樣的優良感受的」

這點來說,比較考驗人的信息分析能力和邏輯能力。

說明因果關係不但需要實驗,而且需要對比,單體實驗是不可以直接下結論的,「孤證不立」

「數值 → 過程 → 感受」每步證明不必寫在紙上,但要在心裡過一遍。

分析多了,這個分析過程的時間會縮短,但精確度會提升。

這時候只要精確的感受和對過程的體驗就可以快速得出結論並指導自己的設計了。

PS:太長時間不反推了,寫得有點碎,抱歉。有什麼疑問我們可以評論區討論哈。

-


就算讓你拿到原公式都沒用意義。

數值的意義根本不是公式、表格,而是背後的設計目的。

而設計目的往往是玩法所處環境下的選擇和針對性。

說得很泛,不過如果你能明白應該就明白了。


推薦閱讀:

如何評價《夢幻西遊》手游對於經濟系統的控制?
怎樣從「遊戲設計」的角度玩遊戲?
為什麼在顯卡處理能力低下的時代沒有誕生Low Poly低多邊形風格的遊戲作品?
在設計遊戲時,如何避免陷入具體執行細節中而忽略了整體設計?

TAG:遊戲 | 遊戲設計 | 遊戲開發 | 手機遊戲 | 遊戲策劃 |