Sunday, March 09, 2008

Actor Setup 工具 (WIP #3)

完成 AEF 格式的定案後,進展也頗為順利,在上星期的進度之後,這個星期也完成了一點工作,就是暫定了一個 Actor 的格式。這個 Actor 的格式很簡單,只是有 Actor 的名字、Mesh 的檔案名、Skeleton 檔案名及 AEF 檔案名,然而格式暫定後,Actor 工具的 UI 也要加入些新元素呢。Actor 工具程式 Load 入一個 Actor 檔案後,就能夠自動 Load 入 Mesh、Skeleton 及 AEF 資料,但是暫時有一個問題,就是還未有實際應用機會,不知道這樣的設定能否令遊戲製作更為簡便,所以看來下一個工作應該是應用測試了。

現在我的 Actor 製作工序大約是:
一 ) MilkShape3D 製作 3D 角色模型及動畫
二 ) 在 MilkShape3D 中用 Animation Split tool 為 Export 做準備
三 ) 從 MilkShape3D 中 Export 出 OGRE 的 Mesh 及 Skeleton 檔案
四 ) 用 Actor Setup 工具製作 Actor 檔案 ( 製作 AEF 資料 )
五 ) Pack 好所有檔案給 Game Program 使用

上面的工序好像也不錯,希望在應用測試時能夠找出不順暢的地方,再作改善。

Saturday, March 08, 2008

Super Mario Galaxy Rendering ?

任天堂在 Wii 中發售的 Super Mario Galaxy 是個很好的遊戲,畫面非常地豐富,而這遊戲的 Rendering 方法也很有趣,是用了一種像是「 背光效果 」的表現方式。

很多人都說過,這種 Rendering 是用 Shader 做出來的,沒錯,Shader 確實是可以做到這個效果。我經常到處找一些能夠在 fixed-function pipeline 中,做到和 Shader 差不多效果的方法,有時候也會找到一些,和 Shader 效果很接近的做法,而今天我在網上找到了一個方法,可以做到類似 Super Mario Galaxy 的 Rendering,但是只需使用 fixed-function pipeline 功能。

附圖就是用這個方法做出來的,效果也確實是很接近呢。

Saturday, March 01, 2008

