装備画面ステータスに命中率と回避率表示など

TANAKATANAKA
記事: 9
登録日時: 2017年2月11日(土) 12:01

装備画面ステータスに命中率と回避率表示など

投稿記事by TANAKATANAKA » 2017年10月21日(土) 11:59

いつも大変お世話になっております。
早速ではございますが、アクターの装備画面のステータスに、
そのアクターの命中率と回避率を表示したいのですが、
スクリプトのどの部分をいじれば可能になるのでしょうか?
ご教示頂ければ幸いです。
よろしくお願いします。

faida
記事: 272
登録日時: 2015年12月17日(木) 16:44

Re: 装備画面ステータスに命中率と回避率表示など

投稿記事by faida » 2017年10月21日(土) 15:32

こんにちは。
装備画面のステータスウィンドウに追加能力値を表示するにはいくつか手順が必要です。
基本的にはスクリプトエディタの「Window_EquipStatus」をいじることになります。
以下の説明は全て「何もスクリプト素材を入れていない場合」の説明になります。
あと一応基本的なことですが、
スクリプトをいじる際は変更点を分かりやすいようにコメント機能などで残しておくか、
元のスクリプトをコピーして素材欄に追加することをお勧めします。

①ステータスウィンドウを大きくする
必要なら能力値を描画する領域を増やすためにステータスウィンドウを大きくします。
Window_EquipStatusのデフォルト32行目「visible_line_number」を変更します。
初期値は「7(名前+6種類の能力値)」になっています。これを増やせばステータスウィンドウが大きくなります。

ただし、これを行うと長くなった分はアイテムウィンドウに被ってしまいます。
Window_EquipSlotのデフォルト30行目「visible_line_number」を同じだけ大きくするか、
Scene_Equipデフォルト64行目「wy = @slot_window.y + @slot_window.height」の「@slot_window」を
2箇所とも「@status_window」に変えると被らなくなります。

②能力値名の定義
通常の能力値と違って、命中率などの「追加能力値」には能力値名を決めておいてある場所がありません。
そのため、Vocabで予め定義しておくと非常に楽です。
(ただし、その場しのぎでそのあたりにポイっと定義しておく分には何も言いません)
以下は追加の例です。

コード: 全て選択

module Vocab
  # 追加能力値
  def self.xparam(param_id)
    ["命中率", "回避率", "会心率"][param_id]
  end
end
必要な分は適宜追加していってください。
なお、並び順はデータベースのアレに準拠しています。

③描画処理
この項目は人によって非常に書き方に差異がある項目ですので、お好みに合わせてアレンジしてください。

ⅰ)基本的な説明:能力値の取得とリフレッシュ
装備画面でのステータス描画は「装備前」と「装備後」の能力値があるのが特徴となります。
装備前は「@actor.xparam(param_id)」、装備後は「@temp_actor.xparam(param_id)」で取得できます。
param_idは0から始まり、「命中率、回避率、会心率、...」と取得できます。
なので取得しなくていい所はしなくていいです。

「リフレッシュ」というのは「ウィンドウの内容の再描画」になります。
つまりここに描画の処理を入れることで描画されます。
デフォルトでも「draw_actor_name(名前の描画)」と「draw_item(能力値の描画、繰り返しで6種類描画)」が入っています。

ⅱ)実際の描画処理:能力値の描画を例に
じゃあこの「draw_item」で何をしているのかを見てみましょう。

コード: 全て選択

  def draw_item(x, y, param_id)
    draw_param_name(x + 4, y, param_id) # 能力値名の描画
    draw_current_param(x + 94, y, param_id) if @actor # 装備前の能力値の描画
    draw_right_arrow(x + 126, y) # あの右矢印
    draw_new_param(x + 150, y, param_id) if @temp_actor # 装備後の能力値の描画
  end
ざっくり言うとこんな感じです。この処理の下は全部この中に含まれている処理です。
右矢印を描画するところは除くとして、他の3つの処理を見てみましょう。

コード: 全て選択

  def draw_param_name(x, y, param_id)
    change_color(system_color) # フォントの色変え
    draw_text(x, y, 80, line_height, Vocab::param(param_id)) # 能力値名の描画
  end
  def draw_current_param(x, y, param_id)
    change_color(normal_color) # フォントの色変え
    draw_text(x, y, 32, line_height, @actor.param(param_id), 2) # 装備前能力値の描画
  end
  def draw_new_param(x, y, param_id)
    new_value = @temp_actor.param(param_id) # 装備後能力値
    change_color(param_change_color(new_value - @actor.param(param_id))) # フォントの色変え
    draw_text(x, y, 32, line_height, new_value, 2) # 描画
  end
というわけでこれを改造していくことにします。

ⅲ)基本的な改造処理の方向:パラメータIDの識別
今回説明する改造では、param_idが10以上なら10を引いた値をparam_idとした追加能力値を取得し、描画
ということをしたいと思います。これは個人的な趣味なので別に真似する必要はそんなにないです。
つまりリフレッシュで

コード: 全て選択

  def refresh
    contents.clear
    draw_actor_name(@actor, 4, 0) if @actor
    6.times {|i| draw_item(0, line_height * (1 + i), 2 + i) }
    3.times {|i| draw_item(0, line_height * (7 + i), 10 + i) } # 追加
  end
これを追加します。こうするとparam_idが10,11,12となります。
これで命中率、回避率、会心率を描画したいと思います。
なおデータベース上で飛び飛びの値を描画したいなら、「10 + i」のところを「[10,11,14][i]」などと配列にするとできます。
※編集点:配列の所のIDが間違っていたので修正

ⅳ)処理の書き換え

コード: 全て選択

  def draw_param_name(x, y, param_id)
    change_color(system_color)
    if param_id >= 10
      draw_text(x, y, 80, line_height, Vocab::xparam(param_id-10))
    else
      draw_text(x, y, 80, line_height, Vocab::param(param_id))
    end
  end
  def draw_current_param(x, y, param_id)
    change_color(normal_color)
    if param_id >= 10
      draw_text(x, y, 32, line_height, @actor.xparam(param_id-10), 2)
    else
      draw_text(x, y, 32, line_height, @actor.param(param_id), 2)
    end
  end
  def draw_new_param(x, y, param_id)
    if param_id >= 10
      new_value = @temp_actor.xparam(param_id-10)
      change_color(param_change_color(new_value - @actor.xparam(param_id-10)))
    else
      new_value = @temp_actor.param(param_id)
      change_color(param_change_color(new_value - @actor.param(param_id)))
    end
    draw_text(x, y, 32, line_height, new_value, 2)
  end
こんなところですかね。

とりあえずこれで描画はできると思います。
不明点等ございましたらなんでもどうぞ。
最後に編集したユーザー faida on 2017年10月21日(土) 19:52 [ 編集 1 回目 ]
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
TANAKATANAKA
記事: 9
登録日時: 2017年2月11日(土) 12:01

Re: 装備画面ステータスに命中率と回避率表示など

投稿記事by TANAKATANAKA » 2017年10月21日(土) 17:55

faidaさん

ありがとうございます!
こんなに丁寧に説明頂いて、早速やってみます!

“VX / Ace:質問” へ戻る