DOOM engine blockmap解析筆記

更新於 發佈於 閱讀時間約 3 分鐘
blockmap是附屬在map data裡面的一個資料結構,blockmap存放的位置和長度都是紀錄在WAD最前面的lump目錄裡。他和碰撞檢測相關,概念是用grid(網格)把地圖切割成小block,只有在同一個block的物體和牆壁會進行檢測。根據1994釋出的一份unofficial doom spec文件block上限是113*113個,在遊戲的automap模式開啟grid,可以看到實際被分割的樣子。
blockmap結構分三塊:header、offset、blocklist,數值格式都是 I16 (int short),可以在doom wiki找到的表格就不放,僅紀錄我的筆記。
header是第0~7byte, 0~3紀錄的是grid起點座標,通常是負值,如果使用的系統只能繪製在第一象限就要作平移,這在所有automap繪製相關的座標都要注意。4~7是blockmap的水平和垂直格數,相乘即總block (N),所以doom1的E1M1有36*23=824個block。
Offset是第8~8+2*(N-1) byte,紀錄每個block在blockmap資料結構裡的位置(byte offset)。每兩個byte是一個block的起始位置,例如E1M1的第一個block位置(也就是blocklist的起點)在第832byte。
blocklist存放N個block的資訊,block的資料結構有兩種,Tool格式開頭是兩個0x00 (int short 0)結尾是兩個0xFF (int short -1),executable格式少了開頭兩個0x00,直接從wad解出來的是前者。所以直接搜尋blocklist資料裡-1的數量會等於block數量。0和-1之間會存放block內包含的line,並不是直接紀錄相關資訊,而是每2byte對應linedef裡的一筆資料,像E1M1最後一個linedef編號474,blocklist能找到的最大編號也是474。
#Blockmap structure#
###header###
x coordinate of grid origin
y coordinate of grid origin
Number of columns
Number of rows
###offsets###
Offset to block 0
...
Offset to block N - 1
###blocklist###
#block 0
0, line_a0, ..., line_an, -1
#block 1
0, line_b0, ..., line_bn, -1
...  ...  ...
#block n-1
0, line_x0, ..., line_xn, -1
#########
Block裡面有可能不含任何linedef,E1M1一開始的十幾個block都在地圖外,資料解出來是一串連續的0,-1,以為是blocklist資料格式弄錯,多花了好幾天查資料。所以特別把彙整所有資料的結果記錄下來。
為什麼會看到廣告
avatar-img
6會員
64內容數
ktest
留言
avatar-img
留言分享你的想法!

































































hls Ding的沙龍 的其他內容
兩種在windows系統用win32 api關閉輸入法的作法
在樹莓派安裝OpenCV的紀錄。板子是樹莓派3B(沒有+),系統raspbian bullseye 32bit灌到USB隨身碟。
兩種在windows系統用win32 api關閉輸入法的作法
在樹莓派安裝OpenCV的紀錄。板子是樹莓派3B(沒有+),系統raspbian bullseye 32bit灌到USB隨身碟。
你可能也想看
Google News 追蹤
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 應用 由於其靈活和模組化的性質,Prompt Composite 在各種情況下都具有相關性,讓我們深入
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 別稱 Decomposed Prompting、Prompt Pipelining
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 定義 提示複合是一種提示技術,可將複雜的使用者查詢分解為更簡單的提示,整合自訂指令和系統提示以提供上下
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 利用這項研究的概念,我們可以開發適合多種場景的強大的細化系統,例如,考慮範例部分中顯示的程式碼最佳化情況
Thumbnail
Garnter 預測到2026年,傳統搜尋引擎流量將大幅下滑,AI技術的發展使得「零點擊搜尋」變得更加普及。Google 也推出了AI Overview功能來應趨勢。這種變化可能會帶來新的商業模式,如Perplexity計劃推出的廣告分潤機制,為創作者提供新的收入
Thumbnail
這篇內容,將會講解什麼是資料型態,以及與資料型態相關的知識。包括資料型態的簡介、實數、布林值、 字串、陣列。
Thumbnail
Minimum Path Sum 給定一個矩陣,每個格子點代表經過的對應成本。 每回合可以往右移動一格或往下移動一格。 請問從起點左上角 走到 終點右下角的最小路徑成本總和是多少?
Thumbnail
輸入給定一個已經從小到大排序好,而且彼此互質的整數陣列, 請問任取兩數分別當作分子、分母,第k小的分數是多少? 輸出請以 [分子,分母] 的形式回傳答案。
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
這篇文章,會帶著大家複習以前學過的二進位DP框架, 並且以0~N的整數有幾個bit1,有幾個bit0的概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 常見的考法 請問整數k有幾個bit1? 有幾個bit0? 請問整數0到整數N分別各有幾個bit1? 有幾個
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 應用 由於其靈活和模組化的性質,Prompt Composite 在各種情況下都具有相關性,讓我們深入
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 別稱 Decomposed Prompting、Prompt Pipelining
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 定義 提示複合是一種提示技術,可將複雜的使用者查詢分解為更簡單的提示,整合自訂指令和系統提示以提供上下
我們人類和ChatGPT的對話技巧也是需要學習的,有鑑於此,我想要一天分享一點「和ChatGPT對話的技術」,並且每篇文章長度控制在三分鐘以內,讓大家不會壓力太大,但是又能夠每天成長一點。 利用這項研究的概念,我們可以開發適合多種場景的強大的細化系統,例如,考慮範例部分中顯示的程式碼最佳化情況
Thumbnail
Garnter 預測到2026年,傳統搜尋引擎流量將大幅下滑,AI技術的發展使得「零點擊搜尋」變得更加普及。Google 也推出了AI Overview功能來應趨勢。這種變化可能會帶來新的商業模式,如Perplexity計劃推出的廣告分潤機制,為創作者提供新的收入
Thumbnail
這篇內容,將會講解什麼是資料型態,以及與資料型態相關的知識。包括資料型態的簡介、實數、布林值、 字串、陣列。
Thumbnail
Minimum Path Sum 給定一個矩陣,每個格子點代表經過的對應成本。 每回合可以往右移動一格或往下移動一格。 請問從起點左上角 走到 終點右下角的最小路徑成本總和是多少?
Thumbnail
輸入給定一個已經從小到大排序好,而且彼此互質的整數陣列, 請問任取兩數分別當作分子、分母,第k小的分數是多少? 輸出請以 [分子,分母] 的形式回傳答案。
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
這篇文章,會帶著大家複習以前學過的二進位DP框架, 並且以0~N的整數有幾個bit1,有幾個bit0的概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 常見的考法 請問整數k有幾個bit1? 有幾個bit0? 請問整數0到整數N分別各有幾個bit1? 有幾個