Age : 30 Inscrit le : 22/12/2011 Messages : 1600
| Sujet: (Résolu) Rendre l'omega Map Saver compatible avec vx Ace Lun 30 Avr 2012 - 19:30 | |
| Bonsoirs, je voudrais savoir si il est possible de rendre l'omega Map Saver compatible avec VX Ace. Cela me faciliterais grandement la tâche pour pouvoir mappé en panorama. Et voilà le script: - 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 Voilà, merci d'avance.^^
Dernière édition par RitoJS le Lun 30 Avr 2012 - 20:37, édité 1 fois |
|
Age : 30 Inscrit le : 22/12/2011 Messages : 1600
| Sujet: Re: (Résolu) Rendre l'omega Map Saver compatible avec vx Ace Lun 30 Avr 2012 - 20:37 | |
| Oups ! Désolé j'ai mal chercher.^^ C'est résolu ! |
|