精華區beta Steam 關於我們 聯絡資訊
因為有些人對怎麼做簡轉繁的方法有興趣. 對於這部分沒興趣的,現在就可以<-離開了. ------------------------------------------------------- 先簡單講一下, 一開始是有打算把文本也換成繁體. 但是, 昨天卡住了, 因為我沒找出來Chinese-X.xnb的運作方法. 才Post了第一篇文章. 問有沒有人已經做出來了. 如果已經有人在做了, 不太想花太多時間在這上面. 但是, 昨天運氣很好, 突然開竅看懂了Stardew的作法. 也看了大家回應, 才決定只去修改字型檔. 雖然不完美, 但是至少有60分了. 廢話不多說, 開始說技術部分, 等大家了解後, 應該會覺得一點都不難. 裡面最重要的是 XNB Extract 0.2.2 我們需要用這個工具, 去把 xnb 檔案解出來. 以下我自己觀察的結果, 也許不太正確, 如果有人知道更詳細的格式, 也請不吝指教. SpriteFont1.zh-CN.xnb 會解出 SpriteFont1.zh-CN.yaml 和 SpriteFont1.zh-CN.texture.png 重點是 SpriteFont1.zh-CN.yaml 是描述某個字在 png 檔的位置. - #!Rectangle x: 127 y: 57 width: 1 height: 1 會有很多個 Rectangle, 是代表一個一個的字. 而代表是哪個字, 就要看後面的資料了. - "三" #!Char - "上" #!Char - "下" #!Char - "不" #!Char 這每個字是一一相對應前面的 Rectangle, 所以我就寫個 nodejs 去處理 .yaml 檔, 轉成之後要用的 json 格式, 裡面記錄了每個字的x,y,width和height. 再用新同文堂的資料去做簡轉繁. 然後利用這轉完的資料, 用 html5 的 canvas 去把 png 檔載入, 再用這兩個API去修改png檔. ctx.clearRect // 清掉原來的簡體字 ctx.fillText // 把新的繁體字寫進去 做完後, 就有新的 png 檔. 然後再使用 XNB Extract 去壓回成 xnb 檔. SmallFont.zh-CN.xnb 也是類似的處理方法. 而讓我卡住的 Chinese-0.xnb Chinese-1.xnb Chinese-2.xnb Chinese-3.xnb 也是類似的方法, 但最大不同的是描述字體的資料是放在 Chinese.fnt (因為不太一樣, 所以當初才會卡住.) 格式也是有點不太一樣. <char id="8273" x="1012" y="0" width="9" height="18" xoffset="6" yoffset="9" xadvance="22" page="1" chnl="15" /> <char id="9825" x="180" y="40" width="19" height="19" xoffset="1" yoffset="9" xadvance="22" page="3" chnl="15" /> <char id="12288" x="1022" y="23" width="1" height="1" xoffset="0" yoffset="0" xadvance="22" page="0" chnl="15" /> id="8273" 這個數字事實上就是 unicode . 以 javascript 來寫, 你可以用下面方式轉回來 String.fromCharCode(8273); 到這邊, 就已經知道某個簡體字的位置. 後面有一個 page="1" 這個數字就是 Chinese-X , 所以 page="1" 就是放在 Chinese-1.png 這樣就照前面的做法就可以了. 然後修改完 Chinese-X.png, 再壓回去 Chinese-X.xnb 檔. 蓋掉原來的 xnb 檔, 再執行星露谷, 就可以看到改完的結果了. 這就大功告成了. :) 比較完美的做法是重建整個字形檔, 因為我還沒有完全看懂他的格式, 所以這就留待有心人了. XD -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.112.188 ※ 文章網址: https://www.ptt.cc/bbs/Steam/M.1508591570.A.669.html ※ 編輯: xpulsar (111.248.112.188), 10/21/2017 21:13:59
five2six2: 嗯嗯嗯原來如此(? 10/21 21:16
milkkiss: 看不太懂..先推 10/21 21:16
five2six2: 文組看不懂 10/21 21:16
※ 編輯: xpulsar (111.248.112.188), 10/21/2017 21:17:48
ansonandan: 嗯嗯 我也是這麼想的 10/21 21:38
a007son: 看到xnb格式解開先給推 10/21 21:51
taleschia: 先推以免被人笑說我是文組 10/21 22:35
stupigII: 其實我也很想把一些遊戲弄成繁體,但是我文組的的T_T 10/21 22:49
af42022003: 不明覺厲! 10/21 22:56
tennyleaz: NS版沒法改QQ 10/21 23:28
darkdeus: 先推,但我看不懂 QQ 10/21 23:29
qmaper: ....供啥咪 10/21 23:33
Vilehawk: 看不懂給推 10/21 23:40
ice76824: 嗯嗯,我也這麼覺得 10/21 23:52
elfswordsman: 推好心 10/22 00:17
hot4321: push 10/22 00:30
imjun: 推 10/22 00:42
sampp1213205: 推 要不是我太忙 不然我也想弄 10/22 01:02
NgJovi: 推 之前想弄Gnomoria但就是沒耐心 這篇寫得好 10/22 01:03
iceyeman: 靠 好有心喔~ 10/22 01:05
tzouandy2818: 其實沒有很複雜啦 只是麻煩而已 而且不是每個遊戲都 10/22 01:09
tzouandy2818: 可以這樣用的 10/22 01:09
tzouandy2818: 精簡版懶人包:解包檔案→替換檔案內字體→封包檔案 10/22 01:10
ctes940008: 轉頭望向簡體遊戲 10/22 01:12
vi000246: 如果把流程寫成程式應該能一次翻譯完吧? 10/22 01:13
vi000246: 每個xnb檔的格式都不一樣嗎? 10/22 01:15
cart76002: 嗯嗯 跟我想的一樣 10/22 01:40
lynnlin: 嗯嗯,我也這麼覺得,雖然看不懂XD 有心大推! 10/22 01:58
wacoal: 推,現在玩遊戲的時間都不夠,除非真有愛不然都很懶得研究 10/22 02:11
RMEXZ: 推 雖然我不懂 10/22 02:53
bolue: 有心 推 10/22 02:55
CJhang: 感覺依照原po講法 可以寫個程式 在每次更新後都能run個一 10/22 03:34
CJhang: 輪重新改簡為繁 不知道其中有沒有困難? 10/22 03:34
alan4023: 原來是這樣啊 我完全沒有想到呢 10/22 05:19
cheexe: 專業推 10/22 07:33
UIYN: 很好,從解包之後就看不懂了XD 10/22 08:45
UIYN: 想用找來的工具來繁化的我果然太天真了(′・ω・`) 10/22 08:45
leo255112: 看不懂…我念化學的QQ 10/22 09:35
ToddHo: 超強的!感謝分享,再仔細研究一下~ 10/22 10:27
fly40314: 快推,不然別人以為我們看不懂 10/22 11:15
spfy: 手動做語系的難度要看當初底層設計的時候有沒有考慮到這點 10/22 11:17
spfy: 有些就是希望其他人來做別的語系 就直接把語言弄整語系包了 10/22 11:19
kenlin96: 嗯嗯我也這麼覺得 10/22 12:39
a840901: 先推,不然別人以為我看不懂 10/22 12:44
t95912: 看起來就很複雜啊XD 10/22 14:17
jiasel: 用心推 雖然我看不懂QQ 10/22 15:33
vion321: 請資工的大大寫程式幫忙跑? 不然一個一個用好拼的FU XD 10/22 18:37
Agreya: 用心推 10/22 23:07
cloudin: 恩恩 跟我想得一樣 10/23 08:23
dsct: 老實不懂推… 10/23 10:14
s31364663: 不明覺厲加一 10/23 11:22
germun: 簡單講就是要重新造字的意思 因為作者起初沒想過要多語言 10/23 11:42
germun: 所以不像大多數的多語言遊戲直接把文本編碼替換掉那麼簡單 10/23 11:43