Actor Setup 工具 (WIP #2)

作戰了數天時間,Actor Setup 工具 ( 終於 ) 有點新進展了,首先是資料格式定下了,暫時名為 " Animation Event File ( AEF ) "。

現階段都是在測試,現存的功能是否實用,如在每個 Animation 中的每個 Keyframe 記下資料,例如:Dispatch Event 字句、 Goto 另一個 Animation、正確處理 AEF 及 Skeleton 之間的資料互動。下一步的工作應該會是測試,如何將另一組 Skeleton Animation 套入目前的 Actor 中,以及將新的 Skeleton 加入現時的 AEF 中。而現時的資料其實是不足夠的,因為這個 AEF 資料,只是單一 Actor 儲存 Keyframe 的 額外資料,但其實是應該儲存一個 Actor 所用的 Mesh、Skeleton、AEF ......等等的資料,這個方向應該會是再下一個階段的了,因為這需要設計另一個自訂資料儲存起來呢。

製作工具確實很麻煩,但是卻令我更加認識 OGRE 3D 的性格。

Sunday, February 17, 2008

Toy ? Gadget ? Fun !

近日朋友介紹我玩一個軟件,這軟件叫做「RocketDock」,這是甚麼來的呢?它是一個 Docking 軟件,就和 Application Launcher 一樣,是放我常用的軟件在裡面,方便我一 Click 便可以開啟的,而這個 RocketDock 的外表只是和 Apple Mac OSX 內的 Dock 一樣而已。我自己是半個 Max OSX 的 Fans,一向很喜歡 OSX 的界面,這個 RocketDock 就令我很高興,不其然地玩了差不多一整天,而它最有趣的,就是和 OSX Leopard 的 Dock 一樣,有 Stacks 功能呢。下面一幅圖就是從我的電腦直接 Capture 出來的,你看看是不是很像 OSX 呢?


後來我又發現,原來 Microsoft 在 Windows XP 中的 PowerToy 工具中,有個叫做 「Virtual Desktop Manager」,就是可以令你的 Windows XP 擁有四個獨自的 Desktop,就好像有四個 Monitor 一樣,就正如 OSX Leopard 中的 SPACES 功能,有多個 Desktop 供使用。


再在網上瀏覽多一回兒後,又發現了另一個軟件,這軟件是仿照 OSX Leopard 中的 Media Viewer 工具,由一個 3D 的 Viewport 為基本,每個 Movie 或圖片都是由一個 3D Polygon 表達,用家可以簡單地瀏覽各個 Movie 或圖片,雖然這軟件還在 WIP 中,但效果也是很不錯的,以下一張圖是從我的電腦直接 Capture 出來的。


這些各式各樣的 Toy / Gadget 等的小工具,便讓我的 Windows XP 彷彿變成了 Mac OSX 一樣呢,最好的是,這些小工具的速度快,而體積亦很小呢。

Sunday, February 03, 2008

Actor Setup 工具 (WIP #1)

前陣子有機會接觸 Flash 及 Action Script 3.0,用過後發覺 Flash 和 Action Script 之間,就好像 Game Artist 和 Game Programmer 一樣,但是 Flash 和 Action Script 卻融洽非常,我用過她們後吸收了一點點經驗,希望用這些經驗做個工具,一個簡化 Artist 和 Programmer 之間溝通和工作的工具。Action Script 本身就是一個 Event Driven 的工具,在 Flash 中使用 Event 來與 Action Script 溝通,這個是她們融洽的主要原因,所以我先要做的,就是做個 Event System 出來給自己的 Ogng 3D 使用,當然是一個很簡單的版本了,但是也算是可以使用的了,當完成了這個超簡單版的 Event System 後,就要開始做工具了。

我暫時叫這工具做 Actor Setup Tool,這個工具是做甚麼的呢?最主要就是在一個 Character 內做一些 Event 發放的設定,例如:一個 Character 的其中一個 Animation,playback 其間或完成後發放一個 Event,那麼 Game Programmer 只需要做個程序來處理這 Event 便可以,工具就是希望做到,在一個 Animation 中的指定時間上,加入一個發放 Event 的點。現在進行的階段還沒有多大的進展,其中一些記錄 Event 時間、類型、名稱等等資料,都要另外儲存,但資料格式還未敲定呢...... 暫時就如附圖一樣,只是一些基本軟件外表,就和我之前所說,這個工具會是比較大型的,相信還要做一段時間呢。

明天是年廿八,再過幾天就是新年了,在此先恭祝大家:

心想事成萬事勝意

Sunday, January 27, 2008

Animation Split 工具 Plugin

剛剛用了兩、三天的時間,做了個 MilkShape3D 的 Plugin Tool,叫做 Animation Split Tool,為什麼要做個這樣的工具呢?因為 OGRE 的 MilkShape3D exporter 中,可以 Load 入一個資料檔案,當中會有這樣的內容:1, 3, Walk; 4, 12, Run .... 如此類推。這些資料是用來將一段長的 Skeleton Animation,按照資料的內容,分成一段段獨立的 Animation,再 Export 成 Skeleton 檔案。但是要製作這個資料檔案,都是要用一些如 Notepad 的工具做,感覺非常的單調,那麼我便想做一個比較視覺化的工具來代替,就這樣 Animation Split Tool 便出現了。

用法也頗為直觀性,在 MilkShape3D 中 Load 入 Model 後,便可以在 Animate 選項中啟動這個 Animtion Split Tool,這工具可以重新製作、Load 入已有的資料檔案及 Save 更改過的檔案,可以加入或散除檔案中的 Animation 資料,這工具最方便的就是,用家不需要在兩個軟件之間切換,可以一邊看著開啟 Model 的 Animation,一邊輸入資料,減少資料輸入錯誤。用這個工具製作完一個資料檔及 Save 之後,便可以隨即將 Model Export 出來一個 OGRE 檔案,而這個 OGRE 檔案已經將 Animation 分切好了。

完全了這個小工具後,下一個要做的應該就是 Character Setup 工具,這工具將會是比較大型的工作,因為要即時看到 Character 的 Animation 資料,加入或修改一些 Custom Data 及儲存起來,這些 Custom Data 會在製作遊戲的時候,比較容易地製作 Model 的 Animation 調控,從而減少這方面的工作量,因為這類 Animation 的調控工作量確實是很多的。

Friday, January 18, 2008

Ogng3D Material Tool 完成

完成度達 80%,餘下的 20% 是屬於試用多一點,如發現 Bug 就做一些修正工作。說實話,這個 Tool 用起來也不錯,自己就覺得頗為方便呢 ( 在自吹自擂中 ...... ) 。

下一個 Tool 會是甚麼呢?還未想到,可能會是 Character Setup Tool,也可能是個 2D Sprite Setup Tool ...... 未決定呢 ......

Sunday, January 13, 2008

製作 OGRE 的 Material 工具

一個多星期前,我開始製作一個 OGRE 的 Material 工具,我預先設計好一個「 可設定資料量 」,例如:每次只能夠製作一個 Material,每個 Material 只會有一個 Pass 和三層 Texture Layer,以及一些如 Alpha Blend、Depth Check 或 Receive Shadows 等等的選項。初時只是做一些 Win32 API 的程式,還是頗為順利的,但後來牽涉到要讀取 OGRE 中已存在的 Material 時候,就令我更覺得 OGRE 本身的冗長。我建立了一個 ResourceGroup,加進了現時的 Directory 後叫 OGRE 讀入這個 ResourceGroup,便以為可以簡單知道已讀進那些 Material,但是我卻找了很久才知道怎樣才可以找回那些資料。OGRE 的 Material 中基本分別有 Technique、Pass、TextureUnitState,當中很多資料都在 TextureUnitState 裡,看到這些一大堆的資料,我又需要再加入一堆自訂資料,將設定資料記下來給 Material 工具顯示出來,同時亦要將這些資料作改動後,Save 起來做一個 Material Script,工序可以說是甚為煩瑣。

雖說工序是甚為煩瑣,但一想到在 MilkShape3D 中設定的 Material 資料過於基本,而自己也不想「 編寫 Material Script 」且不能方便地看其效果,所以一個可設定簡單 Material 資料 ( 限制於可設定資料量 ),及可以即時看到效果的 Material 工具,仍是一個不二之選。

Sunday, December 30, 2007

新一年的開始

近日我在 MilkShape3D 中製作 OGRE 的 Plugin 工具,其中一個 Plugin 就是做個 Level Viewer 出來,但是我用的是自己的一套 Level Model 資料,要做個「一按即看」的 Viewer 工具很複雜,還好的是,先 Export 然後再按 Viewer 也不會破壞「不離開 MilkShape3D 便做完所有工序」的條件,所以便選擇了用 Viewer 看 Level 之前要完成 Export。

要用 OGRE 來製作一些工具是很麻煩的,最不好的事情是,它不時因為有重複名字的物件 ( 例如:SceneNode、Material ... 等 ),而出現 Exception 令程式 Crash 掉,很令人洩氣 ( 為何不設定為不理會重複的物件呢? )。而我擺放 Model 的資料夾內,會有很多其他的 Model,或 Material script 等的資料,會出現很多重複物件的問題,我後來想到了一個方法來解決,就是要用 Viewer 時候,在 MilkShape3D 的程式資料夾下,建立一個臨時的資料夾,然後將 Viewer 要用的所有資料 ( 如 Level 檔案、Material script、Texture ... 等等 ),都複製一份到臨時資料夾,用完 Viewer 之後便將這個臨時資料夾刪除掉,這樣便不需要理會重複物件的問題。

在 2008 年,我先會致力於 MilkShape3D 的 Plugin 工具製作,在完善 Level Viewer 後,亦會研究 Character Model 及 Animation Viewer,甚至是 Character Setup 工具,我希望令 MilkShape3D 能夠處理大部份製作工序 ( 當然是除了 Programming 呢 ),那麼對於我製作動作遊戲便更加得心應手了。

順道在這裡祝大家下一年做遊戲也一樣順利

Monday, December 24, 2007

聖誕節快樂

一年一度,聖誕節又到。

● 對一樣事物有期望,有時候換來的只有失望,例如早前期待的遊戲 Kane and Lynch

● 雖然是預期中的事情,但是 Call of Duty 4 還是非常非常地好玩。

● 決定了,聖誕節還是給自己一份聖誕節禮物吧。

● 之前看到一個有趣的網頁,一種心靈的慰藉。

● 有時候 OGRE3D 也會給我一點甜頭,很簡單地完成了加 / 減物件到骨骼上 ( 例如:手中加入武器 )。

● 近來因工作關係,接觸過 Flash 的 Action Script,意外地從中學懂了一些 Coding 的技巧。

● 以往曾經在 MilkShape3D 中做過的一些 Plugin 工具,因為暫停了 Final Spike 的開發,而沒有隨 MilkShape3D 而更新,這兩天的假期節目,就是要重建這些 Plugin 工具了 ( 為了準備重新啟動開發 ),又是 Win32 API 呢。

Tuesday, December 18, 2007

要做還是不要做

今天在 GameProducer.com 中看到一篇文章 ,這文章主要是一位 game producer 給 GameProducer.com 的 Email,內容提及的是一些遊戲製作的經驗談,非常值得看看。

當中講及一些話題:Risk Management、3D vs 2D ..... 等。其中不乏說的的當然是有沒有足夠資金,各方層面的營運,以及要不要做 3D 遊戲,我看完之後亦有點得著,而且亦想到一些自己的論點。在外國的遊戲業界中,技術層面是遊戲製作的主要方向,這點原本是好的,但先進技術是要用人材建構的,這樣便會令一間遊戲製作公司負擔沉重。但回看香港這片土地上,有足夠技術的人材究竟有多少呢?

看看眼下遊戲製作業界中,很多都是「追技術」的人,而且在 Production 工序方面多是很複雜,導致製作緩慢而令遊戲難產。但到底甚麼是簡易,甚麼是複雜?當然每間製作公司的計算都不一樣,例如就我個人的遊戲「 Final Spike 」而言,很多人說這遊戲是個中型遊戲製作規模,但在我眼中,她卻是個小型遊戲的規模,因為她的製作工序不複雜,我只是用 MilkShape3D 和幾個免費工具,一個人慢慢地做出來的。

遊戲製作的工序上是複雜還是簡單,對我來說就是遊戲製作上的 Risk Management,只要這方面控制得好,製作遊戲開支就會相對自然地減低了,那麼遊戲製作公司就有更多的機會,製作不同種類的遊戲推出市場了。

Monday, November 26, 2007

重整 OGRE 的工具

支援 OGRE 的工具一向都很多,主要的 3D Content Software 都有 Exporter 可以使用,我常用的 MilkShape3D 也有 Exporter。近日我想整理一下 MilkShape3D 的 Exporter,因為改用 OGRE 以來,Exporter 中對於導出 material 檔案的功能是缺乏的,所以要加進這個功能,就這樣我的週末節目就是製作 Exporter 了。

初時用 OGRE 的功能來導出 material 資料,但很不順利,因為 exporter 不時就會 crash,追查了半天時間才發現是 Release runtime 問題。Runtime 用對了後又發現,OGRE 的 Material Serializer 生成的 material 檔案,有些設定是不能導出的,後來要自己用寫入 Text 檔案方法來完成,又沒有了半天時間。

雖然進度慢了一點,但暫時在 export 出來的 material 檔案中,都可以有基本的資料了,下一部就是加一個 Dialog Box,加一些可設定的資料 ( 又是 Win32 的 API ),再 export 出 material 檔案,計劃好像很完美呢 .....

Thursday, November 22, 2007

做新東西是用來簡化舊東西

我本身就是喜歡簡單的人,無論生活上,又或編寫程式。

上星期有機會,和一個同事開了一個 Side Project,一隻 2D 動作遊戲,就這樣我便重拾起 2D Graphics library。我用了數天時間,將 SDL 包起來,效果也不錯,而且在當中學到了新東西,這個新東西就是 Game State Manager。

在 Internet上都看過很多有關 State Manager 的文章,在新買的 Game Programming Gems 5 中亦有一篇講解 State Manager 的,但我總是覺得複雜,那我就藉由這個 Side Project,開始了自己的 Game State Manager 製作。有趣的是,我做完這個 Game State Manager 後,發覺可以將整個遊戲的架構簡化了,我以往要做個 Demo,main.c 都會是這樣的:

bool Game_Init() {
 ...
}

bool Game_Render() {
 ...
}

bool Game_Update() {
 ...
}

bool Game_Exit() {
...
}

bool Game_Main() {
 Game_Update();
 Game_Render();
 ...
}

void main () {
 InitOGNG();
 Game_Init();
 while (1) {
  if ( IsClosed() )
   break;
  Game_Main();
 }
 Game_Exit();
 EndOGNG();
}

遊戲的主程式一定要在 Game_Main() 、 Game_Update() 內,在這裡面才是真正的遊戲的運作。但是有了 Game State Manager 後,main.c 變成了這樣:

void main() {
 InitOGNG();
 StateCreate("test01", demoStart,
demoUpdate, demoPause, demoExit);
 while (1) {
  if ( RunOGNG() == false )
   break;
 }
 EndOGNG();
}


上面的 demoStart, demoUpdate, demoPause 及 demoExit 都是 Function,StateCreate 就是建立一個新的 GameState 和登記這幾個 Function 進去,而 RunOGNG() 內都會運行每個已登記的 GameState ( 就是 demoUpdate 了 ),差不多就是這樣了。相比起來,有 Game State Manager 的 main.c 確實是簡潔很多,而且亦可以在一個 Game State 內建立另一個新 Game State,已存在的 Game State 可以 Pause 暫停下來,或是刪除掉。這樣便可以很簡單地實現,由 Main Menu 進入 Option Menu,設定完後回到 Main Menu ,又或是遊戲進行中,暫停遊戲進入 Pause Menu 之類的功能。

Monday, October 29, 2007

文章、準備

上個星期,買了本簡體字的「 Game Programming Gems 5 」,看到裡面有一篇叫做 Component Based Game Objects 文章,細閱內容後,發覺原來自己在製作新的 Og-NG'3D 時,也用了差不多的概念,當然沒有書中所說的那麼完整及完善了。

其實我用的都是以 Manager 方案為主,要用 Object-A 的東西,便和 Object-A Manager 要求一個,要 Object-B 就和 Object-B Manager 要一個... 如此類推,就這樣,我在製作遊戲時,我的主要 Game Object 都是儲存著一些 Object 的 ID,而非真正的 Object ,雖然我不太清楚這種方案的好與壞,但我對這方案就是感覺很舒服。

之前數天也在網上看一些有關 Data Driven Programming 的資料,其中看到一篇文章提及 Table-oriented ( data-driven ) programming,當中所說的有點像我在幾年前的 Function Pointer 一文,用一組 Data list 來處理一大堆 Functions 。我的文章當然是沒有那麼大價值,但我卻很喜歡這個方案,因為比較直接簡單易明,我之前所發表的 Final Spike v1.0.0.1 Alpha 也是用了這技巧製作。

上星期完成了一些 Og-NG'3D 的瑣碎功能,同時亦初步開始了 Network 的研究,我選了一個叫做 eNet 的工具,這工具出奇地令我很快便明白它的用法 ( 我一向都是個 " 摸索很久" 的 Programmer ) 。現在覺得 Og-NG'3D 的功能已經頗成熟 ( 除了 Network 部份 ),應該可以開始製作遊戲了,其實我亦有幾個遊戲主意想做,但是我希望能夠做一隻完整版本的 Final Spike,以現時 Og-NG'3D 的功能來說,要從舊版本移植過來,也需要不小的改動,當然是希望加入我最希望的 Network 2-Play 了,相信在短期內可能會開始製作新的 Final Spike 呢。

Wednesday, September 26, 2007

九月雜談

● 已有多年沒有 ‘ 期待一個遊戲發售 ’ 的感覺了,上一次是兩年前的「汪達與巨像」。這幾個月來都在期待一個新遊戲,「 Kane & Lynch: Dead Men 」,為什麼呢?遊戲是由 I O 公司開發,當中可以說是我眼中的夢幻組合,Hitman 系列的 Producer,Freedom Fighters 的開發組。一個字:「 」! ( 要等到 11 月...... )

● 上星期又是一年一度的「 Tokyo Game Show ' 2007 」,有沒有心水推介呢?說實話,好像沒有......

● 很有趣,看看這幾年的次世代遊戲,都是圍繞著三種圖像技術:「 HDR Rendering 」、「 Normal Map 」及「 Shadow 」,當中 Normal Map 是我最為大惑不解,因為這技術早在 DirectX 7 年代已經提出,但竟然在這兩年才大量使用,據知更有些開發商對其不以為然,奇怪。

● 很喜歡看 GameTrailers.com 中的 Bonus Round 節目,新一個 Episode 中討論一個有趣的題目:「 Japan : Culturally Biased 」,其中有些點題很好,我覺得對 Game design 是有點幫助的。

● 我自己是個 C 人,我喜愛用 C 的其中一個原因,是因為它比較 low-level,又比 assembly 為 high-level。但是當要工作的時候,C 是不入流的,要用 C++,但是連 C++ standard library 也不懂使用的我,在 C++ 的工作環境下,壓力並不是一般的大。有時候會在網上,看一些 C vs C++ 的文章,這些文章可以給我用來平衡心理呢,要不然,有一天我可能會倒下來的呢。

● 之前我曾經多次說過,我不太喜歡 OGRE'3D,用了這麼一段時間,這個感覺仍然存在。但可惡的是,除了自己所製作的 Ngan-GINE'3D 外 ( 額外而又自私的論點 ),我的確是找不到一個比它有更好 support 的引擎。曾經看過 Irrlicht,但是它的 MilkShape3D 支援是錯誤的,亦沒有多種工具可以使用。亦證明了一個事實,世界上是沒有免費午餐的。

● 近日在追看電視劇「 Heroes 」( 第一季 ),看到故事後來的發展,有點不自然的感覺,何解呢? ( 個人感覺而已 )

Saturday, August 25, 2007

Game Engine, Game Play

近一年來,發覺自己在 Game Engine 和 Game Play 的編寫程式上,有著明顯的轉變,那是甚麼轉變?就是對 Game Engine 開發很難提起興趣,而對 Game Play 方面會放多一點時間。

曾經想過為何會有這種想法,可能是因為以往多年來,都在做一些 Game Engine 的研究。在初時接觸 2D 圖像,Load 一張 PCX 圖,顯示出來,在電腦顯示 Memory 中畫出一粒 Pixel,繪出一個 Sprite,如何做 2D Tile-Map Scrolling,試做 2D Action 和 Shooting Game。到後來接觸 3D 圖像,認識 3D Coordination system、Vector、Matrix、Vertex、Polygon、Multi-Texturing、Skinned Mesh、Skeleton Animation、Portal System ... 等等,做個3D Game Engine,然後做個3D Game。

感覺就好像,研究了Game Engine 很久,已用了很多時間做一些基礎事情,不應該再停在那裡,應該實實在在向另一個方向走,例如研究 Game Play 編程。但有趣的是,我覺得 Game Play 編程其實並不是屬於「程式編寫」的一種,而是好像砌積木一樣,將一大堆已有的 Code,如何整合一起成為一個遊戲。有時候會想,這個不太像做 Programmer,反而是有點像 Game Designer 。

Saturday, August 11, 2007

八月雜談

火狗告別
  確實是有點突然,我個人覺得火狗工房是本港少數成功的遊戲製作公司,而且她還能夠在日本打開市場,有點惋惜。其中說道使用第三家的遊戲引擎時很糟,這也是我以往說過,遊戲引擎開發公司沒有開發遊戲來配合,是不太適合的呢。

Carnival of Game Production - Fifth Edition
  當中有些 Blog 內容很好,不訪看看。

◎ 一隻 Click & Find casual game 在頭一個月有 US$ 250,000 銷量
  真的是難以置信,第一個月已有接近二百萬港幣收入,Casual game 市場真是叫人驚訝。

◎ 工作進度落後令我精神緊張,導致胃抽筋
  痛了四天,還未舒緩下來,非常不舒服。上一次的胃痛也是工作進度問題導致,已是三年前了。

Saturday, August 04, 2007

做個好玩的遊戲?

前天和朋友史艷文兄閒談,當中談及一隻 Capcom 新的 Wii 遊戲「 寶島 Z 」,我們都認為 Capcom 懂得做 Wii 遊戲,也很懂得 Promo 這個遊戲。其間我說了一個話題,「 寶島 Z 」這類 Action Puzzle,很多玩家都只會玩一次,因為解謎方法都只有一兩種,很難令玩家重複再玩,但史兄說了一點:「不是 Action Puzzle 的遊戲也是只得一種完成方法,但多年來你也是在玩呀。」

完全對,我一直都鍾愛的 Action 遊戲,都是只有一種完成遊戲的方法,看來我是有點迷失了。後來亦帶出了第二個話題,現在的玩遊戲的年輕玩家,是被漂亮的3D圖像養大,而我們年齡層較高 ( 老 ) 的玩家,不是被漂亮的圖像養大,而是被 Gameplay 養大的。那麼一個遊戲應該是怎樣才會令玩家一玩再玩呢?這個跟本是沒有標準答案,舉個例子:日本有個新的 Online 遊戲,叫做「 ViZiMO 」,一個自由度很大的遊戲,但看過一些這遊戲的片段後,我不知道這遊戲有甚麼可以玩?另一個例子:PS3 將會有個遊戲,叫做「 PixelJunk Racer 」,圖像上真是懷舊至極,但我看過其 Gameplay 片段後,不禁叫了一聲「 好!」。

我覺得,遊戲對玩家來說是否好玩,都會是由玩家的個人觀感出發,如果玩家不喜歡玩動作遊戲,我的「 Final Spike 」永遠不能吸引他 / 她。反觀我自己亦然,就算「 Star Craft 2 」是多麼的受注目,我亦不以為然。那麼做遊戲的人怎樣好呢?試想想剛才我所說的,那麼做一個自己喜歡玩的遊戲,就是做一個好遊戲的第一步,然後再在上面加一點點「客觀公恩數」,那就是一個好玩的遊戲了。如果遊戲有人欣賞的話,那麼就一定會有人購買的,而且這遊戲亦會令玩家一玩再玩。

Tuesday, July 31, 2007

Final Spike v1.0.0.1 Alpha

正 式 公 開 下 載 ! (7.52MB zipped)

(Last update : 2009-May-10)
File Factory 下 載
fileQube 下 載
Easy Share 下 載
filehosting.org 下 載



System Requirement :
- Pentium III 800 mhz with 128MB Memory or above
- 3D display card with 32MB, DirectX7 support or above
- 20MB Harddisk space
- Joystick (optional, better gameplay experience)

Saturday, July 28, 2007

「Final Spike」'06 即將發佈

近日開放下載,敬請留意。

p.s. 發怖的版本,將會是去年2006年4月的版本。

Saturday, July 21, 2007

沒有文獻的麻煩

上一回的那些 Weight 怪問題,令我不其然要作出妥協,但到了今天卻有個新發展,因為我在無意間,發現了為什麼會出現那些 Weight 怪問題,原來問題是出於,MS3D 中的 Vertex Weight 資料,在排列數序上和 OGRE3D 的倒轉的。例如:MS3D 中 Vertex 的 Weight 數序為 [ 20% + 80% ],在 OGRE3D 中卻是 [ 80% + 20% ]。

這事件說明了,沒有文獻說明的 SDK 及 API,就是令人迷惑不已的,小小的問題就是不容易發現原因及解決之。

早前我曾經說過,新的 Ngan-GINE'3D 差不多完成了,但這兩個星期,都在做一些整合的工作,原因是,之前一些原 Ngan-GINE'3D 中的工具,都是另外放到一個 Library 中,和 OGRE3D 的部份是分開的,近日就是將這些工具都整合起來,進度方面也不錯,主要部份尚欠將 Newton Game Dynamics 套進去,希望能在短期內做好吧。

近來有朋友叫我,將之前發報過 Trailer 的「 Final Spike」,放上網給其他人也玩玩,其實這個建議我亦曾經想過,可是早前太忙碌,後來忘掉了,現在也可以再想想呢。

Sunday, July 08, 2007

奇怪的... Weight

Weight OK ?早前我說過,自己動手改動 MilkShape3D 的 OGRE3D Mesh exporter,令其支援 MS3D 新的 Vertex Weight 功能。但我發現了一個很奇怪的情況,就是當 Vertex 的 Weight 不是 ( 50% + 50% ) ,便會出現錯誤,例如 ( 70% + 30% ),或者 ( 50% + 30% + 20% ) 都會出錯。

我初時以為是因為,那些 Weight 數值加起來不是 100%,才會有錯吧,但是在 Debug 中看看資料,卻沒有錯誤,它們的數值加起來確是 100%。我怎樣的試,但結果都是非 ( 50% + 50% ) 便會有錯,究竟是怎麼一回事呢?

我還未找出原因,也不太想糾纏下去,我的做法可能都是妥協罷了......

Saturday, June 30, 2007

近來的遊戲開發構想

我總是覺得,遊戲引擎的製作,應該針對「遊戲種類」的。但一些基本的功能,在任何的遊戲引擎中亦要存在,例如圖形渲染、輸入及聲效功能等等。近日我都在想,究竟一個遊戲引擎的基本功能要有那些?我覺得在幾年前,在我的舊網頁中所說的,應該是最基本的了,因為那些功能是做一隻 3D 遊戲的基本,但是還有甚麼呢?我想應該是 Network 及 Script 引擎吧。

有關 Network 及 Script 引擎,我真的要投降了,這兩方面我從未接觸過。但是若然我自己真的要做個完整的遊戲,那麼這兩個近多年來盛行的技術,始終要學會的呢。如果要選擇先學其中一樣,那麼我會選擇 Network 部份,因為我想,如果能在「 Final Spike 」中加入 Network Play 的話就最好了 ( 我還是想完成 Final Spike 呢 ) 。

用 OGRE'3D 有時候亦有令我高興的時候。話說我早前已做了一個 Mini-Map,另外用自己的方法做了個 SkyDome ( 非 OGRE'3D 內建那個 ),但我希望在 Mini-Map 中,不顯示那個 SkyDome ,我後來用了那個 setVisibilityMask 來控制那些東西要 Render 出來,藉以剔除那個 SkyDome 不在 Mini-Map 中出現,簡單而且有效。

Thursday, June 28, 2007

討厭的...... ( 牢騷 )

眾所週知 ( 有點自大... ),我的遊戲開發工具是使用 MilkShape3D 的,而 MS3D 在早幾個版本中,已加入了 Vertex Weight 的功能。在 OGRE3D 中,亦有給 MS3D 用的 Exporter,但奇怪的是,就是未看到 MS3D 的 OGRE3D Exporter,有支援這個新的 Vertex Weight 功能,那我便在 Forum 中問問,OGRE3D 的主理人答覆,說已在最新的 MS3D Exporter 加進了。

但是,我下載了最新的 OGRE3D Exporter 及安裝後,卻不能夠正確地 Export 出帶 Vertex Weight 的 Mesh ,究竟是怎麼一回事呢?但是 OGRE3D 的主理人卻說應該沒問題的,在滿腦子謎團下,再下載OGRE3D 的 Source Code ( 內連 Exporter Source Code ) 看看,但我發現的是,Exporter 的 Source Code 中跟本就沒有加進 Vertex Weight 的功能,感覺就像被人欺騙了。

最後還是要靠自己了,用了三晚的時間,將 Vertex Weight 加進這個 MS3D 用的 OGRE3D Exporter。

Tuesday, June 19, 2007

寫程式的速度

我所說的,不是程式的速度,而是小弟寫程式的速度,確實是有一點兒緩慢。

一個例子,因為我的新 Ngan-GINE'3D,是沒有辦法改變設定的 ( 如:解像度,是否 Fullscreen... etc ) ,那麼我便想製作一個 Win32 模樣的 " Config-Maker " 出來用。問題出現了,我從沒試過用 Win32 的 API 來寫程式,究竟要如何開始?我啟動了 PellesC,她內部有一個 Designer 工具,用來製作 Win32 程式的,這個工具頗簡單,三扒兩撥便可以設計好一個 Win32 程式的外型了。可惜的是,我完全不知道那些 Controls 是怎樣用的,甚麼 ComboBox、ListBox、TextBox,甚至一個簡單的 CheckBox 我也不懂怎樣去處理。再看下去,又要有甚麼 SendMessage、 SendDlgItemMessage,頭昏腦脹下去 Internet 看看,但看到的都是一些複雜的 C++ class 例子。

到了最後,我用了大約兩天的時間,才完成這個只有兩個選項的 Win32 程式,已足夠令我質疑自己的編程能力。

Sunday, June 17, 2007

OGRE 下的追尾 Camera

要用 OGRE,來做以往用 Direct3D 做過的追尾 Camera,真的有點困難,因為 OGRE 在 Concept 上真的很不一樣,令我難以捉模。用了差不多兩天的時間,才能做得到,可惡。

我進一步不喜歡 OGRE 了,不是因為她的複雜,而是她的 Pipeline,我就是弄不明白。Camera 究竟是在何時更新的?那個時間可以做 Ortho View?究竟有沒辦法簡單地做 2D Render?以上種種問題,對我來說,跟本就是一個「」!

Saturday, June 02, 2007

妥協後的玩具

究竟要自己做 Collision Detection 有多難?當你有要求的時候,確實是很難。

能夠運行是不難的,但是物件的移動速度,會直接影響結果才是最難。物件現時的位置,和下一個 Step 的位置差距,會導致物件由 A Sector,突然移到 B Sector,真的可惡。在不得要領,及沒有解決方案的情況之下,可以做的就是妥協,還是用 Physics Engine 做吧,幸好我只用了一個星期的空餘時間做實驗,就當是一種學習過程。

三隻巨像終於入手!「 汪達與巨像 」的 Figure,前兩天到手了。這套 Figure 每隻是 718yen ( 約HK$ 50 ),但卻被炒高至每隻 HK$150 ,幸好我家姐到日本旅遊,順道幫我買了幾隻,雖然不能買齊一套 7 隻,但也很開心 ( 圖中有巨像 5、12 和 16 )。

Sunday, May 27, 2007

遊戲引擎補完計劃

將 Ngan-GINE'3D 的圖像部份,轉用 OGRE3D 的其中一個原因,是希望能夠達到所謂「跨平台」的目的,但是在原 Ngan-GINE'3D 的其他功能,都是用上 DirectX 的 ( DirectSound、DirectInput... etc ),為了達到跨平台,早前我決定要將 Ngan-GINE'3D 的其餘功能,都轉用其他跨平台的 3rd Party Library。

首先是自家的數學函數部份,不可以再用 Direct3D 的數學工具 ( D3DVECTOR3、D3DMATRIX... etc ),全部要轉為自己的數學工具,當然是以基本 float 這類資料為單位呢。

在 Input 部份,真的沒有選擇,只有「 OIS 」( Object Oriented Input System ),作為Keyboard / Mouse / Joystick 輸入。

最後是 Sound 聲音效果問題,我之前看過 OpenAL,但是這個真的很複雜,對我來說甚為不便。最後我發現「 irrKlang 」這個 Sound Library,用了大半天時間便成功代替了之前的 DirectSound,而且還支援多種聲效檔案格式,也算是不錯的。

就這樣,新 Ngan-GINE'3D 已接近完成 ( 這樣說的原因是,可能還有些小問題呢 ),整個引擎只是用了五個 DLL,感覺非常輕巧,而且所用的 Library 都是 Open-Source 及免費的 ( 只要不改動核心部份 ) ,基本上整個 Ngan-GINE'3D 可說是接近零成本 ( 使用 Visual C++ ExpressPellesC,都是免費的 ),感覺非常的良好。

Thursday, May 24, 2007

令人討厭的OGRE

今天是假期,趁有空閒日子便想試試「人手規劃」Collision Map,當開始了一會兒後,發覺問題出現了,居然在 OGRE 中 Load 入的 Data,和原來的 Data 有不同,而不同的地方居然就是 " 法線 Normal ",令我想從最簡單的方法開始也不能。作了良久的修改,但問題始終不能解決,真的很可惡,到了最後,我卻要低頭,將 OGRE 中 Load Data 的部份刪除,要用回 Ngan-GINE 中的 Loader。

有時候,3rd Party 的引擎確實會令人感到討厭的。

Monday, May 21, 2007

Level Map Collision Detection

早前我說過,不想再用 Physics Engine 來做 Collision Detection,另外亦構思了一種方法來代替,在過去的週末,也正式開始了新構思的實驗。

我的方法其實很簡單,就是「人手規劃」方法,原先我的 Ngan-GINE'3D 中的設計,已經將 Render 和 Collision 的地圖作分開處理,這樣其實已經對人手規劃法埋下方便的伏線,加上我的 Collision 地圖資料已經是 Sector 形式儲存,用於人手規劃法時亦不需要改寫,在種種理由下,似乎不得不實驗一下這個「人手規劃」方法。

朋友問道:「會不會有 Precision 問題?」
我答:「不知道,但是數年前的 Final Spike 參賽版本,都是以這類形式製作,相信問題不大。」

Saturday, May 19, 2007

Friday, May 04, 2007

為什麼要 Physics Engine ?

我近來有個想法,就是不再用 Physics Engine 來做 Collision Detection,反而用最簡單 Point Plane 及 Polygon 的 Collision,為什麼我會這樣想呢?原因有而下幾點:

1) Time Step 問題,很難做到不同的 PC,有一樣的效果
2) 對 Low-end PC 是一種沉重的負擔
3) 程式變得複雜,導致難以控制
4) 如果遊戲中沒有 Physics game-play,變得沒意義

