戦闘中スキル説明文にステータス表示

せくもん
記事: 21
登録日時: 2018年6月09日(土) 21:48

戦闘中スキル説明文にステータス表示

投稿記事by せくもん » 2019年7月09日(火) 21:37

いつもお世話になっております。
現在製作中のゲームで戦闘中、全てのスキルの説明文にそのスキルの性能表示を
盛り込む為、画像の様に加筆しました。

ツクマテ質問用.png
ツクマテ質問用.png (299.35 KiB) 閲覧数: 470 回


現状では『速度』にスキルの速度補正、『成功』にはスキルの成功率
『威力』にはダメージ計算式の定数(150 + a.mat * 2 - b.mdf * 2 だったら 150)
をそのまま入れてありますが、これにスキル使用者の能力値を加算して
戦闘中のバフやデバフによる変化に応じて数字が変動するようにしたいのですが

『威力』に関してはスキル毎に計算式が違う為に難しいと思いますが
『速度』に速度補正 + 使用者の敏捷度
『成功』に成功率 + 使用者の運

…と下の2つだけでも計算結果を代入する良い方法はありませんでしょうか?

ぽんぽこねるそん
記事: 28
登録日時: 2018年10月26日(金) 12:24

Re: 戦闘中スキル説明文にステータス表示

投稿記事by ぽんぽこねるそん » 2019年7月10日(水) 01:21

せくもんさん、こんばんは。
デフォルトだと使用者が分からないのでヘルプウィンドウにアクターも渡すようにして
制御文字で計算結果を表示できるようにすればいいかと思います。

コード: 全て選択

module USABLEITEM_HELP_FORMAT
  #速度補正のフォーマット
  SPD_FORMAT = '速度:%4d'
  #成功率のフォーマット
  SUC_FORMAT = '成功:%3d'
end
#==============================================================================
# ■ Window_Help
#------------------------------------------------------------------------------
#  スキルやアイテムの説明、アクターのステータスなどを表示するウィンドウです。
#==============================================================================

class Window_Help < Window_Base
  include USABLEITEM_HELP_FORMAT
  #--------------------------------------------------------------------------
  # ● 制御文字の事前変換
  #    実際の描画を始める前に、原則として文字列に変わるものだけを置き換える。
  #    文字「\」はエスケープ文字(\e)に変換。
  #--------------------------------------------------------------------------
  def convert_escape_characters(text)
    result = super
    result.gsub!(/\eSPD/i)          { item_speed_text }
    result.gsub!(/\eSUC/i)          { item_success_rate_text }
    result
  end
  #--------------------------------------------------------------------------
  # ● テキスト設定
  #--------------------------------------------------------------------------
  def set_text(text)
    if text != @text
      @text = convert_escape_characters(text)
      refresh
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテム設定
  #     item : スキル、アイテム等
  #--------------------------------------------------------------------------
  alias org_set_item set_item
  def set_item(item)
    @item = item
    org_set_item(item)
  end
  #--------------------------------------------------------------------------
  # ● アクターの設定
  #--------------------------------------------------------------------------
  def actor=(actor)
    return if @actor == actor
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 追加した制御文字を使用するか判定
  #--------------------------------------------------------------------------
  def add_control_character?
    return false unless @item.is_a?(RPG::UsableItem)
    return false unless @actor.is_a?(Game_Battler)
    return true
  end
  #--------------------------------------------------------------------------
  # ● アイテムの速度補正のテキスト取得
  #--------------------------------------------------------------------------
  def item_speed_text
    return "" unless add_control_character?
    return sprintf(SPD_FORMAT, @item.speed + @actor.agi)
  end
  #--------------------------------------------------------------------------
  # ● アイテムの成功率のテキスト取得
  #--------------------------------------------------------------------------
  def item_success_rate_text
    return "" unless add_control_character?
    return sprintf(SUC_FORMAT, @item.success_rate + @actor.luk)
  end
end

#==============================================================================
# ■ Window_SkillList
#------------------------------------------------------------------------------
#  スキル画面で、使用できるスキルの一覧を表示するウィンドウです。
#==============================================================================

class Window_SkillList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  alias org_update_help update_help
  def update_help
    org_update_help
    @help_window.actor = @actor
  end
end
#==============================================================================
# ■ Scene_Skill
#------------------------------------------------------------------------------
#  スキル画面の処理を行うクラスです。処理共通化の便宜上、スキルも「アイテム」
# として扱っています。
#==============================================================================

class Scene_Skill < Scene_ItemBase
  #--------------------------------------------------------------------------
  # ● アイテムの使用
  #--------------------------------------------------------------------------
  alias org_use_item use_item
  def use_item
    super
    org_use_item
    @item_window.update_help
  end
end

※ヘルプウィンドウにのみ制御文字を追加しているのでスクリプトで他のウィンドウに
スキルの説明を表示させているとそのウィンドウだとうまく表示されないと思います。
せくもん
記事: 21
登録日時: 2018年6月09日(土) 21:48

Re: 戦闘中スキル説明文にステータス表示

投稿記事by せくもん » 2019年7月10日(水) 22:34

ぽんぽこねるそん様、ご返答ありがとうございます。

なるほど、使用者の情報を認識させれば制御文字の使用は可能だったのですね。
これは気が付きませんでした。

