2016年10月31日月曜日

【ウディタ】ARPGの戦闘システムをつくる(1)基本的な処理

講座でもなんでもねえ、ただの制作日記です。
ちょっと前置きが続きます。

まえおき
現在公開中のRPG「Moebirin Adventure」を公開してからは、「作るのは大変だったけど、経験が生かせるように次の作品もRPGにしよう」と思っていたのですが、
「RPGを作るといっても前作の戦闘や育成システムはそのまま流用するのではなく、強化していかないとやっぱ面白くないよなー」と考えるのは、ゲ制以外の創作をやっていても当然のことながら似たようなことはあるわけで、
その当然の流れから、ほしい機能でウディタ公式にないものをなんとか自作しようと奮闘することになったのでした。

しかし、基本システムの改造は場所によってその難易度が大きく異なり、単体である程度独立しているコモン(例えばコモン164番の単体処理とかね)はわりと容易に改造できてしまいますが、一方万能ウィンドウが絡んでくる描画系コモンなんかは結構めんどくさくて、ものによっては大量の「一時変数」が飛び交う魔境だったりして、処理を理解するところまでで気力を使い果たすレベルでした。

あと、やろうとしていたゲームのシナリオ的にも、フロントビューのコマンド式バトルよりも、アクションRPG的な、プレイヤーの操作がよく反映されるゲームのほうが合っていそうだったので、システムの流用&改造は少しやったところで取りやめて、ARPGで作ることにしたのでした。

本題
ここから本題。

じゃあ、ARPGにするとして、どういう処理が必要で、どういう情報をデータベースに入れておく必要があるかという知識は、考えればある程度は出てきますが、前提としてARPGのプレイ経験がさほどでもないので、とりあえずネット上にあるARPGの制作講座を探しました。
でまあ、参考になったのがこれ。ニコニコ動画に上がっていた実況講座。変数の概念がある程度わかっていればかなりわかりやすい講座なので、個人的にはかなりおすすめ。
アクションRPG編の1~4を順番にやっていくことで、アクションRPGの戦闘処理の土台である

・対応するキーを押すと攻撃エフェクトが出る
・敵に当たるとダメージを与えることができる

この二つと、それに関連した処理をある程度揃えることができます。ここまでのハードルがめちゃめちゃ下がるのは自分みたいなへっぽこにとってはすごくありがたいですね。
ただ、最低限の機能のみなので、ある程度は自力で工夫する必要があります。また、不便な仕様や不具合もまったく無いわけではないので、こちらも自力でなんとかする必要があります。ただ、そういう自力での工夫という工程は動画見ながらサッサと作ってしまったので、対応する処理の案なんかを取り上げることは残念ながらできません。
工夫のコツは、システムは違うものの基本システムの戦闘処理の流れを理解すれば掴めると思います。コモン188番の「X◆戦闘処理」なんかが特に参考になるはず…。ダメージを与える処理はコモン164番の「単体処理」が参考になります。
基本システムの描画や一部の内部処理は難解なのであんまり参考にできないのですが、コモン単体で処理がある程度まとまっているものは大いに参考になります。

それで、結局講座とその関連で組んだコモンやDBの内訳がこんな感じ。
主人公操作:攻撃キーの受付をするコモン。
NPC:敵キャラの動作を指定するコモン。まだ主人公に近づいて、一定時間ごとに攻撃してくるだけ。AIはこれから組んでいく予定…。
攻撃:発動者と技能に応じたエフェクトを表示するコモン。
向き→角度:指定キャラの向いている方向から角度を算出するコモン。動画のまんま。
当たり判定:技能の性質(相手に当てる技か自分に使う技か)を見てから当たり判定を発生させるコモン。当たればダメージ処理とリアクションを発生させる。
ダメージ計算:ダメージ計算をして、対象にダメージを与えるコモン。
状態判定:とりあえずダメージ計算のあとに呼び出して、対象のHPが0以下なら死んだとみなす処理をしているコモン。
主人公DB→戦闘DB:主人公のデータを戦闘用DBにコピペするコモン。
敵DB→戦闘DB:敵のデータを戦闘用DBにコピペするコモン。

DBは基本システムのものを削ったり増やしたりしただけ。
主人公データ:項目名の変更だけ。
戦闘用DB:主人公と敵のステータスを一時保存しておくDB。
敵キャラ:敵キャラのステータスを入れとくDB。
技能:大量に項目をいじったので基本システムとは別物に近いかも。ただ、RPGなのでベースは共通(コストや威力)
アニメーション:ほぼ基本システムのまんま。効果音をシステムDB管理に変更したくらい。

まあ、なんていうか、講座以外で新しく自分で作った部分はまだ他人さまに見せられるような中身でもないので、こんな感じで…。

0 件のコメント:

コメントを投稿