· 

MOG_BattleHudのステート表示改造 詳細

コマンド自作してみたゾ JONYです。

Power Point最強説

 

先月改造した戦闘画面についてですが、

ステート周りをどう改造したか公開します。

 

前置き

JONYはJavaScript素人なので、もっとうまい書き方があるかもしれません。

私のレイアウトでは成功しましたが他のレイアウトでも成り立つかは保証しません。

適宜アレンジしてください。

 

要点

こちらの記事を参考にしています。

・ トリアコンタン様のStateRingIcon.jsの処理の一部を入れ込んでいます。

・ステート表示タイプは1(1つずつ毎秒切り替わる)と2(横並びで全表示)

・表示タイプ2の場合”ステート”は複数表示されるが”バフ/デバフ”は表示されない。

(表示タイプ1は毎秒更新されるため表示される?)

→表示・更新する処理が抜けていたので入れる。

・StateRingIcon.jsを導入しても味方のステートターン数が表示されない(敵は表示される)。

→アイコン描画の方法が独自のものだったので機能しない。

→StateRingIcon.jsの該当部分をMOG_Battlehudに入れ込む。

(現在は表示タイプ1ならStateRingIcon.jsで表示可能)

・ここでは主に表示タイプ2について改造。

・ステート表示数が枠内に収まる数まで(4~5個)なので、もっと多く表示するために位置を自動で詰める処理を追加

 

 

改造内容

1:プラグインパラメーターを追加

* @param >> STATES ===================

の欄に追加すると分かりやすい

 

* @param States Adjust

* @desc ステートの間隔を自動調整する

* @default true

*

* @param States Turn

* @desc 味方ステートのターン数を表示する

* @default true

*  

* @param States FontSize

* @desc 味方ステートのターン数のフォントサイズ

* @default 20

*  

* @param States Turn X-Axis

* @desc 味方ステートのターン数のX座標調整

* @default 0

*

* @param States Turn Y-Axis

* @desc 味方ステートのターン数のY座標調整

* @default 0

 

 

自動調整する場合はステート表示最大数を大きくできる(10とか)

* @param States Max

 

2:パラメーター定義追加

// ** PLUGIN PARAMETERS

// STATES POSITION のところに追加するとよい

    Moghunter.bhud_statesAdjust = String(Moghunter.parameters['States Adjust'] || true);

    Moghunter.bhud_statesTurn = String(Moghunter.parameters['States Turn'] || true);    

    Moghunter.bhud_statesSize = Number(Moghunter.parameters['States FontSize'] || 20);

    Moghunter.bhud_states_turn_x = Number(Moghunter.parameters['States Turn X-Axis'] || 0);

    Moghunter.bhud_states_turn_y = Number(Moghunter.parameters['States Turn Y-Axis'] || 0);

        

 

3:バフ/デバフに対する処理を追加

// * addNewStateや// * eraseStateを参考にする(以下の関数全部必要かは検証していません)

その下に以下の関数を追加してください。

 

//==============================

// * increaseBuff

//==============================

var _alias_mog_bhud_increaseBuff = Game_BattlerBase.prototype.increaseBuff

Game_BattlerBase.prototype.increaseBuff = function(paramId) {

    _alias_mog_bhud_increaseBuff.call(this,paramId);

    this.need_refresh_bhud_states = true;

};

 

//==============================

// * decreaseBuff 

//==============================

var _alias_mog_bhud_decreaseBuff = Game_BattlerBase.prototype.decreaseBuff

Game_BattlerBase.prototype.decreaseBuff = function(paramId) {

    _alias_mog_bhud_decreaseBuff.call(this,paramId);

    this.need_refresh_bhud_states = true;

};

 

//==============================

// * eraseBuff 

//==============================

var _alias_mog_bhud_eraseBuff = Game_BattlerBase.prototype.eraseBuff

Game_BattlerBase.prototype.eraseBuff = function(paramId) {

    _alias_mog_bhud_eraseBuff.call(this,paramId);

    this.need_refresh_bhud_states = true;

};

 

//==============================

// * overwriteBuffTurns 

//==============================

var _alias_mog_bhud_overwriteBuffTurns = Game_Battler.prototype.overwriteBuffTurns

Game_Battler.prototype.overwriteBuffTurns = function(paramId, turns) {

    _alias_mog_bhud_overwriteBuffTurns.call(this,paramId, turns);

    this.need_refresh_bhud_states = true;

};

 

//==============================

// * updateBuffTurns 

//==============================

var _alias_mog_bhud_updateBuffTurns = Game_Battler.prototype.updateBuffTurns

Game_Battler.prototype.updateBuffTurns = function() {

    _alias_mog_bhud_updateBuffTurns.call(this);

    this.need_refresh_bhud_states = true;

};

 

 

4:StateRingIcon.jsから関数持ってくる

