【ウディタ講座】高機能ダッシュコモン

ゲームは作る方にも遊ぶ方にもさまざまな楽しみ方があります。戦闘がアツかったり、謎解きにやりがいがあったり、キャラがおもしろかったり。

マップの美しい作りこみもだいじな要素のひとつですね。

ウディコン作品で言えば『ソラドウト』が挙げられます。ツクール2000なら『ふしぎの城のヘレン』や『ダーリン菊一文字』もいいですね。

美麗ドットのマップを眺めて、歩くだけでうっとりできるのも、ゲームの魅力なのです。

歩くだけで楽しいマップにおいて、「風景の美しさ」はマップチップなどを製作される素材屋さんの領分です。そして講座サイトとしてお役に立てるのが、「歩くことに関するコモンイベント」のお話になってきます。

要するに、歩行関係総合コモンとしての、多機能ダッシュを作ってみたいと思います。

まずはド定番のダッシュコモン

まずはよくあるダッシュ機能。

■動作指定:主人公 / 移動速度を設定 => 3
■条件分岐(変数): 【1】 Sys13:イベント実行中?(1=ON) が 1 と同じ 【2】 Sys12:メッセージ表示中?(1=ON) が 1 と同じ
-◇分岐: 【1】 [ Sys13:イベント実行中?(1=ON) が 1 と同じ ]の場合↓
|●ラベル地点「発動不可」 <<<<<<<<<<<<<<<<<<<<<<<<★
|■ウェイト:1 フレーム
|■イベント処理中断
|■
-◇分岐: 【2】 [ Sys12:メッセージ表示中?(1=ON) が 1 と同じ ]の場合↓
|●ラベル「発動不可」に飛ぶ >>>>>>>>>>>>>>>>>>>>>>>>>
|■
◇分岐終了◇
■キー入力:CSelf10[キー受付] 4方向 サブキー(12)
■条件分岐(変数): 【1】 CSelf10[キー受付] が 12 と同じ
-◇分岐: 【1】 [ CSelf10[キー受付] が 12 と同じ ]の場合↓
|■動作指定:主人公 / 移動速度を設定 => 4
|■ウェイト:1 フレーム
|■
◇分岐終了◇

よくある「サブキーを押している間、移動速度が一段階アップする」という並列コモンです。

赤字部分はイベント中などで誤爆を防ぐためのおまじないですね。

コモン自体の起動条件にスイッチを使うのもよいでしょう。

 

『ふしぎの城のヘレン』などではダッシュ中は主人公の歩行グラフィックが変わっておりました。これは、移動速度変更の行の前か後ろに「グラフィックの変更」を加えればマネができますね。

 

足音が鳴るようにしよう

並列処理で常に主人公の状態やキーの入力は取得していますから、せっかくなのでこのコモンの中で足音の処理も付けてみましょう。

「主人公の座標が変わるたびに効果音(SE)を鳴らす」のです。

■動作指定:主人公 / 移動速度を設定 => 3
■変数操作+: CSelf11[主人公現在x] = 主人公 の X座標(標準)
■変数操作+: CSelf12[主人公現在y] = 主人公 の Y座標(標準)
■変数操作+: CSelf16[現在MapID] = 現在のマップID
■条件分岐(変数): 【1】 Sys13:イベント実行中?(1=ON) が 1 と同じ 【2】 Sys12:メッセージ表示中?(1=ON) が 1 と同じ
-◇分岐: 【1】 [ Sys13:イベント実行中?(1=ON) が 1 と同じ ]の場合↓
|●ラベル地点「発動不可」 <<<<<<<<<<<<<<<<<<<<<<<<★
|■変数操作: CSelf13[主人公前回x] = CSelf11[主人公現在x] + 0
|■変数操作: CSelf14[主人公前回y] = CSelf12[主人公現在y] + 0
|■ウェイト:1 フレーム
|■イベント処理中断
|■
-◇分岐: 【2】 [ Sys12:メッセージ表示中?(1=ON) が 1 と同じ ]の場合↓
|●ラベル「発動不可」に飛ぶ >>>>>>>>>>>>>>>>>>>>>>>>>
|■
◇分岐終了◇
▼ ————–
■変数操作: CSelf15[足音_有1無0] = 1 + 0
■条件分岐(変数): 【1】 CSelf11[主人公現在x] が CSelf13[主人公前回x] と同じ
-◇分岐: 【1】 [ CSelf11[主人公現在x] が CSelf13[主人公前回x] と同じ ]の場合↓
|■条件分岐(変数): 【1】 CSelf12[主人公現在y] が CSelf14[主人公前回y] と同じ
|-◇分岐: 【1】 [ CSelf12[主人公現在y] が CSelf14[主人公前回y] と同じ ]の場合↓
| |■変数操作: CSelf15[足音_有1無0] = 0 + 0
| |■
|◇分岐終了◇
|■
◇分岐終了◇
■条件分岐(変数): 【1】 CSelf17[前回MapID] が CSelf16[現在MapID] 以外
-◇分岐: 【1】 [ CSelf17[前回MapID] が CSelf16[現在MapID] 以外 ]の場合↓
|■変数操作: CSelf15[足音_有1無0] = 0 + 0
|■
◇分岐終了◇
▼ 回数ループの処理数を変数によって、0回(処理ナシ)か1回か指定する
■回数付きループ [ CSelf15[足音_有1無0] ]回
|■デバッグ文:★任意のSEを再生
|■
◇ループここまで◇◇
■変数操作: CSelf17[前回MapID] = CSelf16[現在MapID] + 0
■変数操作: CSelf13[主人公前回x] = CSelf11[主人公現在x] + 0
■変数操作: CSelf14[主人公前回y] = CSelf12[主人公現在y] + 0
▼ ————–
■キー入力:CSelf10[キー受付] 4方向 サブキー(12)
■条件分岐(変数): 【1】 CSelf10[キー受付] が 12 と同じ
-◇分岐: 【1】 [ CSelf10[キー受付] が 12 と同じ ]の場合↓
|■動作指定:主人公 / 移動速度を設定 => 4
|■ウェイト:1 フレーム
|■
◇分岐終了◇

 