確實,沒有 Physics Engine,那麼 Collision 就要自己做,而近來除了想不再用 Physics Engine,亦想著要怎樣才可以代替她,而又可以盡量做到小問題,我的構想也差不多成型了,只要實踐來證實可行,希望有時間試試吧。

Tuesday, May 01, 2007

現實中的千與千尋

今天是假期,電視台亦在今早播放日本卡通電影「千與千尋」,我亦有重溫這套卡通。「千與千尋」是一套很有寓意的卡通,往往看後也會令我回想身邊的人和事,以及自己處事方法。

無知的父母,迷失的小孩,利慾的婆婆,沒家的白龍,被污染的河神,物質主義的無面人,被過份寵愛的嬰孩... 等等,環顧周圍,亦不難發現身邊都有剛才所說的人和事。但是世界並不會因為這些事而停下來,每一秒鐘也有不同的事情發生,我們會因為周遭有很多事發生,而遺忘了很多對自己重要的事情,就正如「千與千尋」中,忘掉了自己的名字,被迫留在神隱的國度。

Sunday, April 22, 2007

久違了的模擬器世界 II

昨天看過 Dreamcast 的模擬器後,今天又想想,既然 Dreamcast 也可以如此精彩,那究竟現在的 Sega Saturn 模擬器會是怎樣呢?剛好看過一些模擬器新聞,知道最好的 Saturn 模擬器「SSF」,在今天推出了新的版本,我便好奇地下載來試試。

