FC2ブログ

スポンサーサイト

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

トラキア式 長距離射程 攻撃範囲取得ルーチン 簡易版解説 


長距離射程 攻撃範囲取得ルーチン解析 その1

※ 12月3日修正

   下領域フラグON/OFF処理回数の算出式が
   { 下領域 X方向フラグON/OF処理回数 = Y方向処理カウンタ * 2 - 1 }
   とあったのは誤りでした。正しくは
   { 下領域 X方向フラグON/OF処理回数 = Y方向処理カウンタ * 2 + 1 }
   です。
--------------------------------------------------------------------

 「 長距離射程 攻撃範囲取得ルーチン」 は少し複雑なので少し簡易化して解説する。
 簡易版解説なのでトラキアの実際のプログラムとは少し違う部分があるが、おおむね
 オリジナルのプログラム通りであると考えてもらっても良い。

--------------------------------------------------------------------

プログラムの流れとしては

(1) チェック基準座標より上側領域のフラグON処理
(2) チェック基準座標から下側領域のフラグON処理

(3) チェック基準座標より上側領域のフラグOFF処理
(4) チェック基準座標から下側領域のフラグOFF処理

となる。

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

(1) チェック基準座標より上側領域のフラグON処理


まず、チェック基準座標を中心に 

「チェック基準座標から上方向に最大射程分離れた座標」 と 「チェック基準座標から下方向に最大射程分離れた座標」

を調べる。


解説図   上下にそれぞれ最大射程分離れた座標
マス目攻撃範囲解説1


青いマスが    「チェック基準座標」
黄緑色のマスが 「チェック基準座標から上方向に最大射程分離れた座標」
黄色のマスが  「チェック基準座標から下方向に最大射程分離れた座標」 である。

----------------------------------------------------------------------------

 ・「フラグON処理基点座標」 に 「チェック基準座標から上方向に最大射程分離れた座標」 をセットする

 ・「チェック基準座標から上方向に最大射程分離れた座標」 の座標値を取得する。

  「チェック基準座標から上方向に最大射程分離れた座標」 のY座標 = チェック基準座標Y座標 - 最大射程

 ・「Y方向処理回数」 に 「最大射程値」をセットする

 ・「Y方向処理カウンタ」 にゼロをセットする

  X方向フラグON処理回数 = Y方向処理カウンタ * 2 + 1

※ 「X方向フラグON処理回数」 に関しては、実際のプログラムではちょっと複雑な処理になっており
  分かりにくいので今回は暫定的に簡単な式で表した。 後ほど詳しく解説する。
 

 ・フラグON処理は 
 「フラグON処理基点座標」 から 「X方向フラグON処理回数分右側の座標(これをフラグON/OFF開始座標と呼ぶことにする)」 から左に向かって行う



------------------------------------------------------------------------------


 1行分フラグON処理が終了する毎に 「フラグON処理基点座標」 をその左下の座標に移動する。
                        「Y方向処理カウンタ」 を +1する
                        「Y方向処理回数」   を-1する

 「Y方向処理回数」 がゼロになったら「チェック基準座標」より上領域のフラグON処理は終了する。



図 1行目フラグON処理    X方向フラグON処理回数 = Y方向処理カウンタ * 2 + 1
マス目攻撃範囲1回目



図 フラグON基点をその左下に移動
マス目攻撃範囲基点移動


図 2行目フラグON処理    X方向フラグON処理回数 = Y方向処理回数 * 2 + 1
マス目攻撃範囲2回目


図 3行目以降フラグON処理
マス目攻撃範囲3行目以降


図 フラグON基点座標を移動
マス目攻撃範囲 上側 フラグON最終処理



チェック基準座標から上側のフラグON処理終了。

 次は 「チェック基準座標から下側の領域のフラグON処理」 を開始する。

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

(2) チェック基準座標から下側領域のフラグON処理


・「Y方向処理回数」 に 「最大射程値」 をセットする

・「Y方向処理カウンタ」 に 「最大射程値」 をセットする

・下側のX方向フラグON処理回数は

 X方向フラグON処理回数 = Y方向処理カウンタ * 2 + 1

 となる。


1行分フラグON処理が終了する毎に 「フラグON処理基点座標」 をその右下の座標に移動する。
                       「Y方向処理カウンタ」 を-1する。
                       「Y方向処理回数」   を-1する。

 「Y方向処理回数」 がゼロ未満になったら「チェック基準座標」から下領域のフラグON処理は終了する。
 ※ チェック基準座標から下領域のフラグON処理回数は 「Y方向処理回数」+1 となる

    チェック基準座標から上領域は 「Y方向処理回数」 がゼロになれば処理を終了するが、
    チェック基準座標から下領域は 「Y方向処理回数」 がゼロ未満(マイナス)になれば処理を終了する、ということに注意。



