【ウディタ講座】SRPGをつくろう! 下準備編:移動力計算の最終準備

はじめに予告した通り、ウディタでSRPGを作るための全2回ある下準備の続きとなります。

移動力の計算に向けたさらなる準備

パネル用のピクチャ番号の検索とパネルの全消去

選択ユニットの移動できる範囲にパネルを置くとき、パネルの必要枚数はかなりのものです。

SRPGでの移動力2はかなり小さい数字ですが、パネル枚数だけで考えるとこれでもう12枚。

移動力1の時は4枚なので必要パネル数は倍々ゲームで増えていくことがわかります。

それなりに広い「パネル表示用のピクチャ番号の範囲」を用意しておいて、「そこから未使用番号を探してくる」とか「パネル用範囲のピクチャの一括消去」もコモン化が必須となります。

 

仮にちょっとおおげさに、「-20」からマイナス方向に500回の範囲を見るように作ってみました。

「┣空きパネル用番号検索」コモン

■変数操作: CSelf4[結果] = -20 + 0
■回数付きループ [ 500 ]回
|■変数操作+: CSelf10[使用中?] = ピクチャ:CSelf4[結果] の ピクチャが使用中?(1=YES)
|■条件分岐(変数): 【1】 CSelf10[使用中?] が 0 と同じ
|-◇分岐: 【1】 [ CSelf10[使用中?] が 0 と同じ ]の場合↓
| |■イベント処理中断
| |■
|◇分岐終了◇
|■変数操作: CSelf4[結果] -= 1 + 0
|■
◇ループここまで◇◇

 

「┣パネルをすべて削除」コモン

■変数操作: CSelf10 = -20 + 0
■回数付きループ [ 500 ]回
|■ピクチャ消去:CSelf10 / 0(0)フレーム
|■変数操作: CSelf10 -= 1 + 0
|■
◇ループここまで◇◇

 

選択中のマスにユニットがいるかどうかを判定するコモン(仮)

前回記事の「準備3.」に処理を足しましょう。

22行目あたり「★選択中マスにユニットがいるかどうか」というブロックとして新しいコモンを付け足しています。

これによって選択中のマスにユニットがいるかをチェックし、もし誰かがいたら移動力の計算をしてその範囲を表示します。

といっても今回のメインは移動力の計算ですので、今は仮に主人公の位置との一致だけを見るだけです。

 

「┣選択中のマスに居るユニット」コモン(仮)

■変数操作: CSelf4[結果] = 0 + 0

▼ 仮に主人公の位置を探すだけなので、このように。
■変数操作+: CSelf10[主人公X] = 主人公 の X座標(標準)
■変数操作+: CSelf11[主人公Y] = 主人公 の Y座標(標準)
■イベントの挿入[名]: CSelf12 = [“┣2点間の距離を取得”] <コモンEv 3> / CSelf0[座標X] / CSelf1[座標Y] / CSelf10[主人公X] / CSelf11[主人公Y] ■条件分岐(変数): 【1】 CSelf12 が 0 と同じ
-◇分岐: 【1】 [ CSelf12 が 0 と同じ ]の場合↓
|■変数操作: CSelf4[結果] = 1 + 0
|■
◇分岐終了◇

返り値が1なら、主人公がいるマスという意味になります。

 

その下に「┣移動力計算」のコモンがありますが、これは次の記事にて。

 

50万エラーに備えたコモン

こんなコモンを作っておきましょう。

「┣50万エラー対策」コモン

■条件分岐(変数): 【1】 Sys108:[読]現フレームのコマンド処理数 が 450000 以上
-◇分岐: 【1】 [ Sys108:[読]現フレームのコマンド処理数 が 450000 以上 ]の場合↓
|■デバッグ文:50万避け中…
|■ウェイト:1 フレーム
|■
◇分岐終了◇

現状、具体的にどこで使うということはありません。

が、SRPGは30×30以上はある広さのマップの全マスをざっと調べなおすような処理が頻々と動きますので、ウディタから警告が出るぐらいに重いのです。

警告が出るといかにもバグっぽいので警告が出るぐらいならば、ちょっとだけウディタに休みをあげて不具合を回避しようというのがこのコモン。

回数ループのなかに回数ループをおくようないかにも高負荷な処理ではおまじないとして置いておきましょう。

 

詳しい理屈はこちら。

【ウディタ講座】緑帯との付き合い方~50万エラーはこわくない~

 

可変データベースでの準備

可変データベースエディタを開き、このようなものを作ってください。

データ数・項目数ともに50個。すべての項目は初期値が “-1” です。

この項目のひとつひとつがマップ上のすべてのマスに対応していて、マスごとに入る「残移動力」を記憶していきます。

実際のマップ制作時は、この可変データベースのデータ数・項目数を超えないようにしてください。つまりこの場合のマップは50×50以内です。

 

詳しい説明は移動力計算の実装時に見えてくることと思います。

……が、実は根っこの理屈はこちらの過去記事にて説明してあることなのです。こちらもあわせてどうぞ。

【ウディタ講座】マウスでクリックした場所へ歩く方法

 

準備を終えて……

こんなにコモンを用意したことになります。お疲れ様でした!

移動力計算やクリック検知など中身がカラのコモンもありますが、もうすでにかなりのコモンを書いたことになりますね。

次からいよいよSRPG製作っぽい内容へ入っていきます。

 

 

【ウディタ講座】SRPGをつくろう! まとめ