求魔物娘TD解包教學

r18_10015_1

r18_10121_1

r18_10042_1

r18_10140_2

r18_10148_2

r18_10276_2

python腳本
這次處理紅色大肉棒問題 : )

python.part1.rar (6 MB)

python.part2.rar (5.4 MB)

DMM版遊戲資源清單取得(2025.10.31版本)

Fiddler分析取得DMM版遊戲資源清單URL

https://assets.game-monmusu-td.net/assetbundles/ver_f866b3b5ac/webgl_r18/ablist.json

遊戲資源清單生成URL思路

json文件中
可看到兩個陣列參數 path 與 hash
AB包文件名稱就是兩者合併而來
unity3d file name = hash + path

比如
“hash”: “3331c9be6f5da9df24f5e8e85ddf3b4d”,
“path”: “857a708cf90a7e8371a786438c997343.bytes”,
unity3d file name = hash + path
= 3331c9be6f5da9df24f5e8e85ddf3b4d + 857a708cf90a7e8371a786438c997343.bytes
= 3331c9be6f5da9df24f5e8e85ddf3b4d857a708cf90a7e8371a786438c997343.bytes

由Fiddler分析可知每個AB包文件名前面加上前綴URL可得實際下載地址
base url =

https://assets.game-monmusu-td.net/assetbundles/ver_10004/webgl_r18/

unity3d file name = hash + path
full url = base url + unity3d file name = base url + hash + path
https://assets.game-monmusu-td.net/assetbundles/ver_10004/webgl_r18/3331c9be6f5da9df24f5e8e85ddf3b4d857a708cf90a7e8371a786438c997343.bytes

遊戲資源清單生成URL - python腳本

python 腳本
讀取 ablist.json 文件
讀取 data陣列 , 截取同一個括弧下 “hash”: " 與 ", 之間的字串 , 存於變數 {hash}
讀取 data陣列 , 截取同一個括弧下 “path”: " 與 ", 之間的字串 , 存於變數 {path}
再加上前綴URL https://assets.game-monmusu-td.net/assetbundles/ver_10004/webgl_r18/
新URL = https://assets.game-monmusu-td.net/assetbundles/ver_10004/webgl_r18/ + 變數 {hash} + 變數 {path}
逐行生成

比如

“path”: “857a708cf90a7e8371a786438c997343.bytes”,
“hash”: “3331c9be6f5da9df24f5e8e85ddf3b4d”,
截取字串後
變數 {hash} = 3331c9be6f5da9df24f5e8e85ddf3b4d
變數 {path} = 857a708cf90a7e8371a786438c997343.bytes
新URL = https://assets.game-monmusu-td.net/assetbundles/ver_10004/webgl_r18/ + 變數 {hash} + 變數 {path}
新URL = https://assets.game-monmusu-td.net/assetbundles/ver_10004/webgl_r18/3331c9be6f5da9df24f5e8e85ddf3b4d857a708cf90a7e8371a786438c997343.bytes

生成ablist_url.txt

運行json2url.bat
自動運行json2url.py
自動生成ablist_url.txt

wget下載遊戲資源URL

將ablist_url.txt拿去餵wget
運行wget.bat
自動開始下載遊戲資源
AB包 : 69685 Files (20.3GB)

Raz版AssetStudio抽出AB包資源

AB包路徑 \assetbundles\ver_10004\webgl_r18
輸出設定 : Group exported assets by container path
依照AB內自帶遊戲資源路徑生成目錄分類
Filter Type : AudioClip , TextAsset , Texture2D

python腳本批次處理spine文件後綴思路

SPINE Version : 3.8.79

.atlas.prefab —> .atlas
.prefab —> json
.skel.prefab —> .skel

python腳本批次處理spine文件後綴

運行01_spine_rename.bat
自動運行spine_rename.py
自動修改spine文件後綴

python腳本
自動瀏覽子目錄下所有檔案
自動修正spine文件副檔名
.atlas 與 .skel 為 spine文件
直接修改不用詢問
*.bat 與 *.py 文件
列入例外則不做修改

以ANCII CODE讀取字串
字串中同時有 .png 和 format: RGBA8888
判斷為atlas文件

