2週間に1回程度は報告を、ということでゲ製記録をつけますが
今回はほぼバグ取りとリファクタリングしかしていないので
目に見えて変わった部分、というのがなく、いまいち書きづらかったりする…。
※音が出ます
大した進捗は無いが、とりあえず目立ったバグなく、永遠に戦闘をぶん回せるようになった。この動画では間違えて勝っちゃったけど。
味方→敵(もしくは敵→味方)の各1フェーズしか出力できなかった前回報告時の状況からは進歩している…と思いたい。
🐛バグよさらば!
味方と敵の行動順を一つの変数(配列)で管理するという愚行!
どういうことかというと、例えば場にいるすべてのキャラにturnOrder=[];という変数を割り当てて、皆の行動順を管理しようとしたとする。味方が4人、敵が3人いるので、
味方先制の場合は、行動順が早い順に、味方の一人目がturnOrder[0]、二人目がturnOrder[1]、三人目がturnOrder[2]、四人目がturnOrder[3]、敵の一人目がturnOrder[4]、二人目がturnOrder[5]、三人目がturnOrder[6]、となる。
では問おう!敵の一人目のturnOrderは何番!?
人間なら当然分かる。4でしょ?しかしコンパイラには分からない。味方も敵も全部”turnOrderが割り振られたインスタンス”としか読めないからだ。よって、「敵のフェーズに移ったら敵の一人目がスキルを選ぶ」処理ができない。この曖昧な割り振り方では、敵の一人目がどれか分からない。
→2フェーズ目に入ると、味方のターンのはずなのに敵が行動したり、場合によってはエラーが出たりする不具合状態に🐛🐛🐛
少しプログラムを齧ったことがある人なら、これの解決方法はいくらでも思いつくことだろう。私も思いついた。対して齧ってもいないけど。表面をぺろぺろして「まずっ」ってなってる程度のヘボだが…。

とりあえず、味方と敵とでターンインデックスの変数を徹底して分けることにした。
例えば味方はplayerParty=[]、敵はenemyParty=[]とする。こうすれば、敵の一人目は絶対にenemyParty[0]だ。なんて単純明快なんだ。むしろなんで今まで一つの変数に…?と思ったらCopilotに言われてそうしたんだった。盲信はよくないですね。AIは非常に頭がいいように見えるが、必ずしも最適解をくれるわけではない…。

今まで作ってきたデータをぶっ壊して修正するのはちょっと怖かったので、一旦新規のプロジェクトを作り、行動順の流れを形作る最低限の骨組み部分だけを作った。で、出力コンソールに文字だけ出力させて、問題なく作動していることが分かったので、本データも同様に改造。
まあそんな感じです。
あと複数回攻撃のMP消費の仕様がおかしかったので修正。
(全弾発射後にMPが減る仕様にしたつもりが、発砲するたびにMPがゴリゴリ減っていた)

MP消費の処理は複数箇所で呼ばれるので、いっそ関数にしてみるか…ということで専用のユーティリティ関数を作成。GMLに触り始めた去年末に比べると、無駄なく書く能力が相当上がったと思う。


あと、味方が自由に並べ替えられるようになりました。
いつまで適当な名前のままなんだろう、この人たち…。



その他、グラ関係の妄想をして楽しむなどする。
不具合周りが一旦落ち着いたので、戦闘面で使える機能を増やしていきたいかな?