又是一個意外驚喜,原來現在的 Sega Saturn 模擬器的完成度已近完美,我便第一時間拿出「 Panzer Dragoon II ZWEL 」來試試。真的很感動,可以全速地再玩這個經典遊戲 ( 我覺得 ),太好了!!

Saturday, April 21, 2007

久違了的模擬器世界

曾幾何時,我很喜歡模擬器的,例如:紅白機、超級任天堂、及各種老舊的街機模擬器等等。每每為了重溫經典,都會上網看看有甚麼新的模擬器推出,讓自己可以再次回味的。但是近幾年來,模擬器的發展已經不如以往,自己亦甚少看有關模擬器的新聞了。

今天沒事做,心血來潮的到訪一些模擬器新聞網站,看到了一篇新聞,原來在四月初有一個新的Dreamcast模擬器出來了,它叫做「nullDC」。好奇地看看有關報導,發現它是個很不錯的模擬器,便以一個嘗試的心態去試試,怎料真的令我意想不到,完成度及速度均非常地高,我更加能夠在全速下玩「Virtua Tennis」。

Virtua Fighter 3 tb Virtua Tennis

Sunday, April 08, 2007

遊戲開發,還是引擎開發?

今天看到 GameProducer.net 的一篇 Blog:
Are You a Game Developer or Game Engine Developer

沒錯,這篇 Blog 內所說的情況,都是很多想從事遊戲開發的人的迷思,究竟開發遊戲要不要先學習開發引擎?這個問題我在很多年前已經找到答案,那時候是香港的 Internet 服務的起步,我發現了網上原來有多個 2D 遊戲引擎 ( 而且還是免費的 ),就從那時候開發,我便不再想自己做個 2D 遊戲引擎了,只去學習使用那些引擎。

但在大約七年前 ( 2000 年 ),我初次接觸 3D 遊戲開發,那時候的我對 3D 數學一竅不通,我就是不能暢順地學習開發 3D 遊戲,所以我便決定自己做個 3D 遊戲引擎,希望能從中學習 3D 數學。我用了兩年的工餘時間,製作出自己的 3D 遊戲引擎「 Ngan-GINE'3D 」,再用大約三個月的時間製作「 Final Spike ( 參賽版 ) 」,在這個過程裡,令我對 3D 遊戲開發有更深的了解。到了近期,我亦能有效地將 OGRE3D 包裝起來給自己用。

「 Are You a Game Developer or Game Engine Developer 」這個問題是否也迷倒您呢?看到很多中外的業餘遊戲開發人們,都會在這個問題下打轉,說實話,我亦不時會被這個問題所迷倒,但當這發生時,我會盡快地調整一下心態,走回想走的路上,那麼您又如何呢?

Wednesday, April 04, 2007

有時間玩Games

這個星期以來玩了兩個遊戲,一是「 Virtua Tennis 3 」,另一個是「 T.M.N.T. 」。這兩個遊戲都是新出來的,但名字大家應不會陌生吧,一是知名的體育遊戲,一是知名的卡通片 / 電影。

先說說「 Virtua Tennis 3 」,遊戲的圖像很好,用我的電腦玩 ( CPU 不是太強 + 入門級的 3D card ) 也有不錯的速度,遊戲中亦有很多小遊戲,非常耐玩。玩了這遊戲良久後,總是有個奇怪的感覺:「幾年前的 GBA 版本真的很好玩。」;有這個感覺的原因是因為,遊戲內容和數年前的 GBA 跟本沒大分別,只是 3D 圖像很美罷了,對手的 AI 也有增強,但是遊戲的進行真的是一模一樣,說罷也有點懷念 GBA 版本。我不是說這遊戲不好玩,如果沒有玩過 GBA 版的,這個「 Virtua Tennis 3 」真的不容錯過的 ( 而且有很多正名的現役網球手 ) 。

「 T.M.N.T. 」玩了一會兒後,有種奇怪的感覺,初時真的想不出是甚麼,只覺得好像在那裡看過似的。幾天後,從網上看到一個 PS3 遊戲,呀!就是她了,「 T.M.N.T. 」就是像這個遊戲:「 Ninja Gaiden ( 忍者外傳 ) 」( 這遊戲原本就是 XBox 的,近來會移值到 PS3 上 )。可惜的是,遊戲的進行過程就是走來走去,走完一大段路之後,消除數隻嘍囉之後,再走一大段路,在走路途中是沒有敵人的,只需要跑跑跳跳爬爬之類便可以,和嘍囉打鬥時,亦欠缺打擊實在感,如果玩過或看過「 Ninja Gaiden 」的,很自然地便會比較起來,但「 T.M.N.T. 」卻是完全比下去。

Friday, March 30, 2007

話說一年前...

Final Spike Q有一天有個朋友打電話問我,我的「Final Spike」中的角色能否轉做 Q 版,我後來用了不足兩天的時間,將遊戲中的角色 3D Model 轉做 Q 版,就這樣一隻「Q 版 Final Spike」就出現了。今天從電腦中看到,覺得很有趣,所以便製成幾段短片給大家看看:


FS-Q 1 ● FS-Q 2 ● FS-Q 3 ● FS-Q 4
( 建議先將片段下載後再看 )

Saturday, March 17, 2007

當 Milk 在 Shape 的時候

最近手上的工作已完成九成多了,但不明所以地仍然有點忙碌,很奇怪的感覺。

Vertex Weight今天有機會閒著,便上網看些新聞,赫然發現 MilkShape3D 推出了新版本,而且在這個新版本中,居然加入了眾所期望的 Vertex Weight 功能,實在令我感動不已,因為開發者曾經多次說過只會在 MilkShape3D v2.0,才會加入這個功能的。我玩了一會兒後,還未掌握當中 Weighting 的設定,而且在更新履歷中的一項新功能 :
  • added: vertex extra, can be used for color or other info
我仍然未知道可以在那裡操作,雖然有點迷茫,但相信在短期內便能夠適應的了。

Sunday, February 25, 2007

再想一想Indie Game Developer

忙了很長時間,終於能夠在這個星期日稍稍靜下來,寫寫 Blog 了。

有幾天在想,在香港要做個 Indie Game Developer,究竟成本多少?不少的外國 Casual / Indie Game Developer,都是以開發 Casual Game 類遊戲為 " Side Business ",成功轉為全職的例子比較少。前陣子看過 GameProducer.net 的其中一篇 Blog,內有多個 Blog Link 談及 Indie Game Developer 的文章,很有參考價值。

香港與外國的成本比較,相對是比較低的,若然外國有成功例子,香港亦應可以做到,問題可能只在於發行上的執行,包括推廣、包裝、DRM、支援...等等,以上都是香港比較不利的因素,如果能夠解決,相信香港發展 Casual / Indie Game Developer 行業是可為的。

最後結論,Casual / Indie Game Developer 是一個 Side Business,亦即是在正職工作時間外,製作簡單遊戲賺取金錢。可惜在香港很多職業的工作時間,也是一星期做六天,每天朝十晚十的絕望工時 ( 我近期亦是如此 ),能否真正成為 Casual / Indie Game Developer 亦是一個謎團。

Wednesday, January 31, 2007

「Lost Planet」Graphics講座

「Lost Planet」Graphics 講座

一看標題就明白,不用多說。( 可惜的是,全日文。)

Sunday, January 21, 2007

雜談

「Gears of War」全球賣出三百萬隻。

14 Ways to Motivate Yourself

● 在工作的地方多了一部 Nintendo Wii,終於試過了 Wii,非常非常的有趣。

● 家中有些舊的電腦配件,總是想將它們送到一些電腦回收中心處,但一想到要將一個頗重的14吋 Monitor 搬到老遠,就令我卻步,究竟何時才能將那些舊電腦配件送走呢?

● 一年多後,我仍然很喜歡「Shadow of the Colossus ( 點擊 English(UK) )」。

Tuesday, January 16, 2007

十個失敗的理由

這個不是說做人處事,又或者是一般工作,而是指「遊戲製作」,大家不妨看看:

The 10 reasons you will never finish your game

Saturday, December 30, 2006

2006年回顧

在 2006 年,自己確實是有很多收獲,在 2007 年來之前,在這裡做個簡單回顧吧。

在今年四月,我發報了自己製作的遊戲「Final Spike」片段,得到了一些正面的評價,亦從中認識了多位在業界中的新朋友,可以說是個很好的經驗。而我亦在努力,希望有一天能夠真正完成這個遊戲,說到底這是我第二個「可以玩」的遊戲,不想輕易將她丟下來。很多朋友都說,如果「Final Spike」能夠連線雙打或對戰,將會是個不錯的遊戲,所以在未來的2007年,應該會嘗試加個 Network 功能進 Ngan-GINE'3D 中,希望可以吧。同時,我亦慢慢地將圖像引擎 OGRE,來代替自己的 Ngan-GINE'3D 引擎的圖像部分,期間的進度雖然慢了一點,但是在功能方面已經達成 90% 了,相信只要運用她來試作遊戲,便能夠完善功能的了。

今年亦有一個頗為意外的得著,這個不是甚麼實際的東西,而是一種理論比較的認知,從兩種理論上,我自己得出了一個答案,當然這個是個人理念上的得著,但是卻令我從中學習了一些重要的新知識。

得著很多之餘,其實亦有不少事情,是要提醒自己的,例如一個很重要的:說話沒分吋。有時候自己在說話方面,確是不懂分輕重,總是會在不為意下說話太直接或是用詞太重,希望朋友們都能夠原諒我,在 2007 年 ( 及往後 ) 希望自己不會再開罪別人吧。

Friday, December 29, 2006

Yoga ~ ?! One Piece ~ ?!

HA !! YEAH !!

開發工具的願望

如果要做一個 Indie Game Developer,確實對工具的選用很挑剔,因為 IGD 可以用的錢不多,不會動不動便用 3DStudio MAX 或 MAYA 這類怪獸軟件,因為價錢太貴了。但是有時候一些廉價的軟件,卻不能滿足遊戲製作的要求,例如我常用的 MilkShape3D,沒有 Multi-Texture 之類方便的功能。

這幾天因為台灣的地震天災,令 Internet 都癱瘓了,但我很努力地留意著 Blender3D 的網頁,為什麼呢?是因為下一個版本的 Blender3D,有個新的功能,就是支援 Multi-Texture Layer 了。這個可說是 IGD 的一項喜訊,IGD 就是需要功能強大且又廉價的工具,Blender3D 原本是個很好的選擇 ( 何況她是免費的 ),這下子看來,會吸引到不少人轉用 Blender3D 也不定,最起碼我是被吸引的一個啊。

但是,這幾天以來,我仍不能夠到訪 Blender3D.org 呢。

[] 應該係 Multiple UV/Vertex Colors

Wednesday, December 20, 2006

我的 Casual 遊戲市場觀

