3.RPG式自作戦闘の下準備(スイッチ・変数の管理)



謝辞
このページの製作に当たってキョッシーさん、ジュニーさん、鉛刀さんに
ご協力をいただきました。どうもありがとうございました。


さあ自作戦闘です。
あらかじめ言っておきますと当講座ではシステムまわりについてどうやったらそれができるかという
イベントの流れを解説するだけに留め、演出に当たる部分には触れない方針でいくつもりです。
まあ、私に演出のセンスがないというのが一番の理由ですが。

それともう1つ。敵と味方が互いに殴りあう戦闘部分の箇所だけを作るならそんなに難しくはありません。
自作戦闘で本当の敵はメニュー作りではないかと思っています。
戦闘ではアイテムや特技の使用がほぼ無条件に付いてきます。
ところがツクールの仕様ではデフォルトのアイテム欄や特殊技能欄を個別に呼び出すことができません。
ということは自作戦闘を作るとなると必然的にアイテムメニューや特技メニューも自作しなければ
ならないということです。この自作メニュー、面倒くささでは戦闘部分の比ではありません。
おそらく自作戦闘に挑戦する人の多くがこの部分で断念してしまうのではないかと思っています。
ですから後々メニュー作りが待っているということを予め頭に入れておきましょう。


目次

作り始める前に
必要なスイッチは?
必要な変数は?
状態異常の管理法いろいろ



作り始める前に

まず一番必要なのは戦闘に参加できる味方の最大数と敵の最大数を決めておくことです。
これは完成直前になって新たに追加しようとすると大変なことになります。
扱う人数が多いほど面倒になりますが、始めのうちに余裕を持って設定することが大切です。

人数が決まったら次にやることはスイッチ・変数の確保です。
思いつくままに作っているとスイッチや変数があちらこちらに分散して非常に管理しづらくなります。
同種のスイッチや変数が同じ位置にまとまって配置していると扱いやすいのでこの辺りは最初から
計画的に位置を決めておきましょう。

それでは自作戦闘ではどんなスイッチや変数を使うのかをみていきましょう。


目次へ


必要なスイッチは?

戦闘の場にどのキャラクターが存在するかを調べるスイッチは重要です。
それから生きているのか死んでいるのかを知るスイッチも別に用意しましょう。
これで攻撃するターゲットの選択ができますし、
「存在スイッチ」がONで「生存スイッチ」がOFFなら復活の魔法をかける相手も分かります。

と、言うわけでスイッチで必要なのは
 「存在スイッチ」、「生存スイッチ」、
くらいでしょうか。これらを人数分用意します。
味方4人、敵10匹だとすると2×14=28個のスイッチにあらかじめ名前を付けておきましょう。

ここでちょっとしたことですが、後で追加や変更ができるように隙間を空けて配置することをお勧めします。
例えば「味方存在スイッチ」を11〜14番に作ったら「敵存在スイッチ」は30〜40番に作るといった具合です。
私はいつもこの隙間を少なめにとってしまうので後で大変な目に遭ってしまいます。私の失敗体験より。


目次へ


必要な変数は?

まず変数の1〜20番はちょっとした計算をするための作業変数にすることをお勧めします。
自作戦闘ともなると計算を必要とする場面がたくさんあるので、そのつど新しい変数を使っていると
そのうち膨大な数になってしまいます。ただしいくつものイベントを並列処理する場合には
変数を共有してしまうと問題が発生しますので気をつけなければいけません。


それでは自作戦闘に必要な変数を拾っていきましょう。
一番重要なのは「味方の生存数」と「敵の生存数」です。
これらは戦闘終了を知るのに必要となります。
戦闘開始時に戦闘参加人数をこの変数に代入し、一人が倒れると1減らし、一人が復活すると1加算していきます。
最終的に「味方の生存数」が0になれば負け、「敵の生存数」が0になれば勝ちを判定します。

