Browse By

日本語版用MODの移植方法について(MODDER向け)


 

はじめに

注!このコンテンツはCiv4日本語版用MODをCiv4英語版@日本語化パッチ適用後バージョンで
動かす為に必要な手順・作業を記したページです
よって、以下に記載されている文章はある程度Civ4用MOD製作の
ノウハウがあることを前提に記されています。予めご了承下さい

 

最低限、絶対に変更が必要なファイル群

・XML/Text内のテキストXML類全て
・XML/Art/CIV4ArtDefines_Misc.xml
・Python/CvUtil.py

それぞれ上記3つのファイル群は特定の箇所を修正することが求められます
修正しない場合、Civ4英語版@日本語化パッチ環境下でのCiv4日本語版用MODは動作しません
といっても恐らく一番問題になるのはテキストXML、それも単に作業量が多いだけで
技術的にはそれほど難しい話ではありません。時間がある時に、ヒマ潰し半分に対応を済ませる事をお勧め致します。
以下に具体的な手順を記したいと思います

 

テキストXMLに必要な変更

日本語化パッチは一言で言うと
「使用言語をフランス語に指定し、フランス語の箇所()に日本語を示すデータを入れている」
と、いう仕組みなのでそれぞれお手持ちのCiv4日本語版用MODのテキストXMLも
同じようにに日本語を入力すると、英語版@日本語化パッチ環境下でも日本語の文章が表示されるようになります

ss1_formodder
ss2_formodder

しかし口で言うのは簡単ですが、既存の和製MODのテキストXML全てにこれと同じ作業をやれと言われても
何分膨大な量があるのが普通でしょうし、1つ1つ手作業でこれをやるとなると何かと手間や時間がかかるものと思われます
そこで、「正規表現」や「複数行置換に対応したテキストエディタ」を使用しての作業をお勧めします
前者の正規表現に関しては長くなるので各自検索しご自分で調べてみて下さい
主に「.*(とにかく何でもいい文字の連続)」の表現を使うようになるだけでも大分作業が捗るようになると思います
後者の「複数行置換に対応したテキストエディタ」に関しては何気に数は少ないですが
個人的には秀丸エディタがお勧めです
シェアウェアとなっていますが無料でも使用に問題はありません。気に入って継続的に使用したい方は購入しましょう

 

XML/Art/CIV4ArtDefines_Misc.xmlに必要な変更

こちらのXMLは日本語版Civ4のものと同様のものを流用している場合は
元々マルチバイト環境で動くための変更を入れているため、恐らく問題になる方は殆ど居ないと思いますが一応記載します
当該ファイルのうちオリジナルの場合大体304行目(BtS版XML/Artフォルダ内)にある
「CITY_BILLBOARDS」内の「」の値が
もしも「1.0」になっている場合、「-1.0」に指定します
ここの数字に負数を入れることで都市バー上で使用するフォントが内臓フォントではなく
外部フォントになる仕組みのようです
最初から「-1.0」になっている場合は変更の必要はありません

 

Python/CvUtil.pyに必要な変更

もしもお手持ちのMODが当該Pythonファイルに変更を入れている場合は
74行目前後にあると思われる「def convertToUnicode(s)」
及び、84行目前後にあると思われる「def convertToStr(s)」
の、二箇所に変更を入れる必要があります
それぞれ両方に「CyGame().getCurrentLanguage() == 5」とされている箇所があるかと思います

ss3_formodder

これは要するに「Civ4.iniのLanguageが5(日本語)の場合」を意味しているため
使用言語がデータ上は1(フランス語)となっている日本語化パッチ環境下では、そのまま使用すると不具合が発生します
なので、「def convertToUnicode(s)」「def convertToStr(s)」の双方で
getCurrentLanguageを1(CyGame().getCurrentLanguage() == 1)に変更すると問題無くゲームを開始することが出来ます

 

その他の変更

実は上記の変更箇所は「最低限」であり、この他にも日本語版環境下で変更した方が良い箇所が幾つかあります
それらの変更箇所はお手持ちの日本語版Civ4を「Devas」などの検索ソフトを用いて
対象ファイルの条件に*.pyや*.xmlを加えた上で「CYBERFRONT」の文字で一斉検索をかけてみて下さい
するとサイバーフロントが独自に追加した記述(日本語版独自の記述)が見つかると思うので
それらを参考にお手持ちのMODで更に変更の追加が必要な箇所が見つかるかもしれません。それぞれ対応してみましょう

 

