#============================================================================== # Map Screenshot # Version : 1.06 # Author : LiTTleDRAgo #============================================================================== # # How to Use : # # Press F6 to take map screenshot # Press F7 to take snapshot # #============================================================================== ($imported ||= {})[:drg_map_screenshot_xp] = 1.06 text = "This Script needs Drago - Core Engine v1.35 or later" ($imported[:drg_core_engine] || 0) >= 1.35 || raise(text) #============================================================================== # ** Spriteset_Map #------------------------------------------------------------------------------ # This class brings together map screen sprites, tilemaps, etc. # It's used within the Scene_Map class. #============================================================================== class Spriteset_Map #-------------------------------------------------------------------------- # * Constant #-------------------------------------------------------------------------- INPUT_MAP_SCREENSHOT = Input::F6 # Change to nil to disable INPUT_SCREENSHOT = Input::F7 # Change to nil to disable SCREENSHOT_FOLDER = "Screenshot" #-------------------------------------------------------------------------- # * Alias Method #-------------------------------------------------------------------------- alias_sec_method :map_screenshot, :update #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update(*args) map_screenshot(*args) return if @take_screenshot snap_map_screenshot if INPUT_MAP_SCREENSHOT && Input.trigger?(INPUT_MAP_SCREENSHOT) snap_screenshot if INPUT_SCREENSHOT && Input.trigger?(INPUT_SCREENSHOT) end #-------------------------------------------------------------------------- # * snap_map_screenshot #-------------------------------------------------------------------------- def snap_map_screenshot old_time = Time.now bitmap = collect_snap_map_bitmap name = sprintf("Screenshot - Map%03d", $game_map.map_id) export_screenshot(bitmap,"#{name}") bitmap.dispose end #-------------------------------------------------------------------------- # * snap_screenshot #-------------------------------------------------------------------------- def snap_screenshot bitmap = Graphics.snap_to_bitmap Dir.make_dir(SCREENSHOT_FOLDER) if FileTest.not.directory?(SCREENSHOT_FOLDER) dir = Dir.new(SCREENSHOT_FOLDER) count = dir.entries.select {|s| s.to_s =~ /Screenshot/ } name = sprintf("Screenshot - %03d", count.size + 1) count.reverse.each_with_index do |s,i| temp = sprintf("Screenshot - %03d", i + 1) name = temp if File.not.exist?("#{SCREENSHOT_FOLDER}/#{temp}.png") end export_screenshot(bitmap,"#{name}") bitmap.dispose end #-------------------------------------------------------------------------- # * export_screenshot #-------------------------------------------------------------------------- def export_screenshot(bitmap,name='snapshot') exp_time = (bitmap.height * bitmap.width) * 0.00000664 string = "Taking screenshot please wait.... \n" + "Number of pixels: #{bitmap.height * bitmap.width} \n"+ "Estimated time: #{exp_time} seconds." report_screenshot("#{string.to_s}") old_time = Time.now Dir.make_dir(SCREENSHOT_FOLDER) if FileTest.not.directory?(SCREENSHOT_FOLDER) bitmap.export("#{SCREENSHOT_FOLDER}/#{name}.png") if File.exist?("#{SCREENSHOT_FOLDER}/#{name}.png") string = "#{name}.png was created. \n" + "File size: width #{bitmap.width}, height #{bitmap.height}. \n" + "Time taken: #{Time.now - old_time} seconds." else string = "Failed to create #{name}.png.\n" + "Time taken: #{Time.now - old_time} seconds." end report_screenshot("#{string.to_s}") end #-------------------------------------------------------------------------- # * report_screenshot #-------------------------------------------------------------------------- def report_screenshot(*args) defined?(Window_BattleActor) ? msgbox(*args) : print(*args) end #-------------------------------------------------------------------------- # * collect_snap_map_bitmap #-------------------------------------------------------------------------- def collect_snap_map_bitmap bitmap = Bitmap.new($game_map.width * 32, $game_map.height * 32) _w = (($game_map.width / 4) % Graphics.width).floor + 1 _h = (($game_map.height / 4) % Graphics.height).floor + 1 _x = (0.._w).to_a.collect {|s| s * Graphics.width} _y = (0.._h).to_a.collect {|s| s * Graphics.height} _dx = $game_map.display_x _dy = $game_map.display_y _x.each do |x| _y.each do |y| $game_map.instance_variable_set(:@display_x, x/tilemap_move_multiplier) $game_map.instance_variable_set(:@display_y, y/tilemap_move_multiplier) @take_screenshot = true update Graphics.update unless defined?(Window_ActorCommand) snap = Graphics.snap_to_bitmap bitmap.blt(x,y,snap,snap.rect) snap.dispose end end $game_map.instance_variable_set(:@display_x, _dx) $game_map.instance_variable_set(:@display_y, _dy) update @take_screenshot = false bitmap end #-------------------------------------------------------------------------- # * tilemap_move_multiplier #-------------------------------------------------------------------------- def tilemap_move_multiplier n = 1.00 / 4 n = 1.00 / 8 if defined?(Window_ActorCommand) n = 1.00 * 32 if defined?(Window_BattleActor) return n end end