【RM教學 2.0】有關MV中常出現的字體問題

在遊戲輸出後,是否常出現遊戲中字體突然歪了,或是缺字等等的意外狀況,這篇文章簡單描述MV有關字體的運作,以及對應的解決方法。





我們先來個實例,圖片取自巴哈中的遊戲

【遊戲發布】劇情向傳統RPG-魔界
討論串連結:
https://forum.gamer.com.tw/C.php?bsn=4918&snA=29091&tnum=2

先不管這張圖片文字的原意是什麼,但可以看到其中有個字體跟其他字體是完全不同的。
由作者在推文的回應,也可以看出這是作者預料之外的事情。

那個,問題出在哪呢?

如果對腳本比較不了解,各位也可以直接拉到底下一點看解決方法,如果想了解腳本的作者,可以跟我一起一步一步往下看

內建腳本的字體選擇部分

這邊先給大家一個概念,內建的文字顯示大部分都是包在Window這個物件底下,
打開rpg_window.js 可以看到這一段

RM字體

standardFontFace,代表著遊戲中的字體顯示

如果有寫過網頁的朋友不難看出 SimHei Heiti TC , sans-serif是CSS中的設計方式,

而這個function 判斷了三中狀況

如果是中文語系採用 “SimHei, Heiti TC , sans-serif” 的字體,如果是韓國語系則是另外一種,

在兩者皆非的狀況下則採用GameFont字體

那腳本中的 $gameSystem.isChinese() 又是如何判斷?

打開rpg_object.js 可以查到GameSystem.js 有幾個function

RM字體

而它們都是透過 $dataSystem.locale 的 regExp去判斷為什麼語系。

別擔心,異世界的語言就快結束了,我們繼續往下追

打開data/System.json這個檔案,可以搜尋到 locale這個關鍵字

RM字體

可以看到 “locale”:”zh_TW” 的字樣,這個資料是在我們”開啟新專案”時,就會根據開啟的語系產生的資料,

所以大部分中文的作者的遊戲都會採用 SimHei, Heiti TC , sans-serif 的字體樣式來顯示文字

依照CSS的特性,我們會先嘗試抓取玩家的電腦中是否有SimHei字體,若沒有則判斷是否有Heiti TC字體,由左而右進行檢查。

也因此,才會出現字體不統一的情形。 (尤其中文字的字量非常大,常常會看到可能大部分的字體沒問題,少部分字體卻會缺字)

我在網路上找過改字體教學,但為什麼沒用?

網路上大部分的教學都會教你到font/ 資料夾底下去改字體,很多作者照做之後卻發現還是有這個問題,那是為什麼?

打開fonts/gamefont.css 檔案觀察一下

RM字體

可以發現,其實我們丟到fonts資料夾中的字體檔案,只改變了GameFont定義的字體但在Window的判斷中,

並沒有去改變 $gameSystem.isChinese() 時套用的字體。

RM字體

這樣,我們得到了一個結論:

遊戲中的字體會根據System.json中的loacle值改變,而且會由左至右套用。在某些字體缺字的時候,會發生字體不同的問題

那該如何解決? 這邊提供幾種方式:

@ 上網找可以完全改善字體的腳本:
這個部分就不多做解釋,如果有讀者願意提供不錯的腳本也歡迎留言

@ 找出完全支援中文的字體,手動修改讀取字體
1. 先找出你想要用且支援中文的字體 EX: google可以提供的字體 https://www.google.com/get/noto/#sans-hant
#請詳閱各字體的使用規範

2. 修改gamefont.css的字體連結名稱
請注意內建只支援ttf / otf 類型的字體檔案
RM字體

3. 修改rpg_window.js 中的standardFontSize如下圖
讓所有語系都是return Game_Font (你安裝的子體)
RM字體

這樣字體就都統一成Game_Font,英文/中文字基本上都不會有問題了

(因為英文只有26字母,多數字體都支援英文,比較不會出現缺字的狀況。)

最後,想特別說明。這篇主要是簡單讓大家理解RM中字體顯示的判斷方式,還有很多方法都可以讓字體達到統一。文章中有觀念錯誤的地方也歡迎給予指教修正。

Author: chimaki

作者粽子,2007年初次接觸RM2K3後便與遊戲製作結下不解之緣。2010年開始踏入遊戲業,任職研發企劃。2016年開始轉職Server工程師,喜愛並支持獨立製作。2016年開始正式推廣RPG MAKER MV。

發表迴響