RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
[Conversion Request] Omegas7's Map Saver [VX to Ace]

0 Members and 1 Guest are viewing this topic.

**
Rep:
Level 74
RMRK Junior - - Cute Pegasus Pony

This is a very useful script, and a lot of people could benefit from this.

Code: [Select]
# =============================================================================
# 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

Thank you for your time and effort.^_^

---

Signature

If you are a believer of Jesus Christ, and are 100% proud of it, put this in your sig!!

- Nightgazer Starlight, Loyal Servant of The Royal Pony Sisters Princess Celestia and Princess Luna... Forever Equestria!

pokeball TDSOffline
***
Rep:
Level 84
-T D S-
Silver - GIAW 11 (Hard)Silver - Game In A Week VII
If you want a script that allows you to save your whole map as an image you can use this one.

http://cacaosoft.web.fc2.com/tkool/script/rgss3/mapshot.html

It requires this script to work.

http://cacaosoft.web.fc2.com/tkool/script/rgss3/save_bitmap.html

Then just press F6 and it will convert the whole map into an image.

Also, if you're going to keep posting "Conversion" request, don't just put a reason, the script and a thanks. Explain what the script does and put screenshots so people will know what they're converting and will be more likely to help you.

Also using the script request template helps a lot towards getting your requests done.

http://rmrk.net/index.php/topic,44921.0.html
« Last Edit: January 21, 2013, 08:39:00 PM by TDS »

**
Rep:
Level 74
RMRK Junior - - Cute Pegasus Pony
If you want a script that allows you to save your whole map as an image you can use this one.

http://cacaosoft.web.fc2.com/tkool/script/rgss3/mapshot.html

It requires this script to work.

http://cacaosoft.web.fc2.com/tkool/script/rgss3/save_bitmap.html

Then just press F6 and it will convert the whole map into an image.

Also, if you're going to keep posting "Conversion" request, don't just put a reason, the script and a thanks. Explain what the script does and put screenshots so people will know what they're converting and will be more likely to help you.

Also using the script request template helps a lot towards getting your requests done.

http://rmrk.net/index.php/topic,44921.0.html

Whew.

Thanks!^_^

And it works better than the other one did.

---

Signature

If you are a believer of Jesus Christ, and are 100% proud of it, put this in your sig!!

- Nightgazer Starlight, Loyal Servant of The Royal Pony Sisters Princess Celestia and Princess Luna... Forever Equestria!