#==============================================================================
# ■ 制御文字拡張 VX Ace By 貪藻矢射妥←
#------------------------------------------------------------------------------
# 制御文字を拡張します。
#
# ※draw_text_exを拡張しています。
#
# ※ルビ描画にてルビ、もしくは本文に半角スペースを入れないでください。
# 正しく表示できません。
#
#==============================================================================
#
# VX Ace 標準
# \v[n] : 変数n番の値を表示
# \n[n] : アクターn番目の名前を表示
# \p[n] : パーティーn番目の名前を表示
# \g : ゴールド表示
# \c[n] : n番目の色に変更
# \i[n] : n番目のアイコン表示
# \{ : 描画文字サイズを大きく
# \} : 描画文字サイズを小さく
# \. : 1/4 sec wait
# \| : 1sec wait
# \! : 入力待ち
# \> : \< まで瞬間表示
# \< : \> から瞬間表示
# \^ : 入力待ちなし
# 追加
# \nn[n] : アクターn番目のニックネームを表示
# \e[n] : エネミーn番目の名前を表示
# \m[n] : マップn番目の名前を表示
# \md[n] : マップn番目の表示名を表示
# \j[n] : n番目の職業を表示
# \t[n] : n番目の道具をアイコンつきで表示
# \w[n] : n番目の武器をアイコンつきで表示
# \a[n] : n番目の防具をアイコンつきで表示
# \s[n] : n番目のスキルをアイコンつきで表示
# \r[text,ruby] : rubyをふりがなにtextを描画
# \rfix[text] : 定型句が割り振られているルビつき文字を描画
#
#==============================================================================
# 更新っぽいもの
# 2012:01:15
# ・XP風アイコン描画 VX Aceに対応
# ・一度に複数回ルビを振ることが出来なかったバグを修正
#
# 2012:03:18
# ・VX Aceのミスだと思っていた convert_escape_characters の
# $game_variablesが二つあるのを復帰。
# \v[\v[n]]のために必要なんですね・・・
#
# 2012:10:01
# ・Ver.1.01aからData/MapInfos.rvdata2には表示名が存在しないためスクリプト変更
# ・アクター名などに制御文字が入っていた場合の制御文字にも対応
#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
# ゲーム中の全てのウィンドウのスーパークラスです。
#==============================================================================
class Window_Base < Window
# ルビ定型句セット
FIX_RUBY = {
"赤眉" => "チーメイ",
"傾奇" => "かぶき",
"明殺" => "みょうさつ",
"開封" => "かいほう",
"綺羅神無" => "らじんきむ",
"応龍" => "おうりゅう",
"齎" => "もたら",
"麒麟" => "キリン",
"霊龜" => "れいき",
"素盞嗚尊" => "スサノオノミコト",
"燭龍" => "しょくりゅう",
"月陽歳刑" => "つきかげさいぎょう",
"歳星黄幡" => "さいせいおうばん",
"天下太陰" => "てんげだいおん",
"元屠歳殺" => "げんとさいさつ" ,
"天蓋流剣鞘" => "てんがいりゅうけんしょう",
"絳征" => "こうせい",
"炎一刀" => "ほむらいっとう",
"虹影" => "にじかげ",
"誘薙双剣" => "いざなぎそうけん",
"天狼碎牙" => "てんろうさいが",
"天狼真牙" => "てんろうしんが",
"穀蔵院一刀" => "こくぞういんいっとう",
"愛染" => "あいぜん",
"舞雅" => "むげ",
"雅閃" => "がせん",
"秘雅閃" => "ひがせん",
"極雅閃" => "きょくがせん",
"終雅閃" => "しゅうがせん",
"黎淵夢" => "くろきふちのゆめ",
"夢刃" => "むじん",
"示現流瞬槍" => "じげんりゅうしゅんそう",
"黎杭打刳撃" => "パイルドライバー",
"逆転黎杭打刳撃" => "リバース・パイルドライバー",
"回転黎杭打刳撃" => "スピニング・パイルドライバー",
"跳躍黎杭打刳撃" => "ジャンピング・パイルドライバー",
"旋抉黎杭打刳撃" => "スクリュー・パイルドライバー",
"削岩錐穴黎杭打刳撃" => "ドリル・ア・ホール・パイルドライバー",
"被覆鋼弾" => "フルメタルジャケット",
"撤甲弾" => "アーマーピアシング",
"炸 裂 弾" => "エクスプロージョンブリット",
"黒き猛禽の爪" => "ブラックタロン",
"鵺帛主" => "ヤヌス",
"王宮一級品" => "ロイヤルコレクション",
"零道漓" =>"プルウィウス",
" 真 " => "チェンジ!!",
"殺形刀" => "サルヒヨンド",
" S D " => "SEED DESTINY",
"天国" => "あまくに",
"碧聖刃" => "シアンセイクレド",
" S T " => "シャイニング・トラペゾヘドロン",
"保護陰盾" => "プロテクトシェード",
"蘭花" => "ランファ",
" A T " => "アナザータイプ",
"夢龍" => "モンリョン",
"春香" => "チュンヒャン",
"文秀" => "ムンス",
"元述" => "ウォンスル",
"英實" => "ヨンシル",
"暗行御史" => "アメンオサ",
"山道" => "サンド",
"朱羅姫" => "シュラキ",
"奠夷瑪" => "ディーヴァ",
"女王禍" => "ジョーカー",
"茜瑙哭" => "セドナ",
"爾幽樟" => "ニュクス",
"刺舞鴉" => "シヴァ",
"逢喇且雫" => "アフラ・マズダ",
"槃導邏" => "パンドラ",
"霹瓏婚枢" => "ペルクナス",
"炳佩鍍嵩" => "ヘパイトス",
"宕瓏牙" => "ドゥルガー",
"微朱主" => "ヴィシュヌ",
"魔血玉" => "デモンブラッド",
"呪符" => "タリズマン",
"閣氏" => "カクシ",
"歳殺陽天" => "さいさつようてん",
"歳刑星天" => "さいぎょうせいてん",
"黄幡暗天" => "おうばんあんてん",
"太陰邪天" => "だいおんじゃてん",
"陰轟留牡鴉" => "アンゴルモア",
"緋々色金" => "ヒヒイロカネ",
"青生生魂" => "アボイタカラ",
}
#--------------------------------------------------------------------------
# ● 制御文字の事前変換
# 実際の描画を始める前に、原則として文字列に変わるものだけを置き換える。
# 文字「\」はエスケープ文字(\e)に変換。
#--------------------------------------------------------------------------
def convert_escape_characters(text)
result = text.to_s.clone
# 既存
result.gsub!(/\\/) { "\e" }
result.gsub!(/\e\e/) { "\\" }
result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
result.gsub!(/\eN\[(\d+)\]/i) { actor_name($1.to_i) }
result.gsub!(/\eP\[(\d+)\]/i) { party_member_name($1.to_i) }
result.gsub!(/\eG/i) { Vocab::currency_unit }
# 追加
result.gsub!(/\eNN\[(\d+)\]/i) { actor_nickname($1.to_i) }
result.gsub!(/\eE\[(\d+)\]/i) { enemy_name($1.to_i) }
result.gsub!(/\eM\[(\d+)\]/i) { map_name($1.to_i) }
result.gsub!(/\eMD\[(\d+)\]/i) { map_display_name($1.to_i) }
result.gsub!(/\eJ\[(\d+)\]/i) { job_name($1.to_i) }
result
end
#--------------------------------------------------------------------------
# ● アクター n 番の名前を取得
#--------------------------------------------------------------------------
def actor_name(n)
actor = n >= 1 ? $game_actors[n] : nil
actor ? convert_escape_characters(actor.name) : ""
end
#--------------------------------------------------------------------------
# ● アクター n 番のニックネームを取得
#--------------------------------------------------------------------------
def actor_nickname(n)
actor = n >= 1 ? $game_actors[n] : nil
actor ? convert_escape_characters(actor.nickname) : ""
end
#--------------------------------------------------------------------------
# ● パーティメンバー n 番の名前を取得
#--------------------------------------------------------------------------
def party_member_name(n)
actor = n >= 1 ? $game_party.members[n - 1] : nil
actor ? convert_escape_characters(actor.name) : ""
end
#--------------------------------------------------------------------------
# ● エネミー n 番の名前を取得
#--------------------------------------------------------------------------
def enemy_name(n)
enemy = n >= 1 ? $data_enemies[n] : nil
enemy ? convert_escape_characters(enemy.name) : ""
end
#--------------------------------------------------------------------------
# ● 職業 n 番の名前を取得
#--------------------------------------------------------------------------
def job_name(n)
job = n >= 1 ? $data_classes[n] : nil
job ? convert_escape_characters(job.name) : ""
end
#--------------------------------------------------------------------------
# ● マップ n 番の名前を取得
#--------------------------------------------------------------------------
def map_name(n)
map = load_data(sprintf("Data/MapInfos.rvdata2"))[n]
map ? convert_escape_characters(map.name) : ""
end
#--------------------------------------------------------------------------
# ● マップ n 番の表示名を取得
#--------------------------------------------------------------------------
def map_display_name(n)
map = load_data(sprintf("Data/Map%03d.rvdata2", n))
map ? convert_escape_characters(map.display_name) : ""
end
#--------------------------------------------------------------------------
# ● 制御文字の処理
# code : 制御文字の本体部分(「\C[1]」なら「C」)
#--------------------------------------------------------------------------
def process_escape_character(code, text, pos)
case code.upcase
# 既存
when 'C'
change_color(text_color(obtain_escape_param(text)))
when 'I'
process_draw_icon(obtain_escape_param(text), pos)
when '{'
make_font_bigger
when '}'
make_font_smaller
# 追加
when 'T' # 道具
process_draw_item(obtain_escape_param(text), pos)
when 'W' # 武器
process_draw_weapon(obtain_escape_param(text), pos)
when 'A' # 防具
process_draw_armor(obtain_escape_param(text), pos)
when 'S' # スキル
process_draw_skill(obtain_escape_param(text), pos)
when 'R' # ルビ
process_draw_ruby(obtain_escape_param2(text), pos)
when "RFIX" # 定型句ルビ
process_draw_ruby_fix(obtain_escape_param2(text), pos)
end
end
#--------------------------------------------------------------------------
# ● 制御文字の引数を破壊的に取得 文字列編
#--------------------------------------------------------------------------
def obtain_escape_param2(text)
text.slice!(/^\[(.+?)\]/)[/\S+/] rescue 0
end
#--------------------------------------------------------------------------
# ● 制御文字によるルビ描画の処理
#--------------------------------------------------------------------------
def process_draw_ruby(str, pos)
str.gsub!(/\[(.+?),(.+?)\]/, "")
text = $1
ruby = $2
process_draw_ruby_root(text, ruby, pos)
end
#--------------------------------------------------------------------------
# ● 制御文字によるルビ定型句描画の処理
#--------------------------------------------------------------------------
def process_draw_ruby_fix(str, pos)
str.gsub!(/\[(.+?)\]/, "")
text = $1
ruby = FIX_RUBY[$1]
process_draw_ruby_root(text, ruby, pos)
end
#--------------------------------------------------------------------------
# ● 制御文字によるルビ描画の処理 おおもと
#--------------------------------------------------------------------------
def process_draw_ruby_root(text, ruby, pos)
text_w = text_size(text).width
text_h = text_size(text).height
f_size_back = contents.font.size
ruby_size = [(f_size_back + 66) / 8, f_size_back * 2 / 3].min
contents.font.size = ruby_size
draw_text(pos[:x], pos[:y] + 8 - ruby_size, text_w, ruby_size, ruby, 1)
contents.font.size = f_size_back
draw_text(pos[:x], pos[:y] + 6, text_w + 4, text_h, text)
pos[:x] += text_w
end
#--------------------------------------------------------------------------
# ● 制御文字によるアイテム描画の処理
#--------------------------------------------------------------------------
def process_draw_item(id, pos)
item = id.to_i >= 1 ? $data_items[id.to_i] : nil
process_draw_data(item, pos)
end
#--------------------------------------------------------------------------
# ● 制御文字による武器描画の処理
#--------------------------------------------------------------------------
def process_draw_weapon(id, pos)
weapon = id.to_i >= 1 ? $data_weapons[id.to_i] : nil
process_draw_data(weapon, pos)
end
#--------------------------------------------------------------------------
# ● 制御文字による防具描画の処理
#--------------------------------------------------------------------------
def process_draw_armor(id, pos)
armor = id.to_i >= 1 ? $data_armors[id.to_i] : nil
process_draw_data(armor, pos)
end
#--------------------------------------------------------------------------
# ● 制御文字によるスキル描画の処理
#--------------------------------------------------------------------------
def process_draw_skill(id, pos)
skill = id.to_i >= 1 ? $data_skills[id.to_i] : nil
process_draw_data(skill, pos)
end
#--------------------------------------------------------------------------
# ● 制御文字によるアイテム、武器、防具、スキル描画の処理 おおもと
#--------------------------------------------------------------------------
def process_draw_data(data, pos)
if data != nil
data_name = data.name
data_icon = data.icon_index
if $OuterFlgs["Icon_Extend"]
text = data.note.clone
@icon_name = text =~ /ICON#{DIA_IC::STT}(\S+)#{DIA_IC::FIN}/ ? $1 : nil
if @icon_name != nil
draw_icon_XP(@icon_name, pos[:x], pos[:y])
else
draw_icon(data_icon, pos[:x], pos[:y])
end
else
draw_icon(data_icon, pos[:x], pos[:y])
end
pos[:x] += 24
text_width = text_size(data_name).width
#draw_text(pos[:x], pos[:y], text_width, pos[:height], data_name)
draw_text_ex(pos[:x], pos[:y], data_name)
pos[:x] += text_width
end
end
#--------------------------------------------------------------------------
# ● 名前の描画
#--------------------------------------------------------------------------
def draw_actor_name(actor, x, y, width = 112)
change_color(hp_color(actor))
draw_text_ex(x, y, actor.name)
end
#--------------------------------------------------------------------------
# ● 職業の描画
#--------------------------------------------------------------------------
def draw_actor_class(actor, x, y, width = 112)
change_color(normal_color)
draw_text_ex(x, y, actor.class.name)
end
#--------------------------------------------------------------------------
# ● 二つ名の描画
#--------------------------------------------------------------------------
def draw_actor_nickname(actor, x, y, width = 180)
change_color(normal_color)
draw_text_ex(x, y, actor.nickname)
end
end