戦闘メッセージのレイアウトを変更【RPGツクールMZ&MVプラグイン】

2023年09月23日

 戦闘メッセージのレイアウトを変更するプラグインです。
 ウィンドウの配置や大きさなどを変更可能です。


 行動順序の画面表示プラグインとの併用を想定して作ったものですが、それ以外の用途にも使えます。

 主な特徴は以下の通りです。

  • 公式プラグインのSimpleMsgSideViewに対応。
    MZ版のSimpleMsgSideViewMZも大丈夫です。
  • グラデーションに対応。
  • 通常ウィンドウ(枠付き)に切替可能。
  • 背景色や透明度を変更可能。
  • メッセージが長い場合、ウィンドウ幅に合わせて縮小。
  • 反対に文字列長にウィンドウ幅を合わせることも可能。
  • スキルのメモ欄に<NoName>と記述すればスキル名を非表示に。

目次


導入方法

更新履歴

使用例

右空け&グラデーション

ドラクエスタイル

枠付き中央

味方と敵で位置を変更

バトラーの頭上


プラグインパラメータ(配置関連)

X座標(x)

Y座標(y)

前面表示する(showFront)


プラグインパラメータ(サイズ関連)

横幅(width)

横幅を文字数に合わせる(autoWidth)

一行の縦幅(lineHeight)


プラグインパラメータ(メッセージ関連)

フォントサイズ(fontSize)

メッセージの余白(padding)


プラグインパラメータ(背景関連)

通常ウィンドウにする(normalWindow)

背景色(backColor)

背景不透明度(backPaintOpacity)

グラデーション方式(gradientType)

開始グラデーション幅(startGradientSize)

終了グラデーション幅(endGradientSize)


導入方法


 以下のファイルをダウンロードし 、[プロジェクト]\js\plugins に放り込みます。ツクールのプラグイン管理から機能をONにしてください。
 ※このプラグインはMV、MZの両方で有効です。

 NRP_WindowBattleLogLayout.js ver1.05(2023/09/23)

更新履歴


2023/09/23(ver1.05)

  • スキル名を非表示にした際にアニメーションより先にダメージが表示される不具合修正。
    ※恐らくDynamicAnimation未使用の環境で発生。

2022/01/31 -> 2023/01/18(ver1.04 -> 1.041)

  • CounterExtend.jsとの競合対策用に『横幅を文字数に合わせる』場合の挙動を微調整。
  • ウィンドウの右寄せ方法を追記。(2022/04/23)
  • 競合によって数式使用時にエラーとなる問題への対策。
    (2023/01/18 ver1.041)

2020/10/23(ver1.03)

  • スキルのメモ欄に<NoName>と記述すればスキル名を非表示に。

2020/08/27(ver1.02 -> 1.021)

  • ツクールMZに対応。
  • フロントビューでエラーになる不具合修正。(ver1.021)

2020/06/17(ver1.01)

  • 英語対応。

2020/05/01(ver1.00)

  • 公開!

使用例


右空け&グラデーション

 右側を空けることによって、行動順序にかぶらないようにしています。さらに横向きグラデーションをかけて切れ目を自然にしました。


  • 横幅:this.windowWidth() - 150
  • 背景不透明度:128
  • グラデーション方式:1(横)
  • 開始グラデーション幅:0
  • 終了グラデーション幅:200

 『this.windowWidth()』は画面全体の横幅です。-150して画面右側を150ピクセル空けてみました。
 背景不透明度は初期値の64だと、透明度が高すぎてグラデーションが分かりにくかったので濃くしました。お好みでどうぞ。
 終了グラデーション幅だけに値を入れることで、右側だけにグラデーションをかけています。

ドラクエスタイル

 画面下にメッセージを表示するドラクエスタイルです。


  • Y座標:446
  • 前面表示する:true
  • 通常ウィンドウにする:true

 前面表示にしないとステータスの下に隠れてしまいます。
 実用性は怪しいですが、その他のレイアウト変更系プラグインと組合わせれば使えるかもしれません。
 ※MZでは下のウィンドウが消えるので挙動が怪しいです。

