戦闘プロフラムの基礎部分ができた


2017年 10月19日
 
 
 やっと初歩の攻撃部分だけできた。

 差配プログラムも変更されたが、部隊が 3部隊で 1部隊 3ユニットというややこしさと、武器を持ってる持って無い、射程がある、ユニットによっては手の攻撃が無い、2手攻撃、複数攻撃とか要素が多くて大変だった。

 あまりの作成する要素の量と、たぶん現在全行程の3割くらいしか進んでない状況から、もう完成しないのではないかと日に 1度は思う。

 やっぱりもっと簡単なゲームから制作した方が良かったのか・・・・。
 そう考えるのはクリエイターのお約束なんだろうなあ。

 

 まずは恐怖のソースを。

 
 
 う~む、これを見て分かる人はおるまい。

 とにかくまず *battleから入る。

 *battleは部隊が存在するかと、戦う順番(差配)を決め、戦闘が起これば*fightへ。
 最後に勝敗を決めてマップを書きなおすか決める。

 *fightは部隊同士の戦闘処理で、今回は敵も味方も攻撃するほうを都度 un、ud、ug、防御側を en、ed、egとすることによって、次の*atackつまり戦闘処理を敵味方同じにする事によって、ソースを 2重にすることを避けた。

 これについては、今後様々な特殊能力による変則的なプログラムを書くのを楽にするため。
 思考錯誤しながら間違い(バグ)なく敵味方 2つも書いてらんない。
 
 
 イニシアティブ(攻撃の順番)もかなり思考錯誤した。

 イニシアティブは知力による。

 intvにユニットNo.が格納され、intvnに速さ値が格納され、これを元にintvを早い順に並べ変える。
 攻撃はintv順に行われる。

 ffn=一時的に防御側の隊のユニットNo.を格納する。
 これによって、*atack部分で防御側のユニット隊列が分かるようになる。
 つまりこれ無しで相手を特定するのはかなりややこしい。

 fn_syo ; 隊列処理、ユニットの HPが 0になったら、隊列を詰める。
 これは 1回全ユニットが攻撃を終えてから、つまり 1戦闘ターン後に判定される。
 先頭のユニットが健在なら、後列の離脱は無視される。

 この時に部隊の全滅と全部体の全滅を確認し、全滅なら*battleへ戻る。

 この辺の取り決めだけでも相当に思考錯誤した。
 
 
 それからやっと個別の攻撃(atk)になる。

 右手か左手に武器を持ってるか、あるいは両手とも素手か、左手が盾なら右手は素手攻撃になるとか、左手が片手武で右手が装備無しなら右手の素手攻撃は行われず左手の攻撃だけとか、右手武器の攻撃をした後、左手武器の右手武器の値を引いてから左手武器の値を足さなければいけいけど、そうなると攻撃値を全装備アイテムから計算しなおさなければいけないし、それを一々沢山出てくる攻撃箇所で行うのは大変だとか、もうカオス。

 結局ユニットデータの攻撃値 ud(ug+11)には武器以外のアイテムの攻撃地だけを足して基礎値とし、武器値は装備している武器の内一番高いものを ud(ug+20)という使ってないデータに別に割り振る事にした。

 すると素手の場合は ud(ug+11)をそのまま使えば良いし、武器なら都度その値に武器の攻撃力を足せばいい。

 今の所 ud(ug+20)はステータス画面での攻撃力表示の時に使うくらいか。

 そんな感じの思考錯誤を何日か経て、なんとか*atackのソースの基礎部分が出来た所だ。

 gensuiは攻撃回数による減衰を表す。

 gensui=75なら 75%の攻撃力になる。

 つまり右手左手攻撃なら、左手攻撃は 75%になるよに今の所している。

 複数攻撃なら 25%ずつ減る。
 
 
 それからいよいよダメージ計算(atk)になる。

 今回射程内に敵がいるかとか、HPが 0かとかはこちらで判定する事にした。
 これによって*atackソース内でいちいち個別に判定しなくて済む。

 ダメージ値等の値計算は一時的なもので、段々ゲームバランスの調整と共に変えていく。
 とにかく稼動しなけりゃどうにもならない。

 さらに頭痛いのだが、これに属性の計算をしなければいけない。
 どういう計算にするかは、まだ考えてる途中だ。
 
 
 それではテスト。

 攻め込む側。


 
 
 防衛側。差配確認のためわざと 2部隊にしている。


 
 
 まだ制作途中なので分かり難いが、ダメージ表示を見ると 2回(左右素手)攻撃している(赤い 3の表示に重なってる)


 
 
 2戦闘目。
 HPが 0になると、とりあえず半透明表示。


 
 
 次のターン、部隊が詰められる。


 
 
 次のターン前列に来た。


 
 
 次の部隊(3戦闘目)
 防衛側は第三部隊が無いので繰越で第一部隊が出る。


 
 
 今回はとりあえずここまで。
 
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です