Programming

[2010] 沙漠商旅C的遊戲設計(1)-簡介與MenuEditor


作者:NDark

時間﹔201001

沙漠商旅C的遊戲設計

談完了 “最容易被遺忘的遊戲模組"之後
接下來說明的就是沙漠商旅C的專案內容。

簡介

沙漠商旅C是移植自D-MAH的Flash遊戲作品Caravaneer的Windows平台VC++專案。

沙漠商旅遊戲連結:http://freegame.com.tw/flash/slg/slg_p_057.htm
作者官網:http://www.d-mah.com/

自2008年年底,我開始進行此遊戲的移植專案,
希望能藉著移植這個作品,來達到視窗遊戲設計的自我訓練與對於遊戲層運作的探索。
專案最終完成度端看能繼續投入到什麼程度為止,
是否達到100%並不十分重要,但希望能盡量完成原始遊戲的設計範圍。

選擇沙漠商旅為目標的原因

  1. 我不打算進行新的企劃案的設計,沙漠商旅雖然是個小遊戲,但是遊戲內充滿各種元素,包含經營,戰術,經濟,角色扮演,劇情。
  2. 我不打算進行美術創作,因此不能空想一個新的遊戲專案。

因此透過移植這個Flash遊戲的過程來更了解遊戲層的運作,
藉此了解一個視窗遊戲遊戲層的單純架構與企劃,美術之間的溝通流程。

因此在幾篇文章中,我都不會提到這個遊戲好不好玩,或是好玩在哪裡。
因為我認為好不好玩是企劃的工作,也是企劃人員該有的擔當,認知,以及被要求之處。
以一個程式設計人員來說,應該先完成的是快速實現企劃的想法以及撰寫模型來驗證。

本專案僅進行學術研究及開發訓練之用,
Caravaneer遊戲之所有素材及名稱之權利為原作者D-MAH所有。
本專案之結果僅會作為本人經歷及教學示範之用,不會進行販售。
本人已去函徵求D-MAH之同意,但未獲回音。

專案系統與特色(Project System & Features of Caravaneer C)

  • Windows CLR Form project
  • Visual Studio C++ 2005
  • EZGL ( OpenGL on .net 2.0 )
  • supported by Menu Manager(菜單管理器) and Menu Editor(菜單編輯器)
  • supported by Resource Pool(資源池) and Resource Editor(資源編輯器)
  • supported by Editors of all kind objects in Caravaneer C(各種物件編輯器)
  • using OpenGL windows font text drawing(畫字系統)
  • using OpenGL select system(點選系統)
  • stage paragraphing & event-driven development(分段及事件觸發開發流程)
  • save & load (可以存讀檔)
  • suported by Parameter Loader

時程

2008.09 進行核心類別開發
2008.12.28 開始進行版本控制及繪圖平台設計
2009.02.25 進行Resource Pool的開發
2009.03.01 進行Story System的開發
2009.03.11 進行City Editor的開發
2009.03.17 進行Caravan Editor的開發
2009.03.24 進行Menu Editor的開發
2009.04.15 進行Resource Editor的開發
2009.05.09 進行Resource Editor與Menu Editor的整合
2009.05.11 進行城市選單的設計與實作
2009.05.16 進行城市購買選單的設計與實作
2009.06.18 進行關卡資源的釋放與重讀
2009.06.27 進行玩家與城市的擺放與簡單移動
2009.07.09 進行Billboard的實作
2009.07.17 進行UID Updator的開發
2009.08 文件及遊戲事件整理
2009.08.25 進行Individual Editor的開發
2009.09.07 進行Transporter Editor的開發
2009.09.18 進行Equipment Editor的開發
2009.10.02 進行Message Observer功能開發
2009.10.07 開始進行戰鬥系統開發
2009.12.03 戰鬥結束與戰利品選單開發
2009.12.26 進行Cart Editor的開發
2010.01.03 進行文件的撰寫

編輯器-Menu Editor

MenuEditorSS01
MenuEditorSS01

Menu Editor(菜單編輯器)是沙漠商旅C專案中一個相當重要的開發重點。
起源於當年我在口古月遊戲製作小組的時候就有的構想。
但是當年礙於人力與優先度並沒機會完成。

主要目的是

建立一個圖形化介面使得企劃與美術人員可以自行設計遊戲中的菜單(選單)。
不用把構想寫在紙上,再由程式人員設定進程式裡面。
減少管理與開發上的流程協調與衝突。
企劃與美術人員可以自行調整選單的位置與其他參數,存成一個選單檔。
程式開始時選單檔讀入後自動建立選單。

系統與特色

  • 主要由菜單管理器(Menu Manager)來管理整個菜單系統,菜單管理器內有選單(Menu State)陣列,而陣列內又有各類菜單物件。目前的版本菜單種類有圖片,文字,與區域。
  • 菜單物件資料有位置,顏色,大小,是否要畫,識別編號,貼圖關鍵字等屬性。
  • 區域菜單預定為是一個看不見的方塊,是為了點選機制而設計的。
  • 菜單物件資料中的識別編號是為了點選機制而設計的。
  • 菜單系統目前還不支援2D Sprite等特效。
  • 選單之間利用一個FSM-like的機制紀錄選單的轉換。
  • 選單檔目前是用文字模式來紀錄,開發維護方便。
  • 沙漠商旅C也透過菜單管理器來讀入選單檔。由於是一個檔案,所以讀入後要怎麼作其實是看平台要怎麼處理。不會受到菜單編輯器的限制。
  • 菜單物件的編輯支援新增移除,拖曳移動,角落縮放,複製貼上,上一步。
  • 編輯器會定期存暫存檔避免程式當機。