枠付き中央

 SimpleMsgSideViewとの併用によって、枠付きウィンドウで中央にスキル名を表示します。


  • SimpleMsgSideViewプラグインをON
  • X座標:this.windowWidth() / 2 - this.width / 2
  • Y座標:20
  • 横幅:300
  • 通常ウィンドウにする:true

 X座標の式は中央寄せするためのものです。『this.windowWidth() / 2』で画面幅の半分、『this.width / 2』でウィンドウ幅の半分となります。

 Y座標や横幅、メッセージの余白などはお好みで調整してください。
 なお、枠内にスキル名が収まらない場合は縮小表示されます。

味方と敵で位置を変更

 使用者がアクターなら右上、敵キャラなら左上にスキル名を表示します。


  • SimpleMsgSideViewプラグインをON
  • X座標:a._enemy ? 20 : 380
  • Y座標:20
  • 横幅:300
  • 通常ウィンドウにする:true

 『a』で行動主体のスプライト情報を参照できます。
 『a.x』『a.y』でX・Y座標、『a.width』『a.height』で横幅・縦幅が参照できます。
 『a._enemy』は行動主体が敵の場合のみ値が入ります。

 『a._enemy ? 20 : 380』というのは『a._enemy』が有効(=敵)の場合は20、それ以外(=味方)は380がX座標になるという意味です。

右寄せ(2022/04/23)

 スキル使用者がアクターの場合にウィンドウを右寄せしたい場合は、X座標を『a._enemy ? 20 : 660 - this.width』というように変更すればOKです。
 ウィンドウサイズ(this.width)を減算することで、ウィンドウが横長になった場合でも自動で左にズレるように調整しています。

バトラーの頭上

 ロマサガシリーズのようにキャラの頭上にスキル名を表示します。


  • SimpleMsgSideViewプラグインをON
  • X座標:a.x - this.width / 2
  • Y座標:a.y - a.height - 80
  • 前面表示する:true
  • 横幅:300
  • 通常ウィンドウにする:true

 ただし、演出中も消えないので邪魔です。もう一工夫しないと実用には耐えないかも……。
 それでも書いておけば、誰かの役に立ったりしませんかね。

プラグインパラメータ(配置関連)


X座標(x)

Y座標(y)

 ウィンドウのX座標とY座標です。(数式可)

前面表示する(showFront)

 ウィンドウを前面表示します。
 下位のプラグインで制御しているウィンドウに対しては、前面表示できない場合があります。(主にNRP_VisualTurn.jsを想定)
 その場合、プラグイン一覧で並び順を調整してください。

プラグインパラメータ(サイズ関連)


横幅(width)

 ウィンドウの横幅です。(数式可)
 初期値の『this.windowWidth()』は、画面横幅に一致します。

 例えば『this.windowWidth() - 200』に変更すると、画面幅より200ピクセル短くなります。もちろん、普通に数値を入れても構いません。

横幅を文字幅に合わせる(autoWidth)

 ウィンドウの横幅を文字数に合わせて自動調整します。
 初期状態ではオフになっています。
 オンにした場合も、↑の『横幅』が最大サイズとなります。

 基本的にSimpleMsgSideViewとの併用を想定しています。

一行の縦幅(lineHeight)

 一行の縦幅です。
 初期値は36です。

プラグインパラメータ(メッセージ関連)


フォントサイズ(fontSize)

 フォントの大きさを指定します。
 初期値は28です。

メッセージの余白(padding)

 ウィンドウとメッセージ間の余白を指定します。
 初期値は18です。

プラグインパラメータ(背景関連)


通常ウィンドウにする(normalWindow)

 通常メッセージと同様の枠付きウィンドウに変更します。
 なお、オンにした場合は以下「背景色〜グラデーション」の項目はいずれも無効となります。

背景色(backColor)

 背景色を指定します。
 16進数でRGB値(参考)を指定してください。初期値の『#000000』は黒となります

背景不透明度(backPaintOpacity)

 背景の不透明度を指定します。
 初期値は64です。

