2018-06-24

【進度】Cyber Sprite外語版 (下)

下篇是字型、字大小、以及各國標準不同的問題,牽涉多方面的知識。

上篇在此

同時發在巴哈姆特



再來選擇字型(font family),這裡指即時繪製的向量字型,不是事先做成圖檔的字,用在對話和角色簡介。

首先因為遊戲風格的關係確定用無襯線體,然後我決定不同語言都用為該語言設計的字型,不是一個字型應付所有語言。
但我做成三個語言放在同一個遊戲,這意味著艾莉兒得一次載入3個字型。

我以省空間、省效能為優先,也避免字型的版權問題,叫艾莉兒讀取作業系統內建的字型,不是要她帶著龐大的字型檔。
Windows和Linux在特定情況下可以自動選字型,例如告訴它要無襯線、日文,它就找電腦上有安裝且符合條件的字型。
但是,我的引擎剛好就是不能自動選字型的情況,所以要自行指定字型名稱。要調查外語版Windows、Linux有內建哪些中、日文字型,以免外國人的電腦看不到字。

以前調查過,Windows Vista以後自動選字型的資訊,是放在C:/Windows/Fonts/裡的這些檔案
GlobalSansSerif.CompositeFont
GlobalSerif.CompositeFont
GlobalMonospace.CompositeFont
GlobalUserInterface.CompositeFont
不過這些檔案只有.Net Framework才能用,C++用DirectWrite畫字的方法不能用。
必須看GlobalSansSerif.CompositeFont的內容,得知各種語言預設的無襯線字型,然後把字型名稱寫進程式裡。
中:Microsoft JhengHei
日:MS PGothic
英:Arial

Linux自動找字型的函式庫是fontconfig,英文的時候沒問題,但找中、日字型時不準,如果叫它找襯線體,它還是傳回黑體。
各發行版不一樣也是麻煩的地方,調查一下幾個發行版的內建中日字型……,現在似乎大部分都用Noto Sans CJK和Source Han Sans,就叫艾莉兒用這兩個,為了保險把早期用的WenQuanYi Zen Hei、TakaoPGothic也加進去。

途中……
艾莉兒:奇怪,每次顯示Lua的角色介紹就當掉,鈷寶輸出的字串資料好像有什麼問題,主人查查看。
原因是裡面有換行字元,翻譯人員填Excel格子的時候用了換行(\n,ascii碼10),用巨集輸出資料後再給遊戲用就出問題。
好久沒有調整鈷寶了,改良她的錯誤檢查能力,叫她在格子裡有換行字元,或該填數字的地方填文字的時候跳訊息通知。

←寫LibreOffice巨集用的是這個語言。
(老實說很難寫,官方說明文件不好翻閱,LibreOffice的巨集編輯器也容易lag)
(貝姬的性能也差強人意,如同遊戲中的設定「為了裝備輔助新手的功能,多少犧牲了一些力量和特殊能力」:字串截取麻煩、不能用\n代表換行符號等等)



英文版角色介紹畫面,最下面一列放不下。


字型決定後下一個問題:原來預留的顯示空間可能放不下英、日文。

根據在公司做外語版的經驗,中文是很精煉的文字,想表達相同的意思中文是最短的,英文比較長,日文看漢字和敬語使用多寡,我見過最長的是德文和俄文。

只能看情況一個一個改,用以下方法
1.英、日文的字型設成稍小
2.把顯示空間調大。
3.改成意義相近但較短的詞,如in order to+動詞 → to+動詞,be able to → can
4.如果是做成圖檔的字,把字元間距和行間距調小,或一列變成兩列。

因為修改規格,把關卡標題幾乎重做了一遍,英、日文的字比中文小一些。


另外發現一些字形和標點符號的細節。

有些漢字各國寫法不一樣,因此有些字只要切換字型就會換成另一國的寫法,如果用繁中字型顯示日文,或簡中字型顯示繁中,可能有寫法不對的問題。
全形逗號和句號,繁體中文是放在格子中間,但日文是放在左下。
日文裡放在中間的黑點常用在人名,它的字碼是30FB,而鍵盤上的全形點號打出的是FF0E,兩者在繁中字型看不出差別,但在日文字型就有差了。

