「所持金が足りません」「レベルが足りません」「同じキャラは使用できません」 ゲームをしていると、時々こういった文字が表示される事があります。 そして、これと同じ文章がラベル一覧にも存在する場合があります。 「魔界戦記ディスガイア2」は典型的な文字列でコードが探せるゲームで ゲーム中に表示される「〜〜が足りません! 〜〜出来ません!」 といった文字が実行ファイルにそのまま格納されています 今回はこの文字列からコードを探してみましょう。 暗黒議会というシステムを利用する時は 「マナ」という経験値に似た要素が必要になりますが これが足りない場合は「マナが足りません!」と表示され、 これと同じ文字をPS2DISのラベル一覧で探すとしっかりと存在しています。ラベル一覧からこの文字列を選んだらEnterを押して 文字列が格納されているアドレスに飛びます するとこの文字は002A3800から格納されている事が分かります。
次にこの002A3800をスペースキーでマークしてF3で参照先を検索します すると唯一、001C69DCに参照先が見つかりました。
実は「足りない」という文字列の参照先であるこのプログラムは マナが足りてない時のみ処理される文字表示用プログラムで マナが足りてるかどうかの判定を行った後に「足りなければ」ここを通過し、 足りている場合はこのプログラムを通過させずに違う処理を行って 文字を表示しないままマナの減算などを行うのです。 このプログラムをよく見ると001C69D0に参照先があるように表示されているので 恐らくマナが足りない時は分岐命令でここへ処理を飛ばしていると考えられます。 今度はこの001C69D0をマークしてF3で検索しましょう。 すると唯一、001C6320の分岐命令が検索に引っ掛かりました
この分岐命令で分岐すると「足りない」の文字列を通過するので マナが足りていると見せかけるよう、分岐命令を潰してみましょう。 命令を潰す時はnop命令(値を全部0)です。 A01C6320 00000000 ↓暗号化↓ 9C8BE448 1456E7A5 このコードをONにした状態で、マナが足りないキャラを使って 現在マナより必要マナが多い議題を選んでみると・・・ 普通なら足りないと表示されて採決に進まないところが、 無条件で採決に入る事が可能になりました。 これで「マナが無くても採決可能」コードの完成です。