グラデーション方式(gradientType)

 ウィンドウのグラデーション方向を選択できます。
 横と縦が選択可能です。

開始グラデーション幅(startGradientSize)

終了グラデーション幅(endGradientSize)

 開始〜終了側のグラデーション幅です。(数式可)
 いずれも初期値は18です。

 グラデーション方式が『横』の場合、左から右。
 グラデーション方式が『縦』の場合、上から下となります。

 >RPGツクールMZ&MV目次に戻る
posted by 砂川赳 at 16:03 | RPGツクールMZ&MV | このブログの読者になる | 更新情報をチェックする

スキルの効果範囲を拡張【RPGツクールMZ&MVプラグイン】

2023年09月17日

 スキル(およびアイテム)の効果範囲を拡張するプラグインです。

 縦列、横列、円形、グループ、敵味方全体など様々な効果範囲を実現できます。
 初期状態のままでも多数の範囲パターンを使用できますが、独自追加も可能です。いわゆるレベル5デスなど、風変わりなスキルもこのプラグインで実現可能です。
 基本的にはサイドビュー用ですが、一部はフロントビューでも使えます。

 以下は紹介動画です。
 縦・横・円・十字・敵味方全体(使用者除く)などの範囲で魔法を使ってみました。ついでにレベル5デスもあります。
※画面が小さい場合は右下の全画面表示をクリックしてください。


目次


導入方法

注意点

更新履歴

使用方法

Dynamic系プラグインとの連携

プラグインパラメータ

範囲一覧(rangeList)

基準座標(baseCoordinate)

個別設定


導入方法


 以下のファイルをダウンロードし 、[プロジェクト]\js\plugins に放り込みます。ツクールのプラグイン管理から機能をONにしてください。
 ※このプラグインはMV、MZの両方で有効です。

 NRP_SkillRangeEX.js ver1.10(2023/09/24)

注意点


 このプラグインは以下のプラグインよりも、上に配置してください。そうしないと一部の機能が動作しなくなります。

  • NRP_VisualTurn.js(順序リストの色変え対象に影響)
  • NRP_DynamicAnimation.js(アニメーションの表示位置に影響)

更新履歴


2023/09/24(ver1.10)

  • かばうプラグインと組み合わせた場合に範囲が正しく処理されるように対応。
    ※かばうプラグインの更新も必要です。

2023/09/17(ver1.09)

  • 行動回数追加と組み合わせた場合、2回目以降のスキルの範囲が正しく表示されない不具合修正。

2022/12/09(ver1.081)

  • 基準座標を変更可能に。
    浮遊プラグインとの併用などに対応できます。
    ※ただし、プラグインを一旦削除して再登録しないと反映されません。

2021/12/15 -> 2022/05/05(ver1.07 -> 1.072)

  • MZの場合、『画面アニメのX座標』『画面アニメのY座標』および、それを用いた範囲によるアニメーションの位置補正が機能しない不具合を修正。
  • ver1.07よりMZアニメーションが状況によって、あらぬ場所に表示される不具合修正。(ver1.071)
  • 混乱〜魅了時に範囲拡張スキルを別サイドへ発動させた場合、効果が機能しない不具合修正。(2022/05/05 ver1.072)

2021/08/13 -> 10/30(ver1.06 -> 1/061)

  • NRP_PartyAttack.js(ver1.01)の全体選択に対応。
    『全体時の主対象条件』を使用したスキルも適切に表示します。
  • line(直線)型の対象が選択時と実行時で、アクターの前進分だけわずかにズレる不具合修正。(10/30 ver1.061)
    ※プラグインパラメータの既定値の修正なので、プラグインを一覧から一旦削除して再登録するなりしないと反映されません。

2021/08/05(ver1.05)

  • MZにて範囲選択中のアクターがフラッシュしない不具合修正。
  • アクター対象ウインドウを未選択にできない不具合修正。

2020/08/22 -> 2021/07/03(ver1.04 -> 1.043)

  • ツクールMZに対応。
  • 落ちるパターンがあるので修正。(08/24 ver1.041)
  • フロントビューでエラーになる不具合修正。(08/27 ver1.042)
  • MZ用にプラグインの登録順序を指定。(2021/07/03 ver1.043)