CASE 1
若atlas文件沒有副檔名
則加上副檔名 .atlas
如 sample —> sample.atlas

CASE 2
若atlas文件有多個副檔名
如 sample.atlas.prefab
則去掉 .prefab 變成 sample.atlas
如 sample.atlas.prefab —> sample.atlas

CASE 3
若atlas文件有多個副檔名
如 sample.atlas.asset
則去掉 .asset 變成 sample.atlas
如 sample.atlas.asset —> sample.atlas

CASE 4
若atlas文件有多個副檔名
如 sample.atlas.atlas
則去掉 .atlas 變成 sample.atlas
如 sample.atlas.atlas —> sample.atlas

CASE 5
若atlas文件副檔名為.bin
則將.bin 修改為 .atlas
如 sample.bin —> sample.atlas

以ANCII CODE讀取字串
字串中同時含有 字串 “skeleton” 和 字串 }
字串 “skeleton” 在內文中
“skeleton”
} 在字串尾部
判斷為json文件

CASE 6
若json文件沒有.json副檔名
則加上副檔名 .json
如 sample —> sample.json

CASE 7
若json文件有多個副檔名
如 sample.json.prefab
則去掉 .prefab 變成 sample.json
如 sample.json.prefab —> sample.json

CASE 8
若json文件有多個副檔名
如 sample.json.asset
則去掉 .asset 變成 sample.json
如 sample.json.asset —> sample.json

CASE 9
若json文件有多個副檔名
如 sample.json.json
則去掉 .json 變成 sample.json
如 sample.json.json —> sample.json

CASE 10
若json文件副檔名為.prefab
則將.prefab 修改為 .json
如 sample.prefab —> sample.json

以HEX讀取字串BINARY文件
BINARY文件中同時含有 HEX 33 2E 38 2E 37 39 (3.8.79) 與 72 6F 6F 74 (root)
判斷為skel文件

CASE 11
若skel文件沒有副檔名
則加上副檔名 .skel
如 sample —> sample.skel

CASE 12
若skel文件有多個副檔名
如 sample.skel.prefab
則去掉 .prefab 變成 sample.skel
如 sample.skel.prefab —> sample.skel

CASE 13
若skel文件有多個副檔名
如 sample.skel.asset
則去掉 .asset 變成 sample.skel
如 sample.skel.asset —> sample.skel

CASE 14
若skel文件有多個副檔名
如 sample.skel.skel
則去掉 .skel 變成 sample.skel
如 sample.skel.skel —> sample.skel

CASE 15
若skel文件副檔名為.prefab
則將.prefab 修改為 .skel
如 sample.prefab —> sample.skel

CASE 16
若skel文件副檔名為.bin
則將.bin 修改為 .skel
如 sample.bin —> sample.skel

python腳本批次處理spine圖檔尺寸大小

運行02_png_resize.bat
自動運行png_resize.py
自動修改PNG圖檔尺寸以符合atlas文件定義

python腳本批次處理spine文件紅色馬賽克思路

經過多次測試後
修改atlas文件中MaskMosaic字串後面第2、3、4行內容
如 xy: 1370, 1845 改成 xy: 1,1
如 size: 347, 199 改成 size: 1,1
如 orig: 349, 201 改成 orig: 1,1

圖片的 XY 座標起點通常位於左上角
其中 X 軸從左向右延伸 , Y 軸從上向下延伸

x , y : 1 , 1 表示由圖片中左上角座標 1 , 1 當起點
size : 1 , 1 表示由圖片中左上角座標 1 , 1 開始移動
從X軸從左向右延伸 1 像素 , 此時座標 2 , 1
從Y軸從上向下延伸 1 像素 , 此時座標 2 , 2
(這邊的X軸定義向右為正值 , Y軸定義向下為正值)
座標 (1,1) (1,2) (2,1) (2,2) 圍成 1 x 1 的正方形

這個正方形就是紅色馬賽克的圖檔範圍大小
通常這一區塊位於整個PNG圖檔左上角透明區域

orig同size
一開始只修改其中一個
後來發現有些Spine打開後發現圖片會錯位
經過多次測試後
xy size orig 都要一起修改
基本上圖片會錯位情況降為0%