次に必要なのは「参加者の番号」です。これは戦闘に参加できる人数の数だけ用意しましょう。
味方側一人目が2番で、敵側三人目が15番というふうに参加キャラクターを番号で管理します。
味方側は主人公IDをそのまま代入すると良いでしょう。

最低限これだけあれば単純な戦闘が作れます。

しかしまあ戦闘といえば自分の体力を保持しながら相手の体力を削ってくところに戦略性が生まれます。
そこで各種能力値を変数に代入しましょう。主人公側は各キャラクターの能力値を
そのまま使ってもいいですが、能力変化などがあると戦闘終了後に元に戻すのが面倒ですので、
戦闘開始時に全て変数に代入しておくようにした方が後々楽です。

では変数に代入可能な能力値を拾ってみましょう。

 レベル、最大HP、HP、最大MP、MP、攻撃力、防御力、精神力、俊敏性、装備品ID各種

この中で「レベル」と「装備品ID」は必要な時にそのつど調べても問題はないと思います。
それから「攻撃力」、「防御力」、「精神力」、「俊敏性」は能力変化とその回復を見越して
戦闘中に変化しない値をもう1セット用意しておくといいでしょう。
味方側は主人公で設定したの能力値を直接読むようにしてもいいです。
攻撃や防御に使うのは変動能力値の方で、変化しない値の方は変化した能力を元の状態に戻す時に
変動能力値に代入して使います。

それともう1つ、戦闘の行動順を決めるために「俊敏性」を加工するための「行動値」変数も必要です。

他にも「攻撃属性」と「防御属性」を数値として収めておきたいところです。
(例えば「火」なら1、「水」なら2というように)

戦闘方式によってコマンド選択から行動開始まで間がある場合にはそれぞれのキャラがどの行動を
とるのかを記憶しておく必要があります。
同時にどの敵をターゲットに指定したかを別の変数に収めましょう。


以上をまとめると
 「味方の生存数」、「敵の生存数」
そして
 「参加者の番号」、「最大HP」、「HP」、「最大MP」、「MP」、
 「正常時の攻撃力」、「変動攻撃力」、「正常時の防御力」、「変動防御力」、
 「正常時の精神力」、「変動精神力」、「正常時の俊敏性」、「変動俊敏性」、「行動値」、
 「攻撃属性」、「防御属性」、「選択した行動」、「ターゲット」  (×人数分)

となります。

仮に味方4人、敵10匹なら2+18×14=254個の変数に名前を付けましょう。
ちょっと多いと思うかもしれませんが最初にやっておくと後々楽です。


目次へ


状態異常の管理法いろいろ

戦闘を面白くする要素の1つに状態異常があります。
これらを管理する方法がいくつか挙がってきましたのでまとめて紹介します。

「状態」を使う
文字通り主人公に状態を付加して、条件分岐で読み取って使います。
パーティメンバーの戦闘不能でゲームオーバーにしたくない場合などは
状態を請け負うためだけの主人公を作ります。
例えば戦闘参加キャラが味方4人、敵10なら新たに14人の主人公を作成しましょう。

スイッチを使う
[味方1が毒]とか[敵3が防御]という名前の変数を用意します。
状態を付加する場合はON、回復する場合はOFFとして条件分岐で読み取って使います。
仮に状態の種類が10種で、味方4人、敵10匹だとすると10×14=140個のスイッチが
必要になります。
スイッチを使う利点は変数で番号を指定してON/OFFができることや、
イベントの出現条件としても簡単に使えることです。
戦闘キャラをイベントで作っているならグラフィックの表示などにも使いやすいです。

変数を使う
状態やスイッチを使っていると「味方1が毒のとき」、「味方2が毒のとき」…と
条件分岐を設定する単純作業が多くなります。
変数を使って管理するとこの作業を減らせる"かもしれません"。
ただし注意すべきことも多いので、変数になれないうちは状態やスイッチを
使うことをお勧めします。

変数にはいろいろな使い方があります。

