《伊萬博士: 進化》利用三角剖分演算法復刻《超越光速》地圖機制
市面上將隨機地圖高度抽象表達的一般有 3 種:
1.第一種是最常見的類《殺戮尖塔》爬塔類地圖。優點:地圖流程容易把控,玩家能較為直觀地體驗遊戲推進過程,同時實現難度不大;缺點:同型別遊戲大部分都採用了這一種機制,從卡牌玩法到地圖機制都很難跳出《殺戮尖塔》的影子,難以做出差異化。
2.第二種是類似《月圓之夜》的翻牌子機制。優點:流程相對好把控,實現難度不大,同時翻牌子式推進能在翻牌子這點上做出不少微創新;缺點:翻牌子高度抽象化了地圖,玩家難以直觀地感受到空間推薦的過程。
3.第三種是《超越光速》類的隨機點線網路地圖。優點:地圖形式隨機性較大,玩家能較為直觀地體驗遊戲推進過程與地點上的變化;作為三種型別種較早出現的一種,採取類似的地圖機制的作品少之又少,能很好地做出差異化;缺點:地圖流程較難把控,需要額外機制來控制流程。實現難度較前兩種複雜一點。
在遊戲開發早期曾希望採用上訴第三種《超越光速》類的隨機地圖機制。但鑑於一年多前作者才剛接觸程式設計與遊戲開發數月個人獨立開發萌新,抱著先把遊戲的所有基礎功能做出來,做好一個完整的遊戲的心態,決定採用最好實現的第一種類《殺戮尖塔》機制,而且還是高度閹割版(QAQ)。
隨著遊戲已經開發了一年多,遊戲內所有模組都已經接近完成並且作者也從一個萌新進化成了有點經驗的菜狗。距離遊戲 EA 階段還有三個月時間,決定抽出一點時間挑戰一下,將最初的想法制作出來。
實現
第一步:背景底層
遊戲設定是主角困於峽谷之中,因此繪畫了一張上下帶有崖壁的底圖作為地圖背景
第二步:劃分割槽域並生成地點 site
首先將地圖劃分六個區域,區域會在後面有其他作用。
在每個區域隨機生成 3~5 個地點 site,總點數在 18~30 個之間,同時保證點與點之間有一定距離。
下一步:以地點 site 為基礎形成三角形網路。
當初不採用這種地圖機制最主要原因就是覺得這一步太困難了無從入手,後來有一天想起自己本職工作建築設計做引數化設計時常用 grasshopper 裡常用的一個功能,點雲生成 mesh 網格。利用三角形剖分法(Delaunay)組織點陣。
既然思路有了,只要用程式碼復現就好。(不知道大佬們知不知 UNITY 或者 C#有沒能處理大量幾何圖形問題的庫,類似 GRASSHOPPER 這樣的方便工具,有的話麻煩評論或者私信告訴一下我,萬分感謝 QAQ)。
最後我們做得比《FTL》稍微複雜一點,抽取部分線路讓地圖更復雜化。
重複上述隨機步驟,確保最短重點到起始點之間最短路徑少於或等於 7(方便把控流程)
第三步:場地 site 賦予屬性
場地內包含地形的概念,不同地形會遇到不同的怪物,同時亦會遭遇事件,有合成實驗室(商店),有危險的怪物聚集點等等豐富遊戲性。
只顯示初始點及其連線的 site、實驗室(商店)、和終點的位置,其餘地點隱藏。並在每個 site 下留下一個暗示位置和地形的圖案。
隱藏的點在探索到與之相連的地點時會顯。
第四步:追兵系統
《超越光速》中有一套追兵系統,當進入新地圖後經過一段時間,追兵就會從左往右追擊,與追兵戰鬥只會得不償失。這個機制能有效抑制玩家 full clear 地圖刷刷刷提升能力,把控地圖的整體流程。
在我的遊戲設計中,每個深度的地圖會有 4~6 天的安全期(每前進一個 site 消耗一天),安全期後就會有 Turmoil 由左往右追擊玩家。而 Turmoil 的推進方式就是前面定的區域,每天往右侵入一個區域。最終每個玩家逗留在地圖的時間限制在 10~12 天。
小可愛 Turmoil 的立繪(很多近期有趣元素的縫合怪 QAQ)
最後一步:新增場地資訊提示,優化玩家體驗
搞了這麼久,我覺得我的 UI 設計總算像個樣子了。
結語
算是完了之前一個遺憾,地圖的事件和一些小功能還在編輯中,但是總體上是完成了,對比構思、前始,中期,到最後四個時期的地圖算是質變。
過段時間 Steam 的商店頁面要重新稽核(當初為了快速通過參加新品節,沒有做 EA 稽核),會有一段時間商店頁面消失,同時 demo 也會關閉,所以要體驗 demo 和加願望單的朋友還不趕快行動 OwO。
最後,為了改地圖我把 BOOOOM 的 gamjame 鴿了,我有罪。
來源:indienova
原文:https://indienova.com/indie-game-development/replicate-ftl-map-algorithm-with-delaunay/
相關文章
- 30分鐘簡易復刻《元氣騎士》地圖生成系統地圖
- 複雜多邊形的三角剖分
- 復刻包包復刻包復刻包包是什麼意思
- 樹鏈剖分
- 分頁機制圖文詳解
- 利用CORDIC演算法計算三角函式演算法函式
- 2024.3.14 樹鏈剖分
- [OI] 樹鏈剖分
- 長鏈剖分模板
- 萬物皆可隨機化!淺談《銀河破裂者》中程式化地圖生成隨機地圖
- 頃刻之間 「復原時光」,美圖畫質修復演算法V2全新上線演算法
- 樹鏈剖分總結
- 淺談樹鏈剖分
- 長鏈剖分筆記筆記
- Something about 樹鏈剖分
- 利用 Python 的 package 機制簡化 utils 包設計PythonPackage
- 一張圖進階 RocketMQ - 通訊機制MQ
- 操作指南:如何利用Smartbi、Tableau實現地圖視覺化展示地圖視覺化
- 地圖網點分佈圖怎麼做,如何製作地圖資料分佈圖地圖
- 迴文樹線上剖分???
- [LOJ139]-樹鏈剖分
- 【筆記/模板】樹鏈剖分筆記
- #8. 「模板」樹鏈剖分
- 從遺傳演算法到OpenAI新方向:進化策略工作機制全解演算法OpenAI
- 利用機器學習進行惡意程式碼分類機器學習
- 觸控事件分發核心機制優化吸收事件優化
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機
- 57行程式碼復刻8600萬美元的大專案!行程
- 機器人想要什麼:利用機器學習有效地進行教學機器人機器學習
- 復刻包是什麼意思復刻包包貨源哪裡來
- AI演算法的進步超越了摩爾定律!AI演算法
- 利用vstruct解析二進位制資料Struct
- 二進位制、十進位制與十六進位制相互轉化
- 樹鏈剖分學習筆記筆記
- 重鏈剖分題目選講
- 「學習筆記」樹鏈剖分筆記
- 熟練剖分(tree) 樹形DP
- python利用list列表資料進行地圖資料視覺化時需要注意到的問題Python地圖視覺化