494 lines
17 KiB
Ruby
494 lines
17 KiB
Ruby
#==============================================================================
|
||
# ■ 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
|