3月 日誌之 2 — 數值設計、表格與JSON


3/10 ~ 3/21

遊戲數值的平衡與維護:Table -> JSON -> Game的資訊流

當遊戲中有許多需要預先設計、平衡數值的物件,如角色、種族、職業、道具、技能、敵人、任務、報酬……,或是其他任何更特殊的,一個遊戲設計中重要的資料(人物關係相性、影響對話方向的特質標籤……),此時除了在程式中設計出一個資料結構並與系統整合之外,更需要為「迭代數值平衡」這件將會不斷發生、頻繁變動的事,提供一個合適的工具介面,一個便捷、有效率的workflow;換句話說,讓你的設計師或你的「設計師腦」可以輕鬆一點,專注在設計與平衡的任務上。


此時至少會有3種選擇:

  1. 繼承遊戲引擎中可以預先編輯、儲存的自定義數據類別:如Unity的ScriptableObject,或是Godot中的Resources;它們也大多也提供了客製化編輯面板、分類整理屬性的方式(Unity的Inspector Attributes、Godot的@export keyword),這相當於是一個引擎內的物件編輯工具。這種方式的workflow大概是:創建自定義的類別物件->編輯物件屬性->測試遊戲平衡性->一個個點選物件調整數值。這樣的方式在資料物件數量不多,且物件屬性較簡單的情況下很方便,屬性型別、從屬關係也明確,很適合在開發早期實驗什麼樣的資料結構較符合遊戲系統的需要。但這樣卻有幾個明顯的缺點:
    1. 一次只能顯示、編輯一筆資料,要靠設計者去記憶或翻找物件間的相對差異。
    2. 很多很多創建、選取等重複的點擊。
    3. 每個獨立物件都是一個檔案,造成資料夾凌亂雜多
  2. 使用表格工具編輯再轉成遊戲方便的讀取的檔案格式:相較之下,表格是個更加有效率且同樣易讀的資料呈現方式,一個n×m的表格就得以同時併呈n個獨立物件各自的m個屬性,物件間的相對差異清楚明瞭;使用Google Sheet或Excel亦可加上條件化格式與資料驗證來進一步客製化編輯介面;這個方式的挑戰在於將表格資料匯出再由遊戲讀取。以使用Google Sheet和Godot為例,可以用App Script編寫程式碼,或使用如Export Sheet Data說明文件)等add-on將表格資料匯出成JSON檔案,再於Godot中使用FileAccess和JSON類別的函式讀取成Dictionary或Array來使用。這方法提供我們所需的大量、頻繁且便捷的編輯流程,此外亦容易分享共同編輯;比較主要的缺點僅是:
    1. JSON支援基本的資料型別,但不區分整數與浮點數,需在讀取時轉換。
    2. 匯出檔案稍嫌麻煩,但可以累積大量編輯之後再一次匯出。
  3. 自製編輯工具:如果以上方式的彈性都不足以滿足你的開發需求。


目前為了和戰鬥系統對接以完成核心循還,在演化樹的成長系統上完成了:

  • 調整生物、部位、技能、性狀類別,現在技能、性狀皆是讀取自JSON而例現。
    • 數值類別現在支援:
    • 永久成長
    • 戰鬥增益與削減
    • 增益與削減乘數
  • 更新演化節點的描述、演化成本與選擇可衍生部位的UI
    • 程序化數值成長技能與主動技能的文字描述。
  • 每次演化至新的節點,演化樹隨機發現2個新的演化分支
    • 程序化演化樹動態擴張的分支分布
  • 部位化的HP Bars:
    • 依發達程度分配各部位獨立的HP Bar(處理了餘數問題)
    • 呈現各部位HP和總和
    • 部位依排序承受傷害

待完成:

  • UI:
    • 進入戰鬥選項(暫時)
    • 與演化樹整合的遇敵機制(長期方向)
    • 呈現各部位所屬能力
  • 較特殊的技能效果:
    • 觸發型
    • 附加狀態疊加
    • 附加狀態:可疊加的一組特定效果集合
    • 條件型
  • 狀態:
    • 部位致殘
    • 瀕死
  • 戰鬥後的結果/獎勵選擇畫面:
    • 殺戮
    • 擊敗
    • 嚇退
    • 逃跑
    • 死亡
  • 美術:
    • 圖示Icon
    • 像素生物
    • 環境
    • 動畫特效

Get 演化循環 Evolooption-Prototype

Leave a comment

Log in with itch.io to leave a comment.