前回壁にぶち当たったMOD制作ですが、技術的に問題を解決することができました。今回はlocalisationフォルダ内の.ymlファイルと技術の設定について。
FTL関連の作業(続き)
前回はlocalisationフォルダ内の.ymlファイルの改変において、日本語化ファイルから.ymlファイルを取り込んでそれを改変した場合はうまく行ったものの、権利関係の問題で公開には差し支えるため、差分ファイルにしようと試行錯誤しているところで終わりました。
前回の技術的な問題点は「差分ファイルがゲームに反映されない」というところだったのですが、さまざまな方のご協力をいただいてこの原因が解明されました。問題解決までの経緯は前回の追記部分に記載してありますので、ここでは.ymlファイル作成に必要なことをまとめておきます。
なお、以下はすべて.modファイルにdependencies = { “Japanese Language mod” }を書き加えた場合です。
ゲーム中で反映される文字列
いろいろな検証の結果、ゲーム中で反映される文字列は「MODでlocalisationフォルダ内のファイルに同じキーが複数ある場合、UTF-8の文字コードでソートして最も若いものが表示される」ということがわかりました。
例えば、日本語化MODではワープ技術の一番最初のもの(キーはtech_warp_drive_1)は「ワープトラベル」という名称に設定されています(記事執筆時点では)。ここにさらに新たに.ymlファイルを追加して、その中でtech_warp_drive_1というキーに「ワープ理論」という名称を与えても、ゲームには反映されません。
UTF-8の文字コードでソートがかけられたときに、2つの名称は「ワープ」までは同一なので、その次の「ト」と「理」で順位がつくことになりますが、「ト」は文字コードがe38388、「理」はe79086で、「ト」のほうが番号が若く、「ワープトラベル」という名称のほうが上位に来るため、「ワープ理論」は表示されないのです。
さて、今度はtech_warp_drive_1というキーに「ワープによる超光速航行理論」という名称を追加したことにしましょう。そうすると、また「ワープ」までは同一で、その次の「ト」と「に」で文字コード順に順位がつきます。「ト」はe38388、「に」はe381aBと、「に」のほうが番号が若いため、このときゲーム中に表示されるのは「ワープによる超光速航行理論」のほうが表示されるということになります。
これは名称だけではなくて説明文でも同じで、検証はしていませんが技術以外のlocalisationファイルでも同じと思われます。
UTF-8
UTF-8の文字コードは聖愛高等学校のJavaプログラミングのページにある文字コード表がとても見やすくおすすめです。
上記のページを見ていただければわかりますが、基本的には数字→アルファベット→ひらがな→カタカナ→漢字という順序です。
どのように文字列を書くか?
すべての名称と説明文を、文字コードを気にして書き換えた.ymlファイルの図
まず考えられるのは、文字コードを気にして名称・説明文を書くことです。上の画像は文字コードでソートして必ず変更後が上に来るように作成した.ymlファイルの中身ですが、「あ」から始まっていたりすると最初の部分は変えようがなかったりして書くのは非常に窮屈です。それでもできないことはありません。
もうひとつは、先頭に番号の相当若い文字コードを持つ文字を入れることです。これもツイッターで情報をいただきました。また、ツイッターでさらに別の方が先頭にタブ文字を入れることで、表示に問題なく簡単に入力できるということを発見されました。タブ文字(正確には水平タブ(HT)というそうです)は文字コードがなんと9で、これによってほぼ確実にソートで最上位に文字列を持っていくことができます。
タブ文字を先頭に入れることで自由に文字列を書けるというのはありがたいのですが、タブ文字が制御文字であるため、問題が起こる可能性もあるようです。とりあえず、今のところは問題があると感じることは起こっていません。
2016/09/20追記
こちらの記事のコメントにて、localisationフォルダ内にreplaceフォルダを作り、その中に差分の.ymlファイルを入れるとMODなどの外部環境に左右されずに上書きできるという情報をいただきました。
調べたところ、EU4の時代からこういう機能があったようですので、おそらく「Stellaris」でも利用できる機能と思われます。
なお、優先順位など細かいところは未検証です。検証し次第追記する予定です。
FTL技術の4段階目の作成
さて、.ymlファイルを拡大していただくとわかりますが、tech_warp_drive_4のように、FTL技術の4段階目のものも記載しています。これはバニラの状態で存在するFTLドライブが3段階であるのに、1段階目はFTLドライブをアンロックできないように設定したため、3段階のFTL技術ではFTLドライブのほうに足が出てしまうので、これをカバーするためのものです。
というわけで、MOD名/common/technology以下に物理学の技術ファイル00_phys_tech.txtをゲームファイルからコピーします。
1~3段階目の技術の設定変更
まずは1~3段階目の技術を変更して準備します。ゲームファイルからコピーしてきた00_phys_tech.txtを開き、prereqfor_descを1段階目の技術から削除し、2段階目の技術で中身の数字を1(例えばtech_warp_drive_2の中でTECH_UNLOCK_WARPDRIVE_1_TITLEとTECH_UNLOCK_WARPDRIVE_1_DESCとする)、3段階目の技術で2となるように書き換えます。
このprereqfor_descの中身は、技術によってアンロックされるコンポーネントやコマンドなどを記載するもののようです。1段階目の技術ではなにもアンロックされず、2段階目の技術でFTLドライブの1型、3段階目の技術で2型がアンロックされるため、このようにしています。
FTLドライブの設定変更
次に、第3回で編集した00_utilities_drives.txtを開き、FTLドライブの3段階目の必要技術(prerequisites)を4段階目の技術に変更します。
FTL技術4段階目の新設
再び00_phys_tech.txtを開き、4段階目のFTL技術を追加します。3段階目の技術をコピペして、上の画像で赤線を引いた部分を変更します。
上の画像では、研究コスト(cost)、必要技術(prerequisites)、研究の出現しやすさ(weight)、技術の追加説明(prereqfor_desc)のみを変更しています。特に必要技術はtech_warp_drive_3にきちんと変更しておかないと、2段階目の技術を研究した後、3段階目をすっ飛ばして研究できることになってしまいます。
技術画像の設定
最後に、技術の画像を設定します。といってもなにか設定する必要はなく、技術のキー(tech_warp_drive_1など)をgfx/interface/icons/technologies内の画像ファイルのファイル名に設定してやれば自動的に設定されます。
上の画像はゲームファイルの中のgfx/interface/icons/technologies/old_tech_iconsにあるphys_exotic_particles_wormhole.dds。これを3つコピーしてMODファイル内のgfx/interface/icons/technologies以下配置し、技術のキー.ddsというファイル名にリネームしてやれば、アイコンが設定されます。
いちいち画像を探してくるのが正直めんどくさいので、ここではこれを第4段階目のFTL技術すべてのアイコンにしてしまいました。
.ddsファイルはWindowsに元から入っているペイントでは開けませんが、「Paint.net」というソフトで開くことができます。
確認
ここまでの作業で第4段階目の技術が正しく追加されているはずなので、ゲーム内で確認しましょう。
ゲーム中で[半角/全角]キーを押すと、ゲームコンソールが開きます。ここで”research_technologies”と入力して(正確にはコンソールを開くと通常は全角入力になってしまうので、コピペすることになりますが)[Enter]キーを押してやると、”All technologies researched!”と表示され、すべての技術が研究された状態となります。
これで「研究済み」ボタンから確認すると、確かに第4段階目の技術が追加され、アイコンも名称も説明文もすべて表示されています。
が、ここまでの作業では追加の説明(コンポーネントアンロック:~の部分)がおかしくなっているはずです。これについては、また次回説明します。
なお、コンソールコマンドについては英語版Wikiの該当ページをご覧ください。
というわけで、なんとかlocalisationに関する壁を破ることができました。
しかしながら、私の環境では技術の追加に際して別ファイルを用意してこれに記載してしまうとゲームが起動しなくなってしまいました。ワークショップにあるMODでは別ファイルに追加の技術を記載しているものがあるのですが、なぜ動かないのか謎です。
https://t.co/kkKCOaFTm2
惑星補正の追加に詰まっていた「MODを作ろう!」第6回ですが、ツイッターでご協力くださった方のご尽力により、無事に惑星補正を追加できるようになりましたので、その部分を追記しました。— Simulationian (@simulationian) August 10, 2016
おそらくこのときと同じく、ファイルの文字コードの問題だったものと考えられます。第6回に詳しく記載してありますので、こちらもご覧ください。
コメント