不過似乎網上更流行的版本是從這裡
能夠得到的乙個名為 quake3-1.32b-.source.zip 的 5.45m 的壓縮包,裡面括了相對較全的內容,有 q3a 的全部原始碼,lcc, q3asm, q3map 和 q3radiant 等工具的源**。最主要的是它還包含了 vs.net 2003 的工程檔案,使得編譯變簡單了許多。
我最早就是用這個版本編譯通過的,不過後來發現在官方**上放出的版本和這個不太一樣,本想想繼續嘗試編譯後者,並且根據其結果來寫這篇網誌的,不過遺憾的是,按照說明上的指導,編譯不能成功。會出現找不到檔案的錯誤,估計是 id 官方的編譯器本身配置有些問題,我沒看原始碼也沒有深入研究,希望有興趣的朋友能告訴我原因和解決辦法。
言歸正傳,其實這個版本裡面的資訊還是足夠豐富的,很容易編譯,只在個別地方有些小問題。不過我還要嘮叨一下,我不是乙個 quake 玩家,所以對其中的很多術語不是很清楚,也不了解整個遊戲的結構,只是出於好奇嘗試了一下,有問題的話還請大家多多拍磚!
**結構
從說明檔案來看,這份**主要包含了這些部分:
編譯 quake iii arena
我指的是編譯 quake iii 唯一的那個可執行檔案。
在 code 目錄下面能夠找到 quake3.sln 這個 vs.net 2003 的解決方案檔案,你盡可以開啟它看看到底都有些什麼東西,不過我在這裡只談編譯,所以就拿它當個黑盒,直接編譯了。
devenv quake3.sln /build release
不出意外的話,編譯會順利完成,其中會有幾個警告,不過不影響結果。之後你會在 release 目錄中找到一大堆編譯好的二進位制檔案,不過有用的似乎只有那個 quake3.exe。
安裝 quake iii arena
只是因為在 code 目錄下面有乙個 installrelease.bat 檔案,所以這一步就姑且叫做安裝吧。在進行這一步之前,還是要準備一下環境變數,將 code/win32/mod-sdk-setup/bin 這個路徑加入到 path 中,因為需要用到 lcc 和 q3asm 兩個編譯工具。然後開啟 intallrelease.bat 這個檔案,注釋掉最後一行和倒數第三行,並且將倒數第二行中的 "_ta" 和 "g:" 去掉,使得最後三行變為這樣:
rem call closefiles
copy release/quake3.exe /quake3/quake3.exe
rem call installvms
為什麼要這樣做,仔細看看也就明白了。首先是根本就沒有 closefiles.bat 這個檔案,然後將 release 目錄下的 quake3.exe 拷貝到根目錄下的 quake3 子目錄中。最後的 installvms.bat 只不過是做了乙個移動操作,沒有什麼用處,因此隻樣改過的 intallrelease.bat 檔案就可以很好的工作了。最後還要確保在根目錄中沒不存在 quake3 這樣的目錄。
好了,這個時候,只要簡單的執行一下這個檔案,待結束後看看根目錄下是否多了乙個 quake3 的目錄,裡面包含了 baseq3 和 missionpack 兩個子目錄,具體的目錄結果如下:
quake3 --|
|| |-- cgame.map
| |-- cgame.qvm
|-- baseq3 -- vm --|-- qagame.map
| |-- qagame.qvm
| |-- ui.map
| |-- ui.qvm
|| |-- cgame.map
| |-- cgame.qvm
|-- missionpack -- vm --|-- qagame.map
|-- qagame.qvm
|-- ui.map
|-- ui.qvm
仔細的看一下輸出的日誌,就可以明白為什麼會產生這些檔案了。
執行 quake iii arena
想必你已經能夠猜到,只要執行 code 目錄下的那個 runrelease.bat 就可以了。不過有兩點要注意,這樣執行 quake3.exe 需要兩個引數,乙個是 fs_basepath 是要指向 quake3 這個目錄,而另乙個 fs_cdpath 則需要指向 quake iii arena 的原始光碟,因為需要從裡面讀取資源檔案。保證這兩個引數都沒有問題了,你應該就能夠看到熟悉的 quake iii arena 的畫面了,否則會出現 couldn't load default.cfg 的錯誤。
其他問題
怎麼樣,還是足夠簡單的,至少比我想象的要簡單,還是那句話,這只是乙個黑盒編譯,希望熟悉 quake 遊戲的人們能夠深入的解釋一下得到的結果,算是拋磚引玉了……
quake3編譯執行
新建quake3目錄 安裝q3ademo.exe到quake3 q3ademo 安裝q3pointrelease 132.exe到quake3 quake iii arena 將quake3 q3ademo demoq3 pak0.pk3拷貝到quake3 quake iii arena baseq...
Quake 3 原始碼分析(二)
quake 3 原始碼分析 二 命令與實現 1 void cvar init void 2 cvar t cvar get const char var name,const char var value,int flags eles 沒有找到 static longgeneratehashvalu...
quake3 原始碼分析(六)
quake3 原始碼分析 六 網路資料傳輸與接收 資料結構 definemax loopback16 typedef struct loopmsg t typedef struct loopback t loopback t loopbacks 2 使用兩個佇列 乙個客戶端用,乙個伺服器端用 接收本...