DOOM engine linedefs, vertexes解析筆記

2023/03/08閱讀時間約 3 分鐘
Vertexes和linedefs是構成doom關卡地圖的主要參數,所以放同一篇,(另外blockmap也很重要,沒啟用會造成穿牆)。在WAD的每個地圖區塊都會存放屬於該地圖的vertexes和linedefs。
Vertexes很單純就是頂點座標,用來決定line (LINEDEFS)和segment (SEGS)的起點終點,以(x0, y0, x1, y1, .......xn, yn)的順序排列資料,每個資料2 byte。
Linedefs lump用來紀錄每條線的設定資料,每條線由兩個頂點組成,渲染成3D地形時會在這條線前後貼材質變成一個或兩個牆面,每個牆面又分成最多三個貼圖區域(參照sidedefs)。如果想變更下列三項就必須把line設成雙面:改變地板和天花板的高度或貼圖,光線亮度,sector tag和sector type。
在doom1 doom2每個linedef占14byte,每個參數都是int16_t各2byte。七個參數簡述如下:
  • Start Vertex: 起點座標
  • End Vertex: 終點座標
  • Flags: 16個bit,控制這條線的某些屬性,可同時開啟複數flag。
  • Special Type: 門、電梯、傳送點等等依附在line(牆)上的可觸發特效設定。
  • Sector Tag: 大概是type的特效會影響到哪個sector,像E1M1的line308和sector59都一樣是tag1,line195和sector70都一樣是tag2。
  • Front Sidedef: 正面貼圖要用的sidedef編號,-1代表不貼圖。正面是在起點面向終點的右手邊那一面。
  • Back Sidedef: 背面貼圖要用的sidedef編號,-1代表不貼圖。
#Linedef type (或special type)種類繁多近千種,需要查表才知道細節。觸發效果的方法有三種(1)推-push(2)通過線-walkover(3)用武器攻擊-gun shoot,第一種依作用方式再分為manual和switched,manual只影響線對面的sector,switched影響和這條線有一樣tag的sector (待細查)。四種觸發方式各有一個英文字母為代號,又根據可否重複觸發給予1或R的代號,所以觸發代號總共有P1 PR S1 SR W1 WR G1 GR。
#要讀取Flag內容在labview還要把int16_t轉換成boolean array,doom1用到的flags列出如下
  • Bit 0  怪物和玩家都不能通過
  • Bit 1 僅怪物不能通過
  • Bit 2 雙面貼圖(在小地圖顯示的顏色跟單面不一樣)
  • Bit 3 上1/3貼圖材質unpegged (要再研究關於貼圖的說明)
  • Bit 4 下1/3貼圖材質unpegged
  • Bit 5 祕密地點(在小地圖顯示單面),如果special_type是1(即門)則怪物不能通過
  • Bit 6 blocks sound
  • Bit 7 永遠不在小地圖顯示
  • Bit 8 總是在小地圖顯示
Reference:
為什麼會看到廣告
5會員
56內容數
ktest
留言0
查看全部
發表第一個留言支持創作者!