Casaul 遊戲,在我最初接觸的時候,是因為香港人工作太忙,而且工時長,人們唯一可以得到娛樂的時候,就是在乘車過程中,在 Palm / Pocket PC 上玩些小遊戲。

這一年以來,我都想以 Shareware / Casual 遊戲形式,推出自己製作的電腦遊戲。因為這個原因,看多了這個市場的新聞,在短短的幾個月來,感覺到這個市場有著微妙的變化。先說說亞洲區的 Casual 遊戲文化,亞洲區看來是因為受到日本的遊戲文化影響 ( 包括我自己 ),很多 Casual 遊戲都是以動作類為主要題材,例如我早前說過的韓國遊戲展,當中有很多 Casual 遊戲都是動作類,甚至是射擊類遊戲也有。但是亞洲區的 Casual 遊戲發展,就只是屬於初期起步階段,畢竟以往都是以電視遊戲機主導市場 ( 看到 Sony 在 PS3 上也推出 E-Distribute 服務,便知道 Casual 遊戲越是被人重視 )。

而 Casual 遊戲在美國,是屬於一個發展成熟的階段,回想美國其實在十多、二十多年前,已經開始了 Shareware 遊戲市場,相信當中經典例子可以說是「DOOM」了。慢慢演變到現在的 Casual 遊戲市場,變化上亦有很大的差別,現在的 Casual 遊戲市場上,主要都是一些所謂「Match-3」的遊戲,這類遊戲變化很單調,但卻大受歡迎,因為有很多中年人士都很喜歡玩。在這一年來,我也看到不少「非 Match-3」的遊戲出現在美國市場,而且成績也不錯,看來市場亦在慢慢滲入其他類型遊戲。

我自己在想製作甚麼類型遊戲時,都以一些動作類遊戲為主,除了自己喜歡玩動作遊戲外,被日本遊戲文化薰陶亦是主要原因。在我的年齡層,很多人的成長中,都是玩電視遊戲機的,那麼在電腦上製作一些,以往只會在電視遊戲機中玩到的遊戲,市場又是否有潛力呢?

Wednesday, December 13, 2006

有時間便要想想

近來忙得不得了,跟本就沒有空閒去做自己的事,當然包括寫Blog了。

有趣的是,這個聖誕節突然被迫放假兩個星期,這下子太突然,還未知做甚麼好。但一想到放完假後,又會是一輪衝鋒陷陣的忙碌,就不其然感到有點惶恐。在寫程式方面,完全沒有時間去理會,今晚看著自己的程式,也有點不知所措。近來都有點小事令我模不著頭腦,家中的電腦有大量不知名的硬件毛病,寬頻速度不穩定,今年聖誕節沒有禮物想送給自己......等等;確實剛才所說的都不是甚麼大問題,只是感覺不良好,其實這樣很不對,始終自覺自己是幸運的一群。

除了「Final Spike」遊戲外,近來很想做一個Shooting遊戲,如果大家有玩過SEGA的「Panzer Dragoon」系列或「Planet Harriers」的話,就會明白我想做的遊戲是怎樣的了,但是這仍然是在構思中。

Thursday, November 23, 2006

捉鹿不脫角

有時候,我會有個奇怪的「製作遊戲的原動力」,例如因為朋友的一句:「為什麼電腦上就是沒有 Spikeout 類的遊戲」,我便有製作 Final Spike 的念頭。

我閒時會用些時間看一些遊戲製作的網頁,而且在當中會找到些有趣的遊戲,前幾天我看到了這個遊戲,Rocket Boards,她看起來有點像 Mario Kart 賽車,那我便下載來試試,下載一開始我被她嚇一嚇,因為她的 Demo 版本只是 2.44MB,很 TINY 呢...。很快地便下載完成,當然是 Install 來看看,如下載一樣,很快便 Install 完畢。執行遊戲來看看,進入遊戲後,發現畫面很簡單,沒有很多的花巧東西,Start、Option、Quit...等都是基本有的選項。開始遊戲看看,因為只是 Demo 版本,只有一個賽事可以選擇,就來試試比賽吧。

有點想像不到,畫面很簡單,操作方面比畫面更簡單,加速、左右及 Turbo 鍵,就是這麼了。但有趣的是,我真的覺得「也算不錯啊」,先不要談論這遊戲的畫面質數,其實她的簡單卻令我覺得來得有點簡潔明快,但同時覺得可惜的是遊戲性卻過份簡單,給人「捉到鹿不懂脫角」的感覺。

這遊戲賣 US$19.95,我看完那個價錢後,和一個朋友戲言,不如我也快速地做個這類遊戲出來吧,可能也賺到點快錢啊。

Saturday, November 18, 2006

閒談

有一段時間沒有到訪過一些網頁, 今天上網到處逛逛。

這段「Principles of Virtual Sensation」內容很不錯,究竟甚麼是 Gameplay 的感覺,這篇文章也是個不錯的引導。

國內亦有 Coding 高手,可以看看這篇文章「A 2D Render Base Using Policy Based Design」,雖然我不太懂當中的 C++ 用法,但我看不懂的就是利害的吧。

在不久前,看過一本書,名為「Masters of DOOM ( 中譯:DOOM 啟世錄 )」,很有啟發性的,如果有朋友想做遊戲,不訪看看這本書,如果你是業內人士,而未看過的話,也建議你看看。

最近看到 PS3 遊戲機的發售情況,確是覺得有點奇怪,那些購買的人在做甚麼呢?在這之前幾天,看到 XBox360 的 Gears of War 這個遊戲,確是覺得有點迷茫,那些人是怎樣做到的?

在上星期做了個簡單的測試,給大家看看。

Sunday, November 12, 2006

重新定義「 Casual Game 」?

近幾天都沒有看過遊戲新聞,今天用了點時間看看這幾天所錯過的。

這幾天同時是韓國遊戲展「G ★ 2006」開 Show,看到很多有關這個遊戲展的新聞,有趣得很,看過之後令我覺得有點迷惑,因為韓國遊戲已經將「 Casual Game 」一詞,和歐美遊戲的「 Casual Game 」一詞脫勾。在一貫歐美的「 Casual Game 」一詞,泛指一些 Bejeweled 類的遊戲,但是韓國遊戲已是完全不同的演譯.例如:KoongPa (Casual Action)、Cross Fire (Casual FPS)、ATrix (Casual Action) ... etc。 ( 以上連結全是日文網頁 )

「 Casual Game 」這個詞,在感覺上好像已被重新定義了。

Sunday, November 05, 2006

為何是OGRE?

上星期,有個朋友問我:「既然你用自己的 Ngan-GINE'3D 能做出遊戲來,為什麼還要用那個OGRE呢?」;我當時並沒有細想這個問題,很快地答:「因為好玩。」

其實朋友的這個問題很不錯,「為什麼要用 OGRE 呢?」;其實我的 Ngan-GINE'3D 中,有很多功能都是沒有的,例如:Stencil Shadow Volumn、Scene Management、Animation Blending... 等等。雖然這些功能看似很基本,但是在 Ngan-GINE'3D 中是沒有的,這是我選擇OGRE的原因之一。

另一個原因是,OGRE 是可以隨時加入 Shader 機能,雖然我現在不懂 Shader,但「居安思危」嘛。

最後一個原因就是,因為 OGRE 是 Open Source 的,我確是想過 Multi-Platform,例如 Mac OSX。雖然這個原因不是很重要,但總是覺得「感覺良好」。

Thursday, October 26, 2006

Virtua Fighter 5 圖像講座

Virtua Fighter 5 圖像講座

SEGA 始終是 SEGA,3D 圖像就是大阿哥。我的意思不是說她的技術高超,而是運用得宜。

Tuesday, October 24, 2006

玩遊戲

由始至終,我還是喜歡玩遊戲的。

近日有數個遊戲推出,當中想玩的有「JoJo奇妙冒險 (PS2)」、「Splinter Cell : Double Agent (Multi)」及其他一些小型一點的遊戲。一如以往,我還是喜愛玩動作遊戲的。

如果要製作遊戲,我覺得先要條件就是要玩遊戲,不管你是喜歡玩甚麼類型的遊戲,也不要只玩同一隻遊戲,在同一種類遊戲中,亦有很多不同的遊戲,就例如我上面說的,動作遊戲也有很多不同的選擇。玩遊戲的時候,可以在當中感受到遊戲是好玩還是不好玩,好玩的原因是甚麼?不好玩的原因又是甚麼?

但是究竟一個遊戲製作人,應不應該多玩遊戲呢?這個問題真的很有趣。

OG-NG'3D Oct'2006

在過去幾晚時間的努力下,我終於解決了在遊戲畫面上,顯示 Mini-Map 的方法了。今晚終於可以在這裡說,在過去努力將 Ngan-GINE'3D 中,圖像部分改為用 OGRE3D 代替的工作,可以說是大致完成了,實在是可喜可賀。

之前一直將 Final Spike 的開發工作停止,都是因為想做好這個「OG-NG'3D」,才繼續開發。自今晚之後,我便可以開始將已有的程式,轉到 OG-NG'3D 上,相信這個將是用最多時間的了,因為 Final Spike 的 Gameplay 大致已完成,雖然還可能會加強,但整體而言完成度已很高,欠的只是其餘的 3D Model 製作 ( 及一些額外的互動 Gameplay )。

希望能夠盡快有些新的 Screen Shot 給大家看吧。

Sunday, October 15, 2006

Monday, October 09, 2006

HIMMG vol.04

上一回說道,一些我對 Collision Detection 的處理,希望大家明白吧。那麼這次說甚麼好呢?不如......就說說我是如何製作 Level Map Model,以配合「 Ngan-GINE'3D 」來製作遊戲吧。

大家也知道,我是用 MilkShape3D 這個工具來製作 3D Model 的了,在我製作的3D遊戲「 Final Spike 」中,90% 的 3D Model 都是用這個工具製作的,另外的 10% 是用了一個叫做 LithUnwrap3D,來 Unwrap 及調較 Texture UV,其實這個 MilkShape3D 可以做到甚麼的呢?很簡單的說,就是只可以用來做 Low-polygon model,加上 Skeleton Animation 及 Plugin SDK 功能罷了。所以,這軟件和一般的 3D Model 軟件比較 ( 例如:3DSMax、MAYA ... 等 ),可以說是完全比下去。

All-in-One Texture就使用 MilkShape3D 來製作遊戲,我做了數個實驗,究竟如何才能在有限的知識,和資源下,做到一些快速的 3D 遊戲呢?首先我要想的,是如果規劃一個場景的繪畫方法。因為我不懂 BSP Tree 或 QuadTree 之類的演算法,我便想到,有沒有可能以「人手方法」劃分整個場景呢?可能我的想法真的很天真地開始,人手方法,就是先繪畫好場景,整理好場景會有甚麼物件,盡量在「妥協」的方法來製作場景。最後我試出了一個方法,就是自己分好場景中的小區份,每個小區份用一場大 Size 的 Texture 來儲好要用的所有 Texture ( 如左圖,實際 size 為 512x512 ),這樣我便可以大大減少因為要換 Texture,而做成的速度延遲問題。

以上的方法,大家可以看看下圖例子:

Level Map Design

大家看到,我盡量規劃每一個小區,都會是一個方型,那麼我只需要利用 Camera 的 Frustum,做些 AABB 和 Frustum 之間的 Culling,除去不需要畫出來的小區便可以了。另外我之前曾經說過,我是使用另一組超 Low-polygon 的地圖資料,作為 Collision Detection 用,所以我不在此再說了。就是這樣,Ngan-GINE'3D 中處理 Level Map,「人手方法」的方案就製成了。

最後也說一說,我的 Level Map 是使用 Lightmap 的,但其實我沒有甚麼好方法去做的,因為我的方法就是......自己畫 ( 不要笑啊... )。

Saturday, October 07, 2006

遊戲的製作成本

在幾個月前,我曾經說過有興趣以「Indie Game Developer」形式,來發展自己的遊戲製作,所以這幾個月來的空閒時間,都會上網看看一些關於這方面的資料,最多去的網站莫過於 GameProducer.net 了。在這個網站中,都會看到近大半年來的一些小公司,或 IGD 的小型遊戲銷售報告,從而得知業內的情況。

在整體而言,單看網頁上的銷售數字報告,確實令人有點不安,因為當中的數字顯示,成功的個案雖然不少,但往往都只能做到收支平衡,從中得到純利的例子比較少。雖說做到收支平衡也是很不錯的了,但這個亦是值得深思的情況,究竟以 Shareware / Casual game 形式做遊戲,能不能賺取金錢呢?

