遊戲數值乾貨:RPG戰鬥數值開源示範
去年的時候我開源釋出了一個完整的遊戲文件,以excel為工具,構建遊戲的屬性、經濟、付費、生態模型,不需要程式美術把遊戲做出來,策劃直接驗證玩法。
現在我給這個專案打一個補丁,就是用數值模型構建一個RPG戰鬥玩法,並一步到位的生成直接可用的配置表。
在這個補丁專案裡,我選了差別很大的5個職業,演示了在電競遊戲的平衡性標準下,會變身的肉盾、AOE輸出、施加debuff控制節奏、召喚怪物以多打少、高輸出脆皮放風箏這些玩法是如何做到彼此平衡又在自己擅長的環境下發揮出自己的特點的。
如果把職業屬性的調整視為前端,那麼把調整完畢的屬性落實在角色、強化、裝備上就可以視為後端。前端玩法我是以MOBA類遊戲為參照物件,既有英雄間的單路對抗,也有英雄間的騷擾、團戰和追殺,英雄們的技能也是以這樣的遊戲玩法為依據設計的。
但是因為MOBA類市場也就能容下LOL、王者榮耀等幾款產品,而我希望這個專案能影響更多的產品,所以我把後端做成了一個MMO的玩法。每個職業都有100級,每10級可以更新一套裝備,有白綠藍紫金5個檔次的裝備,差的裝備只有1條屬性,好的裝備一件有5條屬性。
也就是說,如果你想做一個MOBA類的遊戲,你可以擷取專案的前端,參照其職業和技能設計,以5個最大差異化的職業為邊界,鋪開大量更為中庸的職業,並且給這套數值設計一套成長30分鐘的裝備和天賦,就是一個MOBA遊戲。
如果你想做一個MMO,前端只是給你一段質量比較高的職業屬性,你可以參照後端的流程把這段屬性分解到一個個屬性子系統裡。為了減小工作量,我沒有加入怪物屬性,僅有的2個是英雄召喚出來的怪物,所以這需要自己補上。之前的專案有如何設計怪物屬性,可以參考。
這個專案除了遊戲數值如何設計和調整的方法外,我認為最有價值的地方在於如何把玩法概括為數值模型的方法。我覺得我以前做得不好的一個很重要的原因就是對玩法的理解太膚淺,不能把複雜的玩法總結成簡單的設計指標,所以在設計和調整遊戲資料的時候就缺乏明確的目標,而沒有目標自然就談不上好的結果。所以下一章我會重點講解玩法的數值構建。
另外由於excel文件大量使用了程式碼自動生成中間資料和最終資料,所以可能會有人因為對excel公式程式碼不熟悉而不理解。但是這個講解起來比較繁瑣,我在之前的專案中已經講解過這裡就不重複了,如果有質疑可以自行驗算。我雖然不敢保證全篇一定沒有錯誤,但是我相信整體質量還是有保障的。
提取碼:n4ck
注意。本文後續內容需要下載excel文件並對照著閱讀。
二、玩法構建資料模型2.1、數值設計的難點
如果由程式定義好配置表並讓一個初學者去填,他肯定是可以填出來的,因為英雄的血量、攻擊等等屬性都很形象,只要有一定的遊戲基礎,就可以填的差不多。
但是有2件事是初學者很難做好的,1是成體系的填表,2是控制各個數值在遊戲中的最終效果。
一個遊戲不是填個屬性填個技能傷害就行了,它會升級、技能也會升級、會解鎖更多技能、全身上下會穿滿裝備,裝備有不同的檔次,每過一個等級段又會有新的一套裝備,還有強化淬鍊鑲嵌打造……如果有多個不同的職業還意味著有多條屬性發展方向。
這麼大的工程量,而且過程非常枯燥,很容易瞎填,比如說上一格填3,這一格填4,下一格填5,這種沒有任何設計指標,為了填完而填完的方式會在測試時暴露大量的問題,但你讓策劃頂著這麼枯燥的工作反覆改,很容易倦怠。
另一個問題是如果你想把遊戲做得好玩,就必須引入大量很難量化的東西。如果遊戲只是戰法牧站樁輸出,那遊戲的趣味性就很弱,但是如果我加入了衝鋒、嘲諷、無敵、隱身等等內容,那這些效果到底該折算成多少傷害才算是合理的呢?
還有像暴擊碾壓這樣的概率出現的傷害,如何量化和測試也是個問題。像抽卡那種簡單的功能都整出那麼多玄學,更不要說這種更抽象更缺乏標準的功能了。
如何成體系的填表以前說過我就不展開了,文件裡3張excel文件:技能規劃、屬性原型、配置表輸出都是按照自動生成資料的規範製作的,都是把機械枯燥的工作交給機器,人只要填重要引數並根據最終結果返回去調整引數就可以了。
2.2、流程
在講如何控制數值最終效果之前,我要先介紹一下屬性設計的基本流程。
1、概要的設計職業玩法
見技能規劃的職業設計A1C6,這裡先把想法寫出來就行,後面細化的時候有新想法可以再返回來改,這個做法均適用於後面的規劃性工作。
2、設計各個職業的每個技能
見技能規劃的職業設計A11F56。
3、設計玩家操作
見技能規劃的操作設計,這裡要確定英雄在殺死敵人之前該用哪些,以什麼順序使用這些技能以達到最大或者最穩的輸出。同時也要把CD時間、法力消耗、控制效果等等和操作順序有關的資料都確定。
4、設計戰鬥公式
見屬性原型的公式和參數列。
5、設計職業屬性
見屬性原型的屬性設計。
我這裡是按每10級一個節點全等級的屬性都填出來了。雖然我在A12J18設計了職業之間的屬性差異,但是屬性並不會嚴格按照這個參數列執行。在Y到AA列,我會每個職業選1個屬性進行微調。
6、填寫技能引數和技能升級表
見技能規劃的技能引數和技能升級表。這裡同樣是把全等級的技能資料填完。
7、對部分職業計算其真正的實戰屬性
見技能規劃的實戰屬性。
所謂真正的實戰屬性是指戰鬥中開啟某些buff使自己的戰時屬性比紙面屬性要高。例如我這裡力士有一個光環技能和一個變身技能,那麼力士真正的屬性就是在光環和變身綜合加成下達到的屬性。
8、構思每個職業之間戰鬥的策略、效果、把平衡性變成具體的設計指標
見技能規劃的職業PK規劃以及後面大量的 “某職業對某職業”的標籤頁。
到這裡準備工作就做完了,進入數值調整階段。
2.3、調整
先點開力士對力士標籤。
如圖,左上角是兩個職業PK時,根據右上角公式直接算出它們在各個等級段打出碾壓、暴擊、卸力、化解等特殊效果的概率。這些特殊效果的策劃規則我這裡就不展開了,很多MMO裡都有類似的功能,詳情可以檢視公式。
A19以後是10級之後每個等級段的PK模擬,之所以不模擬1級,是因為剛進遊戲很可能是劇情和任務密集的時候,很多功能都鎖著不開放,所以這個時候去做職業平衡沒有意義。10級之後技能已經學全,裝備已經穿滿,不論遊戲此時是否開放PK,起碼職業平衡的條件是成熟了。
每一個PK模擬都是一個模組,以A19J27為例,A20和B20分別填參戰攻方和守方的英雄ID。如果像力士這樣參戰有buff加成的,就是填它的實戰ID。例如這裡如果呼叫力士的模板屬性,就要填1010,但是如何加上天官賜福和天官下凡的buff,則要填圖中的11101。
A22到A25填的是攻方英雄戰鬥中使用的技能(如果攻守雙方是1個人,就用同一個模組就行)。D列和E列會把技能的操作耗時和當前英雄等級對應的技能等級檢索到,C列需要設計者填入或者自動計算出從開始到打死對手這段時間裡這些技能要使用多少次。
F到H列會自動計算出當前等級該英雄打出多少傷害。I列和J列是特殊效果對技能傷害的修正。I列填技能對傷害的修正,J列是碾壓暴擊等特殊效果的修正。
F26J27是傷害對彙總和傷害效果的展示。例如表中資料的含義是力士打另一個力士時,在31秒時間內總共打出26.56倍的物理攻擊,31倍的魔法攻擊,1218的技能傷害,這些攻擊扣除守方的防禦,總共打出5406的傷害,而力士的最大血量是5484,這個時候誰再打一下對方就死了。31秒時倍數為1.01,32秒時倍數為0.98,我會把戰鬥時間調整到最接近1的位置(如果是攻守方不是一個人,也可能會調到雙方倍數接近的時間)
這裡我再補充一點知識。美術把模型、動作、特效等等素材做好以後,程式會對這些素材進行控制。在遊戲引擎裡你能看見一些關鍵幀,這些關鍵幀是透明的,和模型動作重合的。這些關鍵幀會控制著英雄技能打出傷害,把人擊飛等等操作。
所以遊戲引擎也好,遊戲本身也好,都是這些動畫效果的即時播放。而我用excel做得這個模擬模組,從資料呼叫的角度來說,和遊戲程式呼叫配置表或者資料庫的資料,並按照戰鬥公式計算出結果的過程是一樣的;但是從資料統計的角度來說,我是統計加設計一段戰鬥過程的資料,這是和遊戲實時播放不同的。
力士一共5個技能,在這個模組裡使用到了4個,離子化是個逃命技能,開了這個技能自己也不能攻擊了,所以就沒在戰鬥模擬中使用這個技能;只要英雄ID使用了實戰ID,那麼天官賜福和天官下凡的技能效果就有了,其中天官賜福是被動技能,不需要操作,天官下凡是主動技能,起碼有個操作時間。因為力士是一個操作簡單的英雄,最高效的戰鬥策略就是開了變身和火焰呼吸衝上去打,所以力士的攻擊次數就是戰鬥時間減去開啟技能的時間後全除以普攻的攻擊間隔。
龍女比力士要複雜。龍女有2個位移技能,還有一個需要連續普通攻擊作為準備才能打出高傷害的大招,所以龍女和力士的戰鬥如下圖:
力士會被龍女拉開距離,而它又沒有快速突進的手段,只能一步一步走過去。這種位移我按照給定龍女技能的位移長度,折算成3.6秒,即力士的普攻和火焰呼吸的傷害都要扣除這段時間。
龍女的技能CD時間短,打力士耗時又長,所以技能釋放次數要把戰鬥時間和技能CD時間和操作時間做對比,算出真正的次數。普攻因為需要準備,所以分成2部分,2次初始普攻是固定的,而被龍威加成的龍威普攻則是總時間扣除其他技能時間後算出來的。
力士和龍女的玩法相對都是比較簡單的,而且力士是血量最高的英雄,龍女是單體輸出最高的英雄,先調這二者可以確定遊戲戰鬥的節奏。比如力士內戰的時間在30秒左右,龍女內戰在10秒左右,那麼這個遊戲的戰鬥節奏就在10秒到30秒之間。
夜叉是屬性設計的基準,所以把夜叉第3個引入調整,如下圖。
這裡有2個要點。
1是對英雄技能及其效果的設定要做得很細。
舉例來說,龍女有2個拉開距離的技能,1個是LOL裡薇恩的翻滾射擊,1個是爆裂箭(在箭落點把人炸開,實際就是LOL裡酒桶的大招)。這種位移對付不同的英雄效果是不同的。對力士,因為不管是力士的普攻還是火焰呼吸,都得近身才能造成傷害,那麼拉開距離就可以阻止力士輸出傷害(這時候它的效果比夜叉的眩暈還好用)。
但是對付夜叉的時候,因為夜叉有獵命這樣的突進技能,拉開距離夜叉馬上用個突進技能就又貼身了,所以這種位移就不起作用,所以在夜叉和龍女的對決裡,龍女的位移就不起作用。
龍女內戰的時候,因為雙方的射程是相同的,你拉開距離超出射程就都射不著,沒超出射程都能射著,所以這個時候加射程也沒有意義。
所以這種技能的效果是隨著敵人的不同而不同的,這需要設計者把這種情況都考慮到才行。
2是對英雄定位有合理的判斷。
平衡不一定就是一對一同時砍死對方。有的人是輔助,有的人是遠端,有的人專門剋制你的這個職業,那一對一單挑肯定會有輸有贏,所以關鍵是能在每個職業在戰鬥中發揮優勢和被剋制時,其戰鬥能力要量化到一個合理的範圍內。
比如說圖裡夜叉和龍女的戰鬥,夜叉是個切後排的英雄,它就是剋制龍女。夜叉打龍女要16秒,龍女打夜叉要21秒。但是這完全是夜叉的技能效果。夜叉輸出不高,血量也不厚,靠的是眩暈和無敵控制節奏,然後給對手下毒,一開始中毒傷害也不高,疊到很多層毒之後傷害才開始爆發。
那麼如果龍女有隊友幫忙拖住夜叉,龍女只管輸出的話,她12秒就可以殺死夜叉。所以龍女的戰鬥策略要做2份,1份是單獨面對夜叉時21-16被打敗的戰績,1份是在團戰中盡力輸出12秒就打死夜叉的戰績。
我認為21-16-12的戰績是合理的,符合一個後排輸出的英雄定位,那麼夜叉和龍女就依然是平衡的。
3個職業調完再加入修羅,讓修羅和已有4個職業各打一場,再之後調判官,讓它和已有5個職業各打一場,這樣5個職業都兩兩模擬戰鬥並調整過數值,那麼就可以說職業是平衡的。
就算有一些理解上的偏差,比如說我覺得21-16-12是合理的,這是一種基於經驗和個人偏好的主觀判斷,不同的人完全可能有不同的想法,比方說有人會覺得20-16-12或者一個別的比例才是合理的。不管誰的理解更準,起碼框架搭起來了,要調成什麼樣都是可以做到的。
像力士和龍女這樣的常規玩法,就是看模擬結果符合其定位就可以了,但是如果是自創玩法,則需要在模擬中確認其有效。
像夜叉的控制節奏用下毒來殺傷敵人,就是它的屬性不高,但模擬中確認和力士單挑都有殺死對方的機會,那就證明其玩法是有效的。而修羅的玩法更復雜一些,所以它的設計指標也就更復雜一些。
修羅是AOE傷害,這導致在它的攻擊範圍內每多一個敵人輸出的傷害就多一倍,所以總輸出肯定是它第一,那麼單挑就必然不能很強。但是這個職業又設計成一個越戰越強,靠損血和搶人頭積累殺意,用殺意抵消CD時間,爆發的時候不停的按鍵,不停的放技能,最後把所有人都帶走的玩法。
要保證這個玩法是有效的,我在對不同的敵人時採用的技能次數計算方式也不同。對陣龍女時是按照能積累11殺意額外打出3次貪狼刀法計算的,對陣力士是按23殺意,額外打出7次貪狼刀法計算的,這中間的差別就是要在戰鬥中不斷的收人頭才行。所以殺龍女的時候是一個人都不殺也能殺死龍女,這樣才能起步;殺到力士的時候是殺掉了4個人只剩下力士了,這個時候才能把它帶走。這種對不同人不同梯度的模擬是修羅玩法實現的保證。
判官的多對一是一個很有潛力的模擬方法,它不僅可以模擬召喚師和別人的戰鬥,還可以模擬不同職業團戰的效果。
對付召喚物有2種策略,一種是先殺小怪,再殺英雄,這是MMO裡打boss常用的策略;還有一種是先殺英雄,這兩種策略的關鍵在於輸出和血量的關係。MMO的boss戰你秒不掉boss,那就先去清小怪划算,如果你能秒掉boss,那就先殺boss划算。
所以別人和判官的戰鬥策略有2種,1種是修羅、力士、夜叉先殺英雄比較划算的策略,另一種是龍女和判官先殺小怪比較划算的策略。
修羅是靠AOE,打誰都是全打,力士的火焰呼吸是小範圍AOE,自己又能抗的比較久,所以先打英雄比較划算,夜叉是需要反覆對一個人攻擊才能疊加中毒,所以也是打英雄划算。夜叉龍女輸出高,可以快速先點掉一個小怪然後拉開距離,慢慢消耗對手。
所以我在判官對判官的N22Z32計算了一個小怪在各個職業打擊下的最大存活時間,然後把這個引數代入判官對各個職業戰鬥的模擬中。
由於判官比較強,所以給它設計了一些弱點,1個是小怪會給修羅攢殺意,所以修羅非常剋制判官,從模擬中可以看到小怪的輸出時間和存活時間被大大壓低。另一個弱點是判官的控制技能CD時間很長,所以模擬中往往會一邊模擬判官用鎮壓控制住對手自己這邊盡力輸出的一邊倒戰鬥,另一邊模擬判官沒有鎮壓,對手反而打的比判官好的戰鬥。
總的來說,這15個標籤頁的戰鬥模擬是基於這樣一種觀念:不管玩家的操作是怎麼千變萬化,不管你怎麼排列組合技能挖掘出不同的玩法策略,最終都會落實在哪個技能使用了幾次,打出多少傷害雙方的損血比是多少這樣的數值指標,事先想象出遊戲中最重要的操作玩法,就可以讓excel計算出這些數值指標,再根據這些指標返回去調整各種引數,最終確保你想象出的操作玩法是可行的,在戰鬥中既可以表現出職業的特點又能保持玩法的多樣性。
最後,補充2點我認為需要注意的地方。
1是戰鬥模擬時儘量以可測試的典型戰鬥為準。
這句話的意思是說避免用精確的概率去修正每個技能的傷害。我在每個戰鬥模擬標籤頁左上角都給出攻守雙方對打各個等級段碾壓暴擊等特殊效果出現的概率,在等級前期特殊效果的概率往往很低,可能打幾十次才會出現1次。
那麼對於那些整場戰鬥只使用1、2次的技能,我就不用這些概率去修正它,因為一旦修正了就表示這場戰鬥是幾十次戰鬥其中有1次暴擊剩下的都沒暴擊然後你給取了一個平均值,是假的,而不修正的值才是你測試時經常可以觀測到的真實的情況。
但你也不能很消極的說只要不一定出現的我都不修正,因為碾壓暴擊這些屬性也是這些英雄實力的一部分,你不計入戰鬥模擬那肯定是錯誤的。
所以我會在特殊效果的觸發概率比較高(我在這個專案裡選的是10%左右),而且技能使用次數較多的情況下加入修正值。
這樣戰鬥模擬出的結果就是一個 “典型的”戰鬥。
2是要注意管理操作時間。
操作時間是指你點了技能,英雄角色播放技能動作的時間。如果你不去管理的話,很可能程式美術也不會去關注這個引數。美術做動作的時候只會看到那一段動畫,他也不知道這段動畫播放了幾秒。程式只是把動作匯入,播放動畫的時候讓你點技能沒用,動作做完接下一個技能或者待機動作。
所以你要麼等他們做完接受既成事實,把遊戲真實的操作時間輸入到技能引數裡然後重新調整,要麼就是在製作時就進行管理,讓製作的動畫時間符合你的期望。
還有一種做法就是程式設定一個操作時間,這個操作時間未必和動作播放時間完全一致。我記得以前看war3比賽時經常有選手操作英雄走一下打一下,認為這比放任AI自動攻擊的輸出效率高,這說明暴雪的程式就把操作時間設定的比動作播放時間要短,所以選手才可以半途打斷英雄的技能動作然後讓它立刻再執行一個新的攻擊。
因為我以前做得一個專案在這方面怎麼簡單怎麼做,所以我這裡事先提出,希望以後使用這種方法的人提前和你的程式協調好。
三、資料落實到配置表
因為在之前的專案中有介紹,我這裡簡單介紹一下適用範圍和流程。
屬性分為角色、裝備、裝備強化,除了裝備系統比較複雜外,角色和強化都是小系統。文件中的方法比較適合於以裝備為中心,附帶若干小系統的屬性系統。
流程上分2步,第一步是以文件屬性原型裡屬性分配1、屬性分配2、屬性分配3的3個標籤頁把整段的職業屬性分配到具體的一件件裝備裡,分配屬性的方法就是給每個子系統設定分配比例。
需要注意的是,因為整體屬性已經定了,所以在分配時要注意不要讓某個重要的子系統過度佔用屬性,導致其他子系統佔用過少,這容易導致其他子系統屬性不升反降。還有就是要考慮到玩家看屬性皮膚的觀感,不要弄出太極端的情況。
第二步是把分配好的屬性轉化為配置表的格式,轉化方法見文件配置表輸出,轉化完成的配置表見CSV文件Attribute,雖然這裡文件很大,但其實比較簡單,我就不展開了。
作者:apm43
相關文章
- 遊戲戰鬥力數值研究(一)遊戲
- 做數值就是做體驗! RPG遊戲關卡數值設計思路分析遊戲
- 【數值框架】戰鬥公式:傷害公式選擇框架公式
- 如何做好回合制遊戲的戰鬥體驗? 戰鬥數值公式設計詳解遊戲公式
- 戰鬥數值新手入門指北:MOBA基礎及裝備篇
- 從零開始實現放置遊戲(六)——實現掛機戰鬥(4)匯入Excel數值配置遊戲Excel
- 桝田省治的JRPG戰鬥數值設計入門
- 從零開始實現放置遊戲(四)——實現掛機戰鬥(2)實現後臺數值配置遊戲
- 遊戲的戰鬥體驗設計中,數值策劃是如何“為體驗服務”的?遊戲
- RPG遊戲“關卡”&“戰鬥”設計祕籍遊戲
- 【數值計算方法】常微分方程數值解-數值實驗
- 從0開始的數值設計實戰(一)
- 【數值計算方法】數值積分&微分
- 如何列印數值變數變數
- SQL解惑-有趣的數值累加遊戲-orastarSQL遊戲AST
- 在SQL PLUS 顯示數值型 遮蔽科學計數法SQL
- js數值精度JS
- oracle數值精度Oracle
- 數值分析方法
- 免費開源數字貨幣交易所、免費開源數字貨幣交易系統、Java開源數字貨幣交易所 、Java開源數字貨幣交易系統Java
- 數值變數交換常用方法變數
- Echarts多條折線圖line顯示數值和真實數值不一致Echarts
- 數值計算 插值與擬合
- 【數值計算方法】非線性方程求根-數值實驗
- mysql int(3)與int(10)的數值範圍相同嗎?MySql
- 從使用者體驗的角度談多數RPG戰鬥系統中的缺陷
- TypeScript 數值型別TypeScript型別
- mysql相同數值排序MySql排序
- Octave 數值計算
- ORACLE USER 變數值Oracle變數
- 求插值係數
- c# 方法引數_值引數C#
- BIP 報表內容下顯示報表引數值
- FLOAT:浮點數值資料的大致數值資料型別資料型別
- 為什麼遊戲裡的數字,真的“值錢”?遊戲
- Linux UID是什麼?其數值範圍有哪些?LinuxUI
- 機器學習實戰專案-預測數值型迴歸機器學習
- 【乾貨】MySQL資料庫開發規範MySql資料庫