「座標が変わっていたら」という分岐で気を付ける点は、「マップが変わっても座標が変わる」ということです。マップを切り替えるタイミングでは、足音は鳴ってほしくないケースが多いでしょう。

「座標が変わっていても、マップ移動をしていたら鳴らさない」という分岐を付けています。

 

分岐の書き方はいろいろあえりえるでしょう。ここではちょっと妙な書き方をしています。

 

足音にバリエーションを

草地の上を歩いても、水の上を歩いても、足音が同じなのは味気ないですね。

 

ミニマップの講座でも説明しているように、マップチップごとにタグ番号を設定し、これに対応したユーザーデータベース(udb)を設定しましょう。

【ウディタ講座】超低負荷ミニマップ

足音コモンの場合、「コツコツという石畳を歩いたようなSEにしたいチップはタグ番号1」、「ちゃぷちゃぷと水面を……はタグ番号2」、「砂地ならタグ番号3」という具合です。

タグ番号に対応するユーザーデータベースの中で再生するSEのファイル名か、システムDB番号をおいておき、適宜これを読み取って再生SEを変えると、地形に合わせたSE変更が完成します

 

こちらの記事でより詳細にまとめなおしました。

【ウディタ講座】歩くたびにSEを鳴らす足音コモンの作り方(アレンジ付き)

 

放置時のキャラモーション

『ふしぎの城のヘレン』では、主人公のヘレンを移動させずに放っておくと、画面に向けてくるりとアピールをしてくれます。

せっかくなのでこれもマネしましょう。かわいいので。

ダッシュコモンの、サブキー検知部分を少しいじることで「ボタン未入力のチェック」が可能です。

■キー入力:CSelf10[キー受付] 4方向 決定(10) キャンセル(11) サブキー(12)
▼ キー入力が0と同じかそれ以外かのチェック
■条件分岐(変数): 【1】 CSelf10[キー受付] が 0 と同じ 【2】 CSelf10[キー受付] が 0 以外
-◇分岐: 【1】 [ CSelf10[キー受付] が 0 と同じ ]の場合↓
|■変数操作: CSelf18[放置フレーム数] += 1 + 0
|■条件分岐(変数): 【1】 CSelf18[放置フレーム数] が 120 以上
|-◇分岐: 【1】 [ CSelf18[放置フレーム数] が 120 以上 ]の場合↓
| |▼ ここで放置時に発生するイベントを置く
| |■
|◇分岐終了◇
|■
-◇分岐: 【2】 [ CSelf10[キー受付] が 0 以外 ]の場合↓
|■変数操作: CSelf18[放置フレーム数] = 0 + 0
|■
◇分岐終了◇
▼ 前からあるサブキー検知
■条件分岐(変数): 【1】 CSelf10[キー受付] が 12 と同じ
-◇分岐: 【1】 [ CSelf10[キー受付] が 12 と同じ ]の場合↓
|■動作指定:主人公 / 移動速度を設定 => 4
|■ウェイト:1 フレーム
|■
◇分岐終了◇

 

キー入力受付で「キーが押されるまで待つ」にチェックをしないで、決定/キャンセル/サブキーすべてにチェックを付けます。このコマンド直後に、キー入力受付変数が0ならば、なにも入力されていない状態と判定できますね。

無入力の分岐で、放置フレームのチェック変数に+1します。逆になにか操作したときはこの変数を0に戻します。放置し続けると、1フレームごとにこの変数が大きくなるわけです。

1フレームは1/60秒なので、この変数が120になると2秒の放置です。一定の秒数が経過したときに、あるイベントが起こるようにすれば、放っておかれた主人公がなにかするイベントが作れます。

 

……ひとまず、ここまでやれば操作感がグッと楽しくなるはずです。

 

思いのほか大きなコモンになりました。

それぞれ内容が違うので、本当はダッシュ/足音/放置チェックとすべて違うコモンに分ける方がいいのかもしれません。

こうしたごった煮コモンは「面倒臭がりで、並列処理が増えすぎてもわけがわからなくなる!」という筆者みたいな方におすすめです。

 

補遺:ダッシュが無くても快適なマップを

ダッシュ処理で気を付けたいのは、「あんまり速くなるとかえって操作しづらい」ということ。

そもそもプレイヤーさんがダッシュしたいと思うときは、素早く動きたいと思っているわけですが、根っこにあるのは「マップが広すぎて移動に疲れる」という気持ちのはずです。

マップの広さがちょうど良ければダッシュは必要ないし、マップが広すぎればダッシュがあったって移動は面倒なままです。

ダンジョンなど、特別に迷わせたい場合以外は、コンパクトなマップにしつつ、道幅は2,3マスは確保しておくのが良いのではないでしょうか。小作りなマップにするからといって、道や出入り口が1マスしかないのも、それはそれで歩きにくいですね。

 

名作フリゲを思い返してみてください。結構、小作りなマップになっていませんか?