Project1

标题: 请问有没有办法让文章显示的字置中?不是上下的中 是左右的中 [打印本页]

作者: b50814bb    时间: 2012-5-1 22:04
标题: 请问有没有办法让文章显示的字置中?不是上下的中 是左右的中
因为我做的是ARPG 每一次敌人出现都会有类似无双的剧情「目标:击破XXXXXX」
我已经把对话框放中间了 但我想让「目标:击破XXXXXX」也在视窗的正中间
我现在用的办法 是在前面一直加空格 可是每次不同长短的目标句子 都要重新测好几次
而且用不同的电脑开游戏 字还会歪掉 不知道为什么 好像是分辨率的问题

求助各位前辈了!!!
作者: 布里蓝    时间: 2012-5-1 23:48
可使用显示图片的方法
作者: tang19990919    时间: 2012-5-1 23:56
  1. #==============================================================================
  2. # ■ VXAce_SP1
  3. #------------------------------------------------------------------------------
  4. #  プリセットスクリプトの不具合を修正します。ユーザー定義のスクリプト素材は、
  5. # 原則としてこのセクションより下に配置してください。
  6. #==============================================================================

  7. #------------------------------------------------------------------------------
  8. # 【修正內容】
  9. #------------------------------------------------------------------------------
  10. # ● 修正 使用事件指令[增減狀態],同時同狀態被附加/解除時,第二回合以後
  11. #   狀態附加會失敗的 BUG
  12. # ● 修正 使用事件指令[顯示動畫]時,顯示的動畫不會與地圖移動同步的 BUG
  13. # ● 修正 角色勾選〔自動戰鬥〕選項時生成戰鬥行動的 BUG
  14. # ● 裝備できなくなった裝備品が外れたことにより、さらに別の裝備品が裝備できなく
  15. #   なったとき、その裝備品が増殖してしまう不具合を修正しました。
  16. # ● 修正 事件指令[消除圖片]執行後剩餘的額外負荷的 BUG
  17. # ● 修正 移動選項[無法移動時跳過]勾選時
  18. #   接觸到觸發條件為[與主角接觸]的事件時會執行事件內容的 BUG
  19. # ● 修正 反射一個魔法技能時沒有反映狀態有效度的 BUG
  20. # ● 修正 重設字體設定時,粗體和斜體的狀態不會清除的 BUG
  21. #------------------------------------------------------------------------------
  22. class Game_Battler
  23.   attr_accessor :magic_reflection
  24.   #--------------------------------------------------------------------------
  25.   # ● 判斷是否為敵人
  26.   #--------------------------------------------------------------------------
  27.   alias vxace_sp1_opposite? opposite?
  28.   def opposite?(battler)
  29.     vxace_sp1_opposite?(battler) || battler.magic_reflection
  30.   end
  31. end
  32. #------------------------------------------------------------------------------
  33. class Game_Actor
  34.   #--------------------------------------------------------------------------
  35.   # ● 移除無法裝備的裝備
  36.   #     item_gain : 移除時將物品加回隊伍物品中
  37.   #--------------------------------------------------------------------------
  38.   alias vxace_sp1_release_unequippable_items release_unequippable_items
  39.   def release_unequippable_items(item_gain = true)
  40.     loop do
  41.       last_equips = equips.dup
  42.       vxace_sp1_release_unequippable_items(item_gain)
  43.       return if equips == last_equips
  44.     end
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 生成自動戰鬥的行動
  48.   #--------------------------------------------------------------------------
  49.   def make_auto_battle_actions
  50.     @actions.size.times do |i|
  51.       @actions[i] = make_action_list.max_by {|action| action.value }
  52.     end
  53.   end
  54. end
  55. #------------------------------------------------------------------------------
  56. class Game_Player
  57.   #--------------------------------------------------------------------------
  58.   # ● 執行事件
  59.   #     triggers : 觸發條件
  60.   #     normal   : 優先度是否與「與主角相同」
  61.   #--------------------------------------------------------------------------
  62.   alias vxace_sp1_start_map_event start_map_event
  63.   def start_map_event(x, y, triggers, normal)
  64.     return if $game_map.interpreter.running?
  65.     vxace_sp1_start_map_event(x, y, triggers, normal)
  66.   end
  67. end
  68. #------------------------------------------------------------------------------
  69. class Game_Picture
  70.   #--------------------------------------------------------------------------
  71.   # ● 消除圖片
  72.   #--------------------------------------------------------------------------
  73.   alias vxace_sp1_erase erase
  74.   def erase
  75.     vxace_sp1_erase
  76.     @origin = 0
  77.   end
  78. end
  79. #------------------------------------------------------------------------------
  80. class Game_Interpreter
  81.   #--------------------------------------------------------------------------
  82.   # ● 增減狀態
  83.   #--------------------------------------------------------------------------
  84.   alias vxace_sp1_command_313 command_313
  85.   def command_313
  86.     vxace_sp1_command_313
  87.     $game_party.clear_results
  88.   end
  89. end
  90. #------------------------------------------------------------------------------
  91. class Sprite_Character
  92.   #--------------------------------------------------------------------------
  93.   # ● 更新位置
  94.   #--------------------------------------------------------------------------
  95.   alias vxace_sp1_update_position update_position
  96.   def update_position
  97.     move_animation(@character.screen_x - x, @character.screen_y - y)
  98.     vxace_sp1_update_position
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 移動動畫
  102.   #--------------------------------------------------------------------------
  103.   def move_animation(dx, dy)
  104.     if @animation && @animation.position != 3
  105.       @ani_ox += dx
  106.       @ani_oy += dy
  107.       @ani_sprites.each do |sprite|
  108.         sprite.x += dx
  109.         sprite.y += dy
  110.       end
  111.     end
  112.   end
  113. end
  114. #------------------------------------------------------------------------------
  115. class Sprite_Picture
  116.   #--------------------------------------------------------------------------
  117.   # ● 更新 Bitmap 圖像
  118.   #--------------------------------------------------------------------------
  119.   alias vxace_sp1_update_bitmap update_bitmap
  120.   def update_bitmap
  121.     if @picture.name.empty?
  122.       self.bitmap = nil
  123.     else
  124.       vxace_sp1_update_bitmap
  125.     end
  126.   end
  127. end
  128. #------------------------------------------------------------------------------
  129. class Window_Base
  130.   #--------------------------------------------------------------------------
  131.   # ● 重設自行設定
  132.   #--------------------------------------------------------------------------
  133.   alias vxace_sp1_reset_font_settings reset_font_settings
  134.   def reset_font_settings
  135.     vxace_sp1_reset_font_settings
  136.     contents.font.bold = Font.default_bold
  137.     contents.font.italic = Font.default_italic
  138.   end
  139. end
  140. #------------------------------------------------------------------------------
  141. class Scene_Battle
  142.   #--------------------------------------------------------------------------
  143.   # ● 發動魔法反射
  144.   #--------------------------------------------------------------------------
  145.   alias vxace_sp1_invoke_magic_reflection invoke_magic_reflection
  146.   def invoke_magic_reflection(target, item)
  147.     @subject.magic_reflection = true
  148.     vxace_sp1_invoke_magic_reflection(target, item)
  149.     @subject.magic_reflection = false
  150.   end
  151. end
