戦闘中スキル説明文にステータス表示
戦闘中スキル説明文にステータス表示
いつもお世話になっております。
現在製作中のゲームで戦闘中、全てのスキルの説明文にそのスキルの性能表示を
盛り込む為、画像の様に加筆しました。
現状では『速度』にスキルの速度補正、『成功』にはスキルの成功率
『威力』にはダメージ計算式の定数(150 + a.mat * 2 - b.mdf * 2 だったら 150)
をそのまま入れてありますが、これにスキル使用者の能力値を加算して
戦闘中のバフやデバフによる変化に応じて数字が変動するようにしたいのですが
『威力』に関してはスキル毎に計算式が違う為に難しいと思いますが
『速度』に速度補正 + 使用者の敏捷度
『成功』に成功率 + 使用者の運
…と下の2つだけでも計算結果を代入する良い方法はありませんでしょうか?
現在製作中のゲームで戦闘中、全てのスキルの説明文にそのスキルの性能表示を
盛り込む為、画像の様に加筆しました。
現状では『速度』にスキルの速度補正、『成功』にはスキルの成功率
『威力』にはダメージ計算式の定数(150 + a.mat * 2 - b.mdf * 2 だったら 150)
をそのまま入れてありますが、これにスキル使用者の能力値を加算して
戦闘中のバフやデバフによる変化に応じて数字が変動するようにしたいのですが
『威力』に関してはスキル毎に計算式が違う為に難しいと思いますが
『速度』に速度補正 + 使用者の敏捷度
『成功』に成功率 + 使用者の運
…と下の2つだけでも計算結果を代入する良い方法はありませんでしょうか?
Re: 戦闘中スキル説明文にステータス表示
せくもんさん、こんばんは。
デフォルトだと使用者が分からないのでヘルプウィンドウにアクターも渡すようにして
制御文字で計算結果を表示できるようにすればいいかと思います。
※ヘルプウィンドウにのみ制御文字を追加しているのでスクリプトで他のウィンドウに
スキルの説明を表示させているとそのウィンドウだとうまく表示されないと思います。
デフォルトだと使用者が分からないのでヘルプウィンドウにアクターも渡すようにして
制御文字で計算結果を表示できるようにすればいいかと思います。
コード: 全て選択
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
スキルの説明を表示させているとそのウィンドウだとうまく表示されないと思います。
Re: 戦闘中スキル説明文にステータス表示
ぽんぽこねるそん様、ご返答ありがとうございます。
なるほど、使用者の情報を認識させれば制御文字の使用は可能だったのですね。
これは気が付きませんでした。
『他のウィンドウにスキルの説明を表示させる』みたいな処理は行なっていないので
その点は問題ありません。
ところで、ツクマテさんの掲示板では自分の環境だと『半角の¥』が
『\』に文字化けする現象が起こるのですが
コード中の『\』は『半角の¥』に置き換える…という解釈で良いのでしょうか?
なるほど、使用者の情報を認識させれば制御文字の使用は可能だったのですね。
これは気が付きませんでした。
『他のウィンドウにスキルの説明を表示させる』みたいな処理は行なっていないので
その点は問題ありません。
ところで、ツクマテさんの掲示板では自分の環境だと『半角の¥』が
『\』に文字化けする現象が起こるのですが
コード中の『\』は『半角の¥』に置き換える…という解釈で良いのでしょうか?
Re: 戦闘中スキル説明文にステータス表示
[¥]が[\]になっているのはフォントの問題なので気にしなくて大丈夫です。
Re: 戦闘中スキル説明文にステータス表示
ぽんぽこねるそん様、ご返答ありがとうございます。
文字化けの件はコードを丸ごとメモ帳などにコピペする事で復旧できました。
スクリプトを導入して試したところ、バフやデバフで能力値が変動する度に
きちんと数字が変化する事が確認できましたが
毎戦闘ごとにスキルのメニューを最初に開いた時に最初にカーソルが合っている
スキルの制御文字部分が空白になるみたいです。
一度メニューを閉じて再度、魔法や特技のコマンドを選択するか
別のスキルにカーソルを移動してから戻すと直る様ですが…
文字化けの件はコードを丸ごとメモ帳などにコピペする事で復旧できました。
スクリプトを導入して試したところ、バフやデバフで能力値が変動する度に
きちんと数字が変化する事が確認できましたが
毎戦闘ごとにスキルのメニューを最初に開いた時に最初にカーソルが合っている
スキルの制御文字部分が空白になるみたいです。
一度メニューを閉じて再度、魔法や特技のコマンドを選択するか
別のスキルにカーソルを移動してから戻すと直る様ですが…
Re: 戦闘中スキル説明文にステータス表示
修正したので申し訳ありませんがこちらに差し替えてください。
コード: 全て選択
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
Re: 戦闘中スキル説明文にステータス表示
ぽんぽこねるそん様、ご返答ありがとうございます。
新しく作っていただいたスクリプトを試したところ無事に制御文字を表示する事が出来ました。
こちらこそ再度お手数をおかけしてしまい申し訳ありません。
どうもありがとうございました。
新しく作っていただいたスクリプトを試したところ無事に制御文字を表示する事が出来ました。
こちらこそ再度お手数をおかけしてしまい申し訳ありません。
どうもありがとうございました。
Re: 戦闘中スキル説明文にステータス表示
https://tm.yumineko.com/viewtopic.php?f=43&t=8099
↑のトピックでメモ欄を用いてスキルにパラメータを追加する方法を教えて頂いたので
これを応用して威力値が変動出来る様にならないか試してみました。
コード: 全て選択
module USABLEITEM_HELP_FORMAT
#物理威力のフォーマット
POW_FORMAT = '威力:%3d'
#魔法威力のフォーマット
MPO_FORMAT = '威力:%3d'
#速度補正のフォーマット
SPD_FORMAT = '速度:%4d'
#成功率のフォーマット
SUC_FORMAT = '成功:%3d'
end
class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# ● スキルやアイテムの威力基本値
#--------------------------------------------------------------------------
def item_power
return @item_power if @item_power
@item_power = /<威力基本値:(\d+)>/ =~ note ? $1.to_i : USABLEITEM_HELP_FORMAT
@item_power
end
end
#==============================================================================
# ■ Window_Help
#------------------------------------------------------------------------------
# スキルやアイテムの説明、アクターのステータスなどを表示するウィンドウです。
#==============================================================================
class Window_Help < Window_Base
include USABLEITEM_HELP_FORMAT
#--------------------------------------------------------------------------
# ● 制御文字の事前変換
# 実際の描画を始める前に、原則として文字列に変わるものだけを置き換える。
# 文字「\」はエスケープ文字(\e)に変換。
#--------------------------------------------------------------------------
def convert_escape_characters(text)
result = super
result.gsub!(/\ePOW/i) { item_physical_power_text }
result.gsub!(/\eMPO/i) { item_magical_power_text }
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_physical_power_text
return "" unless add_control_character?
return sprintf(POW_FORMAT, @item.item_power + @actor.atk)
end
#--------------------------------------------------------------------------
# ● アイテムの魔法威力のテキスト取得
#--------------------------------------------------------------------------
def item_magical_power_text
return "" unless add_control_character?
return sprintf(MPO_FORMAT, @item.item_power + @actor.mat)
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
威力の数字も変動させる事が出来る様になりました。
ところで
コード: 全て選択
class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# ● スキルやアイテムの威力基本値
#--------------------------------------------------------------------------
def item_power
return @item_power if @item_power
@item_power = /<威力基本値:(\d+)>/ =~ note ? $1.to_i : USABLEITEM_HELP_FORMAT
@item_power
end
end
当初、エラーが出るので試しに入れてみたら収まったのですが
『:』や『::』は何の処理をしているものなんでしょうか?
Re: 戦闘中スキル説明文にステータス表示
せくもんさん、こんばんは。
ご自身でスキルの威力を表示できるようにされたのですね!すごいです!
自分の作ったものを参考?にして頂けると、微力ながらせくもんさんのお力になれたのかなと
とてもうれしく思います。
それで本題ですが
『:』は
で要は条件分岐をしています。
これと同じです。
一々if~と書くのが面倒なので簡潔に書けるこっちを使っているだけです。
これが無かった時にエラーが出たのは
メモ欄から正規表現で威力を取得していてそのままだと文字列のままなので整数に変換しているのですが
取得できなかったときは変換ができないのでエラーになっていたわけです。
今のままだとモジュールが入っちゃっているので説明文に『\POW』と書いていて
スキルに威力が設定されていない時にエラーになるので数値が入る用に直しておいた方がいいです。
『::』はモジュールの定数やメソッドを呼び出しています。
ご自身でスキルの威力を表示できるようにされたのですね!すごいです!
自分の作ったものを参考?にして頂けると、微力ながらせくもんさんのお力になれたのかなと
とてもうれしく思います。
それで本題ですが
『:』は
コード: 全て選択
条件式 ? 真の時の値 : 偽の時の値
コード: 全て選択
if 条件式
真の時の値
else
偽の時の値
end
一々if~と書くのが面倒なので簡潔に書けるこっちを使っているだけです。
これが無かった時にエラーが出たのは
メモ欄から正規表現で威力を取得していてそのままだと文字列のままなので整数に変換しているのですが
取得できなかったときは変換ができないのでエラーになっていたわけです。
今のままだとモジュールが入っちゃっているので説明文に『\POW』と書いていて
スキルに威力が設定されていない時にエラーになるので数値が入る用に直しておいた方がいいです。
『::』はモジュールの定数やメソッドを呼び出しています。
Re: 戦闘中スキル説明文にステータス表示
ぽんぽこねるそん様、ご返答ありがとうございます。
RGSSはまだまだ初心者の域ですが、ぽんぽこねるそんさんのスクリプトは
関数にひとつひとつ見出しが付いているので『この def ~ end で何の処理をしているのか?』が
分かりやすくて、とても助かります。
『:』の件は、よく調べたら『絶対被弾』の際に一度聞いてましたね。
失礼しました。
つまり
<威力基本値:0>
これらは全て同じと考えて良いのでしょうか?
RGSSはまだまだ初心者の域ですが、ぽんぽこねるそんさんのスクリプトは
関数にひとつひとつ見出しが付いているので『この def ~ end で何の処理をしているのか?』が
分かりやすくて、とても助かります。
『:』の件は、よく調べたら『絶対被弾』の際に一度聞いてましたね。
失礼しました。
つまり
<威力基本値:0>
コード: 全て選択
@item_power = /<威力基本値:(\d+)>/ =~ note ? $1.to_i : 0
コード: 全て選択
module POWER
SKILL_POWER = 0
end
@item_power = /<威力基本値:(\d+)>/ =~ note ? $1.to_i : POWER :: SKILL_POWER