星露谷有人在做繁體中文嗎? - Steam

Table of Contents


因為有些人對怎麼做簡轉繁的方法有興趣.

對於這部分沒興趣的,現在就可以<-離開了.

-------------------------------------------------------

先簡單講一下, 一開始是有打算把文本也換成繁體.

但是, 昨天卡住了, 因為我沒找出來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



--

All Comments

Iris avatarIris2017-10-24
嗯嗯嗯原來如此(?
文組看不懂
Rosalind avatarRosalind2017-10-27
看不太懂..先推
Andrew avatarAndrew2017-10-28
嗯嗯 我也是這麼想的
Elvira avatarElvira2017-10-30
看到xnb格式解開先給推
Caroline avatarCaroline2017-11-01
先推以免被人笑說我是文組
Jake avatarJake2017-11-03
其實我也很想把一些遊戲弄成繁體,但是我文組的的T_T
Linda avatarLinda2017-11-04
不明覺厲!
Joe avatarJoe2017-11-06
NS版沒法改QQ
Sierra Rose avatarSierra Rose2017-11-09
先推,但我看不懂 QQ
Kama avatarKama2017-11-11
....供啥咪
Hedda avatarHedda2017-11-13
看不懂給推
Kama avatarKama2017-11-16
嗯嗯,我也這麼覺得
Kristin avatarKristin2017-11-19
推好心
Jacob avatarJacob2017-11-24
push
Edith avatarEdith2017-11-29
Daph Bay avatarDaph Bay2017-12-01
推 要不是我太忙 不然我也想弄
Rachel avatarRachel2017-12-05
推 之前想弄Gnomoria但就是沒耐心 這篇寫得好
Skylar Davis avatarSkylar Davis2017-12-10
靠 好有心喔~
Caitlin avatarCaitlin2017-12-13
其實沒有很複雜啦 只是麻煩而已 而且不是每個遊戲都
可以這樣用的
David avatarDavid2017-12-14
精簡版懶人包:解包檔案→替換檔案內字體→封包檔案
Callum avatarCallum2017-12-16
轉頭望向簡體遊戲
Margaret avatarMargaret2017-12-20
如果把流程寫成程式應該能一次翻譯完吧?
Isla avatarIsla2017-12-24
每個xnb檔的格式都不一樣嗎?
Adele avatarAdele2017-12-28
嗯嗯 跟我想的一樣
Zenobia avatarZenobia2017-12-30
嗯嗯,我也這麼覺得,雖然看不懂XD 有心大推!
Caitlin avatarCaitlin2018-01-04
推,現在玩遊戲的時間都不夠,除非真有愛不然都很懶得研究
Skylar DavisLinda avatarSkylar DavisLinda2018-01-07
推 雖然我不懂
Dorothy avatarDorothy2018-01-11
有心 推
Olivia avatarOlivia2018-01-13
感覺依照原po講法 可以寫個程式 在每次更新後都能run個一
輪重新改簡為繁 不知道其中有沒有困難?
Caroline avatarCaroline2018-01-15
原來是這樣啊 我完全沒有想到呢
Sandy avatarSandy2018-01-20
專業推
Ingrid avatarIngrid2018-01-22
很好,從解包之後就看不懂了XD
想用找來的工具來繁化的我果然太天真了(′・ω・`)
Charlotte avatarCharlotte2018-01-25
看不懂…我念化學的QQ
Hedy avatarHedy2018-01-29
超強的!感謝分享,再仔細研究一下~
Sarah avatarSarah2018-01-31
快推,不然別人以為我們看不懂
Eden avatarEden2018-02-01
手動做語系的難度要看當初底層設計的時候有沒有考慮到這點
Connor avatarConnor2018-02-04
有些就是希望其他人來做別的語系 就直接把語言弄整語系包了
Rae avatarRae2018-02-07
嗯嗯我也這麼覺得
Oliver avatarOliver2018-02-11
先推,不然別人以為我看不懂
Una avatarUna2018-02-14
看起來就很複雜啊XD
Agatha avatarAgatha2018-02-17
用心推 雖然我看不懂QQ
Zora avatarZora2018-02-18
請資工的大大寫程式幫忙跑? 不然一個一個用好拼的FU XD
Eartha avatarEartha2018-02-18
用心推
Emily avatarEmily2018-02-21
恩恩 跟我想得一樣
Selena avatarSelena2018-02-24
老實不懂推…
Poppy avatarPoppy2018-02-25
不明覺厲加一
Vanessa avatarVanessa2018-02-28
簡單講就是要重新造字的意思 因為作者起初沒想過要多語言
Wallis avatarWallis2018-03-03
所以不像大多數的多語言遊戲直接把文本編碼替換掉那麼簡單