昨天看到一篇報導,說次世代遊戲「Gears Of War」,其製作成本為1000萬美金,亦即是7790萬港元,假設每隻遊戲賣$400港元 ( 頗為貴... ),足足要賣出20萬隻才能收回成本,這個的確是很危險的數字呢。

曾經和一個朋友討論過這個題目,相信遊戲出現兩極化的情況將會越來越明顯,一是超漂亮但成本超高 ( 但未知遊戲是否好玩 ) ,另外是 小型遊戲且成本低 ( 多為Shareware / Casual game )。但是有一點我比較關注的,就是究竟 Shareware / Casual game 市場中,有多少人是接受 3D 動作遊戲呢?究竟有沒有人像我一樣,是喜愛玩動作遊戲呢?好像有點不明朗呢......

Saturday, September 30, 2006

錯、錯、錯!

實在是一個打擊。

今天閒來想想,不如試試 Load 入一個較多 Polygon 數量的 Stage Map,來比較一下 Ngan-GINE'3D,及現正製作中的「OGRE3D + Ngan-GINE'3D」之間的速度。在舊有的 Ngan-GINE'3D 運行時,發生了未見過的問題,就是 Texture 方面,會出現錯配的情況。這個發現令我很驚訝,因為我從來未試過這情況。最有趣的是,這個問題延伸至「OGRE3D + Ngan-GINE'3D」中,所以這個週末的國慶假期,應該會是 Debug 的假期了。

Sunday, September 24, 2006

TGS 2006

這個周末,最為人所注意的事情,莫過於東京遊戲展覽TGS2006了。今年當然是PS3的世界了,因為在TGS2006之前,Nintendo已經自己辦了個「Wii」的Preview Show,所以在TGS2006中不會特別多Wii的消息了。在今次的TGS中,大家的眼光都會注視在「Metal Gear Solid 4」及「Devil May Cry 4」( 正所謂無獨有偶,都係「4」)。

Metal Gear Solid 4」確實是沒有特別驚喜了,因為玩法上大家已經很「習慣」了,單看Trailer中,Snake的動作及一些細節,都和一貫的MGS差不多,當然是多了點新操控,但就是缺乏驚喜,可以那些驚喜是圖像吧......。

Devil May Cry 4」反而是有點驚喜,驚喜的不是有新主角,不是那套舊操控,驚喜是,遊戲的「Visual Effects」就是漂亮得不得了,令我想起,日本遊戲界內有個職位,叫做「Effect Artist」。

今年的TGS2006就是這麼多了嗎?答案是:「是呀!

Tuesday, September 19, 2006

功能完全轉換 (?)

大約一個月前,我在自己的Ngan-GINE'3D內,加入了一個簡單的功能,是有關Skeleton Animation的,就是可以隨時換入另一組Animation(當然首要條件是同一Skeleton)。在轉到OGRE3D時,我勢必要將這功能在新的Engine內達成,因為的確是很實用。

在前兩晚,經過了一個多小時的OGRE3D Doc的閱讀及實驗,成功地將上面所說的功能加進了。就這樣,有關Skeleton Animation的功能轉換上,可以說是完全達成了,實在是可喜可賀。另外今晚亦加進了Portal及Sector的檢查,完善多一點有關Level Map的功能。看來所要的功能都差不多齊全了,是時候用這個新的OG-Ng3D來試作「Final Spike」了。

Sunday, September 17, 2006

Monday, September 04, 2006

Control Fine-tuned

遊戲中的 Control 確實是很重要的,在我的「 Final Spike 」中,一直有個操控上的小問題,就是在普通連續攻擊的按鍵 Timing,有點不太順暢,但如果能夠習慣那個 Timing 的話,不是個大問題。但總是會令一些新嘗試這遊戲的人,一種不如意的感覺,所以昨天用了點時間,在這方面看看有沒有解決方法。

在一個多小時的試驗下,試了很多次後,終於達到了 Timing 順暢的效果了,在每一個連續攻擊時的按鍵,已變得比較順暢,再沒有「 要習慣那個 Timing 」的問題了,操控上差不多達到完美境界了。

Thursday, August 31, 2006

簡單原是美

昨天,和一個朋友討論 OGRE3D,我說道 OGRE3D 令我很困惑,看多了,試多了 OGRE3D,發現她的複雜程度超符想像,而且同時再發現我自己的 Ngan-GINE'3D,在設計方面真的很簡單。

如果要將 Ngan-GINE'3D,和其他類似 OGRE3D 的 Graphic Engine 比較,我會以一個比喻來形容:若 OGRE3D 是個 3D Engine,那 Ngan-GINE'3D 是個 2D 型態的 3D Engine。我在說甚麼呢?我真的沒有說錯啊,因為 Ngan-GINE'3D 的設計,看上去真的好像個 2D Engine,讓我簡單地作一說明。在一般的 3D Engine,都會用上 Scene Management,每一樣物件,無論是場景,3D 人物.....等等,都要套入一些叫 Scene Node 的節點上,這樣整個 3D 場景可以有規律地處理好。

Simply the Best而 Ngan-GINE'3D 是沒有 Scene Management 的,亦即是沒有 Scene Node 等的節點,而且沒有設定那種物件要先畫,那種後畫,情形和一般的 2D Engine 相似。在我用它來做遊戲時,場景上的東西都是由我分配先後次序,例如先畫 Skybox,然後是 Level Map,靜態物件,3D 人物,Billboard 效果,最後是 2D Sprite / GUI,處理上真的和 2D Engine 沒太大分別,所以我會用「 2D 型態的 3D Engine」來形容 Ngan-GINE'3D。

Ngan-GINE'3D 這樣的設計,在 G-Force 2 MX 等級 3D Card 中能夠實現,要多謝科技的進步,令不可能變成可能,簡單原是美

Thursday, August 24, 2006

2D ? 沒問題 !!

2D Sprite digits哈... 終於用OGRE3D成功地做出了2D Sprite系統了,有UV Animation,也算不錯的了。這個2D Sprite確是用了我不少時間來做,最初的時候,用Overlay時有個大問題,只要我啟動任何一個2D Sprite,整個系統的其他Overlay也會消失,就連TextAreaOverlay也不能顯示出來,令我完全摸不著頭腦,後來試了多次也不能正確的顯示它們。

在近期的一個多星期工作都頗為忙碌,沒有太多時間去改做自己的Ngan-GINE'3D,就這樣我就用空餘的時間,上OGRE3D的網頁多看幾遍有關Overlay的資料。到了前晚,強迫自己坐下來再做一次,真的很奇怪,這樣重新做一次,以往的問題全都消失了,顯示出來的2D圖像都很正確,更沒有遮蔽著其他如TextAreaOverlay等2D圖像,奇怪得很。

有時候Programming就是這樣子,當有問題不能夠解決的時候,走開一會兒再回來試試,反而問題會簡單順利地解決好。

Saturday, August 19, 2006

HIMMG vol.03

在開發Ngan-GINE'3D當中,除了Skinned Mesh及Skeleton Animation外,相信最難纏的,就是如何做Object 與 Level Map之間的Collision Detection了,其實到現在我還未做好的,只是用了3rd party的Physics Engine來代替了。

Super-low for level collision我在做Level Map的Collision Detection時,想著其他遊戲是如何做的時候,我發現一個有趣的分歧,就是有些日本遊戲和其他國家遊戲的地圖Collision有點不同。看上去日本遊戲的地圖Collision資料都不是和原Level Map資料相同,我相信他們是用另一組超低Polygon資料,作為Collision Detection,減少運算量。就是這樣,我就決定用另一組超低Polygon資料做為Object與Level Map之間的Collision了,始終在我的Ngan-GINE'3D內,沒有任何類似BSP Tree的Scene Management,所以用超低Polygon資料減少運算量是最好的選擇。

這樣做解決了一般使用問題,並且以這方法參加了遊戲製作比賽,但後來想到,若果我的Level Map不只是一個Section,而是有更多不同的Section連接一起,那麼應該如何處理?後來就想到了,可以使用Portal系統了。我的Portal系統非常地簡單,當中只是有偵測Camera或Object在那個Sector,和Camera看到那個Sector的Portal,並沒有加進Camera在那一個Portal再計算Frustum Cull功能。關於我的Portal系統是如何運作,我曾經寫過一篇文章說明的呢。

到了近期,用上了Newton Game Dynamics後,已沒有再特別研究Object與Level Map Collision了,反而是用了時間研究,物理和遊戲之間如何達到和諧,融入Gameplay當中,這個才是將物理加入遊戲後真正的方向,就好像Half-Life 2就是個好例子。

Friday, August 18, 2006

老闆不可愛

老闆可愛嗎?相信在支薪水的那天,我才會覺得老闆是可愛的,所以,老闆是不可愛的。老闆除了不可愛,記憶力也不太好,讓我舉個例子。

數年前的一個早上,老闆要我做一個工作,老闆問我會怎樣做,我說「不如試試辦法A,可能有不錯的效果」,老闆聽後想了一會,回答說「還是用辦法B吧,比較穩紮穩打好了」。沒問題,我是打工仔,老闆說怎麼辦就怎麼辦。到了同一天的下午,老闆經過我的座位時,看看我的工作,老闆很驚訝地問我「你不是說用辦法A的嗎?為什麼你在用辦法B工作」,我登時感到很愕然,回答說「老闆你叫我用辦法B的,比較穩紮穩打啊」,老闆說「不、不、不,是用辦法A呀」。我無言以對,唯一可以做的,就是用辦法A重頭做一遍。

數年後的兩天前,上面的事情再次發生在我身上,只是老闆不是同一人罷了。

( 我所說的是我的老闆,不是其他人的老闆,朋友切勿誤會 )

Friday, August 11, 2006

十字路口 ~ !!

這幾晚都在研究,在 OGRE3D 中那些功能可以做到 2D Sprite,用 Overlay 嗎?不可,因為會有蓋過其他 Overlay 的問題。用 Rectangle2D?不能,因為沒有功能可以移動或旋轉。用 Billboard 呢?有大問題,不知如何設置 Camera 及 Viewport 才可以令 3D 位置轉為 2D Screen 位置。就是一大堆這類的擾人問題,如夜裡的蚊子一樣,在你耳邊不聽地飛,令你精神受到困擾。

真的很沮喪,在研究 OGRE3D 上每每都遇上難題,而且還要找不著答案。回想自己的 Ngan-GINE'3D,在製作時確實是以簡單易用為主,當然是以我對遊戲製作的認識作標準,雖然沒有甚麼利害的功能,但在速度上還算可以。這樣子下,我是繼續研究 OGRE3D,還是將時間投資在改進 / 加強 Ngan-GINE'3D 呢?是個十字路口的決擇啊。

Saturday, August 05, 2006

OGRE3D % Ngan-GINE'3D = ?

上一回說過,寫了個 OGRE3D 的 Manual Loader,但不知道是否真的起作用,後來我發現是可以強制用它來讀入資料的,隨即便試試,事實就和我預計的一樣,是不能正常運作的。所以前天晚上用了兩個小時,來測試這個 Loader,這個情況就令我想到,寫程式懂得 Debug 是非常重要的,最後當然是成功了。

終於搞清楚 OGRE3D 的 Billboard 及 Billboard Set 的分別了,試了一會後,成功做到了Texture UV Animation 了,因為在我的 Ngan-GINE'3D 內,也是用相同的方法做 Billboard 的,可以說是成功地代替了原 Ngan-GINE'3D 的 Billboard 整體功能了。

現在用 OGRE3D 的功能,來取代 Ngan-GINE'3D,大約如下:
- Skin Mesh
- Skeleton Animation Control
- Level Map with Portal-System
- Billboard with Animation

其他的功能,例如 2D Sprite 功能(用作 GUI,相信和 Billboard 差不多)還要再作研究。而Skybox/SkyDome 在 OGRE3D 內已有,不用特別研究。另外 DirectInput、WAV 及 OGG 播放等等,用回 Ngan-GINE'3D 也可以,所以沒有問題。相信只要做好 2D Sprite 功能後,就可以代替舊 Ngan-GINE'3D 了,新的名字還未想到,現時都只是叫作「OG-Ng3D」罷了。

Saturday, July 29, 2006

OGRE3D的麻煩

看著這個題目,大家也可能想到一二吧,對了,大家還記得上回我講及有關 OGRE3D,和 Ngan-GINE'3D 中的地圖資料互換,初時還以為解決了,但後來我發現,在 OGRE3D 的 Log 中,有一堆 Warning 投訴手動 Load 入資料,沒有 Manual Loader。我才知道,要自己 Load 入資料,是要自己做個 Loader,以便當 OGRE3D 丟失資料時,可以作為 Reload 用。在努力了數個晚上後,今晚終於搞好了這個 Loader,但最有趣的是,我不太清楚這個 Loader 是否起作用......

