【ウディタ講座】アクションRPGをつくろう!~イベントに攻撃する~

ウディタでシンプルなアクションRPGシステムづくりに挑んでみたので、その様子をメモとして残しておきます。使えそうなら記述やアイディアがあれば、自由にお使いください。

オチを先に言ってしまうと、変数操作+で取得できるマップイベントの状態やタグとして影番号を使うと便利というお話です。影はホコグラそのものに描き入れてしまえますからね。

きっかけは『神巫女』

フライハイワークスさんのNintendoSwitch用ゲームです。500円。どハマりしました。

スタッフのユウラボさんによる裏話もおもしろいですね。

http://skipmore.jugem.jp/?eid=780

随所に工夫が凝らされていますが、アクションRPGとしての骨子は素直です。「決定ボタンを押したら武器を振って攻撃」ですね。まずは、この部分までウディタでやってみましょう。

 

完全初期データからはじめる

今回、サンプルゲームの基本システムは使いません。

ウディタのもともとの「Data」フォルダをヨソへ移し、「データ集」フォルダの「完全初期状態データ」にある「Data」を持って来ましょう。キャラチップを少し足して、テストマップを用意しました。

ここに自分でコモンイベントを書いて、アクション要素を足していくわけです。必要なコモンはざっくりこうかな。

<1>キー入力監視の並列処理を作る
<2>決定ボタンが押されたら、攻撃演出のコモンを呼び出し
<3>射程内の敵(マップイベント)に攻撃処理

また、話を簡単にするため、全歩移動の4方向に設定します。

 

「決定ボタンで武器をふり、射程内の敵にダメージを与える」処理

<1>のキー入力監視は、あちこちで配布されているダッシュコモンなどと同じ要領ですね。

 

<2>の攻撃演出は、ひとまず主人公の前方1マスを射程と考えます。わかりやすいようにパネルも表示しましょう(本来はここでドットアニメや攻撃エフェクトを表示)。

このパネルの場所にマップイベントがいるかどうかをチェック。イベントが居れば、<3>のコモンを呼び出します。もしかしたら1マスに複数のイベントが入るかもしれないので、同じイベントに重複して攻撃しないようにチェックする回数ループとしています。

 

<3>ダメージ処理のコモンです。<2>から対象のイベントIDをもらっておいて、そのIDに赤フラッシュとノックバックをさせてみました(ダメージ演出)。

これで敵を攻撃することが可能になりましたね。実際にはHP操作なども加わってくるでしょう。

 

課題:イベントの区別がついていない

ここまででできたのは「射程にいるマップイベントを問答無用で殴る」仕組みでした。そのイベントが町の人でも宝箱でも移動イベントでも、叩いてノックバックさせることができてしまいます。

今回の場合、NPC(町人)のつもりの夕一にも攻撃が効いてしまうわけですね。

これはこれで気持ちいいですが。

イベントの種類の区別がついていない、ということなのでザコモンスターごとに違う能力を設定したりする点でも問題が残っています。

 

対策:影グラフィック番号でイベントの種類を指定&区別する

「変数操作+」で任意のマップイベントから情報を拾って、「これが敵かどうか」を見分けることになります。

セルフ変数を使いたいところですが、これはデフォルトで0だし、1イベントあたり9個だけ。HPや攻撃力を持たせるのにも使うかもしれず、扱いが難しいところです。

そこで影グラフィック番号。「変数操作+」で拾える情報は座標やセルフ変数以外だと、影番号もラクに取得できます。キャラの足元の影は、ふつうは使わないか、使ってもみんな同じ画像です。別の使い方をして活用してしまいましょう。

システムデータベースの「9.キャラ影グラフィック名」を使い、「0を町人など(殴れない)、1が敵(殴れる)」と設定します。これに合わせて、イベントごとの影グラフィックも再設定。

<3>のコモンに戻って分岐を足します。影番号が1でない(殴れない)場合に、イベント中断をかけてしまえば敵だけを攻撃することが可能となります。

さらに区別:これはゴブリンなのかスライムなのか

影番号で「攻撃できるできない」を見分けましたが、攻撃できる敵のなかで「これはゴブリンなのかスライムなのか」といった区別がまだ付いていません。

「変数操作+」で拾えて影番号のような使い方ができる項目はもう見当たりません。そこで変数呼び出し値を使ってみましょう。

9100000+10*Y+X
 → イベントYの座標を取得or入力(※1)
(X = 0:マップX座標(通常[1マスを1と換算]) 1:マップY座標(通常)
    2:マップX座標(精密[0.5マスを1換算])  3:マップY座標(精密)
    4:イベントの高さ(ピクセル数)       5:イベントの影番号
    6:イベントの方向(1-9)            9:イベントのキャラチップ画像[文字列] )

この方法なら、「変数操作+」にはない「9:イベントのキャラチップ画像[文字列]」の取得ができます。

やり方はこう。

これで任意のイベントで使われているキャラチップがわかります。ザコモンスター用のファイル名は mons01.png、mons02.png という具合にルールを付け、文字列変数の切りだしを使いましょう。

mons01.pngのイベントはザコ1番、mons02.pngのイベントはザコ2番と変数化できました(ファイル名が取得できない場合は、この変数は0が代入されます)。

キャラチップ画像の数値を、ユーザーデータベースに対応させれば、敵の区別も完了ですね。<mons01.pngのキャラは、敵データベースの1番>という対応を徹底すれば良いわけです。

あとは作りたい仕様に合わせて、演出や、敵味方のHPや攻撃力の管理を盛っていけばよさそうですね。

 

ひとまずはここで一区切りです。

【ウディタ講座】アクションRPGをつくろう! まとめ

 

『神巫女』のユウラボさん参加のドット本も発売中!

2 COMMENTS

匿名

こちらのコモンをどこかで配布されていますでしょうか?
手打ちで真似してみてるのですがどうもうまくいかない…

土日

コメントありがとうございます!

こちらで確認するためにも、
 <1>どこまで試していただけたのか
 <2>どのあたりで説明通りの動作になっていないのか
をご教示いただけますと幸いです。

現在コメントは受け付けておりません。