RitoJS Ancien staffeux
Messages postés : 1925 Date d'inscription : 22/02/2012 Jauge LPC :
| Sujet: [VX, Ace] Omega map saver Jeu 7 Juin 2012 - 19:28 | |
| Marre de devoir screené chaque partie de votre grande map ? Alors voici ce qu'il vous faut. Crédit: Omegas7 Woratana Instructions:Créez une image vierge faisant le double de la taille de votre map (Ou plus si vous voulez). Nommez-la "Blank" et enregistrez l'image au format PNG dans le dossier "system" de votre projet. Ensuite, vous avez juste faire un évènement en suivant les instruction dans le script. Dernière chose, pour prendre correctement le screen, Vous devez placer l'équipe tout en bas et tout à gauche de la map. (le screen prend chaque partie de la map puis les assemblent) Voilà le(s) script(s): VX: - Code:
-
# ============================================================================= # Map Saver # Version 0.1 # Author: Omegas7. Site: http://www.myrpgmaker.com # Credit: Woratana for PNG Saver script. # ============================================================================= # Save a whole map into a .png file by taking multiple screenshots and finally # combining them. Exporting the resulting bitmap to a .png image file using # Woratana's PNG Saver script. # ============================================================================= # Instructions: # Go to Paint or whatever image editing software you want. # Create a new file, width and height will be the same as your map, but # multiplied by 32. (If map's width is 20, the image's width will be 640). # Name the image "Blank", and save it on the System folder of your game. # Go to your game map, and put the player starting position on the # bottom left part of the map. # Now make a new event, autorun, with script call: # $saver = Map_Saver.new # Then turn self-switch A ON. # Go to the event's second page, put as condition self-switch A, then put # script call: # $saver.update # Finally make the second page to be autorun as well. # Run the game, you will see the map will start scrolling. Let it be. # At the end the script will start creating the image file, this process # may take several minutes depending on your map's size. # Sure, it may take very long, but it saves HOURS if you planned to make # your map manually, so do not complain;). # ============================================================================= # Notes: # The final result will be an image file located on your game's main folder. # The image will be exactly what appears on the screen, so if you got a HUD, # it will appear as well. # If you notice a problem with the final result, like with tiles etc, # try activating "weird mode" below. # If the final result is still not fixed, try to get support. # =============================================================================
class Map_Saver def initialize # If the resulting image seems to be wrongly made, try turning this value # to "true". Normally, this should be false. @weird_mode = false @result = Bitmap.new('Graphics/System/Blank') @bitmaps = [] @moving = true @last_place = 'none' @finishing = false @pause_time = 30 @scrolling_x = 13 end def update if !(@finishing) if !($game_map.scrolling?) if @moving execute_image else if can_move?(8) $game_map.start_scroll(8, @scrolling_x, 7) @moving = true @last_place = 'down' elsif can_move?(6) && @last_place == 'down' $game_map.start_scroll(6, 17, 7) @last_place = 'left' elsif can_move?(2) && @last_place == 'left' $game_map.start_scroll(2, $game_map.height, 9) @last_place = 'up' @moving = true else @finishing = true for i in 0...@bitmaps.size y = @bitmaps[i][2]*32 if @bitmaps[i][3] == true y += 16 if @weird_mode end @result.blt(@bitmaps[i][1]*32,y,@bitmaps[i][0], Rect.new(0,0,544,416)) end @result.make_png('Map','') print "Map image production is over!" exit end end end end end def execute_image Graphics.freeze Sound.play_decision @bitmaps.push([Graphics.snap_to_bitmap, $game_map.display_x/256, $game_map.display_y/256, nil]) @moving = false Graphics.transition(@pause_time) if can_move?(8) && can_move?(2) @bitmaps[@bitmaps.size - 1][3] = true end end def can_move?(direction) case direction when 6 return false if ($game_map.display_x/256) == ($game_map.width - 17) return true when 2 return false if ($game_map.display_y/256) == ($game_map.height - 13) return true when 4 return false if ($game_map.display_x/256 == 0) return true when 8 return false if ($game_map.display_y/256 == 0) return true end end end
# ============================================================================= # PNG Saver by Woratana. # =============================================================================
module Zlib class Png_File < GzipWriter def make_png(bitmap, mode = 0) @bitmap, @mode = bitmap, mode create_loader self.write(make_header) self.write(make_ihdr) self.write(make_idat) self.write(make_iend) end def create_loader w = @bitmap.width h = @bitmap.height @calculated = [0,nil] @calculated[1] = Float.induced_from(w*h) @window = Window_Base.new(0,150,544,116) @window.contents.font.size = 16 @update = ((@bitmap.width*@bitmap.height)/3000.0).floor.to_i refresh_loader end def refresh_loader Graphics.update @window.contents.clear text = ['Creating image file, please wait...', percent.to_s + '% done...'] for i in 0...text.size @window.contents.draw_text(0,20*i,520,20,text[i]) end Graphics.update end def percent return ((100/@calculated[1])*@calculated[0]).floor end def make_header return [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a].pack('C*') end def make_ihdr ih_size = [13].pack('N') ih_sign = 'IHDR' ih_width = [@bitmap.width].pack('N') ih_height = [@bitmap.height].pack('N') ih_bit_depth = [8].pack('C') ih_color_type = [6].pack('C') ih_compression_method = [0].pack('C') ih_filter_method = [0].pack('C') ih_interlace_method = [0].pack('C') string = ih_sign + ih_width + ih_height + ih_bit_depth + ih_color_type + ih_compression_method + ih_filter_method + ih_interlace_method ih_crc = [Zlib.crc32(string)].pack('N') return ih_size + string + ih_crc end def make_idat header = "\x49\x44\x41\x54" data = @mode == 0 ? make_bitmap_data0 : make_bitmap_data1 data = Zlib::Deflate.deflate(data, 8) crc = [Zlib.crc32(header + data)].pack('N') size = [data.length].pack('N') return size + header + data + crc end def make_bitmap_data0 gz = Zlib::GzipWriter.open('png2.tmp') t_Fx = 0 w = @bitmap.width h = @bitmap.height data = [] for y in 0...h data.push(0) for x in 0...w t_Fx += 1 if t_Fx % 10000 == 0 Graphics.update end if t_Fx % 100000 == 0 s = data.pack('C*') gz.write(s) data.clear end color = @bitmap.get_pixel(x, y) red = color.red green = color.green blue = color.blue alpha = color.alpha data.push(red) data.push(green) data.push(blue) data.push(alpha) @calculated[0] += 1 if @calculated[0] % @update == 0 refresh_loader end end end s = data.pack('C*') gz.write(s) gz.close data.clear gz = Zlib::GzipReader.open('png2.tmp') data = gz.read gz.close File.delete('png2.tmp') return data end def make_bitmap_data1 w = @bitmap.width h = @bitmap.height data = [] for y in 0...h data.push(0) for x in 0...w color = @bitmap.get_pixel(x, y) red = color.red green = color.green blue = color.blue alpha = color.alpha data.push(red) data.push(green) data.push(blue) data.push(alpha) @calculated[0] += 1 if @calculated[0] % @update == 0 refresh_loader end end end return data.pack('C*') end def make_iend ie_size = [0].pack('N') ie_sign = 'IEND' ie_crc = [Zlib.crc32(ie_sign)].pack('N') return ie_size + ie_sign + ie_crc end end end
#============================================================================= # ** Bitmap #============================================================================= class Bitmap def make_png(name = 'like', path = '', mode = 0) Zlib::Png_File.open('png.tmp') { |gz| gz.make_png(self, mode) } Zlib::GzipReader.open('png.tmp') { |gz| $read = gz.read } f = File.open(path + name + '.png', 'wb') f.write($read) f.close File.delete('png.tmp') end end
Demo vx: http://www.mediafire.com/?menz5nmmdnm VX ace(merci à yami pour avoir converti le script pour Ace): - Code:
-
# ============================================================================= # Map Saver # Version 0.1 # Author: Omegas7. Site: http://www.myrpgmaker.com # Credit: Woratana for PNG Saver script. # ============================================================================= # Save a whole map into a .png file by taking multiple screenshots and finally # combining them. Exporting the resulting bitmap to a .png image file using # Woratana's PNG Saver script. # ============================================================================= # Instructions: # Go to Paint or whatever image editing software you want. # Create a new file, width and height will be the same as your map, but # multiplied by 32. (If map's width is 20, the image's width will be 640). # Name the image "Blank", and save it on the System folder of your game. # Go to your game map, and put the player starting position on the # bottom left part of the map. # Now make a new event, autorun, with script call: # $saver = Map_Saver.new # Then turn self-switch A ON. # Go to the event's second page, put as condition self-switch A, then put # script call: # $saver.update # Finally make the second page to be autorun as well. # Run the game, you will see the map will start scrolling. Let it be. # At the end the script will start creating the image file, this process # may take several minutes depending on your map's size. # Sure, it may take very long, but it saves HOURS if you planned to make # your map manually, so do not complain ;). # ============================================================================= # Notes: # The final result will be an image file located on your game's main folder. # The image will be exactly what appears on the screen, so if you got a HUD, # it will appear as well. # If you notice a problem with the final result, like with tiles etc, # try activating "weird mode" below. # If the final result is still not fixed, try to get support. # =============================================================================
class Map_Saver def initialize
# If the resulting image seems to be wrongly made, try turning this value # to "true". Normally, this should be false. @weird_mode = false
@result = Bitmap.new('Graphics/System/Blank') @bitmaps = [] @moving = true @last_place = 'none' @finishing = false @pause_time = 30 @scrolling_x = 13 end def update if !(@finishing) if !($game_map.scrolling?) if @moving execute_image else if can_move?(8) $game_map.start_scroll(8, @scrolling_x, 7) @moving = true @last_place = 'down' elsif can_move?(6) && @last_place == 'down' $game_map.start_scroll(6, 17, 7) @last_place = 'left' elsif can_move?(2) && @last_place == 'left' $game_map.start_scroll(2, $game_map.height, 9) @last_place = 'up' @moving = true else @finishing = true for i in 0...@bitmaps.size y = @bitmaps[i][2]*32 if @bitmaps[i][3] == true y += 16 if @weird_mode end @result.blt(@bitmaps[i][1]*32,y,@bitmaps[i][0], Rect.new(0,0,Graphics.width,Graphics.height)) end @result.make_png('Map','') print "Map image production is over!" exit end end end end end def execute_image Graphics.freeze @bitmaps.push([Graphics.snap_to_bitmap, $game_map.display_x, $game_map.display_y, nil]) @moving = false Graphics.transition(@pause_time) if can_move?(8) && can_move?(2) @bitmaps[@bitmaps.size - 1][3] = true end end def can_move?(direction) case direction when 6 return false if ($game_map.display_x) == ($game_map.width - Graphics.width / 32) return true when 2 return false if ($game_map.display_y) == ($game_map.height - Graphics.height / 32) return true when 4 return false if ($game_map.display_x == 0) return true when 8 return false if ($game_map.display_y == 0) return true end end end
# ============================================================================= # PNG Saver by Woratana. # ============================================================================= module Zlib class Png_File < GzipWriter def make_png(bitmap, mode = 0) @bitmap, @mode = bitmap, mode create_loader self.write(make_header) self.write(make_ihdr) self.write(make_idat) self.write(make_iend) end def create_loader w = @bitmap.width h = @bitmap.height @calculated = [0,nil] @calculated[1] = (w*h).to_f @window = Window_Base.new(0,150,544,116) @window.contents.font.size = 16 @update = ((@bitmap.width*@bitmap.height)/3000.0).floor.to_i refresh_loader end def refresh_loader Graphics.update @window.contents.clear text = ['Creating image file, please wait...', percent.to_s + '% done...'] for i in 0...text.size @window.contents.draw_text(0,20*i,520,20,text[i]) end Graphics.update end def percent return ((100/@calculated[1])*@calculated[0]).floor end def make_header return [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a].pack('C*') end def make_ihdr ih_size = [13].pack('N') ih_sign = 'IHDR' ih_width = [@bitmap.width].pack('N') ih_height = [@bitmap.height].pack('N') ih_bit_depth = [8].pack('C') ih_color_type = [6].pack('C') ih_compression_method = [0].pack('C') ih_filter_method = [0].pack('C') ih_interlace_method = [0].pack('C') string = ih_sign + ih_width + ih_height + ih_bit_depth + ih_color_type + ih_compression_method + ih_filter_method + ih_interlace_method ih_crc = [Zlib.crc32(string)].pack('N') return ih_size + string + ih_crc end def make_idat header = "\x49\x44\x41\x54" data = @mode == 0 ? make_bitmap_data0 : make_bitmap_data1 data = Zlib::Deflate.deflate(data, 8) crc = [Zlib.crc32(header + data)].pack('N') size = [data.length].pack('N') return size + header + data + crc end def make_bitmap_data0 gz = Zlib::GzipWriter.open('png2.tmp') t_Fx = 0 w = @bitmap.width h = @bitmap.height data = [] for y in 0...h data.push(0) for x in 0...w t_Fx += 1 if t_Fx % 10000 == 0 Graphics.update end if t_Fx % 100000 == 0 s = data.pack('C*') gz.write(s) data.clear end color = @bitmap.get_pixel(x, y) red = color.red green = color.green blue = color.blue alpha = color.alpha data.push(red) data.push(green) data.push(blue) data.push(alpha) @calculated[0] += 1 if @calculated[0] % @update == 0 refresh_loader end end end s = data.pack('C*') gz.write(s) gz.close data.clear gz = Zlib::GzipReader.open('png2.tmp') data = gz.read gz.close File.delete('png2.tmp') return data end def make_bitmap_data1 w = @bitmap.width h = @bitmap.height data = [] for y in 0...h data.push(0) for x in 0...w color = @bitmap.get_pixel(x, y) red = color.red green = color.green blue = color.blue alpha = color.alpha data.push(red) data.push(green) data.push(blue) data.push(alpha) @calculated[0] += 1 if @calculated[0] % @update == 0 refresh_loader end end end return data.pack('C*') end def make_iend ie_size = [0].pack('N') ie_sign = 'IEND' ie_crc = [Zlib.crc32(ie_sign)].pack('N') return ie_size + ie_sign + ie_crc end end end #============================================================================= # ** Bitmap #============================================================================= class Bitmap def make_png(name = 'like', path = '', mode = 0) Zlib::Png_File.open('png.tmp') { |gz| gz.make_png(self, mode) } Zlib::GzipReader.open('png.tmp') { |gz| $read = gz.read } f = File.open(path + name + '.png', 'wb') f.write($read) f.close File.delete('png.tmp') end end Voilà ! |
|