『他のウィンドウにスキルの説明を表示させる』みたいな処理は行なっていないので
その点は問題ありません。

ところで、ツクマテさんの掲示板では自分の環境だと『半角の¥』が
『\』に文字化けする現象が起こるのですが
コード中の『\』は『半角の¥』に置き換える…という解釈で良いのでしょうか?
ぽんぽこねるそん
記事: 28
登録日時: 2018年10月26日(金) 12:24

Re: 戦闘中スキル説明文にステータス表示

投稿記事by ぽんぽこねるそん » 2019年7月10日(水) 23:25

[¥]が[\]になっているのはフォントの問題なので気にしなくて大丈夫です。
せくもん
記事: 21
登録日時: 2018年6月09日(土) 21:48

Re: 戦闘中スキル説明文にステータス表示

投稿記事by せくもん » 2019年7月11日(木) 22:46

ぽんぽこねるそん様、ご返答ありがとうございます。

文字化けの件はコードを丸ごとメモ帳などにコピペする事で復旧できました。
スクリプトを導入して試したところ、バフやデバフで能力値が変動する度に
きちんと数字が変化する事が確認できましたが
毎戦闘ごとにスキルのメニューを最初に開いた時に最初にカーソルが合っている
スキルの制御文字部分が空白になるみたいです。
一度メニューを閉じて再度、魔法や特技のコマンドを選択するか
別のスキルにカーソルを移動してから戻すと直る様ですが…
ぽんぽこねるそん
記事: 28
登録日時: 2018年10月26日(金) 12:24

Re: 戦闘中スキル説明文にステータス表示

投稿記事by ぽんぽこねるそん » 2019年7月12日(金) 01:44

修正したので申し訳ありませんがこちらに差し替えてください。

コード: 全て選択

module USABLEITEM_HELP_FORMAT
  #速度補正のフォーマット
  SPD_FORMAT = '速度:%4d'
  #成功率のフォーマット
  SUC_FORMAT = '成功:%3d'
end
#==============================================================================
# ■ Window_Help
#------------------------------------------------------------------------------
#  スキルやアイテムの説明、アクターのステータスなどを表示するウィンドウです。
#==============================================================================

class Window_Help < Window_Base
  include USABLEITEM_HELP_FORMAT
  #--------------------------------------------------------------------------
  # ● 制御文字の事前変換
  #    実際の描画を始める前に、原則として文字列に変わるものだけを置き換える。
  #    文字「\」はエスケープ文字(\e)に変換。
  #--------------------------------------------------------------------------
  def convert_escape_characters(text)
    result = super
    result.gsub!(/\eSPD/i)          { item_speed_text }
    result.gsub!(/\eSUC/i)          { item_success_rate_text }
    result
  end
  #--------------------------------------------------------------------------
  # ● テキスト設定
  #--------------------------------------------------------------------------
  def set_text(text)
    if text != @text
      @text = convert_escape_characters(text)
      refresh
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテム設定
  #     item : スキル、アイテム等
  #--------------------------------------------------------------------------
  alias org_set_item set_item
  def set_item(item)
    @item = item
    org_set_item(item)
  end
  #--------------------------------------------------------------------------
  # ● アクターの設定
  #--------------------------------------------------------------------------
  def actor=(actor)
    return if @actor == actor
    @actor = actor
    set_item(@item)
  end
  #--------------------------------------------------------------------------
  # ● クリア
  #--------------------------------------------------------------------------
  alias org_clear clear
  def clear
    org_clear
    @item = nil
    @actor = nil
  end
  #--------------------------------------------------------------------------
  # ● 追加した制御文字を使用するか判定
  #--------------------------------------------------------------------------
  def add_control_character?
    return false unless @item.is_a?(RPG::UsableItem)
    return false unless @actor.is_a?(Game_Battler)
    return true
  end
  #--------------------------------------------------------------------------
  # ● アイテムの速度補正のテキスト取得
  #--------------------------------------------------------------------------
  def item_speed_text
    return "" unless add_control_character?
    return sprintf(SPD_FORMAT, @item.speed + @actor.agi)
  end
  #--------------------------------------------------------------------------
  # ● アイテムの成功率のテキスト取得
  #--------------------------------------------------------------------------
  def item_success_rate_text
    return "" unless add_control_character?
    return sprintf(SUC_FORMAT, @item.success_rate + @actor.luk)
  end
end

#==============================================================================
# ■ Window_SkillList
#------------------------------------------------------------------------------
#  スキル画面で、使用できるスキルの一覧を表示するウィンドウです。
#==============================================================================

class Window_SkillList < Window_Selectable
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  alias org_update_help update_help
  def update_help
    org_update_help
    @help_window.actor = @actor
  end
end
せくもん
記事: 21
登録日時: 2018年6月09日(土) 21:48

Re: 戦闘中スキル説明文にステータス表示

投稿記事by せくもん » 2019年7月12日(金) 22:44

ぽんぽこねるそん様、ご返答ありがとうございます。

新しく作っていただいたスクリプトを試したところ無事に制御文字を表示する事が出来ました。
こちらこそ再度お手数をおかけしてしまい申し訳ありません。
どうもありがとうございました。

“VX / Ace:質問” へ戻る