その他の変更…追記:MODMODでCGEを導入している場合

さて、主なCiv4日本語版用MODの中にはMODMODとしてCGE環境下で動くMODが幾つか存在しますが
実はCGE環境下の場合、以下のファイルに修正の必要が出てきます

Python/INIParser/CvPath.py

上記のファイルの大体97行目辺りに「def _getInstallDir():」と記述された行があると思います
こちらの行は要するに、CGE独自オプション用ini(Civ IV Gameplay Enhancements Config.ini)
を読み込むためにCiv4がインストールされているディレクトリを調査するためのコードですが
CGEデフォルトで配布されたままの状態だと、Civ4Steam版を読み込むためのコードが存在しないため
Civ4Steam版のみを導入している環境下の場合、動作しない不具合が発生します
そのため、Civ4Steamのディレクトリを検索するため以下のコードを挿入して下さい

cvpathbefore

cvpathafter

installPath = os.getcwd() と #print installPath の間に

[TAB]if (installPath.find(r”\steamapps”)):
[TAB][TAB]return os.path.join(installPath, “Beyond the Sword”)

の2行を、上記SSを参考に挿入してください(TABはそのままではなく、キーボードのTABキーを押すという意味です)

こちらのコードはマルチwikiの修正パッチ配布ページにてコメントをくださった匿名さんのコードが元となっています
この場を借りて改めまして御礼申し上げます

 

最後に……更新の度に英語版対応パッチを作るのが面倒だ!という場合

さて、ここまで見てくださった方は何となく察しがついているかもしれませんが
この手法のままだとMODの更新の度に「英語版@日本語化パッチ対応下で動かすパッチ」を作らなくてはなりません
そしてこれは一度か二度だけならまだしも、何度もとなると手間がかかるし、面倒になってくると思います
なので、「MODSフォルダに置くだけで日本語版・英語版@日本語化パッチ対応下双方で動く」手法を取る事をお勧め致します
具体的な方法は以下の通りです

 

テキストXML

「テキストXMLに必要な変更」の項目ではJapaneseタグの内容をそのままFrenchタグへ移植させ
その上でGerman以下のタグを消去する手法を取っていましたが
ここに「Frenchタグに日本語のデータを入れた上で、Japaneseタグも消去せずにそのまま」という形を取れば
日本語版、英語版@日本語化パッチ対応下双方に対応するテキストXMLデータが完成します

ss4_formodder

作成方法については、「テキストXMLに必要な変更」の項目で作成したJapaneseタグ抜きのテキストXMLと
日本語版用のJapaneseタグ付きのテキストXMLの2つをWinmerge か何かを用いて開き
その上で「フィルタ・行フィルタ」の項目を利用しFrenchタグか何かを下記のような設定で除外するようにし

ss5_formodder

あとは「右すべて」「左すべて」のどちらかで双方のテキストを合わせるようにすれば
それほど苦労することなく完成するかと思います

ただし注意点として、Civ4.iniのLanguage項目の並び順は

English 0
French 1
German 2
Italian 3
Spanish 4
Japanese 5(日本語版Civ4オリジナルの設定)

となっているため、Japaneseタグは必ずこの並び順でSpanishの後に来るよう設定して下さい

 

Python/CvUtil.py

次に変更が必要なファイルはCvUtil.pyですが
こちらの場合は「Python/CvUtil.pyに必要な変更」の項目では
単純にCyGame().getCurrentLanguage()の数字を書き換えるだけの手法を提案しましたが
ここで一工夫して、「getCurrentLanguage()が1の場合・もしくは5の場合」の双方で
return s.decode(“cp932”)を読み込めるように設定すると
日本語版・英語版@日本語化パッチ環境下の双方に対応する事が可能になります

ss6_formodder

サンプルでは単純にif構文を2つ並べるだけで作っていますが
or構文など別の手法でもこの判定を作る事は可能でしょう
その辺りは各MOD製作者様の好きなように設定しましょう
とにかく何でもいいからgetCurrentLanguageが1だろうが5だろうが
cp932でデコードさせればそれでいい、という話です。

コメントを残す

メールアドレスが公開されることはありません。

ツールバーへスキップ