2012年10月28日 星期日

linux 商業 game - descent

先來談談 id soft 的 doom, 我本來就欣賞他們遊戲技術, 看完這篇之後, 更欣賞 John Carmack, 在科幻小說上有看過這句話, 高度的文明是建立在高度的人文素養上, John Carmack 的事情見證了這句話, 擁有高度的人文素養, 才能建立高度的技術。

doom 應該是我第一個在 linux 上玩的商業遊戲, 當成功跑出 doom 畫面時, 那時的興奮感我似乎還記得, 這裡有 doom source code, 我編不起來, 不要緊,
這樣比較簡單:

apt-get install freedoom prboom doom-wad-shareware

不過讓我們回到 descent2。

我不是說我自己, descent - 天旋地轉, 出到 3 代, 我從第一代到第三代都買了。當時只能在 dos, windows 玩這款遊戲, 不過後來 descent2 有 linux 的版本。

http://icculus.org/d2x/

這只有主程式, 不過有共享版的資料可以玩, 我則是把 descent2 原版光碟的資料 copy 到某個目錄中, 執行 linux 版本的遊戲程式即可。

在 debian unstable 無法正常 compile 程式, 我修改了一些部份, 可以正常 compile 出執行檔。需要安裝 sdl 開發工具。

make  all-recursive
make[1]: Entering directory `/home/descent/d2/d2x-0.2.5'
Making all in 2d
make[2]: Entering directory `/home/descent/d2/d2x-0.2.5/2d'
/usr/bin/nasm -dTRANSPARENCY_COLOR=255 -f elf -d__linux__ -i./  linear.asm -o linear.o
linear.asm:108: error: comma, colon or end of line expected
make[2]: *** [linear.o] Error 1
make[2]: Leaving directory `/home/descent/d2/d2x-0.2.5/2d'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/descent/d2/d2x-0.2.5'
make: *** [all] Error 2
d2x-0.2.5-patch.tar.bz2 這是我改過的版本, 需要的朋友請自行下載。

d2.patch

 1 diff --git a/2d/linear.asm b/2d/linear.asm
 2 index 47c3260..bc40514 100644
 3 --- a/2d/linear.asm
 4 +++ b/2d/linear.asm
 5 @@ -104,9 +104,10 @@ section .data
 6    WholeStep dd  0 ;minimum run length
 7    XAdvance dd  0 ;1 or -1, for direction in which X advances
 8    XStart  dd  0
 9 -  YStart  dd  0
10 -  XEnd  dd  0
11 -  YEnd  dd  0
12 +YStart  dd  0
13 +XEnd_ dd 0
14 +YEnd dd 0
15 +
16  
17  section .text
18  ; Fast run length slice line drawing implementation for mode 0x13, the VGA's
19 @@ -132,7 +133,7 @@ gr_linear_line:
20   mov ecx,[esp+32]
21   mov [XStart], eax
22   mov [YStart], edx
23 - mov [XEnd], ebx
24 + mov [XEnd_], ebx
25   mov [YEnd], ecx
26  
27   mov ebp, [_gr_var_bwidth]
28 @@ -146,7 +147,7 @@ gr_linear_line:
29   xchg [YEnd], eax    ;swap endpoints
30   mov [YStart], eax
31   mov ebx, [XStart]
32 - xchg [XEnd], ebx
33 + xchg [XEnd_], ebx
34   mov [XStart], ebx
35  
36  LineIsTopToBottom:
37 @@ -168,7 +169,7 @@ LineIsTopToBottom:
38  ; horizontally. In the process, special-case vertical lines, for speed and
39  ; to avoid nasty boundary conditions and division by 0.
40  
41 - mov edx, [XEnd]
42 + mov edx, [XEnd_]
43   sub     edx, esi        ;XDelta
44   jnz     NotVerticalLine ;XDelta == 0 means vertical line
45         ;it is a vertical line
46 diff --git a/texmap/tmapppro.S b/texmap/tmapppro.S
47 index 13ae78e..cebfd7b 100644
48 --- a/texmap/tmapppro.S
49 +++ b/texmap/tmapppro.S
50 @@ -122,7 +122,7 @@
51  // dzdx to z, and finally puts 64 back onto the stack. At the end of
52  // the macro, the stack contains: 64, z, u, v.
53  
54 -.macro DoFPCalcs 0  // The FP stack after each instruction:
55 +.macro DoFPCalcs   // The FP stack after each instruction:
56      //   64/z  z    u    v
57   fst %st(4)  //   64/z  z    u    v  64/z
58   fxch %st(2)  //     u   z  64/z   v  64/z
很辛苦吧!玩個遊戲還要懂組合語言才能正確 compile 遊戲主程式, 裡頭有 nasm, gas 語法的組合語言, 不過對程式開發者而言, 這可是很寶貴的 source code。

20121028 在 mopcon lighting talk 聽到 CQD 的 opensource 商業 game, 我才知道原來有好幾款商業遊戲已經 opensource, freespace2 也是其中之一, freespape 和 descent 都是由 interplay 開發的, 我自然也有注意到這款遊戲。

type
/usr/local/bin/d2x-sdl -hogdir /home/descent/descent_game_data/d2data/
就可正常執行。音樂也有正常呈現。

以下是 descent2 的遊戲畫面:



它和一般 doom like 有何不同?它多了上下兩個方向, 除了 doom like 的前後左右之外, 多了上下, 所以可以躲在敵人上方或下方偷偷的擊斃敵人, 敵人連怎麼死的都不知道; 而由於多了上下這兩個方向, 也讓整個操作複雜不少, 我則是有一套自己的鍵盤定義, 用起來蠻順手的。

1, 2 代我全破, 第三代買很久了, 仍然無法通過第一關, 難度提高不少。能在 linux 上玩商業遊戲, 爽度暴增。

ref:
http://www.dxx-rebirth.com/

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。