#============================================================================== # ¡á Window_Message_Plus v3.1 ¼öÁ¤¹öÀü:psh4989(³×À̹ö wmftit) # 128x128 ÇÈÃÄ ¼öÁ¤ : killarot(³×À̹ö dust_mite) #============================================================================== class Window_Message < Window_Selectable # ÇÑ ±ÛÀÚ¾¿ ¹¦»ç DEFAULT_TYPING_ENABLE = true # false·Î Çϸé(ÀÚ) ¼ø°£ Ç¥½Ã #-------------------------------------------------------------------------- # ¡Ü ¿ÀºêÁ§Æ® ÃʱâÈ­ #-------------------------------------------------------------------------- alias xrxs9_initialize initialize def initialize xrxs9_initialize # Àç»ý »ç¿îµå¸íÀÌ ¾ø´Â °æ¿ì´Â""À¸·Î ÇÏ´Â if $soundname_on_speak == nil then $soundname_on_speak = "" end # ¿ÜÀÚ ÆÄÀÏ Æнº ¼³Á¤ $gaiji_file = "./Graphics/Gaiji/sample.png" # ¿ÜÀÚ µ¥ÀÌÅÍ Àбâ if FileTest.exist?($gaiji_file) @gaiji_cache = Bitmap.new($gaiji_file) else @gaigi_cache = nil end # ¹®ÀÚ Åõ°ú Àü¼Û¿ë ¹öÆÛ @opacity_text_buf = Bitmap.new(32, 32) end #-------------------------------------------------------------------------- # ¡Ü ¸Þ¼¼Áö Á¾·á ó¸® #-------------------------------------------------------------------------- alias xrxs9_terminate_message terminate_message def terminate_message if @name_window_frame != nil @name_window_frame.dispose @name_window_frame = nil end if @name_window_text != nil @name_window_text.dispose @name_window_text = nil end xrxs9_terminate_message end #-------------------------------------------------------------------------- # ¡Ü ¸®ÇÁ·¹½¬ #-------------------------------------------------------------------------- def refresh # ÃʱâÈ­ self.contents.clear self.contents.font.color = normal_color self.contents.font.size = Font.default_size @x = @y = @max_x = @max_y = @indent = @lines = 0 @face_indent = 0 @opacity = 255 @cursor_width = 0 @write_speed = 0 @write_wait = 0 @mid_stop = false @face_file = nil # @popchar °¡ -2 ÀÇ °æ¿ì , Ç¥ÁØ À§Ä¡. -1ÀÇ °æ¿ì , ¹®ÀÚ ¼¾ÅÍ. # 0ÀÌ»óÀÇ °æ¿ì ij¸¯ÅÍ ÆË. 0(Àº)´Â ÁÖÀΰø ,1ÀÌÈÄ´Â À̺¥Æ®. @popchar = -2 # ¼±ÅûçÇ×À̶ó¸é Àε§Æ®¸¦ ½Ç½ÃÇÏ´Â if $game_temp.choice_start == 0 @x = 8 end # Ç¥½Ã ±â´Ù¸®´Â ¸Þ¼¼Áö°¡ ÀÖ´Â °æ¿ì if $game_temp.message_text != nil @now_text = $game_temp.message_text # ¾ó±¼ Ç¥½Ã ÁöÁ¤\FÀÌ ÀÖÀ»±î? if (/\A\\[Ff]\[(.+?)\]/.match(@now_text))!=nil then # ¾ó±¼ ±×¶ó¸¦ ¹¦È­ @face_file = $1 + ".png" self.contents.blt(0, 1, RPG::Cache.picture(@face_file), Rect.new(0, 0, 128, 128)) # ÀüÇà 128Çȼ¿ÀÇ Àε§Æ®¸¦ ³Ö´Â´Ù. @x = @face_indent = 128 @now_text.gsub!(/\\[Ff]\[(.*?)\]/) { "" } end # Á¦¾î ¹®ÀÚ Ã³¸® begin last_text = @now_text.clone # \V¸¦ µ¶ÀÚ ·çƾÀ¸·Î º¯°æ(Ãß°¡ ºÎºÐ) @now_text.gsub!(/\\[Vv]\[([IiWwAaSs]?)([0-9]+)\]/) { convart_value($1, $2.to_i) } end until @now_text == last_text @now_text.gsub!(/\\[Nn]\[([0-9]+)\]/) do $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "" end # \nameÀÌ ÀÖÀ»±î? name_window_set = false if (/\\[Nn]ame\[(.+?)\]/.match(@now_text)) != nil # °ªÀ» ¼³Á¤ name_window_set = true name_text = $1 # \name[]ºÎºÐÀ» »èÁ¦ @now_text.sub!(/\\[Nn]ame\[(.*?)\]/) { "" } end # À©µµ¿ì À§Ä¡ ÆÇÁ¤ if (/\\[Pp]\[([-1,0-9]+)\]/.match(@now_text))!=nil then @popchar = $1.to_i if @popchar == -1 @x = @indent = 48 @y = 4 end @now_text.gsub!(/\\[Pp]\[([-1,0-9]+)\]/) { "" } end # À©µµ¿ìÆøÀÇ Ãëµæ @max_choice_x = 0 if @popchar >= 0 @text_save = @now_text.clone @max_x = 0 @max_y = 4 for i in 0..3 line = @now_text.split(/\n/)[3-i] @max_y -= 1 if line == nil and @max_y <= 4-i next if line == nil line.gsub!(/\\\w\[(\w+)\]/) { "" } cx = contents.text_size(line).width @max_x = cx if cx > @max_x if i >= $game_temp.choice_start @max_choice_x = cx if cx > @max_choice_x end end self.width = @max_x + 32 + @face_indent self.height = (@max_y - 1) * 32 + 64 @max_choice_x -= 68 @max_choice_x -= @face_indent*216/128 else @max_x = self.width - 32 - @face_indent for i in 0..3 line = @now_text.split(/\n/)[i] next if line == nil line.gsub!(/\\\w\[(\w+)\]/) { "" } cx = contents.text_size(line).width if i >= $game_temp.choice_start @max_choice_x = cx if cx > @max_choice_x end end @max_choice_x += 8 end # ¼±ÅûçÇ×À̶ó¸é Ä¿¼­ÀÇ ÆøÀ» °»½Å @cursor_width = 0 #if @lines >= $game_temp.choice_start # @cursor_width = [@cursor_width, @max_choice_x - @face_indent].max #end # ÆíÀÇ»ó ,"\\\\" À» "\000" ¿¡ º¯È¯ @now_text.gsub!(/\\\\/) { "\000" } # "\\C" À» "\001" ¿¡ ,"\\G" ¸¦ "\002" ¿¡ , # "\\S" ¸¦ "\003" ¿¡ ,"\\A" ¸¦ "\004" ¿¡ º¯È¯ @now_text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" } @now_text.gsub!(/\\[Gg]/) { "\002" } @now_text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "\003[#{$1}]" } @now_text.gsub!(/\\[Aa]\[(.*?)\]/) { "\004[#{$1}]" } @now_text.gsub!(/\\[.]/) { "\005" } @now_text.gsub!(/\\[|]/) { "\006" } # °æÇÕ Çϸé(ÀÚ) ¹«¾ùÀΰ¡ °ÅºÏÇϱ⠶§¹®¿¡ ,\016ÀÌÈĸ¦ »ç¿ëÇÏ´Â @now_text.gsub!(/\\[>]/) { "\016" } @now_text.gsub!(/\\[<]/) { "\017" } @now_text.gsub!(/\\[!]/) { "\020" } @now_text.gsub!(/\\[~]/) { "\021" } @now_text.gsub!(/\\[Ee]\[([0-9]+)\]/) { "\022[#{$1}]" } # Àε§Æ® ¼³Á¤(Ãß°¡ ºÎºÐ) @now_text.gsub!(/\\[Ii]/) { "\023" } # ÅؽºÆ® Åõ°úÀ² ÁöÁ¤(Ãß°¡ ºÎºÐ) @now_text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\024[#{$1}]" } # ÅؽºÆ® »çÀÌÁî ÁöÁ¤(Ãß°¡ ºÎºÐ) @now_text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "\025[#{$1}]" } # °ø¹é »ðÀÔ(Ãß°¡ ºÎºÐ) @now_text.gsub!(/\\[Bb]\[([0-9]+)\]/) { "\026[#{$1}]" } # ·çºñ Ç¥½Ã(Ãß°¡ ºÎºÐ) @now_text.gsub!(/\\[Rr]\[(.*?)\]/) { "\027[#{$1}]" } # ¿©±â¼­ ÀÏ´Ü À©µµ¿ì À§Ä¡ °»½Å reset_window # \nameÀÌ ÀÖÀ»±î? if name_window_set # ¿ÀÇÁ¼Â(offset) À§Ä¡ off_x = 0 off_y = -10 # ¹üÀ§¸¸ À©µµ¿ìÀÇ ÀÛ¼º(margin¸¦ 2 ·Î ¼³Á¤) space = 2 x = self.x + off_x - space / 2 y = self.y + off_y - space / 2 w = self.contents.text_size(name_text).width + 8 + space h = 26 + space @name_window_frame = Window_Frame.new(x, y, w, h) @name_window_frame.z = self.z + 1 # ÀÇ»çÀûÀÎ °øÁß ¹®ÀÚ ¹¦»ç À©µµ¿ì¸¦ ÀÛ¼º x = self.x + off_x + 4 y = self.y + off_y @name_window_text = Air_Text.new(x, y, name_text) @name_window_text.z = self.z + 2 end end # À©µµ¿ì¸¦ °»½Å reset_window # ¼±ÅûçÇ×ÀÇ °æ¿ì if $game_temp.choice_max > 0 @item_max = $game_temp.choice_max self.active = true self.index = 0 end # ¼öÄ¡ ÀÔ·ÂÀÇ °æ¿ì if $game_temp.num_input_variable_id > 0 digits_max = $game_temp.num_input_digits_max number = $game_variables[$game_temp.num_input_variable_id] @input_number_window = Window_InputNumber.new(digits_max) @input_number_window.number = number @input_number_window.x = self.x + 8 @input_number_window.y = self.y + $game_temp.num_input_start * 32 end end #-------------------------------------------------------------------------- # ¡Ü ÇÁ·¹ÀÓ °»½Å #-------------------------------------------------------------------------- def update super # ¿ë¸íÀÇ °æ¿ì if @fade_in self.contents_opacity += 24 if @input_number_window != nil @input_number_window.contents_opacity += 24 end if self.contents_opacity == 255 @fade_in = false end return end @now_text = nil if @now_text == "" # º¯È¯ # Ç¥½Ã ±â´Ù¸®´Â ¸Þ¼¼Áö°¡ ÀÖ´Â °æ¿ì if @now_text != nil and @mid_stop == false if @write_wait > 0 @write_wait -= 1 return end text_not_skip = DEFAULT_TYPING_ENABLE while true # ÃÖ´ë x y ÀÇ º¸Á¸. @max_x = @x if @max_x < @x @max_y = @y if @max_y < @y # c ¿¡ 1 ¹®ÀÚ¸¦ Ãëµæ (¹®ÀÚ¸¦ ÃëµæÇÒ ¼ö ¾ø°Ô µÉ ¶§±îÁö ·çÇÁ) if (c = @now_text.slice!(/./m)) != nil # \\ ÀÇ °æ¿ì if c == "\000" # º»·¡ÀÇ ¹®ÀÚ¿¡ µÇµ¹¸®´Â c = "\\" end # \C[n] ÀÇ °æ¿ì if c == "\001" # ¹®ÀÚ»öÀ» º¯°æ @now_text.sub!(/\[([0-9]+)\]/, "") color = $1.to_i if color >= 0 and color <= 7 self.contents.font.color = text_color(color) if @opacity != nil color = self.contents.font.color self.contents.font.color = Color.new(color.red, color.green, color.blue, color.alpha * @opacity / 255) end end # ´ÙÀ½ÀÇ ¹®ÀÚ¿¡ c = "" end # \G ÀÇ °æ¿ì if c == "\002" # °ñµå À©µµ¿ì¸¦ ÀÛ¼º if @gold_window == nil and @popchar <= 0 @gold_window = Window_Gold.new @gold_window.x = 560 - @gold_window.width if $game_temp.in_battle @gold_window.y = 192 else @gold_window.y = self.y >= 128 ? 32 : 384 end @gold_window.opacity = self.opacity @gold_window.back_opacity = self.back_opacity end # ´ÙÀ½ÀÇ ¹®ÀÚ¿¡ c = "" end # \S[n] ÀÇ °æ¿ì if c == "\019" # ¹®ÀÚ»öÀ» º¯°æ @now_text.sub!(/\[([0-9]+)\]/, "") speed = $1.to_i if speed >= 0 and speed <= 19 @write_speed = speed end # ´ÙÀ½ÀÇ ¹®ÀÚ¿¡ c = "" end # \A[soundname] ÀÇ °æ¿ì if c == "\004" # Àç»ý ÆÄÀÏÀ» º¯°æÇϱâ À§ÇÑ Áغñ @now_text.sub!(/\[(.*?)\]/, "") buftxt = $1.dup.to_s # Àç»ý ÆÄÀÏ¸í¿¡"/"°¡ ÀÖÀ»±î? if buftxt.match(/\//) == nil and buftxt != "" then # ¾øÀ¸¸é"Audio/SE/"À» °áÇÕÇÏ´Â $soundname_on_speak = "Audio/SE/" + buftxt else # ÀÖÀ¸¸é ±×´ë·Î Ä«ÇÇ $soundname_on_speak = buftxt.dup end # ´ÙÀ½ÀÇ ¹®ÀÚ¿¡ c = "" elsif c == "\004" # ´ÙÀ½ÀÇ ¹®ÀÚ¿¡ c = "" end # \. ÀÇ °æ¿ì if c == "\005" @write_wait += 5 c = "" end # \| ÀÇ °æ¿ì if c == "\006" @write_wait += 20 c = "" end # \> ÀÇ °æ¿ì if c == "\016" text_not_skip = false c = "" end # \<ÀÇ °æ¿ì if c == "\017" text_not_skip = true c = "" end # \!ÀÇ °æ¿ì if c == "\020" @mid_stop = true c = "" end # \~ÀÇ °æ¿ì if c == "\021" terminate_message return end # \IÀÇ °æ¿ì(Ãß°¡ ºÎºÐ) if c == "\023" # Áö±ÝÀÇ@x¸¦ Àε§Æ® À§Ä¡·Î ¼³Á¤ @indent = @x c = "" end # \OÀÇ °æ¿ì(Ãß°¡ ºÎºÐ) if c == "\024" @now_text.sub!(/\[([0-9]+)\]/, "") @opacity = $1.to_i color = self.contents.font.color self.contents.font.color = Color.new(color.red, color.green, color.blue, color.alpha * @opacity / 255) c = "" end # \HÀÇ °æ¿ì(Ãß°¡ ºÎºÐ) if c == "\025" @now_text.sub!(/\[([0-9]+)\]/, "") self.contents.font.size = [[$1.to_i, 6].max, 32].min c = "" end # \BÀÇ °æ¿ì(Ãß°¡ ºÎºÐ) if c == "\026" @now_text.sub!(/\[([0-9]+)\]/, "") @x += $1.to_i c = "" end # \RÀÇ °æ¿ì(Ãß°¡ ºÎºÐ) if c == "\027" @now_text.sub!(/\[(.*?)\]/, "") # ¹®ÀÚ¸¦ ¹¦È­ @x += ruby_draw_text(self.contents, @x, @y * line_height + (line_height - self.contents.font.size), $1, @opacity) # ¹®ÀÚ ¹¦»çÀÇ °ÍSEÀ» ¿¬ÁÖ if $soundname_on_speak != "" Audio.se_play($soundname_on_speak) end c = "" end # ¾ÆÀÌÄÜ ¹¦È­¿ë ¼ø¼­ÀÇ °æ¿ì(Ãß°¡ ºÎºÐ) if c == "\030" # ¾ÆÀÌÄÜ ÆÄÀϸíÀ» Ãëµæ @now_text.sub!(/\[(.*?)\]/, "") # ¾ÆÀÌÄÜÀ» ¹¦È­ self.contents.blt(@x , @y * line_height + 8, RPG::Cache.icon($1), Rect.new(0, 0, 24, 24)) # ¹®ÀÚ ¹¦»çÀÇ °ÍSEÀ» ¿¬ÁÖ if $soundname_on_speak != "" Audio.se_play($soundname_on_speak) end @x += 24 # ´ÙÀ½ÀÇ ¹®ÀÚ¿¡ c = "" end # °³Çà ¹®ÀÚÀÇ °æ¿ì if c == "\n" # y ¿¡ 1 ¸¦ °¡»ê @lines += 1 @y += 1 @x = 0 + @indent + @face_indent # ¼±ÅûçÇ×À̶ó¸é Àε§Æ®¸¦ ½Ç½ÃÇÏ´Â if @lines >= $game_temp.choice_start @x = 8 + @indent + @face_indent # Ä¿¼­ÀÇ °»½Å @cursor_width = @max_choice_x end # ´ÙÀ½ÀÇ ¹®ÀÚ¿¡ c = "" end # ¿ÜÀÚ Ç¥½ÃÀÇ °æ¿ì if c == "\022" # []ºÎºÐÀÇ Á¦°Å @now_text.sub!(/\[([0-9]+)\]/, "") # ¿ÜÀÚ¸¦ Ç¥½Ã @x += gaiji_draw(4 + @x, @y * line_height + (line_height - self.contents.font.size), $1.to_i) # ´ÙÀ½ÀÇ ¹®ÀÚ¿¡ c = "" end if c != "" # ¹®ÀÚ¸¦ ¹¦È­ self.contents.draw_text(4+@x, 32 * @y, 40, 32, c) @x += self.contents.text_size(c).width # ¹®ÀÚ ¹¦»çÀÇ °ÍSEÀ» ¿¬ÁÖ if $soundname_on_speak != "" then Audio.se_play($soundname_on_speak) end end # B¹öÆ°ÀÌ ¹Ð·ÈÀ» °æ¿ì if Input.press?(Input::B) text_not_skip = false end else text_not_skip = true break end # Á¾·á ÆÇÁ¤ if text_not_skip break end end @write_wait += @write_speed return end # ¼öÄ¡ ÀÔ·ÂÁßÀÇ °æ¿ì if @input_number_window != nil @input_number_window.update # °áÁ¤ if Input.trigger?(Input::C) $game_system.se_play($data_system.decision_se) $game_variables[$game_temp.num_input_variable_id] = @input_number_window.number $game_map.need_refresh = true # ¼öÄ¡ ÀÔ·Â À©µµ¿ì¸¦ Çعæ @input_number_window.dispose @input_number_window = nil terminate_message end return end # ¸Þ¼¼Áö Ç¥½ÃÁßÀÇ °æ¿ì if @contents_showing # ¼±ÅûçÇ×ÀÇ Ç¥½ÃÁßÀÌ ¾Æ´Ï¸é Æ÷Áî ½ÎÀÎÀ» Ç¥½Ã if $game_temp.choice_max == 0 self.pause = true end # ĵ½½ if Input.trigger?(Input::B) if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0 $game_system.se_play($data_system.cancel_se) $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1) terminate_message end end # °áÁ¤ if Input.trigger?(Input::C) if $game_temp.choice_max > 0 $game_system.se_play($data_system.decision_se) $game_temp.choice_proc.call(self.index) end if @mid_stop @mid_stop = false return else terminate_message end end return end # ÆäÀ̵å¾Æ¿ôÁß Àܷ̿Πǥ½Ã ±â´Ù¸®´Â ¸Þ¼¼Áö³ª ¼±ÅûçÇ×ÀÌ ÀÖ´Â °æ¿ì if @fade_out == false and $game_temp.message_text != nil @contents_showing = true $game_temp.message_window_showing = true refresh Graphics.frame_reset self.visible = true self.contents_opacity = 0 if @input_number_window != nil @input_number_window.contents_opacity = 0 end @fade_in = true return end # Ç¥½ÃÇØ¾ß ÇÒ ¸Þ¼¼Áö°¡ ¾øÁö¸¸ , À©µµ¿ì°¡ °¡½Ã »óÅÂÀÇ °æ¿ì if self.visible @fade_out = true self.opacity -= 48 if self.opacity == 0 self.visible = false @fade_out = false $game_temp.message_window_showing = false end return end end #-------------------------------------------------------------------------- # ¡Ü ij¸¯ÅÍÀÇ Ãëµæ # parameter : ÆĶó¹ÌÅÍ #-------------------------------------------------------------------------- def get_character(parameter) # ÆĶó¹ÌÅÍ·Î ºÐ±â case parameter when 0 # Ç÷¹À̾î return $game_player else # ƯÁ¤ÀÇ À̺¥Æ® events = $game_map.events return events == nil ? nil : events[parameter] end end #-------------------------------------------------------------------------- # ¡Ü À©µµ¿ìÀÇ À§Ä¡¿Í ºÒÅõ¸íµµÀÇ ¼³Á¤ #-------------------------------------------------------------------------- def reset_window # ÆÇÁ¤ if @popchar >= 0 events = $game_map.events if events != nil character = get_character(@popchar) x = [[character.screen_x - 0 - self.width / 2, 4].max, 636 - self.width].min y = [[character.screen_y - 48 - self.height, 4].max, 476 - self.height].min self.x = x self.y = y end elsif @popchar == -1 self.x = -4 self.y = -4 self.width = 648 self.height = 488 else if $game_temp.in_battle self.y = 16 else case $game_system.message_position when 0 # »ó self.y = 16 when 1 # ¾È self.y = 160 when 2 # ÇÏ self.y = 304 end self.x = 80 if @face_file == nil self.width = 480 else self.width = 600 self.x -= 60 end self.height = 160 end end self.contents = Bitmap.new(self.width - 32, self.height - 32) if @face_file != nil self.contents.blt(0, 1, RPG::Cache.picture(@face_file), Rect.new(0, 0, 128, 128)) end if @popchar == -1 self.opacity = 255 self.back_opacity = 0 elsif $game_system.message_frame == 0 self.opacity = 255 self.back_opacity = 160 else self.opacity = 0 self.back_opacity = 160 end end #-------------------------------------------------------------------------- # ¡Ü ¿ÜÀÚ ¹¦È­ #-------------------------------------------------------------------------- # x¡¡¡¡ £ºx ÁÂÇ¥ # y¡¡¡¡ £ºy ÁÂÇ¥ # num¡¡ £º¿ÜÀÚ ¹øÈ£ # µ¹¾Æ°¡ °ª£º¿ÜÀÚÆø(@xÁõ°¡Ä¡) #-------------------------------------------------------------------------- def gaiji_draw(x, y, num) # ¿ÜÀÚ µ¥ÀÌÅÍ°¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì´Â ±»ÀÌ ÇÏÁö ¾Ê´Â if @gaiji_cache == nil return 0 else # ÁöÁ¤ÇÑ ¿ÜÀÚ°¡ ij½¬ ¹üÀ§¸¦ ³Ñ°í ÀÖ´Â °æ¿ì´Â ±»ÀÌ ÇÏÁö ¾Ê´Â if @gaiji_cache.width < num * 24 return 0 end # ¹®ÀÚ »çÀÌÁ °è»ê if self.contents.font.size >= 20 and self.contents.font.size <= 24 size = 24 else size = self.contents.font.size * 100 * 24 / 2200 end # ¿ÜÀÚ µ¥ÀÌÅ͸¦stretch_blt·Î Àü¼Û self.contents.stretch_blt(Rect.new(x, y, size, size), @gaiji_cache, Rect.new(num * 24, 0, 24, 24)) # ¹®ÀÚ ¹¦»çÀÇ °ÍSEÀ» ¿¬ÁÖ if $soundname_on_speak != "" then Audio.se_play($soundname_on_speak) end # ¹®ÀÚ »çÀÌÁ µ¹·ÁÁÖ´Â return size end end #-------------------------------------------------------------------------- # ¡Ü line_height #-------------------------------------------------------------------------- # µ¹¾Æ°¡ Ä¡£ºÇàÀÇ ³ôÀÌ(@yÁõ°¡Ä¡)¸¦ µ¹·ÁÁÝ´Ï´Ù. #-------------------------------------------------------------------------- def line_height # Çö»ó , ¼±ÅûçÇ×µî ¿¡ ´ëÀÀÀ» ÇÒ ¼ö ¾ø±â ¶§¹®¿¡ , ÀÚµ¿ÀûÀ¸·Î32¸¦ µ¹·ÁÁÝ´Ï´Ù. return 32 # ¹®ÀÚ »çÀÌÁ °è»ê if self.contents.font.size >= 20 and self.contents.font.size <= 24 return 32 else return self.contents.font.size * 15 / 10 end end #-------------------------------------------------------------------------- # ¡Ü ·çºñ ¹®ÀÚ ¹¦È­ #-------------------------------------------------------------------------- # target £º¹¦È­ ´ë»ó. BitmapŬ·¡½º¸¦ ÁöÁ¤. # x £ºxÁÂÇ¥ # y £ºyÁÂÇ¥ # str¡¡ £º¹¦È­ ij¸¯ÅÍ ¶óÀÎ. º»¹®,·çºñÀÇ Çü½Ä¿¡¼­ ÀÔ·Â. # ¡¡¡¡¡¡¡¡ ,´Ü¶ôÀÌ2°³ ÀÌ»ó ÀÖ¾úÀ» °æ¿ì´Â ÀÚµ¿ÀûÀ¸·Î ¹«½ÃµÈ´Ù. # opacity£ºÅõ°úÀ²(0~255) # µ¹¾Æ°¡ °ª £º¹®ÀÚÆø(@xÁõ°¡Ä¡). #-------------------------------------------------------------------------- def ruby_draw_text(target, x, y, str,opacity) # font size¸¦ ¹é¾÷ ÇØ µÎ´Â sizeback = target.font.size # ·çºñ »çÀÌÁîÀÇ °è»ê target.font.size * 3 / 2 > 32 ? rubysize = 32 - target.font.size : rubysize = target.font.size / 2 rubysize = [rubysize, 6].max # opacity¿¡ ±ÔÁ¤Ä¡ ÀÌ»óÀÇ °ªÀÌ µé¾î°¡ ÀÖ´Â °æ¿ì´Â ¼öÁ¤. opacity = [[opacity, 0].max, 255].min # str(À»)¸¦split·Î ºÐÇÒÇØ ,split_s¿¡ °Ý³³ split_s = str.split(/,/) # split_sÀÌnilÀÇ °æ¿ì´Â""À¸·Î ÇØ µÎ´Â(¿Àµ¿ÀÛ ¹æÁö) split_s[0] == nil ? split_s[0] = "" : nil split_s[1] == nil ? split_s[1] = "" : nil # height¿Íwidth¸¦ °è»ê height = sizeback + rubysize width = target.text_size(split_s[0]).width # ¹öÆÛ¿ëÀÇ Æø °è»ê(·çºñÀÇ ÆøÀÌ º»¹®ÀÇ ÆøÀ» ³ÑÀ» °¡´É¼ºÀÌ Àֱ⠶§¹®¿¡(À§ÇØ)) target.font.size = rubysize ruby_width = target.text_size(split_s[1]).width target.font.size = sizeback buf_width = [target.text_size(split_s[0]).width, ruby_width].max # º»¹®ÀÇ ¹¦È­Æø°ú ·çºñÀÇ ¹¦È­ÆøÀÇ Â÷À̸¦1/2·Î ÇØ º¯¼ö¿¡ °Ý³³(´ÙÀ½¿¡ »ç¿ë) width - ruby_width != 0 ? sub_x = (width - ruby_width) / 2 : sub_x = 0 # opacityÀÌ255(Åõ°ú ¾øÀ½)ÀÇ °æ¿ì´Â Åë»ó ¹¦È­ if opacity == 255 # ·çºñÀÇ ¹¦È­ target.font.size = rubysize target.draw_text(x + sub_x, y - target.font.size, target.text_size(split_s[1]).width, target.font.size, split_s[1]) target.font.size = sizeback # º»¹®ÀÇ ¹¦È­ target.draw_text(x, y, width, target.font.size, split_s[0]) return width else # Ç¥½Ã ÅؽºÆ®ÀÇheight,width°¡ ¹öÆÛ »çÀÌÁ ¿ôµµ´Â °æ¿ì´Â # ¹öÆÛ¸¦ Àç»ý¼ºÇÑ´Ù. if @opacity_text_buf.width < buf_width or @opacity_text_buf.height < height @opacity_text_buf.dispose @opacity_text_buf = Bitmap.new(buf_width, height) # ±×·¸Áö ¾ÊÀº °æ¿ì´Â ¹öÆÛ Å¬¸®¾î. else @opacity_text_buf.clear end # ¹öÆÛ¿¡ ÅؽºÆ® ¹¦È­ # ·çºñÀÇ ¹¦È­ @opacity_text_buf.font.size = rubysize @opacity_text_buf.draw_text(0 , 0, buf_width, rubysize, split_s[1], 1) @opacity_text_buf.font.size = sizeback # º»¹®ÀÇ ¹¦È­ @opacity_text_buf.draw_text(0 , rubysize, buf_width, sizeback, split_s[0], 1) # ·çºñÀÇ ÆøÀÌ º»¹®ÀÇ ÆøÀ» ¹Øµµ´Â °æ¿ì if sub_x >= 0 target.blt(x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity) # ·çºñÀÇ ÆøÀÌ º»¹®ÀÇ ÆøÀ» ¿ôµµ´Â °æ¿ì else target.blt(x + sub_x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity) end # ¹®ÀÚ »çÀÌÁ µ¹·ÁÁÖ´Â return width end end #-------------------------------------------------------------------------- # ¡Ü \Vº¯È¯ #-------------------------------------------------------------------------- # option £º¿É¼Ç. ¹« ÁöÁ¤ ¶Ç´Â ±ÔÁ¤¿ÜÀÇ °æ¿ì´ÂindexÀÇ À¯Àú º¯¼öÄ¡¸¦ µ¹·ÁÁØ´Ù. # index £ºÀ妽º # µ¹¾Æ°¡ °ª £ºº¯È¯ °á°ú(¾ÆÀÌÄÜ Ç¥½Ã¿ë ¼ø¼­ Æ÷ÇÔ) #-------------------------------------------------------------------------- def convart_value(option, index) # optionÀÌnilÀÇ °æ¿ì´Â""À¸·Î °íÄ¡´Â(¿Àµ¿ÀÛ ¹æÁö) option == nil ? option = "" : nil # option´ÂdowncaseÇØ µÐ´Ù. option.downcase! # \030(Àº)´Â ¾ÆÀÌÄÜ Ç¥½Ã¿ëÀÇ ¼ø¼­. \030[¾ÆÀÌÄÜ ÆÄÀϸí]À¸·Î Á¤ÀÇ. case option when "i" unless $data_items[index].name == nil r = sprintf("\030[%s]%s", $data_items[index].icon_name, $data_items[index].name) end when "w" unless $data_weapons[index].name == nil r = sprintf("\030[%s]%s", $data_weapons[index].icon_name, $data_weapons[index].name) end when "a" unless $data_armors[index].name == nil r = sprintf("\030[%s]%s", $data_armors[index].icon_name, $data_armors[index].name) end when "s" unless $data_skills[index].name == nil r = sprintf("\030[%s]%s", $data_skills[index].icon_name, $data_skills[index].name) end else r = $game_variables[index] end r == nil ? r = "" : nil return r end #-------------------------------------------------------------------------- # ¡Ü Çعæ #-------------------------------------------------------------------------- def dispose terminate_message # ¿ÜÀÚ Ä³½¬ °³¹æ if @gaiji_cache != nil unless @gaiji_cache.disposed? @gaiji_cache.dispose end end # ¹®ÀÚ Åõ°ú Àü¼Û¿ë ¹öÆÛ °³¹æ unless @opacity_text_buf.disposed? @opacity_text_buf.dispose end $game_temp.message_window_showing = false if @input_number_window != nil @input_number_window.dispose end super end #-------------------------------------------------------------------------- # ¡Ü Ä¿¼­ÀÇ ±¸Çü °»½Å #-------------------------------------------------------------------------- def update_cursor_rect if @index >= 0 n = $game_temp.choice_start + @index self.cursor_rect.set(8 + @indent + @face_indent, n * 32, @cursor_width, 32) else self.cursor_rect.empty end end end #============================================================================== # ¡á Window_Frame (¹üÀ§¸¸À¸·Î ³»¿ëÀÌ ¾ø´Â À©µµ¿ì) #============================================================================== class Window_Frame < Window_Base #-------------------------------------------------------------------------- # ¡Ü ¿ÀºêÁ§Æ® ÃʱâÈ­ #-------------------------------------------------------------------------- def initialize(x, y, width, height) super(x, y, width, height) self.contents = nil #self.back_opacity = 240 end #-------------------------------------------------------------------------- # ¡Ü Çعæ #-------------------------------------------------------------------------- def dispose super end end #============================================================================== # ¡á Air_Text (±»ÀÌ ¾ø´Â °÷¿¡ ¹®ÀÚ ¹¦»ç = ¹üÀ§°¡ ¾ø´Â ¼ø°£ Ç¥½Ã ¸Þ¼¼Áö À©µµ¿ì) #============================================================================== class Air_Text < Window_Base #-------------------------------------------------------------------------- # ¡Ü ¿ÀºêÁ§Æ® ÃʱâÈ­ #-------------------------------------------------------------------------- def initialize(x, y, designate_text) super(x-16, y-16, 32 + designate_text.size * 12, 56) self.opacity = 0 self.back_opacity = 0 self.contents = Bitmap.new(self.width - 32, self.height - 32) w = self.contents.width h = self.contents.height self.contents.draw_text(0, 0, w, h, designate_text) end #-------------------------------------------------------------------------- # ¡Ü Çعæ #-------------------------------------------------------------------------- def dispose self.contents.clear super end end