【ウディタ】バトルシステムについて
どっかでも書いたと思うけど。初心者向けの記事っす。特にウディタを最近入手してワクワクしてる世代に向けてます。
中級者以上の方は何言ってんだこいつって感じの記事です(韻)
バトルを作るにあたっては闇雲に作るのも漠然と浮かんだのを作るのもいいけど俺はある程度はっきりと流れを決めておく。
ウディタを手に入れて俺がまず初めにやったのは通常戦闘じゃ物足りないしせっかく良い素材がネットにいっぱいあるんだからロマサガ作ったろうって思いました。
そしてすぐに挫折してFFくらいでいいか(初期のサイドビュー)って思いやりはじめました。
その時に最初から入っているウディタ基本プログラムではなくて1から作ってやろうと思い始めた。(初心者に陥りやすい罠)で半年たってやっとFF3(ファミコン)くらいのサイドビューが作れた。
自作戦闘を作る
1■まず通常フィールドから戦闘フィールドに画面を移行させる
- ・トランジションを使いバトルフィールドを壁画する
- ・トランジションが終わるより前にパーティとエネミーを壁画する
- ・パーティとエネミーのデータをバトル用のCDBに移行する
1でもこんだけやる事があります。1つづつ説明して行くと
トランジションを使いバトルフィールドを壁画する
これに関しては簡単です。やり方はそれぞれあるでしょうけど僕のやりかたは
-----------------------------------------------------------------------------------------------------------------------
■変数操作: CSelf11[ピクチャ№] = 10000 + 0
■トランジションタイプ指定: [0:戦闘開始] 30フレーム(ウェイト有り)
■トランジション準備
▼ バトルフィールド■変数操作+: CSelf10 = 現在のマップID■DB読込(ユーザ): CSelf5 = システムDB[ MAPデータ : CSelf10 : バトルフィールド ] (0 : - : 0)
■変数操作: CSelf11[ピクチャ№] += 1 + 0
■ピクチャ表示:CSelf11[ピクチャ№] [左上]ファイル(CSelf5) X:0 Y:17 / 0(0)フレーム / パターン 1 / 透 255 / 通常 / 角 0 / 拡 100% / カラー R[100] G[100] B[100]
■トランジション実行
-----------------------------------------------------------------------------------------------------------------------
とやります。この時にシステムDBの0番マップ設定をタイプの内容設定でいじります。
下記画像参考

赤字の部分が追加した箇所です。名前は何でもいいのですがこのMAPで戦闘になった場合このバトルフィールドを呼び出すぞってための準備です。
MAPが変われば設定したバトルフィールドがそれぞれ呼び出せます。場合によって1つのMAPでバトルフィールドを2個用意したいなんて欲張りさんは更にバトルフィールド1、2,3みたいに項目を増やしてトランジションがかかりバトルフィールドをピクチャ壁画する前になんらかの条件分岐をすれば良いと思います。例えば現在が夜であるならAと言うピクチャ。現在が昼ならBと言うピクチャを呼び出す。みたいな処理を
■変数操作+: CSelf10 = 現在のマップID
→ここに入れる
■DB読込(ユーザ): CSelf5 = システムDB[ MAPデータ : CSelf10 : バトルフィールド ] (0 : - : 0)
のような感じで実装できると思います。
上のをコモンで作ってイベントから呼び出すと
敵も味方もいない1枚絵(バトルフィールド)が壁画されると思います。
そこまで出来たらこの項目は成功です。ちなみにトランジションは素材屋さんから借りるか自分で作るかウディタに搭載されるのを使うかは自由にして下さい。
次にトランジションが終わるより前にパーティとエネミーを壁画する
これも簡単です。
上の
→ここに入れる
の 箇所にプレイヤーとエネミーの壁画を事前にしておけば良いだけです。
と言うよりも壁画関連はここに集約される形になるかと思います。
- ・パーティとエネミーのデータをバトル用のCDBに移行する
も合わせてここで行いますが、一緒のコモンでやると訳わからなくなる上にごちゃごちゃするのでデータ移行系のコモンは別口に作るとすっきりすると思います。
データ移行に関しては
・どんなステータスがあるのか?
・装備はあるゲームなのか?
・どんな技を誰が使えるのか?
等ゲームのバトルに関してのキモです。
例えばドラクエ3であれば勇者は勇者専用の魔法を使える。戦士は攻撃しかできない。武道家は攻撃しかできないけど攻撃がHITした時に会心の一撃が出やすいマスクステータスがある。等々
基本はこのゲームには隠しステータスを含めてどんなステータスがあるのかを決めそれをDBに作る。
一番簡単なのは、攻撃力、防御力、素早さ、会心率
この4つだけで進めて魔法は固定ダメージが一番シンプルな構成だと思いますが
せっかくウディタを手に取ったのにこんなありきたりはヤダ!って人が多いと思います。
例えば
近接攻撃力はちからのステータスと武器の攻撃力を+した物で
遠距離攻撃力はすばやさと遠距離武器の攻撃力を+した物でとか
工夫次第で色々生まれてきますね。ここは一番大事なので悩みまくりましょう。
そして注意点として後から付け加えればいいやってのは止めた方が良いです。
面倒ですし。
※攻撃力をマスクステータスにしてダメージ計算の時に計算させるのであれば面倒じゃないです。上で言ってるのはステータス画面の表示とかの壁画です
自分が作りたいゲームはどんな物なのかをよく考えると自ずと答えはでるでしょうけど最初はパクリでも良いのかなって思います。
パクリまくって計算式を再現して行くと自分で思いついた計算式も簡単に作れるようになります。
↑こんな感じでググってみると色々面白い記事がみつかるので良いかと
ただあんまりこりすぎるとプレイヤーがボスを撃破する時にあとどんくらいレベルを上げたら良いのか、どのくらいの武器を手に入れたら良いのかわからなくなりますので気をつけたいところですね。(ロマサガ系はそれを逆手にとって面白い難易度になってますが)
・バトル用DBになぜ移行するかと言うとバトルで起きた事はバトルで処理をした方が計算上都合が良いからです。
例えばバトルDBに移行しなかった場合バイキルトで上がった攻撃力を2分の1にしてバトル終了時にキャラDBに反映させるとかデータの上で面倒なんです。もちろんその辺の処理を思いつける人は移行させなくても良いと思います。
駆け足でバトル画面へ移行の箇所を書きましたが思いつきで書くとやっぱよくないね。
まぁ別に講座ではないから勘弁して下さい。
そのうちもっとかみ砕いて書くつもりではいます。