図   「下領域1行目の基点」 は上領域の最後の処理で設定された座標を用いる (緑色のマス)
マス目攻撃範囲下方向1回目基点



図   X方向フラグON処理回数 = Y方向処理カウンタ * 2 + 1 
マス目攻撃範囲下領域1行目



2行目処理   フラグON処理基点座標を前回の右下に移動する
マス目攻撃範囲 下領域2行目


3行目以降
マス目攻撃範囲 3行目以降


・次は 「最小射程以下領域のフラグOFF」 処理に移る。

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

(3) チェック基準座標より上側領域のフラグOFF処理


 ・「最小射程未満値」 を算出する  ;   最小射程未満値 = 最小射程-1

 ※ 「最小射程未満値」 を算出したとき、その値がゼロであればフラグOFF処理は行わない。
    (「最小射程未満値」=00 ということは最小射程が1であるという事なのでフラグOFF処理をする必要はない)



 ・チェック基準座標を中心に 

 「チェック基準座標から上方向に最小射程未満値分離れた座標」 と 
 「チェック基準座標から下方向に最小射程未満値分離れた座標」 を調べる。


解説図   射程3~10の最小射程未満値=2
マス目攻撃範囲初回基点図


 ・「フラグOFF処理基点座標」 に 「チェック基準座標から上方向に最小射程未満値分離れた座標」 をセットする

 ・「チェック基準座標から上方向に最小射程未満値分離れた座標」 の座標値を取得する。

 ・「チェック基準座標から上方向に最小射程未満値分離れた座標」 のY座標 = 
         チェック基準座標Y座標 - 最小射程未満値

 ・「Y方向処理回数」 に 「最小射程未満値」をセットする

 ・「Y方向処理カウンタ」 にゼロをセットする

 ・X方向フラグOFF処理回数 = Y方向処理カウンタ * 2 + 1


 1行分フラグOFF処理が終了する毎に 「フラグOFF処理基点座標」 をその左下の座標に移動する。
                         「Y方向処理カウンタ」 を +1する
                         「Y方向処理回数」   を-1する


フラグOFF処理基点座標
マス目攻撃範囲 フラグOFF処理基点座標



1行目フラグOFF処理  灰色のマスはフラグOFFした座標を示す
マス目攻撃範囲 1行目フラグOFF


2行目基点移動
マス目攻撃範囲フラグOFF基点移動



2行目フラグOFF処理
マス目攻撃範囲2行目フラグOFF


基点移動
マス目攻撃範囲 下1行目への基点移動


 「Y方向処理回数」 がゼロになれば「チェック基準座標」より上領域のフラグOFF処理は終了する。

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

(4) チェック基準座標から下側領域のフラグOFF処理


・「Y方向処理回数」 に 「最小射程未満値」をセットする

・「Y方向処理カウンタ」 に 「最小射程未満値」をセットする

・下側のX方向フラグOFF処理回数は

X方向フラグON処理回数 = Y方向処理カウンタ * 2 + 1

 となる。


1行分フラグOFF処理が終了する毎に 「フラグOFF処理基点座標」 をその右下の座標に移動する。
                       「Y方向処理カウンタ」 を-1する。
                       「Y方向処理回数」   を-1する。


下側1行目フラグOFF
マス目攻撃範囲下1行目フラグOFF


基点移動
マス目攻撃範囲 下2行目基点移動


下側2行目フラグOFF
マス目攻撃範囲 下2行目フラグOFF


基点移動
マス目攻撃範囲 下3行目基点移動


下側3行目フラグOFF
マス目攻撃範囲 下3行目フラグOFF


 「Y方向処理回数」 がゼロ未満になったら「チェック基準座標」から下領域のフラグON処理は終了する。


----------------------------------------------------------------

射程3~10 攻撃可能範囲フラグON/OFF処理完了図
マス目攻撃範囲 ON OFF処理終了


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

 以上で長距離射程攻撃範囲フラグON/OFF処理は終了であるが、

 今回は簡易版解説であるので

 「チェック基準座標から上方向に最大射程分離れた座標」 と 
 「チェック基準座標から下方向に最大射程分離れた座標」 がそれぞれマップ上端外、下端外に存在した場合、そして

 「フラグON/OFF処理基点座標」 と
 「フラグON/OFF処理開始座標」 がそれぞれマップ左端外、マップ右端外に存在した場合の解説はしなかった。


 解説図   灰色の部分がマップ領域外。  このような場合の処理はどうするのか?
マス目攻撃範囲 座標オーバー


 なので、以上の条件の場合を考慮したルーチン解説は次回する。

スポンサーサイト

コメントの投稿

非公開コメント

カウンタ

プロフィール

Anonymous

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

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

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