<状態を単純な数値に置き換える>
まずは[味方1の状態]、[敵2の状態]のように戦闘参加人数分の変数を用意します。
毒なら1、麻痺なら2のように各種状態に対応する数字を決めておいて
状態異常になったらその数を代入するだけです。
条件分岐を使えばそのキャラクターが「何の状態になっているのか」という単位で
読み取ることができます。キャラクターが行動した後に変数を調べて1なら
毒のダメージを与えるという具合です。

ただしこのやり方では複数の状態に同時になった場合の管理ができません。
そこで以降は複数の状態を管理できる方法を紹介します。

<2進数で扱う>
1,2,4,8,16,32…というような2のn乗にあたる数値を単位に使います。
例えば戦闘不能になったら1加算、毒にかかったら2を加算、
暗闇になったら4を加算、麻痺になったら8を加算という具合です。
この方法なら変数1個でスイッチ18個分のon/off状態を保存できます。

毒になっているかどうかを調べるときは一度別の変数に代入してから
移し変えた方の変数を4で剰余して2で割り、答えが1なら毒と判断します。

◆変数の操作:[作業用変数]代入、変数[味方1の状態]
◆変数の操作:[作業用変数]剰余,4
◆変数の操作:[作業用変数]除算,2
◆条件分岐:変数[作業用変数]が1
 〜味方1に毒の処理〜
:分岐終了

この方法には注意点があります。
状態を付加するときは値を加算、回復する時は同じ値を減算すればいいわけですが、
すでに毒状態になっているときに2を加算したり、毒になっていないときに2を減算したり
すると状態管理が一気に崩壊してしまいます。
なので必ずその状態になっているかどうかを確認しなければなりません。

<素数で扱う>
6桁の変数で扱えるのは1,2,3,5,7,11,13,17の8個だけです。
しかも必ず初期値を1にしないといけないので実質7個分しか使えません。
参加状態を1として、戦闘不能になったら2を乗算、毒にかかったら3を乗算、
暗闇になったら5を乗算、麻痺になったら7を乗算という具合です。
仮に5で剰余して答えが0なら暗闇状態になっていると分かります。

2進数の方法と同じく状態になっているかどうかを確認してから
乗算・除算しなければなりません。

<継続時間の概念を加える>
ある状態が何ターン継続するかを管理する変数です。
こちらは1つの変数に1つの状態として扱います。
なので状態・スイッチと同じく人数×状態の種類分の変数が必要です。
この変数にはそのまま継続時間を代入します。
そして例えば[味方1が毒]というへんすうが1以上なら味方1に毒の処理をします。
そのたびに1を減算して0になったら自動的に回復したとして扱います。

<10進数で継続時間をまとめる>
上の方法では変数が多くなるのでまとめることもできます。
これはちょうど2進数の方法を10進数に変えたもので、各桁にそれぞれ状態を割り当てます。
1桁目が毒で2桁目を麻痺として11なら毒&麻痺という具合です。
6桁では6個の状態しか管理できないのでやや厳しいですが…
こうすると2〜9が空くので、その分を継続ターン数として扱うわけです。



と、ここまでの準備はどの戦闘方式を採用するにしろ共通だと思います。



基礎講座
第一回:RPGツクールでハローワールド(04' 4/10)
第二回:トラブル対処法(04' 4/17)
第三回:オープニングを作ろう(04' 4/24)

自作システム講座
第一回:マップイベントとコモンイベント(04' 1/10)
第二回:カーソル移動あれこれ(04' 1/10)
第三回:RPG式自作戦闘の下準備(スイッチ・変数の管理)(03' 6/15)
第四回:RPG式自作戦闘(行動順の決め方)(03' 6/15)
第五回:変数の値を画面上に表現(03' 7/6)
第六回:アイテムメニューを作る(04' 1/10)
講座一覧へ戻る
トップへ戻る



公開日時:03' 6/15 18:00
更新日時:04' 10/17 17:00
管理人:すっぴぃ ◆ADGYPSYxII