2020/06/16(ver1.03)

  • 英語対応。

2020/02/23(ver1.02 -> 1.023)

  • ツクールMV1.5.Xでも動作するよう対応。
  • 外部プラグインとの併用エラーの対処用に微調整@。(04/23 ver1.021)
  • 戦闘不能対象に空振りでエラーとなる不具合修正。(04/24 ver1.022)
  • 外部プラグインとの併用エラーの対処用に微調整A。(05/12 ver1.023)

2020/02/12(ver1.01 -> 1.011)

  • 作成中プラグインとの連携処理を実装。
  • アクターのサイズが0として計算される不具合修正。
  • ↑の修正が不完全だったので再修正。(ver1.011)

2020/02/01(ver1.00 -> 1.001)

  • 公開!
  • パーティ人数が3人以下だとエラーとなる不具合修正。(ver1.001)

使用方法


 スキル(アイテム)のメモ欄に<RangeEx:[範囲]>を書き込めばOKです。
 初期状態で以下の範囲が使用できます。日本語でも英語でもどちらでも構いません。

  • vertical(縦)
  • horizontal(横)
  • group(グループ)
  • circle(円)
  • cross(十字)
  • line(直線)
  • around(自分周辺)
  • all(敵味方全員)
  • allOther(自分以外)
  • lv5(LV5の倍数)

 例1:<RangeEx:縦>
 例2:<RangeEx:vertical>

 エディタ上で設定する範囲は基本的に単体系のものを使います。ただし、全体範囲を使った特殊なスキルも作れます(詳細は後述)。
 以下、各範囲の詳細です。

<RangeEx:縦> or <RangeEx:vertical>

 縦列範囲を対象にします。

20200201_fireWall.JPG

 エディタ上で設定した範囲が『単体』の場合、選択した対象と同じ列にいるキャラも巻き込みます。
 以後、選択した対象を『主対象』。巻き込まれた側を『副対象』と記述します。
 対象選択時の範囲に含まれていれば、副対象も色が変わります。

 位置が『画面』のアニメーションを指定した場合、主対象と同一のX座標を中心に表示します。

 エディタ上で設定した範囲が『全体』の場合、最前列にいる主対象を強制で選択します。前列しか攻撃できないスキルが作れます。

 正確な巻き込み範囲は主対象のX座標から±40ピクセルです。数値は変更可能です。

<RangeEx:横> or <RangeEx:horizontal>

 主対象とその横列上にいる相手を対象とします。

20200201_thunderbolt.JPG

 要領は縦列とほぼ同じです。
 位置が『画面』のアニメーションを指定した場合、主対象と同一のY座標を中心に表示します。

20200201_animatioon.JPG

 こんな感じで中央から左を範囲としたアニメーションを作ればいい感じになります。もちろん敵が使う場合はちゃんと左右反転されます。

 エディタ上で設定した範囲が『全体』の場合、最下段にいる主対象を強制で選択します。下段しか攻撃できないスキルが作れます。
 まあ、サイドビューでは用途不明なんですけどね。奥行きのあるフロントビューでの前列攻撃とかに使えませんかね?

 正確な巻き込み範囲は主対象のY座標から±40ピクセルです。

<RangeEx:グループ> or <RangeEx:group>

 いわゆるドラクエシリーズのアレ。同一IDの敵キャラをまとめて対象とします。対象が味方の場合は単なる全体スキルです。
 配置が離れていても、同種の敵は同グループ扱いです。

20200201_group.JPG

<RangeEx:円> or <RangeEx:circle>

 主対象を中心とした円内にいる相手を対象とします。

20200201_circle.jpg

 正確な巻き込み範囲は主対象から半径100ピクセルです。縦横100ピクセル以上のデカブツが主対象だと範囲が画像内に収まるため、何も巻き込めません。

 範囲を『全体』にすると、最も近くにいる相手を主対象とします。使い道は謎ですが、こういうこともできるというサンプルです。

