■FF4を作る #4 バトル
ゲーム作りの感動
学生の頃、授業で習いたてのVBでRPGのバトル画面を作ったことがありました(FF3.5を知る前だったかな?)。C言語やJavaよりもウィンドウを作るのが楽だったので、VBで作ってみようってなったんだと思います。
作ったものはサイドビューで、ドラクエみたいなターン制でした。
HPなどのステータス値や敵の名前はテキストボックス、敵やプレイヤー(棒人間ですが…)の画像はピクチャーボックスで表示、その他攻撃などのボタンで作りました。攻守は毎ターンランダムにしたような気がします。
正直ショボいです(笑) …が、当時これが出来た時は嬉しさとワクワクし過ぎて身体が震えました。誇張ではなく本当に震えました。「自分でゲーム作れるじゃん!うぉーーー!」ってなりました。
完成した時もそうですが、作ってる過程でも
など、初めて自分だけで考えたので、試行錯誤が楽しかった。
この時の感動が、今もゲームを作り続ける原動力と言って間違いないです(*'▽')
これが無かったら絶対違う道歩んでます。
ちょっと長くなっちゃいましたね…f^^;
VBからJavaでの制作へ…
その後、改めてVBでFFチックなRPGを作ってました。再就職活動中に震災が起き、しばらくプー太郎してた時は1日12時間くらいゲーム作りに没頭してました。たまにモンハンなんかもしたり( ̄▽ ̄)
しかし作り込んでいくうちに、だんだんVBの挙動が重く感じ出し、以前友人に教えてもらった例の「Javaでゲーム作りますが何か?」のサイト様を思い出して、Javaで作り直してみよう!と思い立ちました。
サイドビュー、ATBの制作
こちらはJavaで作り直したときのバトル画面です。
以前は諦めていたATB(アクティブタイムバトル)を作ってみました。敵や味方が、一定時間でゲージが満タンになったら行動できる、というバトル形式ですね。
上の画像では、テスト用に敵のゲージとHPを表示してます。
「たたかう」を選択するとターゲットとなる敵の横にカーソルが表示され、決定するとプレイヤーが敵を攻撃します。
攻撃を受けた側にダメージの数値が表示されます。数字がダラララーっと跳ねる表現を頑張って作りました(。-∀-)
数字の表示方法や、跳ねるアニメーションについては以前Twitterでツイートしたものがあります。
こちらは敵を2体にしてみたものです。
複数の敵が出現した時の情報について、あれこれ考えました。
(意外と苦戦した記憶が…)
味方側も、1人追加。数が増えるとだんだん雰囲気が出てきます(´ー`)b
こちらは武器攻撃のエフェクト追加、新しい敵の種類を追加したものです。
フロータイボールのような飛行タイプの敵は、本家では上下にフワフワ動いて地面に影が表示されますが、まだ実装してません^^;
敵の種類が増えると、敵のパーティデータを作るのが段々と手間に感じたため、エディタを作りました。
(この敵パーティエディタを作る前に、敵個体のエディタも作りました)
見た目通り使い方はシンプルで、敵を選んでX座標、Y座標をセットする感じですね。敵は最大で6匹を想定した作りになっています。
このエディタで作ったデータを読み込めるようにゲーム本体のプログラムを修正し、実際にできたのがこちらです。
ここまで完成したら、どんなに敵の種類が増えても大丈夫ですね(*'▽')
バトルの大枠ができてきたので、気分転換に敵の死亡モーションを作りました。
上の画像は作成途中のもので、敵の死亡モーション中に勝利後のメッセージが出ちゃってますがお気になさらず…(;'∀')
死亡モーション中の敵は紫っぽい色になり、横に途切れながら消えていきます。本家を意識して作りました。
死亡モーション中は敵の元画像のRGB成分を抽出して紫色に表示しているので、「紫色になった敵の画像ファイル」を別途作る必要はないです。
…ですが、敵が行動する瞬間の白黒になる画像は、別途ファイルを用意してます。プログラムで2値化すると綺麗な白黒にならず、諦めて画像ファイルを用意しました(´-ω-`)
あんこく、全体ダメージ
これまでは武器での攻撃のみでしたが、FF4のセシルといったらやはり「あんこく」ですね。セシルの代名詞とも言えるのではないでしょうか。
カインの「ジャンプ」も作ってみました。
「あんこく」は敵全体にダメージを与える技のため、これまでの「1体にダメージを与える」という処理を作り直す必要がありました。
この全体ダメージの処理は結構苦労しましたね…_( _´ω`)_
実際に作ったものが、以前ツイートしたこちらです。
FF4をプレイしたことがある方は分かるかもしれませんが、セシルの「あんこくけん」、カインの「りゅうけんぎ」は本家には無いものです。暗黒騎士、竜騎士ならではの特技を複数用意する想定で作ったため、このコマンドとなっています。
ステータス異常
上の動画ではボムが毒ガスを吐き、味方が毒状態になっていましたね。
毒や睡眠のようなステータス異常、バフやデバフなどは、ビット演算を使うと管理が非常に楽になります。余分な変数を用意する必要もありません。
筆者の場合、ステータス変化だけでなくバトルフェーズやキャラクターの状態(アクションゲームだと待機、ジャンプ中、攻撃中など)を管理する場合にもビット演算を使っています。すごく便利なのでオススメです。
長くなってしまいましたが、バトルについてはこの辺りで終わろうかと思います。
ご覧いただき、ありがとうございました!
この記事が気に入ったらサポートをしてみませんか?