內容

遊戲的平面選單一向是開發上重要性不高的部分。
但是因為每個遊戲其實都有平面選單的設計,因此其實選單開發流程化是被過分低估的。
這個菜單編輯器的開發期其實相當長,多半是實務上需要什麼就開發那個功能。
原本是想開發一個像是視窗程式設計可以用滑鼠拉來拉去的設計。
編輯器負責指定一些常見的參數,然後把這些資訊存檔起來。遊戲開始時讀入。
這樣企劃人員及美術人員修改選單的設計的時候,就不用去麻煩程式人員作調整,
或是面對一個十分不容易了解的參數文字檔。
比較設計不良的地方有幾個地方:

  • 分別是UnDo與ReDO並沒有建立;
  • 編輯器只能紀錄移動或是縮放的上一步;
  • 而且編輯器尚不知道目前的物體是否與上一步的相同。

程式流程在繪圖的時候概念很簡單,把每一個開啟的選單中的物件都畫出來即可。
請注意,選單管理器只提供資料,真正執行的時候是看系統怎麼處理這些資料。

  • 如果是圖片物件就依照指定的貼圖標籤畫方塊。
  • 如果是文字物件就依照指定的內容來畫字。
  • 區域物件比較特別,有點像一個透明的板子,遊戲的繪圖模式不畫它。但是當要檢查滑鼠點選的時候就要畫出來(讓滑鼠可以點到這個板子)。

因此實際使用的時候就是把選單檔案讀進來

gsMenuManager.ReadFile( … ) ;

繪圖的時候

MenuEditor
MenuEditor

要取用選單物件,有很多方法.
我大部分是透過每個選單及物件都給一個辨別名稱Rich Name.

pState = gsMenuManager.GetStateByName( … )

然後再找該選單內的圖片或文字

pImage = pState->FindImageByName( … )

文字物件比較特別的是存了字體大小與對齊等屬性,提供給系統使用。

有關貼圖關鍵字與貼圖標籤的指定會在資源編輯器的時候會一併說明。

選單間的轉換是為了選單的開啟/關閉/切換而設計的
FSM-like的設計紀錄了選單中某一個物件(被按到後)會否開啟/關閉/切換其他選單的資訊。

這個FSM包含了物件來源標籤以及他可能的對象及動作(開啟/關閉/切換)。
譬如說

State i的Image a按下之後會關閉State i開啟State j , k
這個FSM Link會紀錄 active[ 0 ] = j active[ 1 ] = k deactive[ 0 ] = i
(因為同時間可以開啟多個選單,因此這不是一個標準的FSM。)

所謂2D Sprite我沒有特別進行開發的原因是,
這個特色幾乎是每個遊戲引擎都已經內建的功能。
可以讀圖的遊戲引擎都應該對Sprite進行設計。

廣告

6 thoughts on “[2010] 沙漠商旅C的遊戲設計(1)-簡介與MenuEditor

  1. @GUX
    此計畫完成後只有發布EZGL這個OpenGL在.net上開發的元件.
    其他部分因為完成度不高,所以就沒有發佈。
    而我自從進入目前的公司以後事務繁忙,已經沒辦法再顧及工作之外的開發。所以並沒有持續完成此計劃。
    但我並不覺得有遺憾,這個計畫有實現我的一些想法,這些想法希望對其他人是有幫助就可以了。
    另外Caravaneer2的遊戲已經在原作者(Dmitry Zheltobriukhov)的率領下開始進行開發。對該遊戲可以去他的臉書了解了解。
    可以再討論你的想法,謝謝。

  2. 個人並不懂程式
    有想過以鋼彈來作類似的遊戲
    在各殖民地和地球圈貿易之類的
    特色就是有各式各樣的船和ms等機體
    甚至可以對機體改造之類
    或自己研發新機體武器或船艦之類
    因為玩過大航海時代和海商王之類
    所以還可以找廢棄殖民地建立自己的基地
    或乾脆花錢建一個之類
    結果想加入的東西太多太多了……….

  3. @GUX
    一個完整的遊戲的製作時間比想像中長。
    可以參考這篇文章
    http://wp.me/pBAPd-jJ
    這樣的遊戲四個人要做20個月。然後還賺不了大錢。
    明確知道要投注的資源有多少在進行任何事情之前是一件很重要的。

  4. 如果只是想要自己私下修改沙漠商旅遊戲內容(只有改數值)
    需要那些程式~~

  5. @GUX
    要先決定要用哪個遊戲引擎?以及要在哪一個平台上。
    然後才能針對該引擎使用的語言做重寫。不管是我自己或是別人接手我都會這樣建議(重寫),但是我可以提供架構的設計文件及指導。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s