做好上面的 Manual Loader 後,就準備做第二樣了,我選擇做 Billboard,但看來又是另一個麻煩了,因為我再次搞不清楚 OGRE3D 中,Billboard 及 BillboardSet 的分別。OGRE3D 雖然強大,但處處都是令人卻步的難關,究竟有沒有一個 3D Render Engine,是比較簡單易明的呢?

Tuesday, July 25, 2006

遊戲的未來

今天在偶然下,再看到這篇舊文章:

The Future of Game Design

當中筆者所說到的要點,每每都一針見血,在第一頁的尾段,就有一句很精彩的,是 Naughty Dog 總裁 Jason Ruben 說的:the amount of polygons you have on screen doesn't matter anymore, it's what's you do with them. ( 在畫面上多邊形數量已不再重要,重要的是你用它們來做甚麼 )

再看上面的一句說話,仍然是獲益良多。我玩遊戲的時候,一般都不會著意畫面的質數,只要不是過份醜陋,遊戲本身好玩就可以。但還看過去幾年玩過的遊戲,有很多都沒有玩完,有些甚至玩過一、兩個 Stage 就放棄了。究竟是為什麼呢?有些平平無奇,有些難度太高,有些過於簡單而重複。回想近年來,Nintendo 仍然是堅持以創意先行,真的是值得敬佩的遊戲商。

Saturday, July 22, 2006

OGRE3D 和 地圖資料 #2

Lightmap Level Stage 經過數日的努力(?),成功將 Ngan-GINE'3D 用的地圖資料,以手動建立 Mesh 形式在 OGRE3D 內顯示,而且還可以有 Multi-Texturing ( 用於 Lightmap 效果 )。在這次實作中,明白了OGRE3D 的手動建立 Mesh 的流程,這個其實是屬於基本技巧,不懂這個便不能善用一個圖像系統了。

另外在這次實作中,將原本不是以 Singleton 形式設計的 Ngan-GINE'3D,轉為以 Singleton 形式套好(其實不是真正的 Singleton,只是形式上設計相同),但有趣的事情發生了,我做的一個測試程式中,速度增加了 15% 之多,究竟是不是 Singleton 設計的一種好處呢?

Sunday, July 16, 2006

OGRE3D 和 地圖資料

在近期,研究將 OGRE3D 加入 Ngan-GINE'3D 內的時候,碰到一個問題,就是原本 Ngan-GINE'3D 內的 3D 地圖資料,不知應該怎樣在 OGRE3D 內存取及運用,因為在 Ngan-GINE'3D 內的地圖資料,是以 Sector 來分開儲存,而我希望在 OGRE3D 內建立差不多的架構,所以就想了很久要怎樣才做到。但近日有點頭緒了,就是用 OGRE3D 內的 StaticGeometry 架構來實現。但是這個概念還要進一步實驗,因為始終是一個概念,要寫一點程式來實際調試一下才可。

在研究這個 OGRE3D 的時候,學會了如何 Debug DLL 的技巧,因為我不是用 Visual C++ 來編寫遊戲的,但是要用 OGRE3D 的話便要用 VC++,所以我要將 OGRE3D 封裝成一個 DLL,再給我常用的 PellesC 來使用,這樣一來便需要學會如何 Debug DLL 了。之前我一直都沒有做過 DLL,在這次經驗中我發現,其實 Debug DLL 也很有趣的呢,而且有個意想不到的,就是 Visual C++ 2005 Express 版本的功能真的很齊全呢。

Thursday, July 13, 2006

Shooting Game

我常常說我很喜歡玩 Action Game,其實我亦很喜歡玩 Shooting Game 的,當年曾經常常玩IREM 的 games,當中有「Image Fight」及「R-Type」系列。後來就很喜愛Treasure的遊戲,當中不小名作,如「GunStar Hero」、「Radian Silvergun」及「班鳩」。除了這類正統的橫/豎Scroll 的Shooting game 外,我亦很喜歡 SEGA 的「Panzer Dragoon」系列。

Panzer Dragoon Orta我曾經做過一個ArcBall Rotation Camera 的實驗,是用了個非算術的方法做出來。前幾天看著這個 ArcBall 控制時,忽發奇想,我以「Spikeout」作為參考做了個「Final Spike」,其實也可以以「Panzer Dragoon」作為參考,做個類似的遊戲也不錯啊(PC 也極小這類遊戲)!自從幾年前看過XBox版的「Panzer Dragoon Orta」之後,確實非常難忘,當中的遊戲性非常高,而整個遊戲的演出亦非常精彩,完成度超級好,參考價值很高。

Wednesday, July 12, 2006

Indie Game要甚麼?

大家可能會記得,我曾經說過想做個Indie Game Developer,亦看過有關資料。其實環顧各地的Indie Game Developer,大都是做些小型遊戲,而且最多的可以說是Puzzle Game(3-Match),例如類似 Bejeweled 的遊戲。剛才在 GameProducer 裡看到一篇短文,它的題目很吸引:

3 Reasons to Avoid Developing 3-Match Games

我並不是要踩這類遊戲,而是認同上文中所說的三個理由,Indie類遊戲確是要求創意。

另外 10 Easy Ways to Save MoneyLearn to Steal 亦很受用。

Saturday, July 08, 2006

HIMMG vol.02

上一回我說過,要說說在製作那個「Final Spike」實驗版本的過程中,所學到的東西。那時候的「Ngan-GINE'3D」還未成熟,有很多功能都沒有,而當時的我對3D遊戲製作亦不太熟悉,就想:不如先做個遊戲吧,那便會知道要加甚麼功能進Ngan-GINE'3D;就這樣,我便開始去想要做個怎麼樣的3D遊戲了。

Skeleton Animation in Ngan-GINE'3D在開始製作遊戲時,我不知從何入手,那我就想:不如和做2D遊戲時一樣,在控制主角上開始著手吧;就這樣,我便開始在控制角色上開始。在Ngan-GINE'3D中,我已經有Skeleton Animation了,心想那就易辦了,只要按甚麼鍵,播放Animation之餘,再移動角色便可。雖然方向是正確的,但問題出現了,Skeleton Animation的控制一塌糊塗,用MS3D export出來的Animation,是一連串的包含所有Animation,我卻沒法隨意控制播放那一段。大問題出現了,應該要怎樣解決呢?我再詳細地看看,發現一個情況,原本MS3D資料內有30格Animation,當中有15格是屬於Keyframe的,而export出來的資料卻只有15格,不是原來30格。那麼我便明白了,export出來的只有Keyframe,Keyframe之間的格數是不會被export出來的,那就好辦。我將原來的MS3D的Animation,刪去沒有Keyframe的格數,只保留Keyframe格數,那麼Animation總數和Keyframe總數一樣,只有15格。就這樣我便成功地,以Animation的Frame數值來隨意播放任何一段的Animation了。

播放Animation解決了,那便繼續嘗試做遊戲。有一天和朋友逛街,在看一些新的Console遊戲,那個朋友說:為何電腦沒有這類動作遊戲?那時候我便想:沒錯,電腦上確是沒有Console中的動作類遊戲出現,那我便決定要做個動作遊戲出來了。及後我發現另一個問題,就是:我要如何做出角色擊出左拳,敵人被左拳擊中呢?因為自己之前都做過些低水平2D遊戲,知道應該以圓對圓的碰撞測試(Sphere to Sphere collision)來調試,但首要任務,是要得知「左拳的位置」。這個就是難度,我不懂如果計算出來,我只知道可以用Skeleton中,Joint 的Position位置計算,但究竟要怎樣才得到那個位置呢?這個問題困擾了一個多星期,最後在網上搜出相關文章,再對程式調試良久,才成功得到Joint 的World position,成功做出擊出及被擊中的效果。

就這樣,Ngan-GINE'3D中的Skeleton Animation,便有了任意播放某一段Animation,及取得某個Joint 的World position功能。下一回,說說另一個話題吧,說說3D地圖及移動Object 的碰撞問題。

Wednesday, July 05, 2006

Metal Slug (3D)

不知道大家有沒有玩過,新的Metal Slug?我有,但我想說的是,有時候,名氣確實是可以蓋過很多問題。其實新的Metal Slug並不好玩,不好玩的並不是遊戲本身,而且那個不知做甚麼的鏡頭系統,我感覺就好像被它玩一樣,令我超級頭痛。

先說說遊戲本身,開發商極力想將經典2D的Metal Slug,毫不改動玩法下,轉為3D,我覺得開發商是做得不錯的了。很多操控上,已經很努力去做,感覺上已經不錯,但是很可惜,遊戲最後卻被惱人的鏡頭系統破壞了。遊戲中的鏡頭系統,Player行左時,鏡頭同時向右Plan,令人感覺移動速度過快(我好頭暈)。另外鏡頭經常被牆壁阻礙,碰到牆壁後鏡頭會向上移動,嘗試換角度,但這樣做的話,有時候令玩家不能看到目標或敵人(鏡頭向上移,但注視點仍是主角,最後令畫面看到的只是地面...),不能作戰。在3D場景中,到處都有不少的雜物,及一些地圖細節部份,又是另一個令人懊惱的問題,如果有件雜物高過主角,而又剛剛在鏡頭及主角中間,那件雜物經然不會變成半透明,玩家就不能夠看到主角了。

好像只有彈,沒有讚的...... 我也不想的,只是想洩洩氣,一隻簡單的遊戲,就是被一個毫不起眼,但是很重要的鏡頭部份弄垮,有點惋惜。(順帶一提,遊戲場景的"簡陋"程度也不錯......)

Saturday, July 01, 2006

HIMMG vol.01

Final Spike Poster (experimental version)究竟這是甚麼題目?「HIMMG」?讓我來慢慢解釋吧。兩個月前,我將我自己製作經年的電腦遊戲,「Final Spike」的一段Teaser Trailer發報,得到了不少正 面的回應,亦有網友希望我說說我在製作遊戲時的難題,或一些製作上的技巧,在我想了一陣子後,我決定寫出一個Blog系列,來說說我製作電腦遊戲的一些事 ,我訂出了這個系列的題目,就叫做「How I Make My Game」。

今次是第一篇,我會先說說,我的Game Engine「Ngan-GINE'3D」。在Ngan-GINE'3D的初期,我已經決定要做一個,以製作動作遊戲為本的Game Engine。首先要 做的,使要學習用Direct3D,因為那時候我接觸了3D圖像編程沒多久,要學習如何做一個Engine,那就要選個API/SDK吧。在了解Direct3D是如何畫出多邊形後, 便開始嘗試做個最基層的系統,我稱之為「Frame」。在Ngan-GINE'3D中,是沒有任何所謂Scene Management,而最基層的,就是這個Frame了。

