sword-princess-fine/Scripts/RGSS3_.rb
2024-02-07 09:11:37 -06:00

494 lines
17 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#==============================================================================
# ■ RGSS3 変装特徴 Ver1.01 by 星潟
#------------------------------------------------------------------------------
# 顔グラフィックや歩行グラフィックを
# 一時的に変更する特徴の作成が可能になります。
#------------------------------------------------------------------------------
# このスクリプトによる設定は、全て装備品のメモ欄で行います。
#------------------------------------------------------------------------------
# ★顔グラフィックの変更
#
# <顔グラ変更:Actor1,0,5>
#
# これで、この装備品を持つアクターの変更後の顔グラフィックとして
# ファイルネーム「Actor1」の
# インデックス0上段の最も左を優先度5で指定します。
#------------------------------------------------------------------------------
# ★歩行グラフィックの変更
#
# <ホコグラ変更:Actor2,5,6>
#
# これで、この装備品を持つアクターの変更後の歩行グラフィックとして
# ファイルネーム「Actor2」の
# インデックス5下段の左から2番目を優先度6で指定します。
#------------------------------------------------------------------------------
# ★共通
#
# 他の装備でもグラフィックの変更が設定されている場合は
# 最も優先度が高い物の中で、最初に選択された物が選択されます。
#------------------------------------------------------------------------------
# 以下 XPスタイルバトル併用時のみ有効な設定です。
#------------------------------------------------------------------------------
# ★状況に応じた顔グラフィックの変更
#
# HPとステートに応じて、顔グラフィックが指定された物に変更されます。
#------------------------------------------------------------------------------
# Ver1.01 XPスタイルバトル用の機能を更に追加しました。
#==============================================================================
module DISGUISE_FEATURE
#顔グラフィック変更機能を有効にするか否か。(trueで有効、falseで無効)
FACE = true
#顔グラフィック設定用のキーワードを指定します。
WORD1 = "顔グラ変更"
#歩行グラフィック変更機能を有効にするか否か。(trueで有効、falseで無効)
CHARA = true
#歩行グラフィック設定用のキーワードを指定します。
WORD2 = "ホコグラ変更"
#XPスタイルバトル導入時、ステートや現在HPに応じて
#顔グラフィックを変更する機能を有効にするか?
XPSC = true
#XPスタイルバトル導入時の変更設定が有効な場合
#現在ステートに応じた顔グラフィックを指定します。
#[ステートID,優先度,追加文字]で1セットとなります。
#複数セット指定する場合は「,」で区切ってください。
#ステートIDは対象となるステートID。
#優先度は、その変更の優先度。(有効な物の中で最も優先度の高い物が選択されます)
#追加文字は、元の顔グラフィックの後につく文字です。
#例えば、[2,50,"▲"]で、これのみを満たしている場合
#アクターの顔グラフィックファイル名がActor4であれば
#Actor4▲という顔グラフィックファイルから読み込みます。
STATE_F = [
[1,50,"b"],
[2,50,"b"],
[3,50,"b"]
# [26,50,"d"],
# [16,40,"b"],
# [17,40,"b"]
]
#XPスタイルバトル導入時の変更設定が有効な場合
#現在HP割合に応じた顔グラフィックを指定します。
#[HP割合,優先度,追加文字]で
#1セットとなります。
#複数セット指定する場合は「,」で区切ってください。
#HP割合は対象となるHP割合。
#優先度は、その変更の優先度。(有効な物の中で最も優先度の高い物が選択されます)
#追加文字は、元の顔グラフィックの後につく文字です。
#例えば、[60,1,"☆"]で、これのみを満たしている場合
#アクターの顔グラフィックファイル名がActor4であれば
#Actor4☆という顔グラフィックファイルから読み込みます。
HPRATE_F = [
# [60,1,"☆"],
[25,2,"b"]
]
#優先度はステートとHP両方共通ですので
#両方で最も高い優先度の物が選択されます。
#同じ値である場合、先に処理が行われた方が優先されます。
end
class Game_Temp
attr_accessor :disguise_flag
#--------------------------------------------------------------------------
# XPスタイルバトル導入フラグ
#--------------------------------------------------------------------------
def xps_flag
#キャッシュが存在する場合はキャッシュを返す。
return @xps_flag if @xps_flag != nil
#XPスタイルバトル導入フラグの取得。
@xps_flag = $lnx_include != nil && $lnx_include[:lnx11a] != nil
#キャッシュを返す。
@xps_flag
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# 顔グラフィック変更機能が有効な時
#--------------------------------------------------------------------------
if DISGUISE_FEATURE::FACE
#--------------------------------------------------------------------------
# 顔グラフィックの名称
#--------------------------------------------------------------------------
def face_name
#変更用の顔グラフィックのファイル名を取得する。
#存在しない場合は本来の顔グラフィックのファイル名を返す。
data = ex_face.empty? ? @face_name : ex_face_best[0]
#XPスタイルバトル導入時のみ処理を分岐。
if $game_temp.xps_flag
#キャッシュが存在しない場合はキャッシュを生成。
@l_face_name = data if @l_face_name == nil
#キャッシュと一致しない場合に限り、バトラーグラフィック更新フラグを立てる。
if @l_face_name != data
self.refresh_battler_graphic = true
@l_face_name = data
end
end
data
end
#--------------------------------------------------------------------------
# 顔グラフィックのインデックスを取得
#--------------------------------------------------------------------------
def face_index
#変更用の顔グラフィックインデックスを取得する。
#存在しない場合は本来の顔グラフィックインデックスを返す。
data = ex_face.empty? ? @face_index : ex_face_best[1]
#XPスタイルバトル導入時のみ処理を分岐。
if $game_temp.xps_flag
#キャッシュが存在しない場合はキャッシュを生成。
@l_face_index = data if @l_face_index == nil
if @l_face_index != data
self.refresh_battler_graphic = true
@l_face_index = data
end
end
data
end
#--------------------------------------------------------------------------
# 顔グラフィックの一覧を取得
#--------------------------------------------------------------------------
def ex_face
data = []
feature_objects.each {|f| data.push(f.ex_face) if f && f.ex_face}
data
end
#--------------------------------------------------------------------------
# 最も優先度の高い顔グラフィックを取得
#--------------------------------------------------------------------------
def ex_face_best
f_data = ["",0,0]
ex_face.each {|f| f_data = f if f_data[2] < f[2]}
f_data
end
end
#--------------------------------------------------------------------------
# 歩行グラフィック変更機能が有効な時
#--------------------------------------------------------------------------
if DISGUISE_FEATURE::CHARA
#--------------------------------------------------------------------------
# 歩行グラフィックの名称
#--------------------------------------------------------------------------
def character_name
#変更用の歩行グラフィックのファイル名を取得する。
#存在しない場合は本来の歩行グラフィックのファイル名を返す。
data = ex_character.empty? ? @character_name : ex_character_best[0]
#XPスタイルバトル導入時のみ処理を分岐。
if $game_temp.xps_flag
#キャッシュが存在しない場合はキャッシュを生成。
@l_character_name = data if @l_character_name == nil
if @l_character_name != data
self.refresh_battler_graphic = true
@l_character_name = data
end
end
data
end
#--------------------------------------------------------------------------
# 歩行グラフィックのインデックスを取得
#--------------------------------------------------------------------------
def character_index
#変更用の歩行グラフィックインデックスを取得する。
#存在しない場合は本来の歩行グラフィックインデックスを返す。
data = ex_character.empty? ? @character_index : ex_character_best[1]
#XPスタイルバトル導入時のみ処理を分岐。
if $game_temp.xps_flag
#キャッシュが存在しない場合はキャッシュを生成。
@l_character_index = data if @l_character_index == nil
if @l_character_index != data
self.refresh_battler_graphic = true
@l_character_index = data
end
end
data
end
#--------------------------------------------------------------------------
# 歩行グラフィックの一覧を取得
#--------------------------------------------------------------------------
def ex_character
data = []
feature_objects.each {|f| data.push(f.ex_character) if f && f.ex_character}
data
end
#--------------------------------------------------------------------------
# 最も優先度の高い歩行グラフィックを取得
#--------------------------------------------------------------------------
def ex_character_best
c_data = ["",0,0]
ex_character.each {|c| c_data = c if c_data[2] < c[2]}
c_data
end
end
#--------------------------------------------------------------------------
# リフレッシュ
#--------------------------------------------------------------------------
alias refresh_disguise refresh
def refresh
#本来の処理を実行。
refresh_disguise
#スタック回避フラグが立っていない場合に限り、特殊リフレッシュを実行。
$game_player.disguise_refresh(self) if !$game_temp.disguise_flag
end
end
if DISGUISE_FEATURE::CHARA
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# 特殊リフレッシュ
#--------------------------------------------------------------------------
def disguise_refresh(d_actor)
#スタック回避フラグを立てる。
$game_temp.disguise_flag = true
#先頭アクターと特殊リフレッシュ対象が同一の場合は
#先頭アクターに特殊リフレッシュを実行する。
#そうでない場合は、フォロワーに対し特殊リフレッシュを実行する。
if actor == d_actor
@character_name = actor ? actor.character_name : ""
@character_index = actor ? actor.character_index : 0
else
@followers.disguise_refresh(d_actor)
end
#スタック回避フラグを消す。
$game_temp.disguise_flag = nil
end
end
class Game_Followers
#--------------------------------------------------------------------------
# 特殊リフレッシュ
#--------------------------------------------------------------------------
def disguise_refresh(d_actor)
#フォロワーが存在しない場合は処理を終了する。
return if @data.empty?
#フォロワー内に特殊リフレッシュ対象が存在する時
#そのフォロワーのみに特殊リフレッシュを実行。
@data.each do |d|
return d.refresh if d.actor == d_actor
end
end
end
end
class RPG::BaseItem
if DISGUISE_FEATURE::FACE
#--------------------------------------------------------------------------
# 顔グラフィック変更情報
#--------------------------------------------------------------------------
def ex_face
#キャッシュがある場合はキャッシュを返す。
return @ex_face if @ex_face != nil
#メモ欄からデータを取得。
@ex_face = false
memo = self.note.scan(/<#{DISGUISE_FEATURE::WORD1}[:](\S+),(\d+),(\d+)>/).flatten
#正常なデータを取得出来無かった場合は空の配列とする。
if memo != nil && !memo.empty? && memo[1].to_i < 8 && memo[2].to_i > 0
@ex_face = [memo[0], memo[1].to_i, memo[2].to_i]
end
#データを返す。
@ex_face
end
end
if DISGUISE_FEATURE::CHARA
#--------------------------------------------------------------------------
# 歩行グラフィック変更情報
#--------------------------------------------------------------------------
def ex_character
#キャッシュがある場合はキャッシュを返す。
return @ex_character if @ex_character != nil
#メモ欄からデータを取得。
@ex_character = false
memo = self.note.scan(/<#{DISGUISE_FEATURE::WORD2}[:](\S+),(\d+),(\d+)>/).flatten
#正常なデータを取得出来無かった場合は空の配列とする。
if memo != nil && !memo.empty? && memo[1].to_i < 8 && memo[2].to_i > 0
@ex_character = [memo[0], memo[1].to_i, memo[2].to_i]
end
#データを返す。
@ex_character
end
end
end
if $lnx_include != nil && $lnx_include[:lnx11a] != nil
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# グラフィック設定の配列内データを変更する。
#--------------------------------------------------------------------------
def graphic_name_index
#@を抜き、参照対象をGame_Actor内変数からGame_Actorで定義された物にする。
case LNX11::DEFAULT_BATTLER_GRAPHIC
when 0 ; [face_name, face_index]
when 1 ; [character_name, character_index]
end
end
#--------------------------------------------------------------------------
# デフォルトバトラーグラフィック設定を変更する。
#--------------------------------------------------------------------------
def default_battler_graphic
#@を抜き、参照対象をGame_Actor内変数からGame_Actorで定義された物にする。
case LNX11::DEFAULT_BATTLER_GRAPHIC
when 0 # 顔グラフィック
self.facebattler = draw_face(face_name, face_index)
when 1 # 歩行グラフィック
self.facebattler = draw_character(character_name, character_index)
end
end
#以下はステートやHPに応じた表情変化が有効な場合のみ処理を行う。
if DISGUISE_FEATURE::XPSC
#--------------------------------------------------------------------------
# 顔グラフィックの名称
#--------------------------------------------------------------------------
alias face_name_hp_rate_state face_name
def face_name
#本来の処理でのデータを取得する。
data = face_name_hp_rate_state
#顔グラフィックの追加名称を付与。
data = data + hp_rate_face_text
#データを返す。
data
end
#--------------------------------------------------------------------------
# 顔グラフィックの追加名称
#--------------------------------------------------------------------------
def hp_rate_face_text
#HP割合を取得。
data = self.hp_rate * 100
#初期優先度を設定。
pr = 0
#初期追加文字を設定。
text = ""
#各ステート指定に依存した処理を実行。
DISGUISE_FEATURE::STATE_F.each do |a|
if a[1] > pr
next unless state?(a[0])
pr = a[1]
text = a[2]
end
end
#各HP指定に依存した処理を実行。
DISGUISE_FEATURE::HPRATE_F.each do |a|
if a[1] > pr
next unless a[0] >= data
pr = a[1]
text = a[2]
end
end
text
end
#--------------------------------------------------------------------------
# リフレッシュ
#--------------------------------------------------------------------------
alias refresh_hp_rate_state refresh
def refresh
#本来の処理を実行。
refresh_hp_rate_state
#グラフィック更新フラグをtrueにする。
@refresh_battler_graphic = true
end
end
end
end