Super Maker Forums
Please Login or Sign Up to activate member privileges



 
HomeMy PortalWIXSuper Maker ChatroomShinGamix StudiosSuper Maker is Now On YouTubeSuper Maker is Now on FaceBookRegisterLog inDeviantArt ClubSign up for Super Maker Tweets

Share | 
 

 Omegas7 Map Saver Ace

View previous topic View next topic Go down 
AuthorMessage
ShinGamix
Admin
Admin
avatar

Male
Location : Rules this forum
Join date : 2011-04-17
Posts : 727
Birthday : 1913-07-09
Age : 104

PostSubject: Omegas7 Map Saver Ace   Fri Mar 23, 2012 10:01 pm

Code:

# =============================================================================
# Map Saver
# Version 0.1
# Author: Omegas7.  Site: http://www.myrpgmaker.com
# Credit: Woratana for PNG Saver script.
# RGSS3 by Yami (yamiryzayuki)
# Original Topic http://www.rpgmakervxace.net/topic/669-map-saver-script-conversion-request/
# =============================================================================
# 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 [You must be registered and logged in to see this link.]
                          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
Back to top Go down
http://shingamix.forumotion.com
 

Omegas7 Map Saver Ace

View previous topic View next topic Back to top 
Page 1 of 1

 Similar topics

-
» recommend me a manga
» MITH.TRUST DOTA2 BOOTCAMP PICS

Permissions in this forum:You cannot reply to topics in this forum
Super Maker Forums :: The Forum :: RPG Maker Scripting Support :: Ace Scripts Storage-