<RangeEx:十字> or <RangeEx:cross>

 主対象と同一の縦列&横列にいる相手を対象とします。

20200201_cross.JPG

 前述の縦と横の範囲をくっつけたものです。

<RangeEx:直線> or <RangeEx:line>

 行動主体と主対象を通過する直線上にいる相手を対象とします。
 投擲っぽいアニメーションを作れれば使い道もあるかも。

<RangeEx:自分周辺> or <RangeEx:around>

 行動主体を中心とした円内にいる相手を対象とします。

 20200201_around.JPG

 正確な巻き込み範囲は行動主体から半径250ピクセルです。
 なお、対象がいないとアニメーションも何もなしで不発します。

 この範囲は主対象を使用しないため、エディタ上の範囲は『全体』にしたほうが自然かもしれません。この下の三項目も同様です。

<RangeEx:敵味方全員> or <RangeEx:all>

 敵味方全員を対象とします。

<RangeEx:自分以外> or <RangeEx:allOther>

 上の範囲からスキル使用者を除いたものです。

<RangeEx:LV5の倍数> or <RangeEx:lv5>

 レベル5の倍数の相手を対象とします。これでレベル5デスもバッチリ再現できます。
 なお、初期状態では味方対象専用です。敵を対象にしてもレベルがないため意味をなしません。

Dynamic系プラグインとの連携


 DynamicAnimation&Motionとの併用も可能です。以下のサンプルをご確認ください。
 https://newrpg.seesaa.net/article/501527341.html

パラメータ


 上記だけで十分に利用可能ですが、当プラグインはパラメータによって独自範囲の追加も可能です。
 上級者向けの内容も含まれますが、ご了承ください。

範囲一覧(rangeList)

 範囲を定義した一覧です。既存の設定を編集したり新しい範囲の追加が可能です。
 以下は範囲に含まれる項目です。

名前(name)

 名称です。
 識別用のメモ書きとして作った項目ですが、メモ欄での指定にも使えます。

識別子(id)

 スキル(アイテム)のメモ欄から呼び出す際に使う識別子です。

範囲条件(rangeIf)

 範囲を定める条件式(JavaScript)です。

 例えば範囲『縦』だと、
40 >= Math.abs(b.x - c.x)

 というように、定義されています。

 ※ver1.08より座標表記を『b.srX()』『b.srY()』というように変更しました。それぞれ、以前の表記と変わらず対象のX座標、Y座標を示しています。設定によってホーム座標を参照するための措置です。

 これは主対象(b)と副対象(c)のX座標を引き算し、その差が40ピクセル以下ならば副対象を巻き込むという意味です。
 Math.abs()というのは絶対値を求める関数です。つまり「(b.x - c.x)が-40〜40の範囲にあるかどうか?」ということ。

 40の数値を変えれば、範囲を広げたり狭めたりできます。難しいという人も、それだけ分かれば十分です。

 範囲『横』だと、以下の通りです。
 『縦』のxをyに変えるだけかと思いきや、少し違います。
40 >= Math.abs(b.y - b.height / 2 - (c.y - c.height / 2))

 長くなって嫌な感じですが、これは画像の高さ(height)によってY座標の基準点を調整しているためです。
 というのも、戦闘キャラ画像のY座標は足元が基準になっています。画像の中央を基準とするように調整すると、こういう式になります。

 長くなるためその他の条件式については割愛します。
 これ以外の数式も範囲の広さや半径などは数式の先頭付近に記述しています。調整したい場合はそこをいじってください。
 円の数式とか凄いことになっていますが、最初の数値が半径です。それだけ理解すれば支障ありません。

 また、上述の数式では使用していませんが、行動主体の座標は『a』で参照可能です。
 ただし、この数式で使用する『a』『b』『c』はスキルの計算式で使用するものとは、中身が異なることにご注意ください。実体はスプライト(画像情報)なので、座標や画像幅の状態などしか持っていません。

 では、レベルや攻撃力などいつもの情報(バトラー情報)を参照したい時はどうするかというと……。
