「よ」は0x35、「ろ」は0x3A。このように絞り込みながらフォントテーブルの不明箇所を穴埋めします。実用レベルになるまで穴埋めを繰り返したのが下記テーブルファイルです。(右クリックして保存する)これをF2キーでロードするとこんな感じ↓モンスターの直前に2桁の数字がありますが、これは文字ではなく「モンスター名の文字数」を表しています。ここまで解析が進めば次のステップに移行しても良いでしょう。「モンスター名の直前に文字数が入る」などの法則性と共にフォントテーブルも出来上がっている状態です。いうことは「アドレス0011C69Cからモンスター名の文字数+モンスター名を読み込み、フォントテーブルと照らし合わせて変換後のモンスター名を出力」できれば、テキストコンバータ完成となります。sfcdq5mon.zipはい出来上がり!!!...というのは冗談で、下記手順でコンパイル可能な状態まで進行しましょう。Softad.dllをこの時点で削除しておく。3.EasyIDECフォルダ内にあるprojectフォルダに展開したsfcdq5monフォルダをコピー。4.開発環境EasyIDEC.exeを実行。ダブルクリック→OK。↓これで、こんな感じでソースコードが開きます。これでF5キーを押せばプログラムが起動するのでコマンドプロンプト画面にDQ5のROMイメージを投げ込めばテキストアウトでモンスター名が出力されます。<ソースコードについて解説>SFC版DQ5をテキスト変換ターゲットとしているものの、実質「テンプレート」に近いです。大多数のテキストコンバータに流用出来るはずなので「こんなクソ汚いコード使えるか!」という人以外はご活用下さい。printf(“何かキーを押して下さい。256とりあえずソースコードでPAUSE;を書く都度にキー入力待ちする仕様に。サイズも自動検知ではなく文字数を手動指定で。置いて実行して下さい。無ければエラー終了する仕様。ファイルクローズ二次元配列table[0][]~table[255][]まで全角文字を256回ロードします。本来はfread()の返り値を読んで終端検知したほうが安全です。この段階でテーブルファイルを閉じます。引数指定の場合はargv[1]からコピーstrcpy(filename,argv[1]);}ドロップして~...と書いているのは、コマンドプロンプトが「ファイルをドロップしたらフルパスを入力してくれる仕様」なのであえてそう表記しています。・ROMファイルを開く&指定アドレスへの移動if((fp=fopen(filename,”rb”))==NULL){printf(“DQ5のROMファイルを開けません。モンスター情報のアドレスに移動fseek(fp,0x11C69C,SEEK_SET);先ほど引数指定またはドロップしたファイルを開き、失敗したらエラー終了。テキスト格納アドレスまでfseek()で移動します。ゲームは「テキスト以外の数値」が含まれており、個別処理が必要です。SFC版DQ5の場合は「濁点0x84や半濁点0x83が先」「主人公名もコード0x7Aで処理」などの個別処理が必要であるため、switch()による分岐を行っています。<他のゲームにソースコードを流用する場合>許可は要らないのでガンガン改造して流用して頂いてOKです。他にゲーム用に修正しなければならない箇所は大体下記の通り。テーブルファイル名”dq5table.txt”を修正。“SFC版DQ5のROMファイルをココにドロップ~”のメッセージを変更。“DQ5のROMファイルを開けません。”のメッセージを変更。fseek(fp,0x11C69C,SEEK_SET)のアドレスを変更。「モンスター236匹分」を適切な回数に変更。switch()の分岐条件の値を変更。今回はテスト出力なので単なるprintf()でモンスター名を吐いていますが、もっとちゃんと出力するのであれば別のファイルポインタを定義してテキストファイルに出力するなどの対処が必要です。残念ながら日本国内におけるテキストコンバータの需要は極めて少ないうえ、その資料もほとんどありません。当コンテンツを見た人の中から、チャレンジャーが現れることを期待しています。コメントをキャンセルメールアドレスが公開されることはありません。