繁中的線條明顯比較細,比較了幾個無襯線字型,微軟正黑體確實特別細。

這時注意到日文版說明書標點符號還是繁中寫法,查到要像這樣設定語言:<html lang="zh-Hant">、<html lang="ja">。

雖然字型Noto Sans和Source Han Sans據說是同一個團隊開發的,但是Noto Sans對各國異體的支援不好,選Noto Sans CJK JP結果顯示的還是台灣的寫法,Source Han Sans才有做到不同國家的異體字。

英文的引號早期只有命令列的時代因為技術限制,如下圖第一列左右引號畫成相同,但事實上左右引號是有分的,第二列才比較正式。




這些字內容稍有修改,也因為空間不足要改規格。


這是預先做成圖檔的字,跟很多UI元件放在同一個圖檔裡做成sprite sheet。
要連帶改很多地方,圖要加寬
→ sprite sheet要重排,很多圖要移動
→ 貼圖坐標原本寫在程式裡,這樣變更時容易忘記改,改用前篇說的放在圖檔裡
→ 程式裡用到貼圖坐標的地方也要配合改。

(過程)
現在要改「New」的字,艾莉兒,搜尋這個變數名稱:NEW_TEX。
艾莉兒:嗯,在gallery.cpp第九列。
把它刪除並改用sprite sheet ID,SS_NEW=61,編譯一下找出哪裡用到貼圖坐標。
艾莉兒:好。
(會跳「找不到變數NEW_TEX」的錯誤,就能知道哪裡要配合改)
然後在Inkscape填入61的編號(我用Inkscape排sprite sheet)……,鈷寶,輸出圖檔。
鈷寶:……。(工作中)
開遊戲測試看看……,沒問題,好,改下一張圖。
…………
先全部改用寫在圖檔裡的方式,再來搬圖片位置,這樣即使貼圖坐標有修改也能輕鬆輸出了。

←寫Inkscape外掛的程式語言是這個,二代才會出現這個角色。

題外話,個人認為寫大程式還是編譯型語言比較方便,看過有些文章誇大腳本語言的能耐,個人並不同意這種說法。
像上面刪除一個常數可以改了後直接編譯,compiler能把要配合改的地方挑出來。而解譯型語言要剛好執行到那一行才能發現錯誤,如果測試時剛好沒測到,就這樣放進正式版就慘了。

就這樣改了兩天才改完。
以前做的時候很多貼圖坐標寫在程式裡,這次改版時儘量改用sprite sheet的方式,有要修改的圖檔就順便改。




下一步是製作人名單。

為了讓外國人看得懂,我有特地問筆名用中文的成員要取什麼英文名字。
但也要讓中文版和外文版看得出是同一個人,例如畫UI的人,如果中文版寫春捲P,英文版寫kcsgamer,就看不出是同一人了。

最後採用這樣加小字的方式,日文可看到這種用法標示發音,漫畫、小說裡也有時用來做特殊效果。
說明書的話,我有印象這種小字稱為ルビ所以HTML標籤應該是<ruby>,去查一下確實沒錯。


遊戲ending也有秀製作人名單,這是做成圖檔的字所以在繪圖軟體裡弄就行了。
不過一樣要解決英日文佔用空間較大的問題,字的位置大小要修改,還有名單裡新增兩個譯者。

至於測試方法,當然不是每改一次就要全破遊戲一次,而是修改程式,一開遊戲就直接進入ending,測完再恢復原狀。

還有Gallery會顯示各作品的作者是誰,這裡也要顯示注音,但這是即時繪製,所以艾莉兒得多載入一個較小的字型。
加上不同語言用不同字型,所以下圖小小的幾個字就用了3個字型,而且兩平台的內建字型還不一樣。