c._battler.level % 5 == 0

 というようにやります。
 上記は『LV5の倍数』で使用している範囲条件です。
 『c._battler』というように記述すれば、バトラー情報を参照できます。

 ちなみに『% 5』というのは、5で割った余りという意味です。

画面アニメのX座標(screenAnimationX)

画面アニメのY座標(screenAnimationY)

 画面対象アニメーションを表示するX座標およびY座標です。
 それぞれ指定しないと通常の全体アニメーションと同じ位置に表示されます。

 例えば範囲『縦』のX座標は以下の通りです。
b.x

 対して、Y座標は空のままです。
 これはX座標は主対象と同位置、Y座標は通常の全体アニメと同位置に戦闘アニメーションを表示するという意味です。

全体時の主対象条件(mainTargetAllIf)

 エディタ上で範囲を『全体』に指定した場合、この条件に従って主対象を選択します。『全体』を使わない場合、および主対象を条件にしない場合は不要な項目です。
 
 例えば範囲『縦』だと以下の通りです。
c1._battler.isEnemy() ? c1.x > c2.x : c1.x < c2.x

 これは副対象(c1, c2と定義)を比較しあって、最も条件に合う対象を求めています。

 対象が敵の時はX座標が最も大きな対象(最も右)、そうでない場合は最も小さな対象(最も左)という意味です。これによって、範囲『全体』を選んだ場合に強制で前列を選択するようにしています。

 ……あまりピンとこないと思いますが、分からなくともさして問題ありません。正直、前列対象技を作るぐらいしか用途はないので。

敵味方の区別をしない(noSide)

 ONにすると敵味方を無差別に対象とします。
 『敵味方全員』や『自分以外』はこれによって実現しています。

基準座標(baseCoordinate)

 対象の判定に使用する座標です。

 『現在座標』を選択すると、現在のバトラーが表示されている座標が参照されます。
 例えば、バトラーの影を設定&浮遊効果の追加プラグインの浮遊処理と横範囲のスキルを組み合わせると、時間によって対象が変動してしまいます。

 それを避けたい場合は『ホーム座標』を選択してください。
 こちらはバトラーを配置した際の固定座標を参照するので影響を受けません。

個別設定


 以下のタグをスキル(アイテム)のメモ欄に記入すれば、個別の設定も可能です。
 例えば『レベル5の倍数』など一つしか使わないような設定の時に。また、呼び出した範囲の一部だけ条件を変えたい場合などにも使えます。

  • 範囲条件:<RangeExIf:[条件]>(必須)
  • 画面アニメのX座標:<RangeExAnimationX:[座標]>
  • 画面アニメのY座標:<RangeExAnimationY:[座標]>
  • 全体時の主対象条件:<RangeExMainTargetAllIf:[条件]>
  • 敵味方の区別をしない:<RangeExNoSide:[true or false]>


<RangeExIf:b==c>
<RangeExMainTargetAllIf:c1._battler.hp < c2._battler.hp>

 全体を対象にした場合に、HPが最も低いバトラーを狙います。
 <RangeExIf:b==c>で単体対象になります。

 >RPGツクールMZ&MV目次に戻る
posted by 砂川赳 at 12:05 | RPGツクールMZ&MV | このブログの読者になる | 更新情報をチェックする

【RPG制作講座】行き過ぎた快適性

2023年09月14日

 昔、快適性に関しての記事を書いた。
 https://newrpg.seesaa.net/article/220111934.html

 上の記事のように、筆者は快適性を強く重視すべきと考える。
 ロード時間や演出が短く、スピーディなゲームは一般的に高く評価されやすい。パラメータ調整や、過剰な演出&不要な要素のカットだけでも快適性は向上できるため、費用対効果も非常に優れている。

 しかしながら、快適性にもやりすぎた場合の弊害がある。
 一般的には、快適性が低いことが問題になるケースが圧倒的に多く、なかなかこの問題にまで行き着くことはない。
 実際、10年以上前に記事を書いた時には、そんな問題はほとんど考えてもみなかった。

 ところが、近年は快適性を重視しすぎた結果、問題を起こしている作品を、見かけるようになったので、注意点として挙げてみたい。

