天地を喰らうシリーズは策略を使うにあたって「軍師」に任命された武将がいないと使用不能になるのですが、軍師に任命された武将は戦闘が開始されると隊列の一番後ろに配置され、隊列が6人以上になると直接戦闘に参加できなくなるというシステムになっています。これがいわゆる文官タイプ(武力や兵士数が低く知力が高い傾向の武将)であればまだいいのですが、劉備や馬謖や姜維のように文武両道の武将を軍師に任命する必要がある場合は事情が変わってきます。そこで、軍師に任命した武将がどのような処理で隊列の一番後ろに回されてしまうのか調べてみました。その結果、大まかに言うと「戦闘開始時にまず隊列の人数をチェックし、6人未満である場合は各武将の状態をチェックし、正常であれば隊列の位置そのまま、それ以外の状態の武将は隊列の最後尾に変更する。6人以上の場合は軍師を隊列の最後尾に移動させるが、負傷中の武将がいる場合は更に軍師の後ろに配置する」という処理内容でした。ここで言う武将の状態は「00=負傷中(戦闘不能)、40=軍師、80=正常、C0=正常かつ軍師」の4種類で、この処理内容を変更すれば軍師に任命した武将も隊列の変更がないまま戦闘に参加できそうです。つまり「隊列が6人以上でも6人未満でも武将が正常な状態であれば隊列の位置そのままを維持し、負傷中の武将のみ隊列の最後尾に変更する」とすればよいのではないでしょうか。この仮説を基に改変を行い、成功すればパッチとして公開する予定です。
突然ですが、友人から「変形や合体するユニットに関する質問と解析の依頼が来ているので代わりに解析して解説記事を書いて欲しい」という話がありましたので、今回はその内容を取り上げてみます。 まずは変形ユニットから。友人の資料の記述方式に従って解説します。MAP上でユニットの変形設定を制御しているのは以下のサブルーチン(A057~A099)です。 00A057 BD 65 18 LDA $1865,X ユニットID取得 00A05A 29 FF 01 AND #$01FF 絞り込み:最大値を01FFとする 00A05D 64 2A STZ $2A M=7E002Aをゼロにする 00A05F 85 2C STA $2C AをM=7E002Cに書き込み 00A061 85 2E STA $2E AをM=7E002Eに書き込み 00A063 A0 07 00 LDY #$0007 ユニット定義の7番目(=変形設定)を取得 00A066 22 72 B3 80 JSL $80B372 $00B372 サブルーチン00B372を呼び出し 00A06A E2 20 SEP #$20 8bit化 00A06C 29 7F AND #$7F 絞り込み:最大値を7Fとする 00A06E F0 26 BEQ $26 $00A096 YESならばジャンプ 00A070 C9 08 CMP #$08 変形パターンチェック:08? 00A072 F0 26 BEQ $26 $00A09A YESならばジャンプ 00A074 C9 09 CMP #$09 変形パターンチェック:09? 00A076 F0 28 BEQ $28 $00A0A0 YESならばジャンプ 00A078 C9 28 CMP #$28 変形パターンチェック:28? 00A07A F0 1E BEQ $1E $00A09A YESならばジャンプ 00A07C C9 29 CMP #$29 変形パター