以前下記のエントリで不完全に直したつもりになっていましたが、改めて調査をして原因がわかりました。12:58結論から言うと前回の修正は直した「気」になっていただけで正しい変更法ではありませんでした。不具合の内容については下記の動画を見てください。問題としては軽微で「ルイーダに預けている仲間の職業熟練度の表示(熟練度の☆の部分)が別のキャラクターのもので表示される」というものです。データが破壊されているわけでもなく、仲間にして表示すると正しい内容で表示されます。ルイーダに預けている仲間の職業熟練度表示は以下のSRで処理されています。$0337DCと同じなのですが、$0328EC、$0328F3でセットしている値が、#$0092、#$0093と異なります。$037854がコールされるまでは行われません。この点逐次描画処理をやっているDQ3とは実装が異なります。当たり前ですが、後発のDQ3のほうがベースはDQ6を使っているものの、各所の実装もかなり洗練されている感があります。DQ3の実装に慣れてからDQ6を見るといろいろ不便に感じるところは多いです。動画を見てもらうとわかりますが、正しくない情報を表示しているのは「職業熟練度」のほうだけです。「職業名」自体は問題ないことがわかります。次に#$0092、#$0093コールされるSRを見てみます。$03A365このSRがコールされた時点で$7E3868には選択したキャラクターのウィンドウ中のインデックス(待機中の一番最初の仲間が0)がセットされています。これを元に最終的にはパーティメンバーも含めた何番目に相当するのかを調べて$7E3868にセットしなおしてやるという処理をしています。$042C26のようなSRはDQ3にもありますが、「1番目の引数のモードで」「2番目の引数の値のインデックスを」「キャラクターIDに変換して3番目の場所にセットして返す」という意味です。キャラクターIDというのは$08BD12-に定義されている主人公が1、ハッサンが2...のIDのことです。#$FFならAレジスタ、#$FEならXレジスタ、#$FDならYレジスタ、それ以外ならDP($??)にセットされて返ってきます。この辺の解釈はDQ3、DQ6で共通なので知っておくとSRの理解がかなり進みます。自分も最初は何のことやらさっぱりわかりませんでしたが、今となってはそこそこ自在に操れます(他に使いどころがないのが笑えますが)。$042DB2は「1番目の引数のキャラクターIDを」「2番目の引数のモードで」「3番目の引数に(モードに応じた)並び順等を返す」という意味のようです。モードについてはバリエーションが8つあるようです。(職業名のみ)に飛ばし表示処理をしているようです。これ自体は何も問題はありませんが、問題は次のSRです。$03A475この後のジャンプ先は今度は職業熟練度の表示(☆マークの方)に飛ばしています。$03A4D3ですでに変換された値がセットされたままなのです。これをウィンドウ中のIDとして再度変換しているので、実質1ページ後ろのキャラクターを指してしまう(正確にはパーティメンバーの数によって変わると思いますが)ということになります。$03A4EAの先頭で間の変換処理を挟まずにすぐに$03A4FEにジャンプしてしまう変換自体が不要なので、通常のキャラクターの職業熟練度描画用のID(#$0090)を$0328F3でセットしてしまうのどっちかということになります。キャラクターの情報の管理の仕方についても触れようと思ったのですが、非常に重要な部分なのでまた別途(投稿予定は未定)とします。18:40さっそく完全版の修正法を試してみました。Extended対応のインターフェース改良パッチにも含める予定です。コメントをキャンセルメールアドレスが公開されることはありません。コメントは管理者の承認後表示されます。