【ウディタSRPG】改良③ユニット追加対策
ユニットの管理で解説した通り、銀日記さんのSRPGは
味方ユニット4機、敵ユニット(最大)6機を前提として設計されていました。
現状、敵ユニットは2機で、この数は1~6であれば自由に変更できるようになっているわけです。
ちなみに敵ユニットを増減させる方法は簡単。
まず敵ユニットのマップEvを増やすか減らして
可変DBの対応するデータ番号に必要な情報を入力するだけです。
さて、敵ユニットを増減させるのは簡単にできました。
しかし最大6機までで、味方ユニットに関しては一切数を増やす事も減らす事も出来ないのが現状ですね。
理由はあらゆる箇所で以下のように直値でIDを指定する設計になっているからです。
※味方ユニットは最大4機、つまりマップEvはID0番~3番
今後、ゲーム開発を進めていく上で味方や敵を増やしたり、新しいユニットデータを追加する場合にこれは非常に不便なので、味方ユニットの数も敵ユニットの数も可変DBで管理できるように改良してしまいましょう!!
と、いうわけでまずは可変DB[基本システム用変数]に倣って新しく可変DB[自作:システム用変数]を作成、データに[戦]敵ユニット数と[戦]マップユニット数を用意しました。
[戦]マップユニット数の代わりに[戦]味方ユニット数を管理するのも良いのですが、敵ユニット数とマップ上のユニット数がわかれば計算できるし後々の処理を考えるとこちらの方がよさそうな気がするのでこうしてみました!
で、あとは各コモンEvでマップEvのIDに関して直値で指定されている箇所を全部上記の可変DBのデータ参照にしてやれば良いのですが...
その前に!!!
仕様変更
ここで設計を一部変更しようと思います。
と、いうのも実は以前ウディタで作成されたSRPG作品を探している際に、土日でゲームさんというブログを発見しまして、以下のページで名作と謳われるSRPGフリゲ『システリアの奇妙な冒険 第5部 ~黄金の一週間~』を知りました。
donichi-game.com
曰く、
2010年5月という、ごくごく初期に公開されたウディタSRPGです(ウディタの発表は2008年!)。
1ステージのみの作品ではありますが、マウス操作やクリッカブルなミニマップ、ちょっと珍しい親切機能のフラッグや、SRPGとしては複雑な部類の「担ぐ」「変身」といった多機能・高機能ぶり。しかもそれがオープンソース。
ウディタでSRPGを語るには、まず押さえるべき古典と言えるでしょう。
だそうで、
「オープンソース!?ラッキー!」
と思って即ダウンロードして遊ぶ&コード確認してみたわけです。
するとどうやら仕組みとしてはマップEv0番でストーリー進行、イベント自体を管理しているようでした。
まあ今回制作しようとしているゲームは一つのマップで複数回別の敵を相手にする、つまり戦闘マップの使いまわしを予定しているのでストーリーはコモンEvで管理する予定ですし、面白いけど不採用かなと思っとったわけです。
しかし調べてみるとどうやらこのマップEv0番を使用して何らかの情報等を管理する方法は今後どこかで使えそう?なので、マップEv0番はユニットとして扱わない、空データとして設計しようかなと思いました。
なんかふわふわした理由ですみませんww
それにほら、ユニットの数は1,2,3,...って数えるのにマップEvは0,1,2,...って数えると直感的にズレて不便そうじゃん!?って事で0番は無視!!!そういうことにしました。
そんなわけで、以降はマップEvを以下の通り管理します
※敵ユニットが2機、味方ユニットが3機の場合
ん?なぜ敵ユニットより味方ユニットのIDを大きくしたかって?
たぶんこれから制作しようとしているゲームって、出撃前にプレイヤーが出撃するユニットを選択したりすると思うんですよ。
一方で敵ユニットはプレイヤーが何と言おうと数が決まってるでしょうから、後で処理する順番的に、これまでとは逆で上記のような順番が良いかなと判断したわけです。
それじゃ、これを踏まえてコモンEvを修正していくよー
修正箇所は以下の通り。
コモンEv238[☆計算のトリガー]
※条件文の位置に注意
コモンEv243[┗相手ターン]
コモンEv262[■死体掃除]
コモンEv264[■自動ターン終了]
コモンEv266[■評価値計算]
※注意:「以下」ではなく「以上」
コモンEv267[■ターゲッティング(最短)]
コモンEv273[■勝敗判定]
んで、戦闘マップでマップEv0番を座標(0,0)に移動します。さっき説明した空データです。
画像は必要ないので削除。
マップEv1~2番は敵ユニット、マップEv3~5番は味方ユニットとして用意します。
可変DB[ユニットデータ]も修正します。
先ほど作成した可変DB[自作:システム用変数]の[戦]敵ユニット数が2、[戦]マップユニット数が5ですね。
ここまでできていればちゃんと動く...はず。
お疲れさまでした!
次回は敵ユニットの動作を見直します!