簡單的說,漢化的工作就是把遊戲中所有的文字都替換成中文的。在一個手機遊戲裡,修改文字大概存在以下3種形式:
圖片字。 就是指所有以圖片形式存在的文字,比如遊戲的splash,文字背景或特效等等。替換的方法很簡單,找個美工做圖,然後直接把原圖換掉。有很多過去的遊戲都是把這些圖片不經過任何處理或者只去掉副檔名放到jar裡,替換這些很簡單;但是為了減容,現在的很多遊戲則是把n張圖片打包放在一個檔案裡,要準確的替換這些檔案就有些麻煩了。
首先要弄清檔案的儲存格式。按程式的畫法,可以大體分為drawImage和drawRGB兩種形式。
drawImage就是直接把圖片打包,不破壞任何圖片的格式,drawRGB則是以RGB格式儲存圖片的象素資訊。前者比較容易,除了PNG以外,有的手機還支援GIF,JPG等格式,只要保證圖片格式正確就可以了。後者稍微麻煩一些,因為形成的RGB象素資訊的陣列很大,有的還經過壓縮,因此準確的替換會比較困難。
寫在程式裡的字串。 處理方法也很簡單,反編譯原始檔之後替換相應的字串就ok了。別問我什麼是反編譯,這貼裡不講編譯原理。再詳細的說一下,有2條路,第一就是直接修改class檔案。直接把漢字寫在源程式裡的話,生成的class檔案裡的漢字字串應該是標準的utf8編碼,一個簡單的做法就是自己編譯一個寫好中文字串的java檔案,再把生成的class檔案裡面對應的位元組copy到原class檔案裡。第二就是反編譯之後生成的java檔案,由於擾碼的原因,會有地方編譯不過,一般是因為反編譯後生成的檔案有問題。由於擾碼工具的不同,存在的問題也不一樣。有的地方沒有反編譯成功,還有的地方使用了偽彙編指令(如goto等),有的建構函式的名稱被隱藏。。等等,還有的擾碼工具還會故意增加不合理程式碼來給反編譯設定陷阱-__-|| 因此就得進行很麻煩的修改。。。當然改來改去也就是那麼幾種錯誤,就是很麻煩。擾碼和反編譯技術是一魔一道,沒有萬全之策。總之在沒有徹底排除擾碼的干擾的時候,不推薦用這種方法。
寫在外部資料裡的字串。 如果這個遊戲的程式結構好的話,所有的字串都應該是放在外部的某個檔案裡的。不知道是哪個檔案的話,直接把所有檔案都用文字編輯器開啟檢視就能發現儲存字串的檔案。很多遊戲都是用readUTF()這個通用函式來讀取檔案中的資料的。因此確保所用的新字串都是utf-8編碼,由於沒有原xml檔案來重新生成這個資料檔案,可能需要透過替換字串的16進位制編碼才能正確的替換原來的字串。一般的說,uft-8每個字元比Unicode大一個位元組,因此替換完成的字串檔案可能會比原來要大一點。如果不是utf8格式,也有可能是unicode或其他格式,但如果程式本身都沒有考慮到多位元組文字的讀入,那麼除非修改原始碼否則是無法解決的。
到此基本上大功告成,替換這些字串所帶來的jar大小和遊戲執行時記憶體的變化可以忽略不計。最後一步,請確認要執行此程式的手機支援中文:)
總之,沒有自帶字型檔真是一件讓人高興的事。拿到一個GBA rom,第一件事就是破解,但拿到一個手機遊戲呢?直接解開檢視各檔案就是了。呵呵,做一個GBA漢化,至少需要破解,翻譯,美術,而做一個手機漢化呢,文字量不大,圖片不多,一個人足夠。還有最重要的一點,國內沒有一家GBA遊戲製作公司,想玩到中文遊戲只能靠fans自己動手,但是手機遊戲的遊戲正相反,國內的製作公司很多。但儘管如此,大部分的中文遊戲仍然是純粹的垃圾,和國外的大牌公司製作的遊戲相比真是不堪一擊。有興趣的同學大可以自己試一試,因此我覺得,本文的意義也不是一點都沒有吧
簡單的說,漢化的工作就是把遊戲中所有的文字都替換成中文的。在一個手機遊戲裡,修改文字大概存在以下3種形式:
圖片字。 就是指所有以圖片形式存在的文字,比如遊戲的splash,文字背景或特效等等。替換的方法很簡單,找個美工做圖,然後直接把原圖換掉。有很多過去的遊戲都是把這些圖片不經過任何處理或者只去掉副檔名放到jar裡,替換這些很簡單;但是為了減容,現在的很多遊戲則是把n張圖片打包放在一個檔案裡,要準確的替換這些檔案就有些麻煩了。
首先要弄清檔案的儲存格式。按程式的畫法,可以大體分為drawImage和drawRGB兩種形式。
drawImage就是直接把圖片打包,不破壞任何圖片的格式,drawRGB則是以RGB格式儲存圖片的象素資訊。前者比較容易,除了PNG以外,有的手機還支援GIF,JPG等格式,只要保證圖片格式正確就可以了。後者稍微麻煩一些,因為形成的RGB象素資訊的陣列很大,有的還經過壓縮,因此準確的替換會比較困難。
寫在程式裡的字串。 處理方法也很簡單,反編譯原始檔之後替換相應的字串就ok了。別問我什麼是反編譯,這貼裡不講編譯原理。再詳細的說一下,有2條路,第一就是直接修改class檔案。直接把漢字寫在源程式裡的話,生成的class檔案裡的漢字字串應該是標準的utf8編碼,一個簡單的做法就是自己編譯一個寫好中文字串的java檔案,再把生成的class檔案裡面對應的位元組copy到原class檔案裡。第二就是反編譯之後生成的java檔案,由於擾碼的原因,會有地方編譯不過,一般是因為反編譯後生成的檔案有問題。由於擾碼工具的不同,存在的問題也不一樣。有的地方沒有反編譯成功,還有的地方使用了偽彙編指令(如goto等),有的建構函式的名稱被隱藏。。等等,還有的擾碼工具還會故意增加不合理程式碼來給反編譯設定陷阱-__-|| 因此就得進行很麻煩的修改。。。當然改來改去也就是那麼幾種錯誤,就是很麻煩。擾碼和反編譯技術是一魔一道,沒有萬全之策。總之在沒有徹底排除擾碼的干擾的時候,不推薦用這種方法。
寫在外部資料裡的字串。 如果這個遊戲的程式結構好的話,所有的字串都應該是放在外部的某個檔案裡的。不知道是哪個檔案的話,直接把所有檔案都用文字編輯器開啟檢視就能發現儲存字串的檔案。很多遊戲都是用readUTF()這個通用函式來讀取檔案中的資料的。因此確保所用的新字串都是utf-8編碼,由於沒有原xml檔案來重新生成這個資料檔案,可能需要透過替換字串的16進位制編碼才能正確的替換原來的字串。一般的說,uft-8每個字元比Unicode大一個位元組,因此替換完成的字串檔案可能會比原來要大一點。如果不是utf8格式,也有可能是unicode或其他格式,但如果程式本身都沒有考慮到多位元組文字的讀入,那麼除非修改原始碼否則是無法解決的。
到此基本上大功告成,替換這些字串所帶來的jar大小和遊戲執行時記憶體的變化可以忽略不計。最後一步,請確認要執行此程式的手機支援中文:)
總之,沒有自帶字型檔真是一件讓人高興的事。拿到一個GBA rom,第一件事就是破解,但拿到一個手機遊戲呢?直接解開檢視各檔案就是了。呵呵,做一個GBA漢化,至少需要破解,翻譯,美術,而做一個手機漢化呢,文字量不大,圖片不多,一個人足夠。還有最重要的一點,國內沒有一家GBA遊戲製作公司,想玩到中文遊戲只能靠fans自己動手,但是手機遊戲的遊戲正相反,國內的製作公司很多。但儘管如此,大部分的中文遊戲仍然是純粹的垃圾,和國外的大牌公司製作的遊戲相比真是不堪一擊。有興趣的同學大可以自己試一試,因此我覺得,本文的意義也不是一點都沒有吧