紅色馬賽克物件名稱為MaskMosaic
有多塊紅色馬賽克遮罩的話
物件名稱後面加上數字
MaskMosaic1 , MaskMosaic2 , …等

因為紅色馬賽克MaskMosaic這個物件不能刪除
否則開啟skel文件會出錯 (skel文件內骨架名稱有MaskMosaic)

對於紅色馬賽克MaskMosaic這個物件
只能縮小物件範圍大小
範圍放在圖檔透明區域
效果呈顯出來變成 1 x 1 像素的透明遮罩
紅色馬賽克看起來就消失了

因要修改atlas文件
所以python腳本修改前
會生成備份文件 *.atlas.bak

不改成 0 x 0
是因為SPINE PRO開啟後不會圖片不會錯位
頂多出現警告
說偵測到圖片大小變更 (忽視即可)

實際使用SPINE PRO測試後
發現在使用材質解包器時圖片切片會輸出不完整
只能使用未修改過的atlas文件輸出切片
紅色馬賽克遮罩只能使用SPINE PRO刪除物件
修改過的atlas文件可以在官方版和非官方版Viewer上觀看
這是沒問題的 : )

python腳本批次處理spine文件紅色馬賽克

運行03_remove_mosaic.bat
自動運行remove_mosaic.py
自動修改atlas文件
自動修改MaskMosaic字串後面第2行內容
自動修改MaskMosaic字串後面第3行內容
自動修改MaskMosaic字串後面第4行內容
若字串已為 xy: 1,1 、size: 1,1、orig: 1,1 或不存在則跳過修改
修改前自動生成 *.atlas.bak 備份文件
修改後覆蓋原檔 *.atlas 文件

修改後查看色色SPINE
大致上都看不到紅色馬賽克區域了 : )

瀏覽子目錄下所有 *.atlas 檔案

CASE 1
搜索 MaskMosaic1 字串
修改 MaskMosaic1 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改 MaskMosaic1 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic1 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 2
搜索 MaskMosaic2 字串
修改 MaskMosaic2 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic2 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic2 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 3
搜索 MaskMosaic3 字串
修改 MaskMosaic3 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic3 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic3 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 4
搜索 MaskMosaic4 字串
修改 MaskMosaic4 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic4 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic4 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 5
搜索 MaskMosaic5 字串
修改 MaskMosaic5 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic5 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic5 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 6
搜索 MaskMosaic6 字串
修改 MaskMosaic6 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic6 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic6字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 7
搜索 MaskMosaic7 字串
修改 MaskMosaic7 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic7 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic7 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 8
搜索 MaskMosaic8 字串
修改 MaskMosaic8 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic8 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic8 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

CASE 9
搜索 MaskMosaic 字串
修改 MaskMosaic 字串後面第2行內容
如 xy: 1370, 1845 改成 xy: 1,1
若字串已為 xy: 1,1 或 不存在 則跳過修改
修改 MaskMosaic1 字串後面第3行內容
如 size: 347, 199 改成 size: 1,1
若字串已為 size: 1,1 或 不存在 則跳過修改
修改 MaskMosaic1 字串後面第4行內容
如 orig: 349, 201 改成 orig: 1,1
若字串已為 orig: 1,1 或 不存在 則跳過修改
修改後覆蓋原檔 *.atlas 文件
原 *.atlas 檔案 生成備份檔 *.atlas.bak
若未做任何修改 , 則不生成備份檔 *.atlas.bak

SPINE文件目錄

SPINE文件主要在這3個目錄內
\extract\resources\advscene\texture\character\chr_poses (角色全身表情差分圖) (3.17GB)
\extract\resources\advscene\texture\character\r18_scenes (角色H SCENE) (3.61GB)
\extract\resources\character (角色SD小人) (848MB)

SPINE 版本 : 3.8.79

遊戲資源AB包與抽出資源懶人包載點詳情

遊戲資源AB包與抽出資源懶人包 (RAR密碼 : 1234)
assets.game-monmusu-td.net_20251104.rar (43.1GB)

Google Drive載點

Mega.nz載點

百度盤載點

1 个赞