戰鬥數值新手入門指北:MOBA基礎及裝備篇
序言:本篇分享僅為拋磚引玉的個人思路分享,該系列內容主要目標是幫助0數值基礎新手,從最底層的視角,學習以TTK為錨點,逐漸做加法搭建起整個MOBA英雄戰鬥數值框架的方法和流程,整體內容遵循極簡主義,旨在分享一種推導思路,並非絕對正確的定理或規範,旨在啟蒙。
基礎篇
一、戰鬥體驗核心影響要素的設定
a. TTK
TTK:Time To Kill的縮寫,顧名思義,擊殺所需時間,玩家作為攻擊方對一次戰鬥體驗長短感知的核心要素。
個人認為標準TTK的設定除了與市面上主流產品培養出的玩家習慣以外,還與一次戰鬥完整不拖沓的輸出迴圈表演時長正相關,例如常見的3技能/4技能MOBA,TTK與技能疊加普攻的輸出迴圈接近會在戰鬥體驗上顯得行雲流水,TTK顯著短於完整的輸出迴圈則容易讓人感覺意猶未盡(我還沒打完一套你怎麼就倒了,So Sad),而TTK顯著高於完整的輸出迴圈則意味著將產生很長一段要靠平A補傷害的垃圾時間。鄙人認為多樣性對抗產生的TTK變長或者變短都是其他更高價值目標達成導致的結果,而非底層目標。
b. RTK
RTK:Round To Kill 的縮寫,也就是擊殺/死亡所需要的回合數,在同樣的TTK下,RTK也是影響玩家戰鬥體驗長短感知的重要要素。
試想一下,同樣是3s的TTK,在0/1.5/3s共攻擊3次完成擊殺和在0/0.5/1/1.5/2/2.5/3s共攻擊7次完成擊殺會是完全一樣的戰鬥體驗嗎?
除開對體驗感知的影響外,RTK結合TTK本質上決定了戰鬥頻率,同時也決定了同戰力對抗下先手優勢的大小(可粗略看作約等於1/RTK)。
c. 血量&傷害數值量級
透過前述TTK和RTK的設定,本質上也就是敲定了攻血比(TTK=有效生命值/有效DPS),也就是傷害和血量的比值。
傷害和血量的同時放大或縮小並不影響TTK和RTK的核心目標達成,但不可否認也依然會對戰鬥體驗造成些微差異影響,那麼讓我們稍微對比下不同數值量級的優劣勢。
i. 3位數血量+2位數傷害
優勢:由於國內玩家義務教育階段相對紮實的2位數口算能力,此數量級利於精準的傷害的加和計算,對戰鬥結果預測和戰前決策判斷的精準性都有比較大的Buff,會帶來更強的競技性。
劣勢:數量級較小的傷害數值導致了數值投放的顆粒度不夠細,最小顆粒度的影響比例過大,投放顆粒度大於1%,任何調整或者投放帶來的影響和波動也會被放大。
ii. 5位數血量+4位數傷害
優勢:與上述數量級正好相反,較大的數量級帶來了更加細的投放顆粒度,使得任何調整或者投放都可以更加的精細;除此之外4位數的傷害跳字相比2位數的傷害跳字也會增加一定的視覺衝擊,一個字就是爽!
劣勢:4位數的計算量顯著高於2位數的計算,這導致對戰鬥結果居於和站前決策判斷的精準性都因為Debuff而降低;但也因為如此,計算精準性的降低也意味著不計算和計算的玩家差距被縮小,隨機性和娛樂性都獲得一定提升,所以在特定使用者目標或者玩法導向下,此劣勢不一定是缺點。
iii. 4位數血量+3位數傷害
上述兩種數量級之間的中性選擇,優劣勢都會被縮小,更加的中庸也更加的普適,3——4位數的數值計算對希望精進傷害計算預測精準性的玩家也有足夠的可行性和提升空間。
iv. 綜上所述
當前業內產品在單局成長下,數值量級通常都橫跨了2個數量級,都透過前期小數值後期大數值,既保障了前期傷害計算和戰前決策判斷的精準性來提升競技性,也保證了後期成長數值投放的顆粒度有足夠的精度以及更強的成長正反饋。
DOTA2/LOL:前期3位數血量+2——3位數傷害,後期4位數血量+3——4位數傷害(除極端情況)。
王者榮耀:前期4位數血量+3位數傷害,後期4——5位數血量+4位數傷害(除極端情況)。
d. 總結
戰鬥體驗感知的核心在於我們對戰鬥標準TTK、RTK,以及血量&傷害數量級的設定,長TTK還是短TTK,大數值還是小數值,就能從數值層面帶來不小的基礎戰鬥體驗差異
二、傷害公式的設定
雖然近年來大部分PVP帶生存能力成長的遊戲都很有共識的使用除法減傷公式的選型,但因為本文旨在新手引導,還是稍微一下個人對於減法減傷公式和除法減傷公式的特性的理解。
a. 減法減傷公式
定義:受擊方的防禦屬性會直接透過減法來降低攻擊方造成的傷害,類似Damage=Attack-Defense*k,就像是攻擊方和受擊方在拔河,比拼攻方攻擊力和受擊方防禦力的大小,防禦屬性的提升價值會邊際遞增,在和攻擊力持平時達到峰值,參考下圖:
優勢:減法公式下防禦屬性的成長正反饋強烈(從破防到不破防),能促使玩家對防禦屬性產生比較強的追求目標和意願,以求達到PVP中的絕對優勢和萬人敵效果,常見於高付費ARPU型MMORPG,例如當年的征途,能透過多人PVP下的目標塑造促進數值養成付費。
劣勢:在單局型公平PVP的體系下控制防禦屬性的投放範圍閾值則會降低養成的自由度,從而犧牲玩法多樣性;不控制防禦屬性的投放範圍閾值則會導致TTK在自由養成下崩潰。
b. 除法減傷公式
定義:受擊方的防禦屬性會透過除法演算法先計算出一個減傷率再帶入傷害計算來降低攻擊方造成的傷害,類似ReduceDamageRatio=Defense/(Defense+k)
優勢:除法公式下防禦屬性對有效生命值的提升和TTK的提升穩定,對設計者而言屬性價值量化簡單且精準,平衡性和TTK更容易把控。
劣勢:除法公式由於防禦對減傷的作用需要轉化為減傷率來計算,所以對玩家無論是理解和精準計算的難度還是減傷率的資訊觸達都會帶來額外的負擔,但瑕不掩瑜,基於單局型公平PVP還是除法公式更為適合。
三、戰鬥數值多樣性的擴充
透過前面兩步,我們先嚐試對涉及到的引數先做點簡單的設定,便於對當前數值設定所處的階段有一個直觀的瞭解,也順便看看當前設定下英雄戰鬥數值的多樣性如何(疊個甲,任何設定都只是服務於初期框架搭建工作的開啟,並不是完全一成不變的,隨著邊做邊發現問題,核心要素的設定是需要動態調整的)。
在滿足上述設定的前提下,嘗試對具備1V1平衡性的英雄數值屬性模板進行粗略的多樣性設定,參考如下 :
如上圖所見,在當前設定下,英雄數值已經具備了一定的多樣性(標準英雄可視為戰士英雄的原型,英雄1——3可視為坦克英雄的原型,英雄4——6可視為刺客等物理輸出英雄的原型)但可供提供差異化體驗的模型捉襟見肘,那麼讓我們來探尋一下如何進一步提升戰鬥數值的多樣性,讓整個數值框架豐富起來。
聊到戰鬥數值擴充多樣性,其本質是透過基於既定TTK對傷害和血量進行數值維度的拆分解構,提升能差異化投放數值的排列組合數量
a. 傷害能力數值維度拆分
- 當前的設定傷害由攻擊和頻率來構成,首先可以從頻率拆分出攻擊速度,同樣的DPS下透過攻擊和頻率的差異化分配,就能擴充出標速標傷,快速低傷和慢速高傷等等多種新的分支 。備註:在穩定的TTK下,攻擊和攻擊速度可以在保證DPS不變的情況下互相轉化(DPS=攻擊*攻擊頻率);舉個例子就是,其他屬性一致,攻擊100,攻擊頻率1/s的英雄A和攻擊200,攻擊頻率0.5/s(2秒1次)的英雄B在DPS上是完全一致的。
- 其次可以引入輸出的波動,對穩定的攻擊拆分出暴擊率和暴擊傷害率,同樣的頻率和DPS下就擴充出了標傷標準暴擊率標準,高傷低暴擊率低暴擊傷害率,低傷高暴擊率高暴擊傷害率等等多種新的分支。備註:攻擊和暴擊率/暴擊傷害率可以在保證傷害期望不變的情況下互相轉化(傷害期望=不暴擊機率*普通傷害+暴擊機率*暴擊傷害率*普通傷害),舉個例子就是,攻擊頻率不變,0暴擊率100傷害,和25%暴擊率200%暴擊傷害率80傷害在4回合下傷害期望同為400,前者是100*4,後者是80*3+80*2*1;
- 此外還可以透過引入和防禦屬性的對抗,新增平均收益期望上可以和攻擊拉平,但針對高防和低防目標產生不同收益波動的防禦穿透和防禦穿透率。備註:防禦穿透和防禦穿透率,因為在穩定TTK下防禦和生命值可以互相轉化的,生命值和攻擊也是可以互相轉化的,1攻擊=標準TTK點生命值,而防禦穿透/穿透率和防禦是抵消關係,所以最終攻擊和防禦穿透/穿透率可以透過生命值作為價值錨來二次轉化。舉個例子就是,在前置設定下受擊方300防禦=50%減傷,200防禦=40%減傷,那麼靜態下標準模型100防禦穿透或者1/3護甲穿透率都能讓透過受擊方減傷比例降低使DPS從50%提升到60%,相當於提升到120%,和攻擊力提升20%的收益是一致的
b. 生存能力數值維度拆分
- 除了生命值和防禦外,首先可以從生命值拆分出生命回覆,同樣的血量可以擴充出高生命值低迴復,標準生命標準回覆和低生命高回覆等等多種新的分支。備註:在穩定TTK下生命值和生命回覆可以互相轉化,1生命恢復/s=(標準TTK-1)點生命值
- 其次可以類似輸出數值中暴擊率的思路,引入生存能力的波動,可以對穩定的血量拆分出閃避率,同樣的血量下也就擴充出了標準血量標準閃避率,高血量低閃避率,低血量高閃避率等等多種新的分支。備註:血量和閃避率在穩定的TTK下是可以互相轉化,因為有效生命值=生命值*(1/(1-減傷率),所以生命值和減傷率是可以直接轉化的,而20%閃避率可以看作和20%減傷率價值期望相同,本質上都是受到5次攻擊,實際上期望只會受到相當於4次攻擊的傷害。
- 此外還可以透過引入和生命值的對抗,增加針對高血量和低血量產生不同收益波動的進攻向生存屬性生命偷取(吸血),給輸出向英雄提供新的生存能力分支選擇。備註:戰力相同的靜態情況下,本質上百分比生命偷取相當於自身增加了對方同樣百分比的生命,所以生命偷取和生命在標準血量和TTK下是可以互相轉換的,例如1000血量200DPS的英雄和800血量200DPS25%吸血的英雄戰力是接近的,雙方在1——5秒對A後的血量分別是:800-650;600,500;400,350;200,200;0,0
c. 總結
至此,透過以上3步,我們就建立了一個滿足核心要素設定,基於純平A對抗下初具多樣性和擴充性的MOBA戰鬥屬性的簡單數值框架的可行性論證。
同時,也得到了基於靜態標準模型下不同靜態價值屬性的價值比(防禦穿透/防禦穿透率的收益期望取決於最終整體模型的防禦投放,此處先略過)。
上圖可見以上標準模板的變體之間是自平衡的,所以可以基於標準模型的變體往下推導屬性之間的價值比。
至此最核心也最基礎的部分到這裡就結束了,歡迎碰巧看到此文又對數值感興趣的新同學看完提供反饋和行文建議,方便下一篇吸取經驗,加以改善。
裝備篇
書接上回,透過對戰鬥體驗核心要素的設定,傷害公式的設定,戰鬥數值多樣性的擴充,我們建立了一個基於純平A對抗下初具多樣性和擴充性的MOBA戰鬥屬性的簡單數值框架的可行性論證。同時,也得到了基於靜態標準模型下不同靜態價值屬性的價值比。那麼下面讓我們引入下一個部分——裝備模組。
五、裝備數值設定
a. 裝備的本質
裝備的本質有兩種不同的視角,但本質上是同源同理;既可以看作裝備是在基礎屬性數值的基礎上對屬性數值的膨脹擴充和增量投放,也可以看作是對總數值屬性的解構和再分配,本質上都需要先確定英雄基礎數值和裝備數值的佔比以及裝備總數量(決定單件裝備的價值分配),這裡為方便演示先暫定個2:1,4件裝備進行後續推導。
b. 裝備基礎數值設定
首先英雄的戰鬥力=有效生命值*有效dps,例如1000生命值200dps的英雄可以分2次1V1,戰鬥力和2位1000生命值100dps的英雄戰鬥力相當。在此前提下,1%有效生命值提升的價值=1%DPS提升的價值,所以基礎數值和裝備數值2:1,4件裝備可以看作能從每件裝備上能獲得單一屬性的極值應該剛好等同於25%有效生命值亦或者25%DPS提升所需的對應屬性投放。那麼讓我們先窮舉一下單屬性差異化達到25%戰力提升對應的數值,如下:
由此可推得在新的標準模板下,不同屬性的價值比如下:
這意味著單件裝備投放單一屬性的情況下:
300生命值=75防禦=60生命回覆/s=20%閃避率=25%生命偷取率=50攻擊=25%攻擊速度=200%暴擊傷害率下的25%暴擊率。
在此基礎上為了方便混合屬性的投放,我們還需要以每點生命值為1價值量為錨點,計算出其他屬性每點的價值量,也就是6(生命值的價值比)/其他屬性價值比,可以得到下表:
在此基礎上可以約看作,只要裝備投放的總屬性價值和為300,就符合前置的設計目標的投放比且裝備之間自平衡,如下圖:
一點小tips:因為生命回覆/s和受傷害之間的計算關係屬於減法演算法,在1V1,傷害波動較大的對抗模型下(例如坦克VS坦克)會導致TTK巨增,所以需要極其謹慎投放,通常當作點綴小額投放亦或者是作為下一塊要將的特性中有條件限制的投放。
另一點小tips:閃避因為會降低防禦屬性的價值,所以需要進行互斥投放,也需要謹慎控制投放總量,抑或用演算法取保證多件裝閃避疊加的結果;作為唯一特性投放,或像防禦減傷公式一樣做一層除法轉置(例如投放的是閃避值,閃避率=閃避值/(閃避值+K),或非線性疊加(例如30%閃避+30%閃避是ROLL兩次,閃避率是1-70%^2=51%)。
c. 裝備特性數值設定
當前MOBA品類都主要透過裝備的主動技能和唯一被動來投放特性和特性數值,本質上可以看作是在保證收益期望不變的情況下,對收益曲線穩定且收益覆蓋率100%的裝備,拆分出一部分價值再透過主技能限制覆蓋率或者被動技能限制機率的方式增加裝備的收益波動。
i. 裝備主動技能
通常裝備主動技能數值相關的核心引數有三個:
- 冷卻時間:影響從技能中獲得收益的機率和獲得收益次數的期望
- 效果數值:影響從技能中獲得的具體收益
- 效果持續時間數值:影響持續類技能獲得收益的覆蓋率
舉2個例子:
例一
某持續類主動裝備技能
冷卻時間:60s
效果:減少50%傷害
效果持續時間:4秒
那麼讓我們粗略計算一下這個主動技能的數值期望
首先冷卻時間60s,假設我們致死戰鬥的頻率預設是60s,則可以先粗略的看作這個技能每次戰鬥都會生效,也就是生效機率100%
其次效果為減少50%傷害,每減少50%傷害1s意味著TTK需要增加0.5秒,而持續4秒的效果時間意味著標準TTK需要從前篇的6秒提升至8秒,這意味著4秒的技能,效果覆蓋率為50%。
連起來看這個技能就是100%機率發生,持續時間覆蓋率50%,減少50%傷害的技能,對於標準戰鬥下的價值期望等同於100%機率發生,持續時間覆蓋率100%,減少25%傷害的技能(本質上就是常駐的防禦減傷)。
透過前篇的設定防禦減傷=防禦/(防禦+300)可推得,25%減傷需要的防禦是100,那麼可以看作這個技能的收益相當於100防禦*4防禦單點價值=400。
也就是我們在初始模型下可以看作附加防禦100的裝備A和附加0防禦附帶此主動裝備技能的裝備B在裝備價值上是平衡的,都是400價值。
簡單列個表進行驗算:
和上面的推演一致,在標準模型下,攜帶裝備A的英雄A和攜帶裝備B的英雄B在標準TTK下的滿血戰鬥,強度是完全一致的。
小tips:在實際情況下,因為主動裝備技能還附帶其他屬性,收益的計算還有其他因素導致變化,但為簡化推導過程和原理,所以省略了更復雜的情景。
例二
某即時傷害類主動裝備技能
冷卻時間:60s
效果:對範圍內目標造成200傷害
還是繼續粗略計算一下這個主動技能的數值期望。
首先同上冷卻時間60s,假設我們致死戰鬥的頻率預設是60s,依然可以先粗略的看作這個技能每次戰鬥都會生效,也就是生效機率100%。
其次效果為對範圍內目標造成200傷害,這裡包含了一個顯性數值傷害和隱性數值傷害範圍。顯性數值傷害200,在前篇標準TTK6秒,標準DPS200的設定下,意味著會減少1秒TTK(少一回合攻擊),價值與減少1秒TTK需要的攻擊力提升值對等。
也就是減少1秒TTK需要的額外血量200/(標準TTK6秒-需要減少的TTK1秒)=200/50=40攻擊力,可以看作這個技能的收益相當於40攻擊力*6攻擊力單點價值=240價值
隱性數值傷害範圍很難直接推導收益價值,本質上需要根據經驗推斷範圍和命中目標期望的關聯,上一步240價值是相對於一個生效目標的收益,最終次技能的收益期望還要用單目標收益期望*命中目標期望,而在沒有足夠的樣本資料和經驗輔助我們做判斷前,簡單拍一個係數就好(例如,85%機率命中1目標,10%機率命中2目標,5%機率命中3目標)那麼命中期望就是85%*1+10%*2+5%*3=1.2,此技能的最終價值則=240*1.2=288。
還是簡單拉個表進行驗算:
和上面的推演一致,再1V1的標準模型下,攜帶附加攻擊40裝備A的英雄A和攜帶附帶此主動技能裝備B的英雄B在標準TTK下的滿血戰鬥,強度是完全一致的。
大tips:隨著對遊戲玩法多樣性的擴充和探究,難免在未來會不斷出現一些價值難以準確量化的純機制性技能,例如LOL中的金身,因為影響技能收益的因素過多,TTK,TTK方差,技能冷卻等等等等,預期使用既複雜又難以保證精準性的數值模型量化,倒不如直接用二分法來快速收斂,推薦先定較低的標準價值,保證使用率(可以順便測試bug)和找到價值下限,然後再找到價值完全沒人用的價值上限,之後不斷用中間值探索,知道使用率和使用的資料收斂到期望的區間。
大tips二:因為裝備主動技能的價值受冷卻和效果兩者耦合結果影響,那麼同一標準價值的技能間存在長冷卻強效果和短冷卻弱效果兩種設計,前者的冷卻合理閾值和英雄的大招冷卻強相關(強效果的裝備主動技能,冷卻過長於常規英雄大招的冷卻會導致玩家為了對戰鬥勝率的追求而等CD降低戰鬥頻率,進而影響整個遊戲節奏),後者的冷卻合理閾值則與英雄的小技能冷卻強相關(短冷卻的主動裝備技能過短於常規英雄小技能的冷卻則會導致玩家操作負擔的增加,以及英雄技能組釋放的流暢性)。
ii. 裝備被動技能
通常裝備被動技能數值相關的主要引數也有:
- 冷卻時間:影響從技能中獲得收益的機率和獲得收益次數的期望
- 觸發條件:影響技能獲得收益的覆蓋率
- 效果數值:影響從技能中獲得的具體收益
本質上,在被動技能中,冷卻時間和觸發條件都可以限制從被動技能獲得收益次數的期望,而效果則影響收益的大小
舉個例子:
某傷害類被動技能
冷卻時間:0s
效果條件:每普攻4次
效果:下一次攻擊觸發額外200傷害
繼續粗略計算一下這個被動技能的數值期望,首先冷卻時間是0,意味著收益的頻率完全由觸發條件控制。
其次效果條件為每普攻4次,意味著在標準模型1/s的攻擊頻率下,每第5次攻擊會造成1次額外傷害。
結合效果數值下一次攻擊觸發額外200傷害,此被動技能相當於平均每次攻擊提升40額外傷害,價值與提升40攻擊完全一致,相當於此技能價值=40攻擊*6攻擊單點價值=240價值,也就意味著如果一件裝備需要投放此唯一被動,則需要從屬性中縮減相當於240價值的屬性投放。
小tips:因為在此被動技能的收益在實際當中會受到攻速提升而同步提升,所以假如此裝備是給高攻速英雄設計的則應該提高裝備的預期價值和價格(此篇暫不討論,待成長篇補充),例如此裝備是期望攻速至少50%以上才能收益持平,則此被動技能需要看作240*150%=360價值,投放此被動技能的裝備則需要從屬性中縮減相當於360價值的屬性投放。
來源:騰訊遊戲學堂
相關文章
- 桝田省治的JRPG戰鬥數值設計入門
- Flutter 入門指北(Part 2)之基礎部件Flutter
- Nginx入門到實戰(1)基礎篇Nginx
- Kafka基礎入門篇Kafka
- JS基礎入門篇( 一 )JS
- JS基礎入門篇(一)JS
- TypeScript入門指南(基礎篇)TypeScript
- 新手入門必備:kylin安裝教程介紹!
- TypeScript入門完全指南(基礎篇)TypeScript
- Dart 語言基礎入門篇Dart
- 入門MySQL——基礎語句篇MySql
- 一、Ansible基礎之入門篇
- Electron入門指北
- CICD 入門指北
- SourceGenerator入門指北
- JS基礎入門篇(十)—字串方法JS字串
- JS基礎入門篇(十八)—日期物件JS物件
- JS基礎入門篇(七)—運算子JS
- 格鬥遊戲新手入門 - 術語講解遊戲
- 新手入門前端,需要學習的基礎內容。前端
- Python 基礎(一):入門必備知識Python
- 0基礎入門 IT,該具備哪些技能?
- 遊戲戰鬥力數值研究(一)遊戲
- 備戰-Java 基礎Java
- 【WEB基礎】HTML & CSS 基礎入門(3)段落及文字WebHTMLCSS
- Pytest學習(一)- 入門及基礎
- (Python篇)零基礎入門第三篇Python
- .net 開源模板引擎jntemplate 實戰演習:基礎篇之入門
- JS基礎入門篇(十)— 陣列方法JS陣列
- WebSocket系列之基礎知識入門篇Web
- Arduino基礎入門篇15—隨機骰子UI隨機
- Electron 入門指北(二)
- Electron 入門指北(三)
- Electron 入門指北(一)
- 【Python入門】新手學Python可行嗎?需要什麼基礎?Python
- 遊戲數值乾貨:RPG戰鬥數值開源示範遊戲
- TypeScript基礎入門-變數宣告(一)TypeScript變數
- shell入門基礎&常見命令及用法