¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 [RPG Maker VX] Map Saver - Omegas7 el Lun Abr 25, 2011 12:03 am

427008


Script: Map Saver
Autor: Woratana / Omegas7
Versión: 0.1

Este script permite convertir los mapeados del RPG Maker en archivos de imagen (PNG).

Código:
#======================================================================
# Map Saver
# Autor: Omegas7 / http://www.myrpgmaker.com
# Traducción: D.A.C.
# Versión 0.1
# Créditos: Woratana por el script 'PNG Saver'.
#======================================================================
# Guarda un mapa completo tomando múltiples imágenes combinadas. Finalmente, exporta el mapa de bits
# resultante en formato PNG con el script 'PNG Saver' de Woratana.
#======================================================================
# Instrucciones:
# 1.- Abre 'Paint' o cualquier otro programa de edición de imágenes.
# 2.- Crea una nueva imagen con la altura y anchura de tu mapa multiplicado por 32.
# (Ejemplo: Si el ancho de tu mapa es 20, el ancho de la imagen deberá ser 640).
# 3.- Guarda la imagen con el nombre "Blank" y guárdala en la carpeta 'System' de tu proyecto.
# 4.- Ve al mapeado de tu juego y coloca la posición inicial del personaje en la esquina inferior izquierda del mapa.
# 5.- Crea un evento de 'Inicio automático' con la opción 'Llamar script': $saver = Map_Saver.new
# Activa el 'interruptor local A' y crea una segunda página en el evento de 'Inicio automático' con la condición
# del 'interruptor local A' activada. Ahora, utiliza de nuevo la opción 'Llamar script': $saver.update
# 6.- Finalmente, ejecuta el juego y espera a que el mapa termine su desplazamiento y a continuación guarde la
# imagen (este proceso puede tardar varios minutos, dependiendo del tamaño del mapeado).
# Nota: La imagen PNG resultante se guardará en la carpeta del proyecto (incluyendo el HUD en pantalla). En caso
# de aparecer algún error, activa la función 'weird_mode' que encontrarás a continuación.
#======================================================================

class Map_Saver
  def initialize
   
    # Si en la imagen aparece algún error, active este valor a 'true' (verdadero).
    @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 por 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

Instrucciones de uso:
  1. Copiar el script encima de 'Main' con el nombre "Map Saver".
  2. Abre 'Paint' o cualquier otro programa de edición de imágenes.
  3. Crea una nueva imagen con la altura y anchura de tu mapa multiplicado por 32.
    Ejemplo: Si el ancho de tu mapa es 20, el ancho de la imagen deberá ser 640.
  4. Guarda la imagen con el nombre "Blank" y guárdala en la carpeta 'System' de tu proyecto.
  5. Ve al mapeado de tu juego y coloca la posición inicial del personaje en la esquina inferior izquierda del mapa.
  6. Crea un evento de 'Inicio automático' con la opción 'Llamar script':
    $saver = Map_Saver.new
    Activa el 'interruptor local A' y crea una segunda página en el evento de 'Inicio automático' con la condición del 'interruptor local A' activada. Ahora, utiliza de nuevo la opción 'Llamar script':
    $saver.update
  7. Finalmente, ejecuta el juego y espera a que el mapa termine su desplazamiento y a continuación guarde la imagen (este proceso puede tardar varios minutos, dependiendo del tamaño del mapeado).

    Nota: La imagen PNG resultante se guardará en la carpeta del proyecto (incluyendo el HUD en pantalla). En caso de aparecer algún error, activa la función 'weird_mode' del inicio del script.


Descargar 'Demo':

Map Saver - Omegas7

Post editado correctamente por D.A.C.

#2 Re: [RPG Maker VX] Map Saver - Omegas7 el Lun Abr 25, 2011 12:46 am

JohaN.

avatar
Gracias, buen aporte, espero que me sirva para el parallax mapping *-*
Esta vez confiare en ti en que si puedes postear esto de rpgmakervx.
Saludos.

#3 Re: [RPG Maker VX] Map Saver - Omegas7 el Lun Abr 25, 2011 12:52 am

427008


ia lo ise XDDD

saludos hehehe !

#4 Re: [RPG Maker VX] Map Saver - Omegas7 el Lun Abr 25, 2011 1:41 am

D.A.C.

avatar
Muy buen aporte, aunque incumplía algunas normativas del apartado de scripts. Lo he editado correctamente; ordenando el post principal, traduciendo el script en castellano y añadiendo unas instrucciones detalladas. [+15 Makedas]




Si quieres verlo, haz click aquí.

#5 Re: [RPG Maker VX] Map Saver - Omegas7 el Lun Mar 18, 2013 4:33 am

Aegrotus

avatar
Definitivamente está genial este script, me va a ser muy útil en la creación de mi juego con el sistema de mapeado a base de Parallax.

#6 Re: [RPG Maker VX] Map Saver - Omegas7 el Lun Mar 18, 2013 1:22 pm

Gawl

avatar
Buenas a todas/os

El Script parece impresionantes però se puede usar en el VX-ACE ¿?

En caso de que no, no le quita lo impresionante que es por supuesto. Ópalo Guiño

Saludos a todas/os


alien Gawl alien

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

Permisos de este foro:
No puedes responder a temas en este foro.