Posted at

Game_ActorやGame_BattlerにGame_Variableをメンバとして持たせる提案

公式フォーラムでも要望として出したんですが、意見を整理するために記事にします。

基本的には、フトコロさんの実装した以下のプラグインを本体機能として公式化するような内容です。

オリジナルパラメータを設定できるプラグイン

なお、Game_Variableそのものではなく、ある程度調整されたクラスになる可能性もあると思います。

ただ、プラグインでフックしやすいようにクラスにするのは必須でしょう。


まえがき

まず、何故このような提案を出すのかを説明します。

プラグイン同士の競合を解決する中で、もっとも大変なのはウィンドウ同士が互いに固有の描画を持つ場合です。


ウィンドウプラグイン同士での競合解決のため

現状のアクターに固有のパラメータを追加するプラグインは、その数値をどのように画面に出すかが問題になりがちです。

Window_BaseにdrawCustomParam(actor,x,y)で呼び出す関数が追加されているかもしれませんし、あるいは単に既存のステータス描画の内側に追加されているかもしれません。

さらに、パラメータ名がどのようになっているかを知るすべがありません。

アクターが持つ変数となれば、各プラグインはその数値に対しての操作の一部をコアスクリプトに移譲できます。


変数の書き換えが容易になる

現状ではアクターやバトラーに変数を追加するプラグインで、その数値を書き換えるにはプラグインコマンドやスクリプトが必要です。

しかし、この方法はリファレンスを読む手間が必要となり、負担になります。

イベントコマンドで数値を操作できれば、この問題は大きく軽減されます。

また、スキルやアイテムの効果として数値を操作することも可能となるでしょう。


プラグイン間の連携が容易になる

普通の変数と似たような操作にできることで、他のプラグインが数値を読みだすことができるようになります。

例えば、数値の挙動自体は他のプラグインで行い、画面表示のレイアウトを別のプラグインに完全に任せることが可能になります。

また、プラグイン側が特別に容易された表示方法を持つ場合でも、対応が容易です。

window.drawActorVariable(actor,index,x,y)のような形で、内部ではフックして独自の描画(例えばゲージを使う)などに切り替えることが可能です。


本体側で行う対応

このシステムはエディタ本体の追加機能が必須になります。

主にイベントコマンドやスキルの効果の対応です。


イベントコマンドの修正

「アクター変数の操作」という形で、中身は「変数の操作」と同じような内容になるでしょう。

また、変数の操作の右辺側に「アクター変数」が追加されると思います。


スキル・アイテムの効果の修正

アクター変数の加減乗除・代入・余剰などで6種類ほど、スキル・アイテムの効果を拡張する必要があります。

加減乗除や代入などの演算種別をeffect.code1に、変数番号をvalue1に、数値をvalue2に格納することで可能です。

ユーザーが拡張したいと思うのであれば、トリアコンタンさんの動的データベースプラグインで拡張すればよいと思います。


アクター変数とバトラー変数を切り離す理由

これは、成長要素のあるアクターと成長要素のないエネミーを切り分けるためです。

例えば、キャラクター間の有効度なんてパラメータはエネミーは使いませんから、アクター変数に入れるべきです。

ただ、そういった使い分けをしないのであればバトラー変数としてアクター・エネミーで共有することになるでしょう。

どうせ、配列にundefinedが入るだけですし、問題は少ないでしょう。


終わりに

ユーザーの間では「MVaceがその内出る」という噂・予想・願望があります。

そのあたりで、実装されたら便利かもしれないなあ、と思ってこんな記事を書きました。