《暗黑3》是如何設計隨機地下城的?
01 關卡生成工具的組成
《暗黑3》的自動關卡是由一套地圖生成規則和互動元素生成規則的規則集生成的。而一個規則集可以生成許多不同的關卡。
玩家打的不同的大祕境可能都是源於不多的幾個規則集。開發組只用對一個規則集進行測試、迭代、優化就可以了。
《暗黑3》的關卡自動生成工具由以下幾個子工具組成:
- 地圖生成工具:用於生成承載關卡的地圖
- 互動元素生成工具:用於生成怪物和如寶箱、木桶等互動性物品
- 測試工具:用於保證規則的合理
本文將就按上述順序展開介紹。
02 部分一:地圖生成工具
基於地圖塊的設計
《暗黑3》的關卡可以分為固定佈局(Fixed Layouts)和隨機佈局(Dynamic Layouts)兩種。無論是固定還是隨機的,地圖都是由地圖塊拼接而成的。
地圖塊分為16種,一個關卡大致會用到18-70個地圖塊。
每種地圖塊下方的字母對應的是入口/出口的方向(Entrance/Exit)
- S: South 南方
- E:East 東方
- N:North 北方
- W:West 西方
而Fill代表特殊填充的部分,Fill的具體用法將會在後面展開。
每一種地圖塊在一個環境風格下還可以有不同的具體形式。一種的EW地圖塊,雖然共性是有東西兩個出入口,但是內部路徑是如何,還有多種形式。
地圖塊在遊戲中的實際表現
上圖是一個EW(東西)地圖塊在遊戲中的實際表現。
- 右側是導航網格開啟的狀態
- 綠色是玩家和怪物可以移動的區域
- 其他顏色是不能通行的區域
- 藍色是硬邊界(Hard Boundaries),即玩家、怪物和子彈無法通過的區域
- 固定佈局由手動將地圖塊拼湊而成
- 《暗黑3》的野外地圖(Exterior Environments)主要是固定佈局,威斯特瑪城(Westmarch)是一個例外,它也是固定佈局的。
考慮使用固定佈局主要是由於敘事和固定遊戲體驗的考慮,因為我們在敘事時需要確定所有玩家體驗到的遊戲內容是大致一樣的。
但怪物、寶物、目標和事件的位置都可以有一定隨機性。
以幕達厄古綠洲(Dahlgur Oasis)地圖為例。
在上圖可以發現有一些被挖空的地圖塊,這就是3.1.1中提到的Fill地圖塊。
這些地圖塊依據每個野外地圖的不同會有針對性的設計。這些地圖塊有專門設計的隨機規則,這樣玩家即便進入地圖時知道出口在哪,但是整個路上體驗到的事件、怪物都會不一樣。
我們再加入卡蒂姆 - 奧卡納斯(Caldeum to Alcarnus)和淒涼沙漠(Desolate Sands)這兩個地圖作為案例。
隨機佈局由規則集自動生成
隨機佈局也是使用的地圖塊機制。區別是,固定佈局我們手動的拼湊而成,而隨機地圖塊是讓引擎自動生成的。
而在把任務交給引擎之前,我們需要先定義佈局規則。
上圖就是隨機佈局規則設定工具的一個截圖。
左側用來增加各種規則,而右側是點選“Reseed Previewer”之後隨機生成的一組佈局。左側的規則和右側的地圖塊的編號是一一對應的。
我們可以按照編號來試著解讀一下左側的流程:
1. 增加一個房間
2. 增加一個與1相連,單向的屠宰場(Abattoir)型別的房間
3. 增加一個與1相連的出口型房間
4. 增加一個與1相連的房間
5. 增加一個與4相連的房間
6. 增加一個與5相連的事件(7-12這6種事件中隨機生成)
13. 增加一個4地圖塊的迴圈式(Hub)房間
14. 增加一個2地圖塊的並列式(Spoke)房間與13相連
16. 增加一個4地圖塊的迴圈式房間與14相連
17. 增加一個與16相連的入口型房間
那麼這個預覽圖在遊戲中的實際效果如何?
而如果我們再次點選“Reseed Previwer”則可以生成同一規則下的另外一個關卡地圖。
03 部分二:互動元素生成工具
有了關卡地圖之後,我們的隨機關卡還需要有互動元素。
配置互動元素
互動元素的生成規則是由一個內部稱為Gizmos的工具完成的,直譯叫做小玩意兒,比較好理解為什麼這麼取名。
通過上圖我們可以發現,我們配置了至少4種元素,分別為:
A. 木桶(Barrels)6-14個
B. 樓梯(Floor Tiles)10-15個
C. 武器/盔甲架(Weapon/Armor Racks)3-5個
D. 普通寶箱(Normal Chest)1個
除了定義數量區間,我們還可以發現每種元素還有更細的規則設定,以上圖的普通寶箱的引數為例:
- No Spawn Chance:不生成的機率
- Spawn Type:生成方式(有Gizmo Actor, Encounter<遇怪/遭遇>,Adventure<冒險>)
- 寶箱型別
- 重量(weight)
- 強制隨機朝向(Force Random Facing)
- 受Gizmo密度引數的影響(Affected by gizmo density multipliers)
- ......
由於不瞭解細節,因此翻譯得也有些生澀。
上述這些引數設計師會在收到反饋後不斷迭代,以優化這個關卡的體驗。
配置完上述規則之後,生成後的結果如何?
圖中的紅圈是某些事件/元素的觸發範圍。而每個字母指代的是一類元素,比如4.1.1中提到的木桶、樓梯、武器/盔甲架和普通寶箱。
將觸發範圍關閉後可以看到如上的效果。
配置怪物規則
怪物的規則由於特別複雜,因此需要用一個單獨的工具來配置。
配置怪物的工具名字叫做Spawn。下圖是一個截圖。
配置怪物由兩部分組成:
- 建立怪物組
- 配置怪物組
我們逐一介紹。
左側我們可以發現有多個怪物組,至少有這麼幾個引數:
- 權重
- 機率
- 最小經驗
- 最大經驗
- ......
每個怪物組的具體內容都不一樣。
右側就是編輯每個怪物組的具體內容的區域了。
首先要確定的是怪物的種類。
《暗黑3》中怪物的品質分為普通(Normal)、精英(Champions)、稀有(Rare)和特殊(Unique)至少這4種。之後要配置他們的數量區間等引數。
注意,這裡不是單隻怪,而是怪物組(Gourp)。
之後在下方則可以定義每一個品類的怪物組的具體型別。
04 部分三:測試工具
在設定完所有規則後,可以運用自動工具來測試規則是否合理,是否可以成功生成,是否存在bug。
在地圖塊規則編輯的地方下方可以看到Dungeon Tester的工具。在這裡可以填寫測試的次數(也是地圖生成的次數,具體有沒有平衡性之類的測試的性質就不得而知了)。
雖然圖上只填了1000,但是他們平時要測試時,填寫的次數會比這個大得多。
之後測試工具會自動測試這個規則集下的不同版本的關卡,之後會返回下方的結果。
如果返回的有紅色或者橙色,則表明規則設定有問題。設計師需要根據測試工具日誌來進行調整。
05 玩家測試
在完成隨機關卡規則集的設計之後,團隊內部會體驗和測試這個規則集。
之後會發布到PTR上(Public Test Realm),也就是測試服上,來讓玩家也實際體驗和測試。
設計師會依靠玩家和社群發現的問題來優化這個規則集,同時也會用bug追蹤工具來定位問題。
對於《暗黑3》開發組來說,PTR是非常重要的一環。這也是開發組釋出這個視訊的目的 -- 開誠佈公地和核心玩家溝通,告訴玩家設計流程,從而讓PTR的玩家也感受到自己是設計不可缺少的一環。
相關閱讀:
《暗黑3》是如何重新設計技能系統的?
《暗黑3》設計師是如何評價自己遊戲中陷阱的設計?
作者:藍為一編譯
來源:為一筆談
原地址:https://mp.weixin.qq.com/s/ij6ZStEKHzeNP4QjPRorMA
相關文章
- 《暗黑3》是如何重新設計技能系統的?
- 《暗黑3》設計師是如何評價自己遊戲中陷阱的設計?遊戲
- Web3是如何設計激勵機制的?Web
- 隨機性設計的一些想法隨機
- 遊戲設計思考:隨機性遊戲設計隨機
- 預設的 rand.Intn () 生成的是偽隨機數隨機
- 比暗黑3更加硬核的《流放之路》是怎樣誕生的
- 暴雪隨機術:《暗黑破壞神》創造經典遊戲機制的祕籍隨機遊戲
- Python如何隨機生成1到100的隨機數?Python隨機
- 《暗黑血統》系列——遊戲玩法設計的弄潮兒遊戲
- 偽隨機數C語言程式設計隨機C語言程式設計
- 如何利用“隨機”來控制貧富差距? 談談網路遊戲中的概率設計隨機遊戲
- 《暗黑破壞神:不朽》手遊設計訪談
- 玩法設計弄潮兒:盤點《暗黑血統》系列
- 3.python程式設計與計算機的關係,如何執行python檔案Python程式設計計算機
- 數值策劃如何玩轉Dijkstra演算法來設計隨機地圖演算法隨機地圖
- 前暗黑3設計師:為什麼暴雪做不了像《最後紀元》那樣的遊戲?遊戲
- 程式設計師你是如何降低NPE的?程式設計師
- 那些程式設計高手是如何練成的?程式設計
- 你是如何看待男程式設計師的?程式設計師
- 我是如何提高自己的「程式設計能力」的?程式設計
- grafana 的主體架構是如何設計的?Grafana架構
- 隨機看妹子_這是不可能的隨機
- MATLAB設定隨機數Matlab隨機
- Counterpoint:2024年上半年摩托羅拉是外包設計出貨量最大的公司 小米以78%的手機外包設計緊隨其後
- python中如何隨機分配Python隨機
- Hadoop HDFS 設計隨想Hadoop
- 如何生成指定分佈的隨機數隨機
- 如何檢查你的計算機使用的是 UEFI 還是 BIOS計算機iOS
- 從《爐石傳說》中學習隨機性設計隨機
- SpringMVC是如何逐步簡化Servlet的程式設計的SpringMVCServlet程式設計
- 10 早期計算機如何程式設計計算機程式設計
- 偽隨機數是什麼?偽隨機數生成方法有哪些?隨機
- [譯] 我是如何找到谷歌 UX 設計工作的谷歌UX
- Promise是如何實現非同步程式設計的?Promise非同步程式設計
- 計算機程式的思維邏輯 (34) – 隨機計算機隨機
- 從日系手游出發,單機玩法手遊的“多人運動”是如何設計的
- Python中如何生成隨機數?Python隨機