// Game_BattlerBase

//  ステートの残りターン数を取得します。

の関数を追加

Game_BattlerBase.prototype.getStateTurns

Game_BattlerBase.prototype.getBuffTurns

Game_BattlerBase.prototype.getAllTurns

(一緒に導入するなら必要ない?)

 

5:Refresh States 2を改造

ステートアイコンにターン数字をaddChildして紐づけすることで、ステートが消えたら数字も消えるようにする。

注意:左揃え専用に改造したのでMoghunter.bhud_statesAlign関連は消しています。

 

//==============================

// * Refresh States 2 ← 元jsはCreate Statesと誤表記

//==============================

Battle_Hud.prototype.refresh_states2 = function() {

  this._state_icon.visible = false;

  this._battler.need_refresh_bhud_states = false;

  for (i = 0; i < this._stateIcons.length; i++){

  this._state_icon.removeChild(this._stateIcons[i]);

  };

  if (this._battler.allIcons().length == 0) {return};

  this._state_icon.visible = true;

  this._stateIcons = [];

  var w = Window_Base._iconWidth;

  var icons = this._battler.allIcons().slice(0,w);

  var m = Math.min(Math.max(this._battler.allIcons().length,0),Moghunter.bhud_statesMax);

  var pad = 4;//間隔

  var iwidth = this._layout.bitmap.width;//枠幅

  var simax = Math.floor(iwidth/w);//調整なし最大表示数

  var adjx = Math.floor((iwidth-w)/m);//調整したときの間隔

  var turns = this._battler.getAllTurns();//ターン数取得

 

  for (i = 0; i < m; i++){

  this._stateIcons[i] = new Sprite(this._state_img);

     var sx = icons[i] % 16 * w;

     var sy = Math.floor(icons[i] / 16) * w;

     this._stateIcons[i].setFrame(sx, sy, w, w);

 

      this._stateIcons[i].x = (w + pad) * i;//align左寄せ専用

      if (Moghunter.bhud_statesAdjust) {//位置自動調整がONのときx変更

        if (m >= simax) {  //枠からはみ出る数なら詰める

        this._stateIcons[i].x = adjx * i;

          };

      };

 

    if (Moghunter.bhud_statesTurn) {//ステートターン数表示がONのとき

        var sprite             = new Sprite();

        sprite.bitmap          = new Bitmap(Sprite_StateIcon._iconWidth, Sprite_StateIcon._iconHeight);

        sprite.bitmap.fontSize = Number(Moghunter.bhud_statesSize);

        sprite.x               = Moghunter.bhud_states_turn_x;

        sprite.y               = Moghunter.bhud_states_turn_y;

        this._turnSprite       = sprite;

        this._stateIcons[i].addChild(this._turnSprite);

         

        var bitmap = this._turnSprite.bitmap;

        bitmap.clear();

        bitmap.drawText(turns[i], 0, 0, bitmap.width, bitmap.height, 'left');

         };

 

  this._state_icon.addChild(this._stateIcons[i]);

 

  };

 

};

 

詰まった点はターン数字座標が親のアイコン依存だったので絶対位置を設定しなくて良かったところです。

うまくいかなかったらすみません。

コメントをお書きください

コメント: 3
  • #1

    nanasi (火曜日, 06 9月 2022 16:48)

    ステートを多用するゲームを作成中なのでとても参考になります!
    ただこれをそのままコピペしてもターン数が表示されず、
    sprite.x = Moghunter.bhud_states_turn_x;
    sprite.y = Moghunter.bhud_states_turn_y;
    ↑この部分をコメントアウトすると表示されるようになるのですが消しちゃっても大丈夫でしょうか?

  • #2

    JONY (火曜日, 06 9月 2022 20:27)

    コメントありがとうございます!
    ↑の部分はコメントアウトして大丈夫です。

    意味としては、ターン数表示のxy座標位置を調整するために追記したのですが、その定義とパラメーター設定を載せるのを忘れていました。

    ターン数表示の位置調整をしたい場合、以下を追記してみてください(本文にも反映しました)。

    1:プラグインパラメーターを追加
    * @param States Turn X-Axis
    * @desc 味方ステートのターン数のX座標調整
    * @default 0
    *
    * @param States Turn Y-Axis
    * @desc 味方ステートのターン数のY座標調整
    * @default 0

    2:パラメーター定義追加
    Moghunter.bhud_states_turn_x = Number(Moghunter.parameters['States Turn X-Axis'] || 0);

    Moghunter.bhud_states_turn_y = Number(Moghunter.parameters['States Turn Y-Axis'] || 0);

  • #3

    nanasi (火曜日, 06 9月 2022 21:18)

    なるほどそういうことだったんですね。
    ちょうど位置調整できないか悩んでたので助かります!
    重ね重ねありがとうございました!