DQ3 ゲストキャラクター概念の追加4(移動中編1)

随分間が空いてしまいましたが、移動中のメニューの変更はかなり広範囲に渡り、実装中はバグまたバグの連続で(実際リリース後にもバグが見つかりました)正直二度と触りたくない部分の一つだったのと、作業したのが随分前だったので変更箇所を余り覚えていないのもあって、筆が進みませんでした(笑)。

今回からは移動中のメニューにゲストの概念を導入していきます。対処をしないといけないのは「どうぐ」メニューでゲストのアイテムにさわれないようにする、一部のアイテム(性格変更アイテム)の使用対象から外すという部分です。「どうぐ」メニューの処理は$03AF02-に実装されていますが、内部でJMP命令を使いまくっているトータル1200バイト以上の巨大なSRになっています。当然機能としてはかなり多機能になっているため、「ゲストがいる場合に処理の頭でゲストがいることを想定した道具メニュー処理に飛ばす」というのはコピーする対象かなり広範囲になるため諦めました(処理の安全性で言えば、ゲストがいない場合の通常の道具メニュー処理に影響を及ぼす可能性がないので分けたほうがいいのは確かです)。というわけで仕方なく、既存の道具メニュー処理にゲストがいる・いない両方を想定した処理を混ぜ込んでいくことにします。

基本的な方針として「メニュー上で選択されたPC*1のインデックスと実際のインデックスの対応表を作っておき、適宜置き換える」ということをしていくことになります。

例)3人目にゲストがいる場合

メニュー上のID実際のID
1人目00
2人目11
ゲスト2
3人目23

この場合メニューウィンドウで3人目を選択した場合、ウィンドウのリターン値としては2を返してくるわけですが実際は3に読み替えないと正しい処理ができません。なので次の処理に進む前に2を3に置き換えてやるという処理を1クッションはさめば良さそう、ということになります。ただ、置き換えたインデックスの値をその後の処理で使ったりすることもあるのでもとに戻す必要もあったりします。このへんはケースバイケースだったりするのでアイテム使用時の処理などを個別に見ていく必要があります。ゲストを除外してPCのみを表示する必要があるのは

  • 「どうぐ」メインメニュー
  • 「わたす」の対象
  • 性格が変わるアイテムの使用対象
  • 「道具整理」の対象

です。と、ここまで書いてて恐ろしいことに気がついてしまいました。ウィンドウに選択肢をセットするときにその選択肢が選ばれた時にリターンする値がセットできるのですが、そっちの値を↑の表に従って変えてたら下流の方を大量に変えなくてもよかったのでは…(ぎゃああああああああ)。散々いじって一応それなりに動いているものに再度手を入れる気にはあまりならないのですが、どう考えてもこっちが簡単なのでちょっとその可能性について検討することにします。というわけで次回更新も結構間があきそうな予感。

*1:プレイヤーキャラクター

コメント

タイトルとURLをコピーしました