Frame系統中的成員,都是最基本的,例如Position、Rotation、Local Matrix... 等等。而Function方面,會包含了Translate、Rotate、Update、 Transform... 等等。當然,Frame也會有建立及移除 Function了,在建立的時候,會放進一個作為分類的資料,以便認知這個Frame是用來做甚麼的(在Ngan-GINE'3D中,暫時只有角色及Camera類別)。在Frame系統完全後,便開始做3D Model的繪畫了,那時候對3D圖像認識淺,就找來Quake的MD2檔案來玩玩,到了明白當中的運作後,就開始找個3D Modeler來用了。在不記得 甚麼情況下,得知了MilkShape3D的存在,更有內建Skeleton Animation,而且還可以自己做Export Plugin等,便開始研究MS3D了。

用了很多時間來研究MS3D,始終自己的數學水平比較弱,用了數個月才學好了MS3D及Export出自己的檔案類型。同時我亦將MS3D中的Skeleton Animation,分拆 出來加到了Frame系統中,作為Frame內的成員之一。在學習MS3D期間,同時亦學會了靜態的3D Model繪畫,但其與動態3D Model有之後再用了數個月的時間,加進了繪製靜態3D Model。其後再用了數個月時間,想加進地圖資料和Frame系統的Collision Detection,但怎樣做也不理想,後來才知道最大原因是,因為Ngan-GINE'3D中沒有Scene Management,導致不能分割區域做出準確的Collision response,所以後來就放棄研究了,但始終一直不能找到好方法代替。在往後,更加入了Skybox、Billboard、2D Sprite... 等等。

在此期間,碰巧香港中文大學舉辦了一個遊戲創作比賽,我就用了這個Ngan-GINE'3D,做了個實驗版本的「Final Spike」參賽,可能是剛巧碰到SARS的爆發,參賽作品比較少,感覺有點僥倖地取得公開組別的銅獎。在下一次,我會說說在製作那個實驗版本的「Final Spike」時,所學到的東西如何改進Ngan-GINE'3D的功能。

Final Spike Title screen (experimental version) Final Spike in-game screen (experimental version)

Sunday, June 25, 2006

新認知,新知識

在我的遊戲引擎「Ngan-GINE'3D」中,所有的3D模型格式,都是使用MilkShape3D這個Low-polygon工具製作的,有朋友問我,為什麼用這個MilkShape3D,而不用3DS Max之類的工具。其實我的遊戲引擎,著重於簡單的遊戲開發,類似現在頗為流行的Casual game,或Indie game運作模式,目標平台的硬件要求亦不會很高,例如:Pentium III 800、DirectX7 3D顯示卡等等。而且在製作成本上要比較低,使用低價格的軟件是比較適合的,而且在許可的情況下,用免費軟件作為主要工具會更好。

我之前說過,和幾位新認識的遊戲業界朋友傾談後,對遊戲業界的認識多了。說實話,我亦希望能以製作遊戲來賺取金錢,從而在遊戲製作中生活,所以才會對Indie game development的模式萌生興趣。但對業界接觸多了,看到當中從業員的生產力,令我有點汗顏,而且業界在製作遊戲的方法上,和自己的方法有著巨大的差別。在這些新的認知和知識下,令我想到,自己在製作遊戲上的「特殊技巧」,確實不太可能在正常的遊戲業界中使用。但我卻覺得,如果是應用在Indie game製作上,可能會是更加有利,但這個是需要時間來證實。

MilkShape3D剛剛發報了新版本,有多個新功能,更方便使用。

Sunday, June 18, 2006

玩具的週末

這個週末都是在玩玩具,昨晚的「無限地帶23」仍未夠膽打開來玩(聽說有朋友已玩斷了其中一變形關節),唯有拿出早幾天到手的「GETTER 1」玩玩。這個是新的「山口式」可動Figure系列,以往曾買過一次舊款小型系列,但關節都很容易斷或者滑牙。這個新系列標榜新式Revolver Joint,比較耐玩,拿上手耍了一會,的確是不錯,值得留意。

近來都在工作,沒有太多的空餘時間去做「Final Spike」,唔..... 暫時在短期內也不會有大進展的了。

人生中最貴的玩具

我除了玩電腦及電視遊戲外,很少會買玩具玩的,最多都只會買一些扭蛋公仔,已經很滿足了。但今天卻買了有生以來最貴的玩具,「完全變形 無限地帶23 Garland」。
還記得小時候,我和朋友們都很喜歡這套動畫,那個時候的動畫題材,就是甚麼也是「變形機械人」的時代。在那時出現的「無限地帶23」就最為令我喜歡的,因為我總是覺得,電單車變形機械人的Idea真的很利害。年青的我還想過,自己做一隻完全變形的Garland出來,我還真的有做過兩件「原型」出來的,後來當然是不了了之,那兩件東西還保存著呢。
朋友的金句:「小時候總是買不到想買的玩具,長大後有能力賺錢,但還是買不到想買的玩具(因為它們太貴了)!」。玩具是小朋友的夢想,也是很多成年人的夢想。這次的花錢,應該是用了我五年的玩具購買能力,在往後的五年,應該沒有買玩具的欲念了。

有一天,突然想起了以前在Yahoo的Blog,好奇地到那裡看看,發現了件事,就是還有很多網友會到那裡,每天的到訪人數都是數以十計,看來很多人對我過往的Blog還很有興趣呢,但是我還是希望大家來這裡看新的Blog呢。

Monday, June 12, 2006

我不是個專業Programmer !

有些朋友,都不太清楚我在Programming方面的能力,究竟是甚麼程度,其中一個理由是他們不太懂coding,而另一個理由,就是他們都看到我獨自做了個「Final Spike」,而這個遊戲會令很多人,都認為我的Programming能力很高,但我想說,事實並不是這樣的。

有機會看過一些真正的專業Programmer,可以很快地用C++,設計一個Class出來,很快便可以做出些實在的功能。比較自己的Programming技術,只懂傳統的 C,用很多時間才可以做出些功能,確實是遜色不少。我能夠做出一個動作格鬥遊戲,有時候我亦會想想,究竟是為什麼呢?最有可能的只有一個原因,就是因為我很「香港仔」。我讀書時不是個成績彪炳的學生,所以成績平平,因為這個原因,每每我在想要怎樣做出遊戲中的某種功能,都不會由「學術」的角度出發,會找另類的方法,或者用非學術的方法(即是蠢的方法),不求快而準,只求有及做到。

但我頗為喜歡這樣去做遊戲,因為這樣,培養了自己很容易地找到程式解決方法,而且不容易被框框錮著,而變得老鼠拉龜。有時間做遊戲確實是需要點臨時架床點子,否則就會很容易陷入死胡同。但當然的是,如果又有學識,又懂架床方法,就是最強了。

上星期認識了幾個新朋友,從而對本地遊戲業界多了點認識,增進了知識呢。

Wednesday, May 31, 2006

簡單的Scene Management ?

今天是端午節,今年的端午好像有點不同,可能是天氣比較清涼,溫度只是23~25度。往年都是頗為熱的,看到扒龍舟的人們都會下水解熱,今年可能會少了這種情景了。

以前我曾經說過,一些日文的遊戲製作網頁,有一個有趣的程式技巧,叫做「Task System」(以Array型式儲存資料)。但回想一會,那個Task System如果是用Linked-list表達的話,其實是可以改做成為一個Scene Management程式。為何會這樣想呢?因為這種Task System,是以Priority為基礎,每一個Task除了會有Function Pointer作update外,還會有個priority值,這個priority值是記著一個數值,由 0 至 9 ( High ~ Low ),程式在每個Task的update時,會依據priority值,決定是否先update。

但我卻想,這個priority值,其實可以設定成為Scene management的level值,即是0至9不是High ~ Low,而是 Top ~ Bottom。每個Task都按level值update,level-0的先update(如此類推),當中每個Task在做update時,level值是底的,要和自己高一層的previous link做運算。就這樣,一個簡單的Scene Manager便出來了,這個設計只有一個好處,就是用 C 也可以簡單編寫到。

Friday, May 26, 2006

新招式:掃堂腿!

New Low-Turn-Kick今天在「Final Spike」中,加入了一新招式,就是「掃堂腿」。這招式主如是從下方踢起敵人,目的是快速地踢倒敵人後,讓自己有機會逃避被敵人圍毆。加了這招後,再做了些微調,發現遊戲又有點新樂趣了。做遊戲就是這樣有趣的了,加進了新點子後,總是有點新樂趣。

順帶一提,Newton Game Dynamics出了新的v1.53,修正了些bugs,令遊戲更加穩定。

Saturday, May 20, 2006

一套Game Engine的賣點

上星期探訪一位朋友,就是這位朋友帶領我從2D,走進3D的遊戲製作的。期間和他談到了一個話題,一個在本地原創的遊戲製作套件 ( Game Engine )「Lucid Platform」,為什麼還沒有聽過任何遊戲用這個Game Engine製作呢?我和他說,我在Lucid Platform發報會上,看到有一個Online Game正是用這個套件製作,他又問我,都有一段時間了,但就是沒任何消息,很奇怪。

聽罷想一想,確是覺得有點奇怪,完全沒有這Online Game或Lucid Platform的消息了,他後來說,其實Lucid Platform,或者其他香港本地製作的Game Engine,到最後總是會出現這樣的情況。我聽後問他,究竟是甚麼導致這個問題呢?他說了個論點,就是:這類Game Engine,一定要有個完整的遊戲同時推出才會成功。

舉個例子,例如Unreal Engine,就是有個Unreal系列的完整遊戲,作為這個Game Engine的賣點,人們一看到Unreal系列遊戲,就明白Unreal Engine可以做出怎樣的遊戲。另外亦有數個例子,例如:Crytech Cry Engine ( Far Cry )、Valve Source Engine ( Half-Life 2 ) ...... 等等,都有個完整的遊戲同時推出,令該個Game Engine為人熟悉。但反觀香港本土的Game Engine,都有一個很大的問題,就是只有Technical Demo,而沒有遊戲作為主要賣點,人們都不了解,究竟一個Game Engine可以做些甚麼遊戲?如果有一個完整的遊戲,能夠顯示一個Game Engine的威力,情況也許會完全不同呢。

Monday, May 15, 2006

Animation 有太多 Keyframe ?

還記得我之前說過,朋友建議我的遊戲角色加入摔角手嗎?那時候我覺得,因為我現有的敵人Animation,已經超過了200個Keyframe,如果要再加入額外的animation,在管理上可能有點問題。但我今天想了一想,想到了一個較為容易管理這樣多keyframe的animation方法,就是將keyframe分開管理。暫時概念上,是將「行動」及「被擊中」分開skeleton作儲存及處理,要加入一個轉換skeleton的工作,幸好的是我之前使用的skeleton方案,對這個轉換skeleton的工作甚為有利,只需要少量的程式轉變。

如果需要加入更多的keyframes,更可以分開為「行動」、「攻擊」及「被擊中」等,總之就是將所有keyframes都拆開來管理。

Sunday, May 14, 2006

Friday, May 12, 2006

E3 06的觀賞

這幾天,最多人討論的,應該都是今年的E3遊戲展了。我想大家都有看過相關報導吧,我也想說說看了報導,及動畫片段後的感想。

先說說PS3,看了很多遊戲實行時的畫面,沒話可說,「靚」就是一切。看幾個遊戲,GT HD、MGS4、Naughty-Dog新遊戲......等等,精美的畫面,出色的演出。但是有一個問題,我只看到科技的進步,卻看不到甚麼突破。

Nintendo Wii (讀音 "V") 就不一樣了,充滿驚喜。在E3前,她的名字叫做「Revolution」,只知道是用一個類似 remote的東西作操控,在Concept video 中,是可以舞動那支 remote來玩遊戲,朋友們看到都很喜愛,及好奇Nintendo如何做得到。今次E3就揭曉了她的遊戲是怎樣的,個人的感覺是,非常的出色,Nintendo開創了電視遊戲機的新一頁,我對Nintendo Wii非常的期待。看第一段有關的片段時,看到官本茂和另外三個人玩一隻簡單的Tennis,而其中一人更是從觀眾中抽出來的,看到他們玩,真的很佩服Nintendo,一個第一次玩Wii的觀眾,很快便掌握到那支 remote的操作,更與官本茂合作打贏了對手,令我相信這支 remote是不難掌握的。

XBox360就不用說了,她始終是最早出現的次世代遊戲機,大家都只是看有那些美麗的遊戲會推出,已經見慣不怪了。

Wii 確實比 PS3更吸引,PS3只會吸引死硬派Gamers及Sony死忠Fans,但 Wii卻吸引老中青幼,可以說是全方位。當然這個只是我的論點罷了,因為我還是喜歡玩遊戲,多於看遊戲

Thursday, May 04, 2006

2D遊戲還有市場嗎 ?

在PC上,2D遊戲還有市場嗎?大家先看看這個:

http://www.4gamer.net/news.php?url=/specials/arad_special/arad_special.shtml

是Online RPG,還是純Action?哈,大家還真的要佩服日本的遊戲開發商,在這年頭,大家都在看著滿街的3D遊戲,但就是要做個Online 2D Action RPG出來。令我想起,曾與朋友討論的:為什麼到處都是3D遊戲?我當時的想法和朋友一樣,是玩家已經不再接受2D了。但其實我們都可能錯了,因為我們的眼界都沒有好好地打開。

甚至有些2D遊戲,更是好評如潮,人們都會大叫「有創意!」,例如這個:

http://www.jp.playstation.com/scej/title/locoroco/

究竟是玩家們再不接受2D遊戲,還是因為遊戲製作公司互相競爭,玩家只是當中的犧牲品?這樣說好像誇張了點,但身邊的朋友有時會和我說:「哎呀... 這個3D遊戲在我的電腦上玩很慢啊!」,感覺也是有點無奈。

Tuesday, May 02, 2006

女性Wrestler

昨天,朋友史兄說看完上一回的blog後,有個建議,就是女角不要中國功夫,而改為「摔角手Wrestler」。他的建議很好,但我隨即便想,摔角手很多捉及摔的招式,那麼我便要將敵人的基本被擊中反應,再重新加入一大堆?有點害怕,但這個建議確實不錯,想了幾分鐘,便和史兄說:「不如你來幫我想想如何解決吧,如果想到,我便可以快一點完成。」

他雖然答應了,但他在工作上是個大忙人,忙得差點連回家的時間也沒有,看來一樣是要一段時間後的事呢。 f(^_^')