#============================================================================== # ■ 制御文字拡張 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 |