『Final Fantasy 9』MemoriaというMODツールが素晴らしい。アイテムを100%盗めるようにしよう & 他のMODツール紹介
Final Fantasy IX のSteam版用に Memoria というMODツールが作られています。
私はこのツールがあることを知ったからSteamでFF9を購入しました。これがあれば私が一番欲しかった「敵からアイテムを100%盗めるようにする」ことができるのです。
FF9をもう一度プレイしたかったので非常に有り難いです。もう一度プレイしたいけどあの「盗む」の繰り返し地獄は避けたい…。
Memoria - Engine modifications :: Final Fantasy - Modding
Widescreen support
Disable/Enable cheats
Fast battle (Custom FPS, skip waiting or turn-based)
Save/Load anywhere (Alt+F5 / Alt+F9)
Edit game data
All of characters available
Easy rope jumping, frog catching, hippaul racing
Change the game font
Export/Import game resources
Many other tweeks
「ワイドスクリーンにする」「キャラクターを全員使えるようにする」「ロープのジャンプの回数を水増しするなどして、ミニゲームを楽にクリアできるようにする」「イントロスキップ」など、色々と機能を追加してくれます。
私が使った時はこのツールの説明があまり書かれていなかったため、使い方は手探りでした。
Memoria の説明に入る前にちょっと他のMODツールも紹介しておきます。
Hades Workshop というMODツールもあるが…
Memoria というMODツールの他にも Hades Workshop というツールもあります。こちらはPSX版やAndroid版のFF9にも使えるようです。
Memoria よりも先にこのツールを見つけて使ってみたのですが、使い方が非常に難しい。このツールでも Language を設定したり、100%盗めるようにするのもできると思いますが、弄り方が難しいです。
C#言語のCILというアセンブリのようなコードを理解して弄くり回さないとならないのです。しかも検索もできないし、変数の弄り方が分からない。
ちょっと頑張ってみましたが、私がこれを使うには理解のために時間が掛かりすぎます。アイテムやキャラクターなどのパラメーターを弄るのは簡単なのですが、もう少し複雑なことをしようとすると突然難しくなります。
Memoria に乗り換えました。
背景の高解像度化を行うMODも
FF9 はPC版でモデリングが綺麗になりましたが、背景の画像が改善されていません。そこで背景画像の高解像度化をしてくれた人がいます。Steamでガイドがあって知りました。
Steam コミュニティ :: ガイド :: 【FF9】Steam版ファイナルファンタジー9の背景高画質化modの導入方法と日本語化
日本人によるガイドなので読みやすいはずです。私はそのガイドで紹介されている高解像度化MODを作った人のスレッドを読んで試してみたところ、 無事に高解像度化できました。
上が下のようになります。画像を載せるために画像の大きさを小さくしてしまいましたが、背景を見比べると分かると思います。
背景がクッキリしています。
この高解像度化MODはPlayStation版のFF9から背景画像を抜き出し、waifu2x などのツールを使ってその画像を高解像度化してシャープ処理をしてあるようです。
このMODツールで入れる Assembly-CSharp.dll は英語版のFF9用です。これを導入するとゲームが英語になってしまいます。日本語でゲームをプレイしたい場合は Tirlititi さんが作ってくれた dll を使いましょう。下のコメントにリンクがあります。
HD (kind of) Background Mod - Released :: FINAL FANTASY IX 総合掲示板
I made a mod to enable japanese some time ago...
この高解像度化MODは現時点では Memoria と同時に使えません。Memoria を使うか、こちらを使うか悩み所です。
Memoria を使う
さて、Memoria の話に入りましょう。ダウンロードはこちらから。
インストールは解凍後に「Memoria.Patcher.exe」を実行するだけです。これを行うとレジストリから FF9 のインストールフォルダを特定して自動で設定してくれます。この後に FF9 を起動すると Memoria が起動するようになります。
Memoria の設定は FF9 のインストールフォルダにある「Memoria.ini」で行います。ここでイントロのスキップや、ミニゲームを簡単にするような設定を行えます。見れば分かるはずです。
Fontの設定もできるのですが、日本語ではうまく設定できないようです。色々と試してみたのですが、ゲームのデフォルトのフォントか、よく分からないフォントになってしまいます。ただ、デフォルトのフォントよりはその分からないフォントの方がゲームに合っています。
フォントを指定するとこんな感じのフォントになってしまいます。日本語のフォントがうまく読み込めないようです。読み込めた人がいたら方法を教えて下さい。
ワイドスクリーンモードも非常に良いですね。
ちなみに言語は英語がデフォルトですが、スタート画面で日本語に切り替えられます。
敵からアイテムを100%盗めるようにする
Memoria は Bethesda のゲームのMODツールのようにリソースを展開してくれます。Hades Workshop と違って C# でゲームに変更を加えられるため非常に助かります。
Memoria のこうした使い方はあまり行っている人がいないのと、行っている人はかなりスキルの高い人で HOWTO を書かず、ほとんど情報がありません。このために非常に苦労してしまいました。
展開したいリソースは Memoria.ini から選択できます。でも今回はゲーム起動後に展開されるリソースだけで十分です。
\SteamApps\common\FINAL FANTASY IX\StreamingAssets\Scripts\Sources\Battle
このフォルダに戦闘のスクリプトが詰まっています。
盗む時のスクリプトは「0058_StealScript.cs」です。これを弄ります。まず "public void Perform()" を見つけます。この中は下のようになっています。
BattleEnemy enemy = BattleEnemy.Find(_v.Target);
if (!HasStealableItems(enemy))
{
UiState.SetBattleFollowFormatMessage(BattleMesages.DoesNotHaveAnything);
return;
}if (!_v.Caster.HasSupportAbility(SupportAbility2.Bandit))
{
_v.Context.HitRate = (Int16)(_v.Caster.Level + _v.Caster.Will);
_v.Context.Evade = _v.Target.Level;if (GameRandom.Next16() % _v.Context.HitRate < GameRandom.Next16() % _v.Context.Evade)
{
UiState.SetBattleFollowFormatMessage(BattleMesages.CouldNotStealAnything);
return;
}
}if (_v.Caster.HasSupportAbility(SupportAbility1.MasterThief))
{
if (enemy.StealableItems[3] != Byte.MaxValue && GameRandom.Next8() < 32)
StealItem(enemy, 3);
else if (enemy.StealableItems[2] != Byte.MaxValue && GameRandom.Next8() < 32)
StealItem(enemy, 2);
else if (enemy.StealableItems[1] != Byte.MaxValue && GameRandom.Next8() < 64)
StealItem(enemy, 1);
else
StealItem(enemy, 0);
}
else
{
if (GameRandom.Next8() < 1)
StealItem(enemy, 3);
else if (GameRandom.Next8() < 16)
StealItem(enemy, 2);
else if (GameRandom.Next8() < 64)
StealItem(enemy, 1);
else
StealItem(enemy, 0);
}
見やすいコードを貼り付けられませんが、実際にファイルを開いて貰うと読みやすく整形されています。この部分で、アビリティによって盗むの成功率が上がるように設定されているのが分かります。
今回行うのは「盗むが100%成功」にすることで、敵が盗めるアイテムを持っているかどうかの判定後に盗むを必ず成功するようにすれば大丈夫そうです。
上のコードを下のようにしてみます。
BattleEnemy enemy = BattleEnemy.Find(_v.Target);
if (!HasStealableItems(enemy))
{
UiState.SetBattleFollowFormatMessage(BattleMesages.DoesNotHaveAnything);
return;
}StealItem(enemy, 3);
StealItem(enemy, 2);
StealItem(enemy, 1);
StealItem(enemy, 0);
これでOKです。これだと一度に StealItem() が4回行われます。つまり1回の「盗む」で敵から全てのアイテムを盗みます。
これはこれで楽なのですが、実際のゲーム中では盗んだ後にメッセージが1回しか表示されず、1個のアイテムの分しか「~を盗んだ」と表示されません。敵が持っていた他のアイテムも盗んでいるのですが、1つのアイテムしかメッセージが出ず、他の同時に盗んだアイテムが何か分かりません。
これが嫌な場合、1回の「盗む」で1個のアイテムを盗むようにすればOK。StealItem() をただ並べないようにします。
if (enemy.StealableItems[3] != Byte.MaxValue)
StealItem(enemy, 3);
else if (enemy.StealableItems[2] != Byte.MaxValue)
StealItem(enemy, 2);
else if (enemy.StealableItems[1] != Byte.MaxValue)
StealItem(enemy, 1);
else
StealItem(enemy, 0);
など、好きなようにして下さい。
Bethesda のゲームならスクリプトを編集した後にゲームを起動するだけでOKなのですが、Memoria は違います。
ここが分からず時間がかかってしまいました。スクリプトを弄った後は下の実行ファイルを起動します。
\SteamApps\common\FINAL FANTASY IX\StreamingAssets\Scripts\Compiler\Memoria.Compiler.exe
これを起動すると、スクリプトがコンパイルされ、ゲームに読み込まれるようになります。
これを行わないとコードを弄ってもゲームに反映されません。注意して下さい。
これで非常に快適なFF9のゲームライフを過ごせます。