目次


速すぎる戦闘

入力速度と演出速度のギャップ

演出時間とゲーム性

戦闘演出カット

エンカウントなし

速すぎる移動速度

対策案

まとめ


速すぎる戦闘


 一般に演出がスピーディな戦闘は好まれる。
 だがそれも、度が過ぎると問題を引き起こす。


 まず、プレイヤーの脳内処理が戦闘のスピードに追いつかなくなってしまう問題だ。あまりにも速すぎると、何が起こっているのか分からなくなる。
 結果、プレイもどことなく雑になって、作品が楽しめなくなっていったりする。

 気をつけておきたいのは、プレイヤーは作者ほどには作品を理解していないということである。
 作者は作品を深く理解しているため、極端にスピーディな戦闘でも何が起こったかを十分に把握できてしまう。敵が高速で放った効果の複雑なスキルを一瞬で見抜いてしまうというわけだ。

 あくまで初見のプレイヤーがどう見えるかを意識しよう。序盤からパーティ人数やスキル数が多い作品など、必要な情報が多い場合は特に注意したい。

入力速度と演出速度のギャップ


 それ以上に深刻で見落とされがちなのは、プレイヤーの入力速度と演出速度のギャップによって引き起こされる問題だ。

 戦闘演出の高速化を極限まで進めていくと、必然的に戦闘においてプレイヤーの入力時間が占める割合が大きくなっていく。
 一般的に、プレイヤーの入力機会が多いということは、ゲーム性が高いということになるはずだ。それ自体は好ましく感じられるかもしれない。
 だが、これは時にゲーム性に歪みをもたらすことがある。

具体例

 オーソドックなターン制の戦闘システムの作品を例にして考えてみよう。
 この作品の戦闘演出は非常にスピーディで、一つの行動には一秒もかからないとする。

 例えば、通常攻撃や同じ技の連打、自動戦闘など入力の手間がかからない手段を使えば、1ターンが5秒で終わるとする。
 一方でプレイヤーが戦術を練りながら丁寧にコマンドを入力すると、1ターンに25秒かかるとする。

 1ターン辺りの時間差が5倍もあることに注目して欲しい。
 つまり、プレイヤーが丁寧に操作するよりも、雑に操作したほうが圧倒的に早くなってしまう。
 これは意図せずして、プレイヤーに雑なプレイを強く動機づけしてしまう。

 特に……

  • 通常攻撃が強力
  • 自動戦闘が強力
  • リソース管理の要素がゆるい
    ※「戦闘後にHPが全快」「MPが存在しない」「回復手段が豊富」など
  • コマンド入力に時間がかかる
    ※「パーティ人数が多い」「スキルの数が多い」「システムが複雑」など

 上記のような作品は要注意だ。

 雑魚戦で負けるリスクが低く、下手に戦ってもリソースを消耗しないならば、ボタン連打などで雑に処理したほうが格段に効率がよくなってしまう。

 気がついた時には、ただただボタンを押すだけ。ファミコン時代のRPGよりやることがないなんてことも……。

演出時間とゲーム性


 意外かもしれないが、演出時間はゲーム性を大きく左右する。演出時間は決してゲーム性から独立した存在ではない。
 というのも、多くのプレイヤーは時間そのものを判断の基準にするからである。

 プレイヤーは誰もが最小ターン勝利や最小被ダメージ勝利を目指しているわけではない。25秒かけて1ターンで勝利するより、2ターンかかっても10秒で勝利できるなら、後者を選ぶ人は多いだろう。

 雑魚戦での経験値稼ぎなら、時短を目指したほうが圧倒的に効率が良いのでなおさらである。結果的に、パーティの成長も早くなるので困ることは少ない。

 ……というように、速すぎる戦闘は時にゲーム性を崩してしまう。
 通常なら演出時間がネックとなることで、保たれていた均衡が崩壊してしまっているわけだ。