另外也發現全形字母和全形標點符號是中日韓特有的東西,英文字型裡沒有全形字元,Gallery一覽的全形「????」要想辦法。想了一下決定不管目前是哪個語言都用繁中字型繪製。


Option裡選語言的項目也要同時顯示三個語言,英文字型裡可沒有「中文」、「日本語」這些字,這兩項也只好用繁中字型頂。


綜合以上,玩Cyber Sprite至少需要的是繁中和英文字型,其他語言是需要時才會載入,不確定以後會不會做日文以外的語言。



倒數第二步:設計文件

本遊戲製作時給內部人員看的文件算是個特別創作,就收錄幾張在Gallery裡供人觀賞,由於上面有寫字所以也有必要翻譯。

有考慮這部分要不要讓譯著翻,最後決定由我親自翻譯,即使文法有錯,這樣才有作者親手寫的感覺,而且文件裡的隨筆本來就不是完整的句子,不太考慮文法。
寫的方法是把中文隱藏,回想當初要表達的意思再重新寫出英、日文,而不是把中文放在旁邊對照,以免受中文影響用中文的思考寫外文。



看起來是強敵攻略,不過遊戲裡有註明一句話:「設計文件含有未採用部分,不一定符合遊戲內容。」製作途中發現最初的想法有瑕疵,修改設計是常有的事。



做了這麼多,還剩一個各國習慣不一樣的地方:Ranking裡的日期。

台灣的寫法是「年/月/日」,但有的國家是「日/月/年」或「月/日/年」,我在英文網站看到日期時,有時還得猜三個數字各是什麼。
我認為遊戲裡倒不用配合語言變換日期格式,太費工了,只要找個地方註明是什麼格式即可,但是遊戲中沒有空間可以放,只好寫在說明書裡。



這裡的字型是點陣圖字型(每個字元都是一張圖),特別挑一個等寬、無襯線、0是slash zero的字型,以做出命令列和程式碼的感覺,Ranking以外的地方也有用到。至於把一個個字元排成字串的方法,tilemap系統不是只能用在顯示地形,在這裡也用得上。

順便介紹一下,小數點寫法其實也不是世界通用,台、日、美的小數點寫成點,千分位是逗號,但有些國家相反,通常是歐洲國家。
以前在公司就有收過一份文件,裡面小數點寫成逗號,查一下發現對方是荷蘭的公司。
這我就覺得不需要花那個工修改,歐洲人看了應該也明白意思。計算機科學主要在美國發展,所以程式語言都照美國的規則用點號小數點,包括荷蘭發源的Python語言。



後記:

外語版不是只把譯著寫好的稿件key進去就好了,還有很多雜七雜八的工。
這次我的電子妖精比較幫不上忙,測量字的位置、大小要由人類看畫面判斷;各國標準不同,以及成員想取什麼名字更是很人為的東西。
在公司有跟各國代理商打交道的經驗,所以對各國習慣的差異稍有了解,這次製作時也去查了資料。
假如還要加入從右寫到左的文字(如阿拉伯文)就更麻煩……,目前先不管了。由此可想像開發桌面環境的團隊,做世界各地的版本要費多少工夫。

之前徵求過二代UI美術,不過根據這次做外語版的經驗,想打消徵人的念頭了,除非能經常見面討論否則UI不要請別人做。因為要看情況臨機應變,判斷要改程式、改排版、改字型、還是把向量字改成圖檔,外包難以做到這樣靈活多變,以及美術解決不了的問題用程式解決等做法。一般遊戲公司裡UI也是社內人員做而不會外包。

把外語版實裝好之後,再來就可以準備網路下載的通路了。

關於頭像:順便介紹幾個遊戲中的角色實際用在什麼地方。現在畫好各角色的頭像或許以後也用得著。
那些電子妖精不是單純畫出個萌系外型而已,是筆者實際共事的伙伴(當然我親手打造的艾莉兒和鈷寶也是),所以有很多材料可以寫,會找機會介紹更多遊戲外的設定。

沒有留言 :

張貼留言