【ウディタ講座】SRPGをつくろう! マップに余白を作りその内側をゲーム範囲として扱う

呼び方がわからないので筆者も困っていますが、『FE覚醒』などプレイされた方にはわかる仕組みです。

マップの「余白」の意味と意義

「余白」の意味

画像の範囲がマップのすべてだったとき、たとえば赤い部分を「余白」としてしまいます。

赤い枠の内側にだけ、マウスカーソルがあたって「有効なゲームのマス目の上にある」と判断されてポインターが出るわけです。

「余白」となる赤い部分は、ゲーム上のマスとは無関係な場所として扱われるので、その内側だけがゲームの範囲(ゲーム盤)となります。

このとき、青い色の丸を打った場所が座標(0,0)になりますね。

「余白」の意義

座標(0,0)にユニットがいるケースを考えるとわかりやすいですね。

左が従来の「余白なし」、右が仮に2マス幅の「余白あり」にした場合。

単純なユニットの確認のしやすさや、UI(ユニットや地形の情報表示)とのカブりなどが大きく違うのがわかります。

MEMO

UIのウィンドウがユニットとかぶるのを避けたいだけなら、マウスカーソルの位置などに合わせて、UIの表示位置を左右へ切り替えるだけでもよいでしょう。

マップの「余白」の実装

調整用のコモンを作る

まずは動作確認などがしやすいよう、マップを20×15サイズに戻します。

そして、余白が2マス幅あるとします。

このとき、左右と上下に4マスずつの余白があるので、実際のゲーム盤範囲は16×11ということになります。

「■画面サイズXYの取得」コモン

■条件分岐(変数): 【1】 CSelf0[X0Y1] が 0 と同じ 【2】 CSelf0[X0Y1] が 1 と同じ
-◇分岐: 【1】 [ CSelf0[X0Y1] が 0 と同じ ]の場合↓
|■変数操作+: CSelf4[結果] = マップサイズ[横] |■
-◇分岐: 【2】 [ CSelf0[X0Y1] が 1 と同じ ]の場合↓
|■変数操作+: CSelf4[結果] = マップサイズ[縦] |■
◇分岐終了◇
▼ 余白分のカット
■変数操作: CSelf4[結果] -= 2 * 2

こういうコモンを作って、「変数+」でマップサイズを取得していたコマンドすべてと置き換えましょう。モードの入力によってXとYの返す値を変えるので、このおなじコモンを2回続けて呼び出すことになります(文字列変数の2行の返り値を受ける方式でもよいでしょう)。

 

そしてマウスカーソルの位置から座標を表示するコモンでは、余白分の座標を引き、その上で上記コモンで取得したマップの最大サイズを超えているぶんも画面外と判定させます。

余白の2マスぶん取得座標を縮めるようにしたわけですが、今度は「パネル・ポインターの表示位置」や「指定座標のマップチップのタグ番号読込」などが2マスぶんズレてきます。

あちらこちらで、適宜「ズレた余白ぶんの値」(今回は2)を足したり引いたりしていきましょう。

 

タグの取得については、短いですがコモン化したほうがよさそうです。

「┃┗地形タグ番号の取得」コモン

■変数操作: CSelf0[X] += 2 + 0
■変数操作: CSelf1[Y] += 2 + 0
■変数操作+: CSelf4[結果] = X:CSelf0[X] Y:CSelf1[Y]の最も上にあるタイルのタグ番号

こんなふうに。

 

 

マップチップで余白を示す

「線」を引くパターンでもよいですし、暗く塗りつぶすイメージでもよいかもしれません。

 

意図通りになったようです。

MEMO

消費移動力チェックのコモンなども余白設定でズレたぶんを戻す処置を入れていきましょう。

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