FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

扉に向かって進むルーチン解析


扉に向かって移動するルーチン解析 (アルゴ 16 00)

 20章のアーマー(アルゴ 16 00)を例に解説する

解説図1 20章全体マップ 赤マスのアーマーが今回チェックする行動CPU (ロングランスと扉の鍵を所持)
                  黄マスの扉が目標の扉
光の公子 全体マップ


・手順1

まず行動CPUが扉の鍵を持っているかチェックする ; 扉の鍵を持っていなければアルゴ2のチェックに移る

                               ; 扉の鍵を持っていれば手順2に進む

============================================================================

・手順2

 行動CPUの存在座標を基準にしてマップ全体の移動消費配列を取得する。
この時、行動CPUの移動コスト設定のうち 移動コストが$FFの地形は全てコスト1にセットする  ※注1参照
 また、マップ上のユニットの存在は無視する ; 7E:001Bに0000をセットする 
 (7E:001Bは移動消費配列取得ルーチン中でマップ上のユニット存在を無視するフラグ。
  マップ上のユニット存在を無視しない場合は7E:001BにFFFFをセットする)


解説図2 行動CPUの存在座標を基準にしたマップ全体の移動消費配列。 赤マスが行動CPUの存在座標。
      行動CPUの移動コスト設定のうち 移動コストが$FFの地形は全て
      コスト1にセットしてあるので移動不可なのはマップの上下左右端だけである
       また、マップ上のユニット存在は無視してある
行動CPU基準マップ全体移動消費配列A

============================================================================

・手順3


 7E:4008、7E:400AにFFFFをセットする。

 マップ右下から各座標をチェックしていき 行動ユニットに最寄りの扉がある座標を
選定する (解説図2の緑マスが行動CPUに最も近い場所にある扉の座標)

 行動ユニットに最も近い位置にある扉座標を7E:400Aに格納する。


 もしマップ上に扉がなければアルゴ2のチェックに移る。

※注1解説 行動CPUの移動コスト設定のうち 移動コストが$FFの地形は全てコスト1にセットする というのは

     アーマー系の移動コスト設定は

     FF FF FF FF 01 02 FF FF FF 03 FF 01 01 01 FF 01 01 FF 01 01 01 FF
     01 01 01 01 01 01 01 01 FF 01 FF 01 01 02 FF 01 FF 01 01 01 01 01

     となっているが、このうちのFFを全て01にセットする ということである 
     *資料 $310BC~ クラス別 地形移動コスト設定

============================================================================

・手順4

 行動CPUの存在座標を基準にしてマップ全体の移動消費配列を取得する。
そして目標の扉の上下左右の座標をチェックし、その内から行動CPUに最も近い座標を選択する

解説図3 行動CPUの存在座標を基準にしたマップ全体の移動消費配列
       緑のマスが目標の扉がある座標。 この位置の上下左右の座標をチェックし、行動CPUに最も近い座標を選択する。
       この場合 赤枠の座標が選択される
行動CPU基準マップ全体移動消費配列D


ここで取得した目標座標値 (扉に隣接した座標) をプッシュし、あとで行動CPUの移動先座標と照会するときにプルする。

============================================================================

・手順5

 目標座標を基準にしてマップ全体の移動消費配列を取得する(格納先RAM=7E:A973~)。

解説図4 赤マスが移動目標座標  緑マスが扉のある座標
移動目標基準 マップ全体移動消費配列C


取得した移動消費配列を別メモリに転送する。 (転送先RAM=7E:AF73~)

============================================================================

・手順6

行動CPUの移動力、存在座標を基準に移動消費配列を取得する (格納先=7E:A973~)


解説図5 行動CPUの移動力基準 移動消費配列
行動CPU基準 移動消費配列

============================================================================

・手順7

 手順6で取得した移動消費配列をマップ右下からチェックする。

チェックした座標が移動不可でなければ手順5で取得したの同座標の移動消費配列をチェックし、
目標により近い移動消費配列値を取得する。


解説図6 移動先座標を取得。 赤枠が移動目標座標。 この例の場合、目標座標に到達できる。
                    緑マスの座標が目標扉のある座標
移動目標基準 マップ全体移動消費配列B

============================================================================

・手順8

行動CPUの現在座標と移動先座標をもとに移動経路の選定をする。

============================================================================

・手順9

移動目標座標値をプルする (手順4の最後にプッシュした7E:400Aの値)。

行動CPUの移動先座標と移動目標座標を照会し、座標が一致すれば行動スイッチ(7E:402E)を03にセットする
(移動したあとに扉の鍵を使用する)


行動CPUの移動先座標と移動目標座標が一致しなければ移動行動をするのみである。

また、一度扉を開けたCPU(アルゴ16 00)は次のターンの行動チェック時にアルゴ00 22に変化する。


============================================================================
============================================================================


スポンサーサイト

コメントの投稿

非公開コメント

カウンタ

プロフィール

Anonymous

Author:Anonymous
ファミコンゲーム解析、同人ゲーム制作

免責 
本ブログの管理者は第三者がこの
ブログでDLしたツールを使用する
ことによって発生した如何なる
事件・損害に対して全く責任を
負いません

最新記事
月別アーカイブ
カテゴリ
検索フォーム
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。