戦闘演出カット


 戦闘演出カットは便利なシステムである。これがあれば、長い演出に悩まされることもなくなる。
 ……が、快適さと引き換えに味気なさをもたらす。

 以前、技の演出が非常に長い代わりに、ワンボタンで演出スキップできるゲームをしたことがあるのだが、必然的にほとんどの演出を飛ばすことになった。

 その結果、ただただ表示されるダメージを眺めるだけの味気ない戦闘となってしまった。
 まるでファミコン時代である。
 想像力を働かせる余地がある分、ファミコンのRPGのほうがマシかもしれない。
 現代においては、プレイ動画の見栄えが今一つになるのも無視できない欠点と言えるだろう。

 個人的にはそもそもの演出を短めにすれば、演出カットは不要だと思う。やるにしても、奥義などの大技だけ飛ばせるようにするとか。

エンカウントなし


 個人的な経験談。

 昔、作った作品で『エンカウントなし』を実現する装備を中盤〜後半の時点で入手できるように設定したのだが、プレイヤーからは「手応えがなくなった」「ダンジョンがむなしい」という不満が上がった。

 「だったら使わなければいいじゃん」とこっちは言いたくなるが、人間とは楽なほうに流れるものらしい。
 一応、該当のアイテムは多少入手条件を難しくしていたのだけど、難しいものである。

速すぎる移動速度


 過去、別の記事に書いたので割愛。せっかくなので、リンクを貼っておきます。
 https://newrpg.seesaa.net/article/280090650.html#item5

対策案


 上記の問題の大半は、そもそもが「戦闘が面倒臭い」ということに端を発している。
 よかれと思って、制作者が取った対応が裏目に出てしまっているわけだ。

 戦闘の快適性を向上させたいなら、まず戦闘回数自体を減らすゲームデザインを検討してみることをオススメしたい。
 エンカウント率を低く、ダンジョンもほどほどの長さにする。戦闘自体もほどほどにスピーディにするが、あくまで常識の範囲内で実装する。

 こうすれば、一度の戦闘の密度を高められるので、連打ゲーや自動戦闘ゲーにはなりにくい。

 自動戦闘については、そもそも採用しないのも選択肢だ。もしくは自動戦闘は通常攻撃限定にするなど機能を限定してもよい。
 他にもリソース管理が厳しく、自動戦闘ではすぐにMPが枯渇してしまうようなバランスならこういった問題は起きづらい。

まとめ


 ゲーム性を犠牲にしてまで快適性を極限まで追求してしまうことはオススメできない。行き過ぎると、かえって作業となってしまうからだ。

「戦闘は何の操作をしなくても自動で終わります」
「演出は完全にカットできます」
「むしろ、戦闘そのものもカットできます」

 最終的にはマップを移動しながら、ひたすらフラグを立て、イベントを鑑賞するだけの作品と化してしまう。
 果たして、これが面白いかと言われると難しいところだろう。

 個人的に疑問に思うのは、雑魚戦を軽視しているのに『数多くの雑魚戦』『長めのダンジョン』『長時間の経験値稼ぎ』といった古典的RPGの特徴を強く踏襲してしまっているパターンだ。

 そういった古典的RPGのスタイルは、そもそもが「雑魚戦は楽しいもの」という大前提で設計されている。
 ※誰に確認したわけでもないけれど、そうでなければ大半のRPGは苦行になるので説明がつきません。

 そのため、雑魚戦を重視しないなら、古典的RPGを踏襲する意味もあまりないように思う。

 極論を言うと雑魚戦を嫌うなら、もうイベント戦闘だけに限定してしまってもいい。ダンジョンの中身もカットして、一枚絵と立ち絵だけでイベント進行してしまってもいいぐらいじゃないかなと。

 ただし、戦闘が減れば、必然的に他の要素の比重が増えることになる。その『他の要素』に面白みがなければ、やはりその作品はつまらないゲームとなってしまう。
 ストーリーやイベント演出に自信があるなら一つの手段ではあるけれど、そうなると「ADVでよくね?」「アニメでよくね?」といった疑念も湧いてくるのが、また悩ましいところではある。

>RPG制作講座目次に戻る
posted by 砂川赳 at 11:31 | RPG制作講座 | このブログの読者になる | 更新情報をチェックする