复制代码
  1. # ===========================================================================
  2. # ◆ A1 Scripts ◆
  3. #    A1共通処理(RGSS2/RGSS3共用)
  4. #
  5. # バージョン   : 4.50 (2012/01/26)
  6. # 作者         : A1
  7. # URL     : http://a1tktk.web.fc2.com/
  8. # ---------------------------------------------------------------------------
  9. # 更新履歴   :2011/11/11 Ver1.00 新規作成
  10. #        :2011/12/22 Ver2.00 RGSS3用と同様の処理に変更
  11. #        :2011/12/30 Ver2.10 RGSS3用メソッドを追加
  12. #        :2011/12/30 Ver3.00 RGSS3用共通処理と統合
  13. #        :2011/12/31 Ver3.10 マップチップサーチの仕様を変更
  14. #        :2011/12/31 Ver3.10 拡張通行判定を追加
  15. #        :2012/01/01 Ver3.11 クラス名の取得処理を追加
  16. #              :2012/01/02 Ver3.20 配列を考慮したsplit処理を追加
  17. #              :2012/01/02 Ver3.20 配列の全ての要素を整数にする処理を追加
  18. #              :2012/01/02 Ver3.30 注釈の処理の仕様を変更
  19. #              :2012/01/02 Ver3.40 「前のイベントコマンドの取得」を追加
  20. #              :2012/01/03 Ver3.50 「フレーム更新」を追加
  21. #              :2012/01/04 Ver3.60 「指定のウィンドウが開いている間ウェイト」追加
  22. #              :2012/01/04 Ver3.70 RGSS2用処理見直し
  23. #              :2012/01/05 Ver3.80 注釈文字列にエスケープコマンド対応
  24. #              :2012/01/05 Ver3.80 多次元配列を考慮したsplit処理を追加
  25. #              :2012/01/05 Ver3.80 注釈にスクリプト処理機能を追加
  26. #              :2012/01/10 Ver3.90 文字縁取り描画を追加
  27. #              :2012/01/11 Ver4.00 テキストビットマップのキャッシュを追加
  28. #              :2012/01/13 Ver4.01 「タイルセットの変更」ができなくなる不具合を修正
  29. #              :2012/01/14 Ver4.10 split処理を強化
  30. #              :2012/01/14 Ver4.20 空白を含む注釈コマンドに対応
  31. #              :2012/01/14 Ver4.21 split処理の不具合を修正
  32. #              :2012/01/21 Ver4.30 メモの内容を取得する関数を追加
  33. #              :2012/01/24 Ver4.40 メモの内容を取得する関数を追加
  34. #              :2012/01/24 Ver4.50 メモの内容を取得する関数を追加
  35. # ---------------------------------------------------------------------------
  36. # 設置場所      
  37. #  なるべく上の方
  38. #
  39. # 必要スクリプト
  40. #    なし
  41. #==============================================================================
  42. $imported = {} if $imported == nil
  43. $imported["A1_Common_Script"] = 4.50
  44. #==============================================================================
  45. # ■ Kernel
  46. #==============================================================================
  47. module Kernel
  48.         #--------------------------------------------------------------------------
  49.         # ○ RGSSのバージョン取得
  50.         #--------------------------------------------------------------------------
  51.         def rgss_version
  52.                 return 3 if defined? Graphics.play_movie
  53.                 return 2 if defined? Graphics.resize_screen
  54.                 return 1
  55.         end
  56.         #--------------------------------------------------------------------------
  57.         # ○ コモンスクリプトのバージョン取得
  58.         #--------------------------------------------------------------------------
  59.         def common_version
  60.                 $imported["A1_Common_Script"]
  61.         end
  62.         #--------------------------------------------------------------------------
  63.         # ○ コモンスクリプトのバージョンが古い
  64.         #--------------------------------------------------------------------------
  65.         def old_common_script(script_name, version)
  66.                 msgbox("#{script_name}にはA1共通スクリプトVer#{version}以上が必要です")
  67.         end
  68. end
  69. #==============================================================================
  70. # ■ A1_System
  71. #==============================================================================
  72. module A1_System
  73. end
  74. #==============================================================================
  75. # ■ A1_System::CommonModule
  76. #==============================================================================

  77. class A1_System::CommonModule
  78.         #--------------------------------------------------------------------------
  79.         # ○ 定数
  80.         #--------------------------------------------------------------------------
  81.         TWOBYTE_LIST = {
  82.                 " " => " ",
  83.                 "=" => "=",
  84.                 ":" => ":"
  85.         }
  86.         #--------------------------------------------------------------------------
  87.         # ○ オブジェクト初期化
  88.         #--------------------------------------------------------------------------
  89.         def initialize
  90.                 define_command
  91.         end
  92.         #--------------------------------------------------------------------------
  93.         # ○ 変換対象の全角文字を半角に置換
  94.         #--------------------------------------------------------------------------
  95.         def replace_twobyte(str)
  96.                 for key in TWOBYTE_LIST.keys
  97.                         str.gsub!(key) {TWOBYTE_LIST[key]}
  98.                 end
  99.                 return str
  100.         end
  101.         #--------------------------------------------------------------------------
  102.         # ○ マイナスが含まれている文字列を数値にする
  103.         #--------------------------------------------------------------------------
  104.         def minus_to_i(s)
  105.                 if s[0,0] == "-"
  106.                         s.gsub!("-","")
  107.                         return s.to_i * -1
  108.                 else
  109.                         return s.to_i
  110.                 end
  111.         end
  112.         #--------------------------------------------------------------------------
  113.         # ○ ミリ秒単位の現在時間
  114.         #--------------------------------------------------------------------------
  115.         def now_usec
  116.                 now = Time.now
  117.                 hour = now.hour * 60 * 60
  118.                 min  = now.min * 60
  119.                 sec  = now.sec
  120.                 msec = (now.usec / 1000.0).round
  121.                 return (hour + min + sec) * 1000 + msec
  122.         end
  123.         #--------------------------------------------------------------------------
  124.         # ○ イベントリストの作成
  125.         #--------------------------------------------------------------------------
  126.         def create_event_list(code, indent, parameters)
  127.                 list = RPG::EventCommand.new
  128.                 list.code       = code
  129.                 list.indent     = indent
  130.                 list.parameters = parameters
  131.                 return list
  132.         end
  133.         #--------------------------------------------------------------------------
  134.         # ○ メソッド呼び出し
  135.         #--------------------------------------------------------------------------
  136.         def send_method(method_name)
  137.                 return send(method_name) if respond_to?(method_name)
  138.         end
  139.         #--------------------------------------------------------------------------
  140.         # ○ オブジェクトの型を判断してStringならエンコード
  141.         #--------------------------------------------------------------------------
  142.         def encoding_string(obj)
  143.                 obj.force_encoding("UTF-8") if obj.is_a?(String)
  144.                 return obj
  145.         end
  146.         #--------------------------------------------------------------------------
  147.         # ○ メモの内容から必要な情報を取得
  148.         #--------------------------------------------------------------------------
  149.         def note_data(note, key)
  150.                 result = []
  151.                 note.each_line {|line|
  152.                         next unless line =~ /<#{key}[ ]?(.*)>/
  153.                         return true if $1.empty?
  154.                         data = $a1_common.replace_twobyte($1).split(" ")
  155.                         for st in data
  156.                                 result.push(st)
  157.                         end
  158.                 }
  159.                 return false if result.empty?
  160.                 return result
  161.         end
  162.         #--------------------------------------------------------------------------
  163.         # ○ メモの内容からハッシュを作成
  164.         #--------------------------------------------------------------------------
  165.         def note_data_hash(note, key, data_default = nil, default = {}, ret = {})
  166.                 list = note_data_split(note, key)
  167.                 return default if list.empty?
  168.                 list.each {|data| ret[data[0]] = data[1] ? data[1] : data_default }
  169.                 return ret
  170.         end
  171.         #--------------------------------------------------------------------------
  172.         # ○ メモの内容からカンマ区切りの多元配列を取得
  173.         #--------------------------------------------------------------------------
  174.         def note_data_split(note, key, default = [], ret = [])
  175.                 data = note_data(note, key)
  176.                 return default unless data.is_a?(Array)
  177.                 data.each {|str| ret.push(convert_integer_from_array(split_array(str)))}
  178.                 return ret
  179.         end
  180.         #--------------------------------------------------------------------------
  181.         # ○ 配列の内容から数値があれば変換
  182.         #--------------------------------------------------------------------------
  183.         def convert_integer_from_array(data, ret = [])
  184.                 data.each {|str| ret.push(convert_integer(str))}
  185.                 return ret
  186.         end
  187.         #--------------------------------------------------------------------------
  188.         # ○ 数値があれば変換
  189.         #--------------------------------------------------------------------------
  190.         def convert_integer(str)
  191.                 return $1.to_i if str =~ /(^[-]?[0-9]+$)/
  192.                 str.is_a?(Array) ? convert_integer_from_array(str) : str
  193.         end
  194.         #--------------------------------------------------------------------------
  195.         # ○ メモの内容から単項目の数値を取得
  196.         #--------------------------------------------------------------------------
  197.         def note_data_one_value(note, key, default)
  198.                 data = note_data(note, key)
  199.                 return data[0].to_i if data.is_a?(Array)
  200.                 return default
  201.         end
  202.         #--------------------------------------------------------------------------
  203.         # ○ メモの内容から単項目を取得
  204.         #--------------------------------------------------------------------------
  205.         def note_data_one(note, key, default)
  206.                 data = note_data(note, key)
  207.                 return data[0] if data.is_a?(Array)
  208.                 return default
  209.         end
  210.         #--------------------------------------------------------------------------
  211.         # ○ メモの内容からカンマ区切りの文字列を取得
  212.         #--------------------------------------------------------------------------
  213.         def note_data_array_str(note, key, default)
  214.                 data = note_data(note, key)
  215.                 return data[0].split(",") if data.is_a?(Array)
  216.                 return default
  217.         end
  218.         #--------------------------------------------------------------------------
  219.         # ○ メモの内容からカンマ区切りの数値を取得
  220.         #--------------------------------------------------------------------------
  221.         def note_data_array_value(note, key, default)
  222.                 data = note_data(note, key)
  223.                 return default unless data.is_a?(Array)
  224.                 return convert_integer_from_array(split_array(data[0]))
  225.         end
  226.         #--------------------------------------------------------------------------
  227.         # ○ カンマ区切りの文字列メモを変換
  228.         #--------------------------------------------------------------------------
  229.         def note_data_array(note, key, type, default = nil, through = true)
  230.                 ret = []
  231.                 default.each {|dat| ret.push(dat)} if default != nil
  232.                
  233.                 data = note_data(note, key)
  234.                 return ret unless data.is_a?(Array)
  235.                
  236.                 data = data[0].split(",")
  237.                 for d in data
  238.                         next if ret.include?(d) if through
  239.                         ret.push(d.to_i) if type.is_a?(Integer)
  240.                         ret.push(d)      if type.is_a?(String)
  241.                 end
  242.                 return ret
  243.         end
  244.         #--------------------------------------------------------------------------
  245.         # ○ ディレクトリの作成
  246.         #--------------------------------------------------------------------------
  247.         def make_directory(dir_name)
  248.                 Dir::mkdir(dir_name) unless FileTest.exist?(dir_name)
  249.         end
  250.         #--------------------------------------------------------------------------
  251.         # ○ コマンドリスト
  252.         #--------------------------------------------------------------------------
  253.         def make_command(command, src = "", dect = "")
  254.                 src.gsub!("/","\\")
  255.                 dect.gsub!("/","\\")
  256.                 cmd = "#{command} \"#{src}\" \"#{dect}\""
  257.                 return cmd
  258.         end
  259.         #--------------------------------------------------------------------------
  260.         # ○ 素材の拡張子を取得
  261.         #--------------------------------------------------------------------------
  262.         def material_ext(directory, file, direct = false)
  263.                 exts = []
  264.                 exts = [".png",".bmp",".jpg"]               if directory =~ /(.*)Graphics\/(.*)/
  265.                 exts = [".mid",".ogg",".wav",".mp3",".wma"] if directory =~ /(.*)Audio(.*)/
  266.                
  267.                 find_file = sprintf("%s%s", directory, file) unless direct
  268.                 find_file = file if direct
  269.                
  270.                 for ext in exts
  271.                         return ext if File.exist?(sprintf("%s%s", find_file, ext))
  272.                 end
  273.                 return nil
  274.         end
  275.         #--------------------------------------------------------------------------
  276.         # ○ 素材が存在するかチェック
  277.         #--------------------------------------------------------------------------
  278.         def material_exist?(directory, file, direct = false)
  279.                 return false if material_ext(directory, file, direct) == nil
  280.                 return true
  281.         end
  282.         #--------------------------------------------------------------------------
  283.         # ○ ファイルコピー
  284.         #--------------------------------------------------------------------------
  285.         def copy_file(src, dest)
  286.                 srcFile = File.open( src, "rb" )
  287.                 dstFile = File.open( dest, "wb" )
  288.                 dstFile.write( srcFile.read )
  289.                 srcFile.close
  290.                 dstFile.close
  291.         end
  292.         #--------------------------------------------------------------------------
  293.         # ○ ファイルの存在を確認してファイルコピー
  294.         #--------------------------------------------------------------------------
  295.         def material_copy(src, dest, directory)
  296.                 ext = material_ext(directory, src, true)
  297.                 copy_file( src + ext, dest + ext ) if ext != nil
  298.         end
  299.         #--------------------------------------------------------------------------
  300.         # ○ 配列からAudioを作成
  301.         #--------------------------------------------------------------------------
  302.         def set_audio(sound, kind)
  303.                 case kind
  304.                 when "BGM"; audio = RPG::BGM.new
  305.                 when "BGS"; audio = RPG::BGS.new
  306.                 when "ME";  audio = RPG::ME.new
  307.                 when "SE";  audio = RPG::SE.new
  308.                 end
  309.                 audio.name   = sound[0]
  310.                 audio.volume = sound[1]
  311.                 audio.pitch  = sound[2]
  312.                 return audio
  313.         end
  314.         #--------------------------------------------------------------------------
  315.         # ○ 既に準拠識別子を持っているかチェック
  316.         #--------------------------------------------------------------------------
  317.         def chk_rtp(file_name, default)
  318.                 return "" if file_name =~ /^VX_.*/
  319.                 return "" if file_name =~ /^XP_.*/
  320.                 return "" if file_name =~ /^2000_.*/
  321.                 return "" if file_name =~ /^2003_.*/
  322.                 return default
  323.         end
  324.         #--------------------------------------------------------------------------
  325.         # ○ 先頭の $ を切り出す
  326.         #--------------------------------------------------------------------------
  327.         def one_character(file_name)
  328.                 return file_name unless file_name[0] == "$"
  329.                 tmp = file_name.clone
  330.                 tmp[0] = ""
  331.                 return tmp
  332.         end
  333.         #--------------------------------------------------------------------------
  334.         # ○ 配列を入れ替える
  335.         #--------------------------------------------------------------------------
  336.         def change_array(array, index1, index2)
  337.                 tmp = array[index1]
  338.                 array[index1] = array[index2]
  339.                 array[index2] = tmp
  340.                 return array
  341.         end
  342.         #--------------------------------------------------------------------------
  343.         # ○ 移動ルートの作成
  344.         #--------------------------------------------------------------------------
  345.         def create_move_route(repeat, skippable, wait, list)
  346.                 move_route = RPG::MoveRoute.new
  347.                 move_route.repeat    = repeat
  348.                 move_route.skippable = skippable
  349.                 move_route.wait      = wait
  350.                 move_route.list      = list
  351.                 return move_route
  352.         end
  353.         #--------------------------------------------------------------------------
  354.         # ○ 移動ルートコマンドの作成
  355.         #--------------------------------------------------------------------------
  356.         def create_move_command(code, parameters)
  357.                 list = RPG::MoveCommand.new
  358.                 list.code       = code
  359.                 list.parameters = parameters
  360.                 return list
  361.         end
  362.         #--------------------------------------------------------------------------
  363.         # ○ インタプリタ起動用リストの作成
  364.         #--------------------------------------------------------------------------
  365.         def create_list(code, indent, parameters)
  366.                 list            = RPG::EventCommand.new
  367.                 list.code       = code
  368.                 list.indent     = indent
  369.                 list.parameters = parameters
  370.                 return list
  371.         end
  372.         #--------------------------------------------------------------------------
  373.         # ○ クラス名の取得
  374.         #--------------------------------------------------------------------------
  375.         def class_name(class_instance)
  376.                 return class_instance.to_s.split(":")[0].gsub("#<","")
  377.         end
  378.         #--------------------------------------------------------------------------
  379.         # ○ 配列を考慮したsplit
  380.         #--------------------------------------------------------------------------
  381.         def split_array(str)
  382.                 str = convert_escape_characters(str)
  383.                
  384.                 ret       = []
  385.                 tmp_array = str.split(",")
  386.                
  387.                 return strip_array_str(tmp_array) unless str.include?("[")
  388.                 tmp_str   = ""
  389.                 tmp_array.each {|s|
  390.                         if char_in_str(s, "[", "]") && tmp_str.empty?
  391.                                 ret.push(s) unless s =~ /^\[/
  392.                                 ret.push([s[1...s.size-1]]) if s =~ /^\[/
  393.                         else
  394.                                 tmp_str = "#{tmp_str}#{s},"
  395.                                 if char_in_str(tmp_str, "[", "]")
  396.                                         unless tmp_str =~ /^\[/
  397.                                                 ret.push(tmp_str[0...tmp_str.size-1])
  398.                                                 tmp_str = ""
  399.                                         else
  400.                                                 tmp_str = tmp_str[1...tmp_str.size-2]
  401.                                                 tmp_str = split_array(tmp_str) if tmp_str.include?("[")
  402.                                                 tmp_str = tmp_str.split(",") if tmp_str.include?(",")
  403.                                                 ret.push(tmp_str)   if tmp_str.is_a?(Array)
  404.                                                 ret.push([tmp_str]) if !tmp_str.is_a?(Array)
  405.                                                 tmp_str = ""
  406.                                         end
  407.                                 end
  408.                         end
  409.                 }
  410.                 return strip_array_str(ret)
  411.         end
  412.         #--------------------------------------------------------------------------
  413.         # ○ 配列の中の文字列の先頭と末尾の空白を除去
  414.         #--------------------------------------------------------------------------
  415.         def strip_array_str(array, ret = [])
  416.                 array.each {|str| ret.push(strip_array_str(str)) if str.is_a?(Array); next if str.is_a?(Array); ret.push(str.strip) }
  417.                 return ret
  418.         end
  419.         #--------------------------------------------------------------------------
  420.         # ○ 文字列の中に文字が何文字含まれているか調べて同数ならtrueを返す
  421.         #--------------------------------------------------------------------------
  422.         def char_in_str(str, c1, c2)
  423.                 num1 = 0
  424.                 num2 = 0
  425.                 (0...str.size).each {|i| num1 += 1 if str[i] == c1; num2 += 1 if str[i] == c2 }
  426.                 return num1 == num2
  427.         end
  428.         #--------------------------------------------------------------------------
  429.         # ○ 制御文字の変換
  430.         #--------------------------------------------------------------------------
  431.         def convert_escape_characters(text)
  432.                 result = text.to_s.clone
  433.                 result.gsub!(/\\/)                           { "\e" }
  434.                 result.gsub!(/\e\e/)                         { "\\" }
  435.                 result.gsub!(/\eV\[(\d+)\]/i)                { $game_variables[$1.to_i] }
  436.                 result.gsub!(/\eV\[(\d+)\]/i)                { $game_variables[$1.to_i] }
  437.                 result.gsub!(/\eN\[(\d+)\]/i)                { actor_name($1.to_i) }
  438.                 result.gsub!(/\eP\[(\d+)\]/i)                { party_member_name($1.to_i) }
  439.                 result.gsub!(/\eG/i)                         { Vocab::currency_unit }
  440.                 loop { result = result.sub(/<s>(.+?)<\/s>/i) { eval($1) }; break unless $1 }
  441.                 result
  442.         end
  443.         #--------------------------------------------------------------------------
  444.         # ○ アクター n 番の名前を取得
  445.         #--------------------------------------------------------------------------
  446.         def actor_name(n)
  447.                 actor = n >= 1 ? $game_actors[n] : nil
  448.                 actor ? actor.name : ""
  449.         end
  450.         #--------------------------------------------------------------------------
  451.         # ○ パーティメンバー n 番の名前を取得
  452.         #--------------------------------------------------------------------------
  453.         def party_member_name(n)
  454.                 actor = n >= 1 ? $game_party.members[n - 1] : nil
  455.                 actor ? actor.name : ""
  456.         end
  457.         #--------------------------------------------------------------------------
  458.         # ○ 配列を全て整数にする
  459.         #--------------------------------------------------------------------------
  460.         def params_to_i(params)
  461.                 ret = []
  462.                 params.each {|param| ret.push(param.to_i)}
  463.                 return ret
  464.         end
  465.         #--------------------------------------------------------------------------
  466.         # ○ 注釈コマンド定義
  467.         #--------------------------------------------------------------------------
  468.         def define_command
  469.                 @cmd_108 = {}
  470.         end
  471.         #--------------------------------------------------------------------------
  472.         # ○ 注釈コマンド定義取得
  473.         #--------------------------------------------------------------------------
  474.         def cmd_108
  475.                 @cmd_108
  476.         end
  477.         #--------------------------------------------------------------------------
  478.         # ○ フレーム更新
  479.         #--------------------------------------------------------------------------
  480.         def update
  481.         end
  482.         #--------------------------------------------------------------------------
  483.         # ○ 文字の幅と高さを取得
  484.         #--------------------------------------------------------------------------
  485.         def text_size(font, size, text)
  486.                 bitmap = Cache.system("")
  487.                 bitmap.font.name = font
  488.                 bitmap.font.size = size
  489.                 tw = bitmap.text_size(text).width
  490.                 th = bitmap.text_size(text).height
  491.                 bitmap.dispose
  492.                 return [tw, th]
  493.         end
  494.         #--------------------------------------------------------------------------
  495.         # ○ 文字の幅を取得
  496.         #--------------------------------------------------------------------------
  497.         def text_width(font, text)
  498.                 texts = text.split("\n")
  499.                 @max_width = 0
  500.                 texts.each {|text|
  501.                         width = text_size(font.name, font.size, text)[0]
  502.                         @max_width = @max_width < width ? width : @max_width
  503.                 }
  504.                 return @max_width
  505.         end
  506. end
  507. #==============================================================================
  508. # ◆ RGSS3用処理
  509. #==============================================================================
  510. if rgss_version == 3
  511.         #==============================================================================
  512.         # ■ RPG::Tileset
  513.         #==============================================================================
  514.        
  515.         class RPG::Tileset
  516.                 #--------------------------------------------------------------------------
  517.                 # ○ 拡張通行判定
  518.                 #--------------------------------------------------------------------------
  519.                 def ex_flags
  520.                         @ex_flags ||= Table.new(8192)
  521.                         return @ex_flags
  522.                 end
  523.                 #--------------------------------------------------------------------------
  524.                 # ○ 拡張通行判定初期化
  525.                 #--------------------------------------------------------------------------
  526.                 def init_ex_flags
  527.                         @ex_flags = Table.new(8192)
  528.                 end
  529.         end
  530.         #==============================================================================
  531.         # ■ Game_Interpreter
  532.         #------------------------------------------------------------------------------
  533.         #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
  534.         # Game_Troop クラス、Game_Event クラスの内部で使用されます。
  535.         #==============================================================================
  536.        
  537.         class Game_Interpreter
  538.                 #--------------------------------------------------------------------------
  539.                 # ☆ オブジェクト初期化
  540.                 #     depth : ネストの深さ
  541.                 #--------------------------------------------------------------------------
  542.                 alias a1_common_gi_rgss3_initialize initialize
  543.                 def initialize(depth = 0, sub_interpreter = false)
  544.                         @sub_interpreter = sub_interpreter
  545.                         a1_common_gi_rgss3_initialize(depth)
  546.                 end
  547.                 #--------------------------------------------------------------------------
  548.                 # ☆ メッセージ表示がビジー状態の間ウェイト
  549.                 #--------------------------------------------------------------------------
  550.                 alias a1_common_gi_wait_for_message wait_for_message
  551.                 def wait_for_message
  552.                         return if @sub_interpreter
  553.                         a1_common_gi_wait_for_message
  554.                 end
  555.         end
  556.         #==============================================================================
  557.         # ■ Window_Message
  558.         #------------------------------------------------------------------------------
  559.         #  文章表示に使うメッセージウィンドウです。
  560.         #==============================================================================
  561.        
  562.         class Window_Message < Window_Base
  563.                 #--------------------------------------------------------------------------
  564.                 # ☆ 通常文字の処理
  565.                 #--------------------------------------------------------------------------
  566.                 alias a1_common_wm_process_normal_character process_normal_character
  567.                 def process_normal_character(c, pos)
  568.                         wait_for_one_character_before
  569.                         a1_common_wm_process_normal_character(c, pos)
  570.                 end
  571.                 #--------------------------------------------------------------------------
  572.                 # ○ 一文字出力前のウェイト
  573.                 #--------------------------------------------------------------------------
  574.                 def wait_for_one_character_before
  575.                 end
  576.         end
  577.         #==============================================================================
  578.         # ■ RPG::Map
  579.         #==============================================================================
  580.        
  581.         class RPG::Map
  582.                 #--------------------------------------------------------------------------
  583.                 # ○ マップチップを調べるか判定する
  584.                 #--------------------------------------------------------------------------
  585.                 def search_map_chip?
  586.                         return true if $a1_common.note_data(self.note, "マップチップサーチ")
  587.                         return false
  588.                 end
  589.         end
  590.         #==============================================================================
  591.         # ■ Game_Map
  592.         #------------------------------------------------------------------------------
  593.         #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
  594.         # このクラスのインスタンスは $game_map で参照されます。
  595.         #==============================================================================
  596.        
  597.         class Game_Map
  598.                 #--------------------------------------------------------------------------
  599.                 # ☆ セットアップ
  600.                 #--------------------------------------------------------------------------
  601.                 alias a1_common_gm_setup setup
  602.                 def setup(map_id)
  603.                         a1_common_gm_setup(map_id)
  604.                         setup_tileset
  605.                         map_chip_search if search_map_chip?
  606.                 end
  607.                 #--------------------------------------------------------------------------
  608.                 # ★ タイルセットの取得
  609.                 #--------------------------------------------------------------------------
  610.                 def tileset
  611.                         setup_tileset unless @tileset && @now_tileset_id == @tileset_id
  612.                         return @tileset
  613.                 end
  614.                 #--------------------------------------------------------------------------
  615.                 # ○ タイルセットのセットアップ
  616.                 #--------------------------------------------------------------------------
  617.                 def setup_tileset
  618.                         @tileset        = $data_tilesets[@tileset_id].clone
  619.                         @tileset.flags  = $data_tilesets[@tileset_id].flags.clone
  620.                         @now_tileset_id = @tileset_id
  621.                 end
  622.                 #--------------------------------------------------------------------------
  623.                 # ○ マップチップを調べるか判定する
  624.                 #--------------------------------------------------------------------------
  625.                 def search_map_chip?
  626.                         return @map.search_map_chip?
  627.                 end
  628.                 #--------------------------------------------------------------------------
  629.                 # ○ 指定座標の全レイヤーのフラグ判定(イベント含む)
  630.                 #--------------------------------------------------------------------------
  631.                 def all_tiles_flag?(x, y, bit)
  632.                         all_tiles(x, y).any? {|tile_id| tileset.flags[tile_id] & bit != 0 }
  633.                 end
  634.                 #--------------------------------------------------------------------------
  635.                 # ○ 指定座標の全レイヤーの拡張フラグ判定(イベント含む)
  636.                 #--------------------------------------------------------------------------
  637.                 def all_tiles_flag_ex?(x, y, bit)
  638.                         all_tiles(x, y).any? {|tile_id| tileset.ex_flags[tile_id] & bit != 0 }
  639.                 end
  640.                 #--------------------------------------------------------------------------
  641.                 # ○ 指定座標の全レイヤーの拡張フラグ判定
  642.                 #--------------------------------------------------------------------------
  643.                 def layered_tiles_flag_ex?(x, y, bit)
  644.                         layered_tiles(x, y).any? {|tile_id| tileset.ex_flags[tile_id] & bit != 0 }
  645.                 end
  646.                 #--------------------------------------------------------------------------
  647.                 # ○ 地形タグの取得(イベント含む)
  648.                 #--------------------------------------------------------------------------
  649.                 def terrain_tag_all_tailes(x, y)
  650.                         return 0 unless valid?(x, y)
  651.                         all_tiles(x, y).each do |tile_id|
  652.                                 tag = tileset.flags[tile_id] >> 12
  653.                                 return tag if tag > 0
  654.                         end
  655.                         return 0
  656.                 end
  657.         end
  658.         #==============================================================================
  659.         # ■ DataManager
  660.         #------------------------------------------------------------------------------
  661.         #  データベースとゲームオブジェクトを管理するモジュールです。ゲームで使用する
  662.         # ほぼ全てのグローバル変数はこのモジュールで初期化されます。
  663.         #==============================================================================
  664.        
  665.         module DataManager
  666.                 #--------------------------------------------------------------------------
  667.                 # ○ エイリアス用特異メソッド
  668.                 #--------------------------------------------------------------------------
  669.                 class << self
  670.                         alias :a1_common_create_game_objects :create_game_objects
  671.                 end
  672.                 #--------------------------------------------------------------------------
  673.                 # ☆ 各種ゲームオブジェクトの作成
  674.                 #--------------------------------------------------------------------------
  675.                 def self.create_game_objects
  676.                         $a1_common ||= A1_System::CommonModule.new
  677.                         a1_common_create_game_objects
  678.                 end
  679.         end
  680.         #==============================================================================
  681.         # ■ Scene_Base
  682.         #------------------------------------------------------------------------------
  683.         #  ゲーム中の全てのシーンのスーパークラスです。
  684.         #==============================================================================
  685.        
  686.         class Scene_Base
  687.                 #--------------------------------------------------------------------------
  688.                 # ☆ フレーム更新(基本)
  689.                 #--------------------------------------------------------------------------
  690.                 alias a1_common_sb_update_basic update_basic
  691.                 def update_basic
  692.                         a1_common_sb_update_basic
  693.                         $a1_common.update
  694.                 end
  695.                 #--------------------------------------------------------------------------
  696.                 # ○ 指定のウィンドウが開いている間ウェイト
  697.                 #--------------------------------------------------------------------------
  698.                 def wait_for_window_open(window)
  699.                         update_basic until window.openness == 0
  700.                 end
  701.         end
  702.         #==============================================================================
  703.         # ■ Window_Base
  704.         #------------------------------------------------------------------------------
  705.         #  ゲーム中の全てのウィンドウのスーパークラスです。
  706.         #==============================================================================
  707.        
  708.         class Window_Base < Window
  709.                 #--------------------------------------------------------------------------
  710.                 # ★ 制御文字の事前変換
  711.                 #    実際の描画を始める前に、原則として文字列に変わるものだけを置き換える。
  712.                 #    文字「\」はエスケープ文字(\e)に変換。
  713.                 #--------------------------------------------------------------------------
  714.                 def convert_escape_characters(text)
  715.                         return $a1_common.convert_escape_characters(text)
  716.                 end
  717.         end
  718.         #==============================================================================
  719.         # ◆ RGSS2用処理
  720.         #==============================================================================
  721. elsif rgss_version == 2
  722.         #==============================================================================
  723.         # ■ Window
  724.         #==============================================================================
  725.        
  726.         class Window
  727.                 #--------------------------------------------------------------------------
  728.                 # ○ ウィンドウが開いている?
  729.                 #--------------------------------------------------------------------------
  730.                 def open?
  731.                         return self.openness == 255
  732.                 end
  733.                 #--------------------------------------------------------------------------
  734.                 # ○ ウィンドウが閉じている?
  735.                 #--------------------------------------------------------------------------
  736.                 def close?
  737.                         return self.openness == 0
  738.                 end
  739.         end
  740.         #==============================================================================
  741.         # ■ Cache
  742.         #------------------------------------------------------------------------------
  743.         #  各種グラフィックを読み込み、Bitmap オブジェクトを作成、保持するモジュール
  744.         # です。読み込みの高速化とメモリ節約のため、作成した Bitmap オブジェクトを内部
  745.         # のハッシュに保存し、同じビットマップが再度要求されたときに既存のオブジェクト
  746.         # を返すようになっています。
  747.         #==============================================================================
  748.        
  749.         module Cache
  750.                 #--------------------------------------------------------------------------
  751.                 # ○ キャッシュ存在チェック
  752.                 #--------------------------------------------------------------------------
  753.                 def self.include?(key)
  754.                         @cache[key] && !@cache[key].disposed?
  755.                 end
  756.         end
  757.         #==============================================================================
  758.         # ■ Game_Interpreter
  759.         #------------------------------------------------------------------------------
  760.         #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
  761.         # Game_Troop クラス、Game_Event クラスの内部で使用されます。
  762.         #==============================================================================
  763.        
  764.         class Game_Interpreter
  765.                 #--------------------------------------------------------------------------
  766.                 # ○ 注釈
  767.                 #--------------------------------------------------------------------------
  768.                 def command_108
  769.                         @comments = [@params[0]]
  770.                         while next_event_code == 408
  771.                                 @index += 1
  772.                                 @comments.push(@list[@index].parameters[0])
  773.                         end
  774.                 end
  775.                 #--------------------------------------------------------------------------
  776.                 # ★ イベントコマンドの実行
  777.                 #--------------------------------------------------------------------------
  778.                 def execute_command
  779.                         return rgss3_execute_command unless @index >= @list.size-1
  780.                         command_end
  781.                         return true
  782.                 end
  783.                 #--------------------------------------------------------------------------
  784.                 # ○ RGSS3風「イベントコマンドの実行」
  785.                 #--------------------------------------------------------------------------
  786.                 def rgss3_execute_command
  787.                         command = @list[@index]
  788.                         @params = command.parameters
  789.                         @indent = command.indent
  790.                         method_name = "command_#{command.code}"
  791.                         send(method_name) if respond_to?(method_name)
  792.                 end
  793.                 #--------------------------------------------------------------------------
  794.                 # ○ 次のイベントコマンドのコードを取得
  795.                 #--------------------------------------------------------------------------
  796.                 def next_event_code
  797.                         @list[@index + 1].code
  798.                 end
  799.         end
  800.         #==============================================================================
  801.         # ■ Game_Map
  802.         #------------------------------------------------------------------------------
  803.         #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
  804.         # このクラスのインスタンスは $game_map で参照されます。
  805.         #==============================================================================
  806.        
  807.         class Game_Map
  808.                 #--------------------------------------------------------------------------
  809.                 # ○ マップチップを調べるか判定する
  810.                 #--------------------------------------------------------------------------
  811.                 def search_map_chip?
  812.                         return $data_map_infos[@map_id].name =~ /\[サーチ\]/
  813.                 end
  814.                 #--------------------------------------------------------------------------
  815.                 # ○ 指定座標に存在するタイル扱いイベント(すり抜け以外)の配列取得
  816.                 #--------------------------------------------------------------------------
  817.                 def tile_events_xy(x, y)
  818.                         @tile_events.select {|event| event.pos_nt?(x, y) }
  819.                 end
  820.                 #--------------------------------------------------------------------------
  821.                 # ○ タイル扱いイベントの配列をリフレッシュ
  822.                 #--------------------------------------------------------------------------
  823.                 def refresh_tile_events
  824.                         @tile_events = @events.values.select {|event| event.tile? }
  825.                 end
  826.         end
  827.         #==============================================================================
  828.         # ■ Game_Character
  829.         #------------------------------------------------------------------------------
  830.         #  キャラクターを扱うクラスです。このクラスは Game_Player クラスと Game_Event
  831.         # クラスのスーパークラスとして使用されます。
  832.         #==============================================================================
  833.        
  834.         class Game_Character
  835.                 #--------------------------------------------------------------------------
  836.                 # ○ タイル判定
  837.                 #--------------------------------------------------------------------------
  838.                 def tile?
  839.                         @tile_id > 0 && @priority_type == 0
  840.                 end
  841.         end
  842.         #==============================================================================
  843.         # ■ Scene_Title
  844.         #------------------------------------------------------------------------------
  845.         #  タイトル画面の処理を行うクラスです。
  846.         #==============================================================================
  847.        
  848.         class Scene_Title < Scene_Base
  849.                 #--------------------------------------------------------------------------
  850.                 # ☆ データベースのロード
  851.                 #--------------------------------------------------------------------------
  852.                 alias a1_common_st_load_database load_database
  853.                 def load_database
  854.                         a1_common_st_load_database
  855.                         $data_map_infos = load_data("Data/MapInfos.rvdata")
  856.                 end
  857.                 #--------------------------------------------------------------------------
  858.                 # ☆ 各種ゲームオブジェクトの作成
  859.                 #--------------------------------------------------------------------------
  860.                 alias a1_common_st_create_game_objects create_game_objects
  861.                 def create_game_objects
  862.                         $a1_common ||= A1_System::CommonModule.new
  863.                         a1_common_st_create_game_objects
  864.                 end
  865.         end
  866.         #==============================================================================
  867.         # ◆ RGSS用処理
  868.         #==============================================================================
  869. elsif rgss_version == 1
  870. end
  871. #==============================================================================
  872. # ■ Cache
  873. #------------------------------------------------------------------------------
  874. #  各種グラフィックを読み込み、Bitmap オブジェクトを作成、保持するモジュール
  875. # です。読み込みの高速化とメモリ節約のため、作成した Bitmap オブジェクトを内部
  876. # のハッシュに保存し、同じビットマップが再度要求されたときに既存のオブジェクト
  877. # を返すようになっています。
  878. #==============================================================================

  879. module Cache
  880.         #--------------------------------------------------------------------------
  881.         # ○ 拡大縮小したビットマップのロード
  882.         #--------------------------------------------------------------------------
  883.         def self.load_resize_bitmap(load_path, key, resize = nil)
  884.                 @cache ||= {}
  885.                 key = load_path if key == nil
  886.                 return @cache[key] if include?(key)
  887.                
  888.                 @cache[key] = Bitmap.new(load_path)
  889.                 return @cache[key] if resize == nil
  890.                 return @cache[key] if @cache[key].width == resize[0] and @cache[key].height == resize[1]
  891.                
  892.                 info = calc_size(resize, key)
  893.                 return resize_bitmap(@cache[key], info[0], info[1], key)
  894.         end
  895.         #--------------------------------------------------------------------------
  896.         # ○ 拡大縮小した色相変化済みビットマップを作成/取得
  897.         #--------------------------------------------------------------------------
  898.         def self.load_resize_hue_changed_bitmap(load_path, path, hue, resize)
  899.                 key = [path, hue]
  900.                 return @cache[key] if include?(key)
  901.                
  902.                 @cache[key] = load_resize_bitmap(load_path, path, resize).clone
  903.                 @cache[key].hue_change(hue)
  904.                 return @cache[key]
  905.         end
  906.         #--------------------------------------------------------------------------
  907.         # ○ リサイズするサイズを取得
  908.         #--------------------------------------------------------------------------
  909.         def self.calc_size(resize, key)
  910.                 width  = resize[0]
  911.                 width  = @cache[key].width * width.abs if width < 0
  912.                 height = resize[1]
  913.                 height = @cache[key].height * height.abs if height < 0
  914.                 height = Integer(@cache[key].height * (width.to_f / @cache[key].width.to_f)) if height == 0
  915.                 return [width, height]
  916.         end
  917.         #--------------------------------------------------------------------------
  918.         # ○ ビットマップの拡大縮小
  919.         #--------------------------------------------------------------------------
  920.         def self.resize_bitmap(bitmap, width, height, key)
  921.                 resize = Bitmap.new(width, height)
  922.                 resize.stretch_blt(resize.rect, bitmap, bitmap.rect)
  923.                 @cache[key] = resize
  924.                 return resize
  925.         end
  926.         #--------------------------------------------------------------------------
  927.         # ○ テキストビットマップの取得
  928.         #--------------------------------------------------------------------------
  929.         def self.text_picture(text, font)
  930.                 load_text_bitmap(text, font)
  931.         end
  932.         #--------------------------------------------------------------------------
  933.         # ○ フォントのキーを作成
  934.         #--------------------------------------------------------------------------
  935.         def self.make_font_key(text, font)
  936.                 [text, font.name, font.size, font.bold, font.italic, font.outline, font.shadow, font.color.to_s, font.out_color.to_s]
  937.         end
  938.         #--------------------------------------------------------------------------
  939.         # ○ テキストビットマップの作成
  940.         #--------------------------------------------------------------------------
  941.         def self.load_text_bitmap(text, font)
  942.                 @cache ||= {}
  943.                 key = make_font_key(text, font)
  944.                 return @cache[key] if include?(key)
  945.                
  946.                 # 計算用ダミービットマップ
  947.                 bitmap = Cache.system("")
  948.                 bitmap.font = font
  949.                 tw = bitmap.text_size(text).width + 8
  950.                
  951.                 # ビットマップ作成
  952.                 bitmap = Bitmap.new(tw, bitmap.font.size + 4)
  953.                 bitmap.font = font
  954.                 bitmap.draw_text(0, 0, bitmap.width, bitmap.height, text, 1)
  955.                
  956.                 @cache[key] = bitmap
  957.                 return @cache[key]
  958.         end
  959. end
  960. #==============================================================================
  961. # ■ Game_Interpreter
  962. #------------------------------------------------------------------------------
  963. #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
  964. # Game_Troop クラス、Game_Event クラスの内部で使用されます。
  965. #==============================================================================

  966. class Game_Interpreter
  967.         #--------------------------------------------------------------------------
  968.         # ○ 注釈
  969.         #--------------------------------------------------------------------------
  970.         alias a1_common_command_108 command_108
  971.         def command_108
  972.                 a1_common_command_108
  973.                 proc_comment(@comments)
  974.         end
  975.         #--------------------------------------------------------------------------
  976.         # ○ 注釈の処理
  977.         #--------------------------------------------------------------------------
  978.         def proc_comment(comments)
  979.                 param = ""
  980.                 comments.each {|comment| param += comment }
  981.                 params = param.sub(/^(\S+)/, "")
  982.                 command = $1
  983.                 comment_parameters = $a1_common.split_array(params) if params
  984.                 proc_comment_command(command, comment_parameters)
  985.         end
  986.         #--------------------------------------------------------------------------
  987.         # ○ 注釈の実行
  988.         #--------------------------------------------------------------------------
  989.         def proc_comment_command(command, params)
  990.                 cmd_108 = $a1_common.cmd_108[command]
  991.                 method(cmd_108).call(params) if cmd_108 != nil
  992.         end
  993.         #--------------------------------------------------------------------------
  994.         # ○ 前のイベントコマンドを取得
  995.         #--------------------------------------------------------------------------
  996.         def prev_event
  997.                 @list[@index - 1]
  998.         end
  999. end
  1000. #==============================================================================
  1001. # ■ Game_Map
  1002. #------------------------------------------------------------------------------
  1003. #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
  1004. # このクラスのインスタンスは $game_map で参照されます。
  1005. #==============================================================================

  1006. class Game_Map
  1007.         #--------------------------------------------------------------------------
  1008.         # ○ 全マップチップを調べる
  1009.         #--------------------------------------------------------------------------
  1010.         def map_chip_search
  1011.                 tileset.init_ex_flags
  1012.                 ([email protected]).each {|x| map_chip_search_y(x) }
  1013.         end
  1014.         #--------------------------------------------------------------------------
  1015.         # ○ x座標にあるy座標のマップチップを調べる
  1016.         #--------------------------------------------------------------------------
  1017.         def map_chip_search_y(x)
  1018.                 ([email protected]).each {|y| map_pos_proc(x, y); map_chip_search_z(x, y) }
  1019.         end
  1020.         #--------------------------------------------------------------------------
  1021.         # ○ x,y座標にあるz座標のマップチップを調べる
  1022.         #--------------------------------------------------------------------------
  1023.         def map_chip_search_z(x, y)
  1024.                 ([email protected]).each {|z| map_chip_proc(x, y, z) }
  1025.                 tile_events_xy(x, y).collect {|ev| tile_event_proc(ev.tile_id) }
  1026.         end
  1027.         #--------------------------------------------------------------------------
  1028.         # ○ 座標に対して処理を行う
  1029.         #--------------------------------------------------------------------------
  1030.         def map_pos_proc(x, y)
  1031.         end
  1032.         #--------------------------------------------------------------------------
  1033.         # ○ マップチップに対して処理を行う
  1034.         #--------------------------------------------------------------------------
  1035.         def map_chip_proc(x, y, z)
  1036.         end
  1037.         #--------------------------------------------------------------------------
  1038.         # ○ タイルのイベントに対して処理を行う
  1039.         #--------------------------------------------------------------------------
  1040.         def tile_event_proc(tile_id)
  1041.         end
  1042. end
  1043. #==============================================================================
  1044. # ■ Window_Base
  1045. #------------------------------------------------------------------------------
  1046. #  ゲーム中の全てのウィンドウのスーパークラスです。
  1047. #==============================================================================

  1048. class Window_Base < Window
  1049.         #--------------------------------------------------------------------------
  1050.         # ○ 入力を受け付けるか?
  1051.         #--------------------------------------------------------------------------
  1052.         def can_input?
  1053.                 @can_input
  1054.         end
  1055.         #--------------------------------------------------------------------------
  1056.         # ○ 入力受け付け設定
  1057.         #--------------------------------------------------------------------------
  1058.         def can_input=(flag)
  1059.                 @can_input = flag
  1060.         end
  1061. end
  1062. #==============================================================================
  1063. # ■ Bitmap
  1064. #==============================================================================

  1065. class Bitmap
  1066.         #--------------------------------------------------------------------------
  1067.         # ○ 文字縁取り描画
  1068.         #--------------------------------------------------------------------------
  1069.         def draw_text_f(x, y, width, height, str, align = 0, color = Color.new(64,32,128))
  1070.                 shadow = self.font.shadow
  1071.                 b_color = self.font.color.dup
  1072.                 font.shadow = false
  1073.                 font.color = color
  1074.                 draw_text(x + 1, y, width, height, str, align)
  1075.                 draw_text(x - 1, y, width, height, str, align)
  1076.                 draw_text(x, y + 1, width, height, str, align)
  1077.                 draw_text(x, y - 1, width, height, str, align)
  1078.                 font.color = b_color
  1079.                 draw_text(x, y, width, height, str, align)
  1080.                 font.shadow = shadow
  1081.         end
  1082.         #--------------------------------------------------------------------------
  1083.         # ○ 文字縁取り描画の矩形を取得
  1084.         #--------------------------------------------------------------------------
  1085.         def draw_text_f_rect(r, str, align = 0, color = Color.new(64,32,128))
  1086.                 draw_text_f(r.x, r.y, r.width, r.height, str, align = 0, color)
  1087.         end
  1088. end
复制代码
  1. #===========================================================================
  2. # ◆ A1 Scripts ◆
  3. #    拡張選択肢(RGSS3)
  4. #
  5. # バージョン   : 1.10 (2012/01/02)
  6. # 作者         : A1
  7. # URL     : http://a1tktk.web.fc2.com/
  8. #---------------------------------------------------------------------------
  9. # 機能:
  10. # ・多くの選択項目を表示する選択肢です
  11. #---------------------------------------------------------------------------
  12. # 更新履歴   :2011/12/15 Ver1.00 リリース
  13. #            :2012/01/01 Ver1.01 キャンセル時の不具合を修正
  14. #            :2012/01/02 Ver1.10 A1共通スクリプトVer3.30対応
  15. #            :2012/01/09 Ver1.20 表示位置指定機能追加
  16. #            :2012/01/09 Ver1.20 拡張選択肢の選択肢に配列対応
  17. #---------------------------------------------------------------------------
  18. # 設置場所      
  19. #  A1共通スクリプトより下
  20. #
  21. # 必要スクリプト
  22. #    A1共通スクリプト
  23. #---------------------------------------------------------------------------
  24. # 使い方
  25. # イベントコマンド「注釈」に記述
  26. #
  27. #   拡張選択肢 c,v,s1,s2,s3…
  28. #   拡張選択肢 c,v,[s1,s2,s3…],x,y
  29. #              c:キャンセル時に選択されるIndex
  30. #              v:選択した結果が格納される変数番号
  31. #              s:選択肢文字列
  32. #               x:選択肢ウィンドウの表示x座標
  33. #                  左・中・右 もしくは 数値で記述
  34. #               y:選択肢ウィンドウの表示y座標
  35. #                  上・中・下 もしくは 数値で記述
  36. #
  37. #               変数番号を省略した場合でも
  38. #               $game_message.choice_index に結果が格納されます
  39. #
  40. #               キャンセル時に選択されるIndexを -1 にすると
  41. #               キャンセル無効になります
  42. #
  43. #    拡張選択肢の選択肢に配列対応
  44. #    [ ] で囲んだ文字列が選択肢になります
  45. #
  46. #    表示位置指定機能は、選択肢を配列にすることで有効になります
  47. #
  48. #    当スクリプト実行直後に文章コマンドが存在すると
  49. #    文章コマンドを先に実行して、拡張選択肢を表示します
  50. #==============================================================================
  51. $imported ||= {}
  52. $imported["A1_ExChoice"] = true
  53. if $imported["A1_Common_Script"]
  54. old_common_script("拡張選択肢", "3.30") if common_version < 3.30
  55. #==============================================================================
  56. # ■ Game_Message
  57. #------------------------------------------------------------------------------
  58. #  文章や選択肢などを表示するメッセージウィンドウの状態を扱うクラスです。この
  59. # クラスのインスタンスは $game_message で参照されます。
  60. #==============================================================================

  61. class Game_Message
  62.   #--------------------------------------------------------------------------
  63.   # ○ 公開インスタンス変数
  64.   #--------------------------------------------------------------------------
  65.   attr_accessor :choice_index             # 選択肢のIndex
  66.   attr_accessor :choice_cancel            # 選択肢のキャンセル
  67.   attr_accessor :choice_x                 # 選択肢のx座標
  68.   attr_accessor :choice_y                 # 選択肢のy座標
  69.   #--------------------------------------------------------------------------
  70.   # ☆ クリア
  71.   #--------------------------------------------------------------------------
  72.   alias a1_ex_choice_mg_initialize initialize
  73.   def initialize
  74.     a1_ex_choice_mg_initialize
  75.     @choice_index  = -1
  76.     @choice_cancel = false
  77.     @choice_x      = nil
  78.     @choice_y      = nil
  79.   end
  80. end
  81. #==============================================================================
  82. # ■ Window_ChoiceList
  83. #------------------------------------------------------------------------------
  84. #  イベントコマンド[選択肢の表示]に使用するウィンドウです。
  85. #==============================================================================

  86. class Window_ChoiceList < Window_Command
  87.   #--------------------------------------------------------------------------
  88.   # ☆ ウィンドウ位置の更新
  89.   #--------------------------------------------------------------------------
  90.   alias a1_ex_choice_wc_update_placement update_placement
  91.   def update_placement
  92.     a1_ex_choice_wc_update_placement
  93.     setup_x
  94.     setup_y
  95.     fit_height
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ○ x座標のセットアップ
  99.   #--------------------------------------------------------------------------
  100.   def setup_x
  101.     return if !$game_message.choice_x || $game_message.choice_x.empty?
  102.     return self.x = 0 if $game_message.choice_x == "左"
  103.     return self.x = (Graphics.width - self.width) / 2 if $game_message.choice_x == "中"
  104.     return if $game_message.choice_x == "右"
  105.     self.x = $game_message.choice_x.to_i
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ○ y座標のセットアップ
  109.   #--------------------------------------------------------------------------
  110.   def setup_y
  111.     return if !$game_message.choice_y || $game_message.choice_y.empty?
  112.     return self.y = 0 if $game_message.choice_x == "上"
  113.     return self.y = (Graphics.height - self.height) / 2 if $game_message.choice_y == "中"
  114.     return self.y = Graphics.height - self.height if $game_message.choice_y == "下"
  115.     self.y = $game_message.choice_y.to_i
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ○ 高さの調整
  119.   #--------------------------------------------------------------------------
  120.   def fit_height
  121.     if self.y < 0
  122.       self.y = 0
  123.       self.height = Graphics.height - @message_window.height
  124.     end
  125.     if self.y + self.height > Graphics.height
  126.       self.height = Graphics.height - self.y
  127.     end
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # ☆ 決定ハンドラの呼び出し
  131.   #--------------------------------------------------------------------------
  132.   alias a1_ex_choice_wc_call_ok_handler call_ok_handler
  133.   def call_ok_handler
  134.     $game_message.choice_cancel = false
  135.     $game_message.choice_index = index
  136.     a1_ex_choice_wc_call_ok_handler
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ☆ キャンセルハンドラの呼び出し
  140.   #--------------------------------------------------------------------------
  141.   alias a1_ex_choice_wc_call_cancel_handler call_cancel_handler
  142.   def call_cancel_handler
  143.     $game_message.choice_cancel = true
  144.     a1_ex_choice_wc_call_cancel_handler
  145.   end
  146. end
  147. #==============================================================================
  148. # ■ A1_System::CommonModule
  149. #==============================================================================

  150. class A1_System::CommonModule
  151.   #--------------------------------------------------------------------------
  152.   # ☆ 注釈コマンド定義
  153.   #--------------------------------------------------------------------------
  154.   alias a1_ex_choice_define_command define_command
  155.   def define_command
  156.     a1_ex_choice_define_command
  157.     @cmd_108["choice"] = :a1_ex_choice
  158.   end
  159. end
  160. #==============================================================================
  161. # ■ Game_Interpreter
  162. #------------------------------------------------------------------------------
  163. #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
  164. # Game_Troop クラス、Game_Event クラスの内部で使用されます。
  165. #==============================================================================

  166. class Game_Interpreter
  167.   
  168.   #--------------------------------------------------------------------------
  169.   # ○ 拡張選択肢付き文章の表示
  170.   #--------------------------------------------------------------------------
  171.   def ex_choice_with_message(choice_param, cancel_index)
  172.     wait_for_message
  173.     @index += 1
  174.     params = @list[@index].parameters
  175.     $game_message.face_name = params[0]
  176.     $game_message.face_index = params[1]
  177.     $game_message.background = params[2]
  178.     $game_message.position = params[3]
  179.     while next_event_code == 401       # 文章データ
  180.       @index += 1
  181.       $game_message.add(@list[@index].parameters[0])
  182.     end
  183.     ex_choice(choice_param, cancel_index)
  184.     wait_for_message
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ○ 拡張選択肢の処理
  188.   #--------------------------------------------------------------------------
  189.   def ex_choice(choice_param, cancel_index)
  190.     setup_choices([choice_param, cancel_index])
  191.     Fiber.yield while $game_message.choice?
  192.     unless @variable_no.empty?
  193.       return $game_variables[@variable_no.to_i] = $game_message.choice_index unless $game_message.choice_cancel
  194.       $game_variables[@variable_no.to_i] = cancel_index - 1
  195.     end
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # ○ 拡張選択肢
  199.   #--------------------------------------------------------------------------
  200.   def a1_ex_choice(params)
  201.     cancel_index = params[0].to_i + 1
  202.     params.delete_at(0)
  203.     @variable_no = params[0]
  204.     params.delete_at(0)
  205.     return setup_choice_param(cancel_index, params) unless params[0].is_a?(Array)
  206.     $game_message.choice_x = params[1]
  207.     $game_message.choice_y = params[2]
  208.     setup_choice_param(cancel_index, params[0])
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ○ 選択肢のセットアップ
  212.   #--------------------------------------------------------------------------
  213.   def setup_choice_param(cancel_index, params)
  214.     choice_param = params
  215.     choice_param = $a1_common.send_method($1) if params[0] =~ /@m\((.+)\)/
  216.     return ex_choice_with_message(choice_param, cancel_index) if next_event_code == 101
  217.     ex_choice(choice_param, cancel_index)
  218.   end
  219. end
  220. end
复制代码
这三段粘贴在Main之前,在事件的备注栏里填写:[choice 0,1,[XXX,XXX,XXX,XXX,XXX,XXX],右,中]~OK

额...这是多选择项的脚本...不好意思发错了呵呵...
作者: zhangbanxian    时间: 2012-5-2 12:41
话说bitmap的draw-text里应该有对齐方式吧,你查下f1呗,我记得不是很清楚,没的话就只有按字宽算坐标了- -b
作者: 狂歌天涯    时间: 2012-5-2 18:12
本帖最后由 狂歌天涯 于 2012-5-2 18:13 编辑

Window_Message脚本里200多行的地方有一个
● 获取对齐方向
  #--------------------------------------------------------------------------
  def alignment
    return 1
  end
你改一下这个里面的数字试试  0或者1或者2
要是没有的话, 你自己加上试试,我感觉应该可以的。
在单位的电脑上,没软件,所以我自己没试。
作者: zeldafd    时间: 2012-5-3 01:14
雖然不懂,但用ace來弄arpg,期待啊~
作者: 布里蓝    时间: 2012-5-5 00:49
对了,用板凳的也可以啊,也就是只有1个选项嘛,这样也很方便啊
作者: 神秘影子    时间: 2012-5-5 09:07
我觉得你用图片就可以
作者: tang19990919    时间: 2012-5-9 23:14
板凳发的那个脚本中choice是固定的,
0是固定的,1是变量编号,[XXX,XXX,XXX,XXX,XXX,XXX]是多选项,每个选项用半角逗号隔开
右,中前者是横轴位置,后者是竖轴位置,也可以只写前者但不能只写后者。
使用此脚本,以上语句必须使用注释。
然后使用变量条件分歧,从0开始,0对应1选项,1对应2选项,以此类推……
最后的那个条件分歧不勾选【不符合分歧,否则...】选项。
还是给个图片吧:





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1