Skip to content

About

Check Tiled maps for missing files, out of range tiles and other problems before they reach your game

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

tiledcheck

English

檢查 Tiled 地圖(.tmx / .tmj)有沒有會在遊戲裡出事的問題:找不到的 tileset、圖片、模板,沒有 tileset 對得上的 gid,重複的物件 id,還有 Tiled 自己會默默丟掉的地形設定。可以在本機跑,也可以放進 CI。

$ tiledcheck maps/
maps/town.tmx: error: tileset (firstgid 1): ../tiles/town.tsx does not exist [missing-file]
maps/town.tmx: error: layer 'Ground': gid 97 is not in any tileset, used in 12 cells [gid-out-of-range]
tiles/walls.tsx: error: tileset 'walls' terrain set 'Walls': 255 colors, Tiled 1.10.2+ supports 254 and silently drops every terrain set of this tileset [terrain-colors]
3 files checked, 3 errors, 0 warnings

使用

需要 Node.js 20 以上。

npx tiledcheck maps/

可以給地圖、tileset(.tsx / .tsj)、世界(.world,會檢查裡面列的每張地圖,用 patterns 的世界則檢查同資料夾裡符合正規表示式的地圖)或資料夾,資料夾會往下找所有地圖和世界。有錯誤時結束碼是 1。

參數 作用
--json 輸出 JSON
--github 輸出 GitHub Actions 註解,問題會直接標在 PR 上
--no-warnings 只報錯誤
--ignore <rule> 跳過某條規則,可以重複使用
--rules 列出所有規則

放進 GitHub Actions,問題會直接標在 PR 上:

- uses: actions/checkout@v5
- uses: vtxe02023274/tiledcheck@main
  with:
    path: |
      maps/
      worlds/main.world
      levels/**/*.tmx
    # warnings: false
    # ignore: image-size missing-image

path 一行寫一個路徑或 glob(支援 **),路徑可以有空格。ignore 用空格分隔。

在 Tiled 裡檢查

把 extension/tiledcheck.js 放進 Tiled 的擴充資料夾(Edit > Preferences > Plugins 的 Extensions 那欄按 Open... 會打開它),重開 Tiled 或等它自動重新載入,「地圖」選單最下面會多一個 Check with tiledcheck。需要 Tiled 1.10 以上,電腦上要有 Node.js 20 以上。

它會對目前地圖存在磁碟上的檔案跑 npx --yes tiledcheck --json <地圖>(地圖有未存檔的修改時會先問要不要存),每個問題列在 Issues(問題)面板,錯誤和警告分開顯示,地圖用到的 tileset 檔的問題會在前面標檔名。雙擊問題會選取它說的物件(並把畫面移過去)或圖層;tileset 檔或世界裡的地圖會直接打開。沒有問題時會跳出 No problems found.。

想改用本機安裝的 tiledcheck 或加參數,改檔案開頭的 config:

const config = {
  command: ['node', 'C:/tools/tiledcheck/dist/bin.js'],
  args: ['--ignore', 'missing-image'],
};

檢查時 Tiled 會等 tiledcheck 跑完才能繼續操作,第一次用 npx 需要下載,會等比較久。

規則

規則 等級 內容
load-error 錯誤 檔案讀不了或格式壞了
missing-file 錯誤 外部 tileset、物件模板、模板用的 tileset 不存在,或世界的 pattern 沒有符合的地圖
missing-image 錯誤 tileset 圖片或圖層圖片不存在。Phaser 這類另外載入圖片的引擎可以用 --ignore missing-image 關掉
image-size 警告 tileset 圖片的實際尺寸跟 tileset 寫的不一樣,圖塊編號會錯位(支援 PNG、GIF、BMP、JPEG)
gid-out-of-range 錯誤 圖塊或物件的 gid 不在任何 tileset 範圍內(翻轉旗標會先去掉)
tileset-overlap 錯誤 兩個 tileset 的 gid 範圍重疊
terrain-colors 錯誤 地形組超過 254 色,Tiled 1.10.2 起整個 tileset 的地形都讀不到
layer-size 錯誤 圖層的圖塊數跟寬×高對不上
tile-data 錯誤 圖塊資料解不開(Node 22.15 以前的版本解不了 zstd,只會給警告)
duplicate-object-id 錯誤 兩個物件用了同一個 id
next-object-id 警告 物件 id 沒有小於地圖的 nextobjectid,Tiled 下次存檔可能重編
object-outside-map 警告 物件整個在地圖外(只檢查正交與等角、非無限地圖)
world-overlap 警告 .world 裡兩張地圖的位置重疊
unused-tileset 警告 地圖裡沒有任何圖塊或物件用到這個 tileset,會照 tileset 清單載圖的引擎還是會載它的圖片(物件模板讀不到時略過)

支援 CSV、base64(無壓縮、zlib、gzip,Node 22.15 起也支援 zstd)、舊版 XML 圖塊資料、無限地圖的 chunk、群組圖層。舊檔案沒寫 tilecount 時,會照 Tiled 的算法從圖片尺寸推算;推不出來就延伸到下一個 tileset 的 firstgid。

用 Tiled 原始碼裡的 22 張範例地圖測過,TMX 原檔和用 Tiled 轉出的 JSON 版結果一致,沒有誤報(只有 4 個物件確實在地圖外的警告)。也掃過 phaserjs/examples 的 108 個地圖檔(加 --ignore missing-image),只報出 1 張 tilecount 寫錯的地圖和 3 個本來就不是 Tiled 格式的檔案。

開發

npm install
npm test
npm run lint
npm run build   # 輸出 dist/

授權

MIT

About

Check Tiled maps for missing files, out of range tiles and other problems before they reach your game

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages