Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 4069 miembros registrados.
El último usuario registrado es Fenix157.

Nuestros miembros han publicado un total de 84121 mensajes en 11982 argumentos.

Minimapa (con el tileset)

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP Minimapa (con el tileset)

Mensaje por Wecoc el 2011-07-25, 18:37

Minimapa con el Tileset
Autor: Squall

Este script es parecido al Minimapa_DW y al que posteó Noir-Mie pero muestra todo el tileset en él, y no un autotile según si es pasable o no.



Recursos: Megaupload

(también se pueden utilizar los del otro script)

Script:
Código:
#==============================================================================
# ? Game_Event
#==============================================================================

class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # ? name
  #--------------------------------------------------------------------------
  def name
      return @event.name
  end
end

#==============================================================================
# ? Map_Base
#------------------------------------------------------------------------------
#  Base class for mini maps
#
# made by squall // n.com">squall@loeher.n.com
#==============================================================================

class Map_Base
  MP_VERSION = 5
  #--------------------------------------------------------------------------
  # ? Initialize
  #--------------------------------------------------------------------------
  def initialize(corner, use_windowskin)
      @tileset_name = $game_map.tileset_name
      @bg = Window_Base.new(0, 0, 144, 112)
      @bg.z = 9000
      if no_display?
        @bg.windowskin = nil
      else
        unless use_windowskin
            @bg.dispose
            @bg = Window_Base.new(0, 0, 160, 128)
            @bg.contents = Bitmap.new(128, 96)
            @bg.windowskin = nil
            bmp = RPG::Cache.picture("mapback")
            @bg.contents.blt(0, 0, bmp, Rect.new(0, 0, 128, 96))
            @bg.z = 9015
        end
      end
      @map = Sprite.new
      @map.bitmap = Bitmap.new(map_width, map_height)
      @map.z = 9005
      @event = Sprite.new
      @event.bitmap = Bitmap.new(map_width, map_height)
      @event.z = 9010
      self.back_opacity = 180
      self.opacity = 180
      case corner
        when 1
            self.x = 16
            self.y = 16
        when 2
            self.x = 640 - width - 16
            self.y = 16
        when 3
            self.x = 16
            self.y = 480 - height - 16
        when 4
            self.x = 640 - width - 16
            self.y = 480 - height - 16
        else
            self.x = 16
            self.y = 16
      end
  end
  #--------------------------------------------------------------------------
  # ? display_map?
  #--------------------------------------------------------------------------
  def no_map_display?
      for event in $game_map.events.values
        if event.name.include?("no map")
            return true
        end
      end
      return false
  end
  #--------------------------------------------------------------------------
  # ? display_map?
  #--------------------------------------------------------------------------
  def no_event_display?
      for event in $game_map.events.values
        if event.name.include?("[no event]")
            return true
        end
      end
      return false
  end
  #--------------------------------------------------------------------------
  # ? display_map?
  #--------------------------------------------------------------------------
  def no_display?
      for event in $game_map.events.values
        if event.name.include?("[no map]") and event.name.include?("[no event]")
            return true
        end
      end
      return false
  end
  #--------------------------------------------------------------------------
  # ? dispose
  #--------------------------------------------------------------------------
  def dispose
      @bg.dispose
      @map.bitmap.dispose
      @map.dispose
      @event.bitmap.dispose
      @event.dispose
  end
  #--------------------------------------------------------------------------
  # ? map
  #--------------------------------------------------------------------------
  def map
      return @map
  end
  #--------------------------------------------------------------------------
  # ? event
  #--------------------------------------------------------------------------
  def event
      return @event
  end
  #--------------------------------------------------------------------------
  # ? width
  #--------------------------------------------------------------------------
  def width
      return 128
  end
  #--------------------------------------------------------------------------
  # ? opacity=
  #--------------------------------------------------------------------------
  def height
      return  96
  end
  #--------------------------------------------------------------------------
  # ? opacity=
  #--------------------------------------------------------------------------
  def visible=(bool)
      @bg.visible = bool
      @event.visible = bool
      @map.visible = bool
  end
  #--------------------------------------------------------------------------
  # ? opacity
  #--------------------------------------------------------------------------
  def visible
      return @bg.visible
  end
  #--------------------------------------------------------------------------
  # ? opacity=
  #--------------------------------------------------------------------------
  def opacity=(opacity)
      @event.opacity = opacity
      @map.opacity = opacity
  end
  #--------------------------------------------------------------------------
  # ? opacity
  #--------------------------------------------------------------------------
  def opacity
      return @event.opacity
  end
  #--------------------------------------------------------------------------
  # ? back_opacity=
  #--------------------------------------------------------------------------
  def back_opacity=(opacity)
      @bg.opacity = opacity
      @bg.contents_opacity = opacity if @bg.contents != nil
  end
  #--------------------------------------------------------------------------
  # ? back_opacity
  #--------------------------------------------------------------------------
  def back_opacity
      return @bg.opacity
  end
  #--------------------------------------------------------------------------
  # ? x=
  #--------------------------------------------------------------------------
  def x=(x)
      @bg.x = x - (@bg.width - 128) / 2
      @event.x = x + 8
      @map.x = x + 8
  end
  #--------------------------------------------------------------------------
  # ? x
  #--------------------------------------------------------------------------
  def x
      return @bg.x
  end
  #--------------------------------------------------------------------------
  # ? y=
  #--------------------------------------------------------------------------
  def y=(y)
      @bg.y = y - (@bg.height - 96) / 2
      @event.y = y + 8
      @map.y = y + 8
  end
  #--------------------------------------------------------------------------
  # ? y
  #--------------------------------------------------------------------------
  def y
      return @bg.y
  end
  #--------------------------------------------------------------------------
  # ? map_width
  #--------------------------------------------------------------------------
  def map_width
      return $game_map.width * 112/20
  end
  #--------------------------------------------------------------------------
  # ? map_height
  #--------------------------------------------------------------------------
  def map_height
      return $game_map.height * 80/15
  end
  #--------------------------------------------------------------------------
  # ? display_x
  #--------------------------------------------------------------------------
  def display_x
      return $game_map.display_x / 128 * 112/20
  end
  #--------------------------------------------------------------------------
  # ? map_height
  #--------------------------------------------------------------------------
  def display_y
      return $game_map.display_y / 128 * 80/15
  end
end

#==============================================================================
# ? Map_Mini
#------------------------------------------------------------------------------
#  Base class for mini maps
#
# made by squall // n.com">squall@loeher.n.com
#==============================================================================

class Map_Mini < Map_Base
  #--------------------------------------------------------------------------
  # ? initialize
  #--------------------------------------------------------------------------
  def initialize(corner, use_windowskin)
      super(corner, use_windowskin)
      unless no_map_display?
        draw_map
      end
  end
  #--------------------------------------------------------------------------
  # ? update
  #--------------------------------------------------------------------------
  def update
      map.src_rect.set(display_x, display_y, width - 16, height - 16)
      if @tileset_name != $game_map.tileset_name
        @tileset_name = $game_map.tileset_name
        unless no_map_display?
            map.bitmap.clear
            draw_map
        end
      end
    end
  #--------------------------------------------------------------------------
  # ? draw_map
  #--------------------------------------------------------------------------
  def draw_map
      bitmap = Bitmap.new($game_map.width * 32, $game_map.height * 32)
      for i in 0...($game_map.width * $game_map.height)
        x = i % $game_map.width
        y = i / $game_map.width
        for level in 0...3
            tile_id = $game_map.data[x, y, level]
            if tile_id >= 384
              tileset_bitmap = RPG::Cache.tile($game_map.tileset_name, tile_id, 0)
              src_rect = Rect.new(0, 0, 32, 32)
              bitmap.blt(x * 32, y * 32, tileset_bitmap, src_rect)
            end
            if tile_id >= 48 and tile_id < 384
              id = tile_id / 48 - 1
              tileset_bitmap = RPG::Cache.autotile($game_map.autotile_names[id])
              src_rect = Rect.new(32, 64, 32, 32)
              bitmap.blt(x * 32, y * 32, tileset_bitmap, src_rect)
            end
        end
      end
      d_rect = Rect.new(0, 0, map_width, map_height)
      s_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
      map.bitmap.stretch_blt(d_rect, bitmap, s_rect)
      bitmap.clear
      bitmap.dispose
  end
end
#==============================================================================
# ? Map_Event
#------------------------------------------------------------------------------
#  draw the events and hero position
#==============================================================================

class Map_Event < Map_Mini
  #--------------------------------------------------------------------------
  # ? initialize
  #--------------------------------------------------------------------------
  def initialize(corner = 4, windowskin = true)
      super(corner, windowskin)
      @dots = []
  end
  #--------------------------------------------------------------------------
  # ? refresh_dots
  #--------------------------------------------------------------------------
  def refresh_event_dots
      for event in $game_map.events.values
        bitmap = nil
        x = event.x * map_width / $game_map.width
        y = event.y * map_height / $game_map.height
        next if event.list == nil
        for i in 0...event.list.size
            if event.list[i].parameters[0].is_a?(String)
              if event.list[i].parameters[0] == "event"
                  bitmap = RPG::Cache.picture(event.list[i].parameters[0])
                  break
              elsif event.list[i].parameters[0] == "enemy"
                  bitmap = RPG::Cache.picture(event.list[i].parameters[0])
                  break
              elsif event.list[i].parameters[0].include?("teleport")
                  bitmap = RPG::Cache.picture("teleport")
                  break
              elsif event.list[i].parameters[0] == "chest"
                  bitmap = RPG::Cache.picture(event.list[i].parameters[0])
                  break
              elsif event.list[i].parameters[0] == "npc"
                  bitmap = RPG::Cache.picture(event.list[i].parameters[0])
                  break
              elsif event.list[i].parameters[0] == "savepoint"
                  bitmap = RPG::Cache.picture(event.list[i].parameters[0])
                  break
              else
                  bitmap = nil
              end
            end
        end
        @dots.push([x, y, bitmap])
      end
  end
  #--------------------------------------------------------------------------
  # ? refresh_dots
  #--------------------------------------------------------------------------
  def refresh_player_dot
      x = $game_player.x * map_width / $game_map.width
      y = $game_player.y * map_height / $game_map.height
      bitmap = RPG::Cache.picture("hero")
      @dots.push([x, y, bitmap])
  end
  #--------------------------------------------------------------------------
  # ? update
  #--------------------------------------------------------------------------
  def update
      super
      @dots.clear
      event.bitmap.clear
      refresh_event_dots unless no_event_display?
      refresh_player_dot unless no_display?
      for dot in @dots
        unless dot[2] == nil
            event.bitmap.blt(dot[0], dot[1], dot[2], Rect.new(0, 0, 4, 4))
        end
      end
      event.src_rect.set(display_x, display_y, width - 16, height - 16)
  end
end

#==============================================================================
# ? Map_Full
#------------------------------------------------------------------------------
# made by squall // n.com">squall@loeher.n.com
#==============================================================================

class Map_Full
  #--------------------------------------------------------------------------
  # ? Initialize
  #--------------------------------------------------------------------------
  def initialize
      @dots = []
      @teleport_sprites = []
      if $game_map.width > $game_map.height
        @map_width = 640
        @map_height = $game_map.height * @map_width / $game_map.width
        if @map_height > 480
            @map_height = 480
        end
      else
        @map_height = 480
        @map_width = $game_map.width * @map_height / $game_map.height
        if @map_width > 640
            @map_width = 640
        end
      end
      @map = Sprite.new
      @event = Sprite.new
      @map.bitmap = Bitmap.new(width, height)
      @event.bitmap = Bitmap.new(width, height)
      @map.x = @event.x = 320 - width / 2
      @map.y = @event.y = 240 - height / 2
      draw_map unless no_map_display?
      draw_event_dots unless no_event_display?
      draw_player_dot unless no_display?
      if no_display?
        @message = Window_Base.new(0, 208, 640, 64)
        message = "the map is not available"
        @message.contents = Bitmap.new(608, 32)
        @message.contents.font.name = "Arial"
        @message.contents.font.size = 32
        @message.contents.font.color.set(255, 255, 255, 100)
        @message.contents.draw_text(-1, -1, 608, 32, message, 1)
        @message.contents.draw_text(-1, 1, 608, 32, message, 1)
        @message.contents.draw_text(1, -1, 608, 32, message, 1)
        @message.contents.draw_text(1, 1, 608, 32, message, 1)
        @message.contents.font.color.set(255, 255, 255, 50)
        @message.contents.draw_text(-2, -2, 608, 32, message, 1)
        @message.contents.draw_text(-2, 2, 608, 32, message, 1)
        @message.contents.draw_text(2, -2, 608, 32, message, 1)
        @message.contents.draw_text(2, 2, 608, 32, message, 1)
        @message.contents.font.color.set(255, 255, 255)
        @message.contents.draw_text(0, 0, 608, 32, message, 1)
        @message.windowskin = nil
      end
  end
  #--------------------------------------------------------------------------
  # ? display_map?
  #--------------------------------------------------------------------------
  def no_map_display?
      for event in $game_map.events.values
        if event.name.include?("[full]")
            return false
        end
        if event.name.include?("[no map]")
            return true
        end
      end
      return false
  end
  #--------------------------------------------------------------------------
  # ? display_map?
  #--------------------------------------------------------------------------
  def no_event_display?
      for event in $game_map.events.values
        if event.name.include?("[full]")
            return false
        end
        if event.name.include?("[no event]")
            return true
        end
      end
      return false
  end
  #--------------------------------------------------------------------------
  # ? display_map?
  #--------------------------------------------------------------------------
  def no_display?
      for event in $game_map.events.values
        if event.name.include?("[full]")
            return false
        end
        if event.name.include?("[no map]") and event.name.include?("[no event]")
            return true
        end
      end
      return false
  end
  #--------------------------------------------------------------------------
  # ? dispose
  #--------------------------------------------------------------------------
  def dispose
      for sprite in @teleport_sprites
        sprite.dispose
      end
      @message.dispose if no_display?
      @map.bitmap.dispose
      @map.dispose
      @event.bitmap.dispose
      @event.dispose
  end
  #--------------------------------------------------------------------------
  # ? width
  #--------------------------------------------------------------------------
  def width
      return @map_width
  end
  #--------------------------------------------------------------------------
  # ? opacity=
  #--------------------------------------------------------------------------
  def height
      return @map_height
  end
  #--------------------------------------------------------------------------
  # ? draw_map
  #--------------------------------------------------------------------------
  def draw_map
      bitmap = Bitmap.new($game_map.width * 32, $game_map.height * 32)
      for i in 0...($game_map.width * $game_map.height)
        x = i % $game_map.width
        y = i / $game_map.width
        for level in 0...3
            tile_id = $game_map.data[x, y, level]
            if tile_id >= 384
              tileset_bitmap = RPG::Cache.tile($game_map.tileset_name, tile_id, 0)
              src_rect = Rect.new(0, 0, 32, 32)
              bitmap.blt(x * 32, y * 32, tileset_bitmap, src_rect)
            end
            if tile_id >= 48 and tile_id < 384
              id = tile_id / 48 - 1
              tileset_bitmap = RPG::Cache.autotile($game_map.autotile_names[id])
              src_rect = Rect.new(32, 64, 32, 32)
              bitmap.blt(x * 32, y * 32, tileset_bitmap, src_rect)
            end
        end
      end
      d_rect = Rect.new(0, 0, width, height)
      s_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
      @map.bitmap.stretch_blt(d_rect, bitmap, s_rect)
      bitmap.clear
      bitmap.dispose
  end
  #--------------------------------------------------------------------------
  # ? refresh_dots
  #--------------------------------------------------------------------------
  def draw_event_dots
      for event in $game_map.events.values
        bitmap = nil
        x = event.x * width / $game_map.width
        y = event.y * height / $game_map.height
        next if event.list == nil
        for i in 0...event.list.size
            if event.list[i].parameters[0].is_a?(String)
              if event.list[i].parameters[0] == "event"
                  bitmap = RPG::Cache.picture(event.list[i].parameters[0])
                  break
              elsif event.list[i].parameters[0] == "enemy"
                  bitmap = RPG::Cache.picture(event.list[i].parameters[0])
                  break
              elsif event.list[i].parameters[0].include?("teleport")
                  bitmap = RPG::Cache.picture("teleport")
                  name = event.list[i].parameters[0].dup
                  name.slice!("teleport, ")
                  @teleport_sprites.push(new_name_sprite(name, x, y))
                  break
              elsif event.list[i].parameters[0] == "chest"
                  bitmap = RPG::Cache.picture(event.list[i].parameters[0])
                  break
              elsif event.list[i].parameters[0] == "npc"
                  bitmap = RPG::Cache.picture(event.list[i].parameters[0])
                  break
              elsif event.list[i].parameters[0] == "savepoint"
                  bitmap = RPG::Cache.picture(event.list[i].parameters[0])
                  break
              else
                  bitmap = nil
              end
            end
        end
        @dots.push([x, y, bitmap])
      end
      for dot in @dots
        unless dot[2] == nil
            @event.bitmap.blt(dot[0], dot[1], dot[2], Rect.new(0, 0, 4, 4))
        end
      end
  end
  #--------------------------------------------------------------------------
  # ? new_name_sprite
  #--------------------------------------------------------------------------
  def new_name_sprite(name, x, y)
      sprite = Sprite.new
      sprite.y = y + 240 - height / 2
      x + 128 > 640 ? sprite.x = 512 : sprite.x = x + 320 - width / 2
      bitmap = Bitmap.new(128, 32)
      bitmap.font.name, bitmap.font.size = "Arial", 20
      bitmap.font.color.set(255, 255, 255)
      bitmap.draw_text(0, 0, 128, 32, name)
      sprite.bitmap = bitmap
      return sprite
  end
  #--------------------------------------------------------------------------
  # ? refresh_dots
  #--------------------------------------------------------------------------
  def draw_player_dot
      x = $game_player.x * width / $game_map.width
      y = $game_player.y * height / $game_map.height
      bitmap = RPG::Cache.picture("hero")
      @event.bitmap.blt(x, y, bitmap, Rect.new(0, 0, 4, 4))
  end
end

#==============================================================================
# ? Scene_MiniMap
#------------------------------------------------------------------------------
#  draw the map full screen
#==============================================================================

class Scene_MiniMap
  #--------------------------------------------------------------------------
  # ? main
  #--------------------------------------------------------------------------
  def main
      @map = Map_Full.new
      Graphics.transition
      loop do
        Graphics.update
        Input.update
        update
        if $scene != self
            break
        end
      end
      Graphics.freeze
      @map.dispose
  end
  #--------------------------------------------------------------------------
  # ? Update the contents of all five windows on the main menu
  #--------------------------------------------------------------------------
  def update
      if Input.trigger?(Input::B) | Input.trigger?(Input::CTRL)
        $game_system.se_play($data_system.cancel_se)
        $scene = Scene_Map.new
        return
      end
  end
end

#==============================================================================
# ? Scene_Map
#------------------------------------------------------------------------------
#  draw the mini map
# @corner is the corner you want the mini map to be displayed in.
# 1 is upper left, 2 is upper right, 3 is bottom left and 4 is bottom right
#
# @use_windowskin is whether true or false. true if you want to use the
# the current windowskin for the minimap background.
# or false if you want to use the picture named mapback in your picture folder.
#==============================================================================

class Scene_Map
  alias main_minimap main
  alias update_minimap update
  alias transfer_minimap transfer_player
  #--------------------------------------------------------------------------
  # ? initialize
  #--------------------------------------------------------------------------
  def initialize
      @corner = 2 # 1 or 2 or 3 or 4
      @use_windowskin = false # true or false
  end
  #--------------------------------------------------------------------------
  # ? main
  #--------------------------------------------------------------------------
  def main
      @event_map = Map_Event.new(@corner, @use_windowskin)
      main_minimap
      @event_map.dispose
  end
  #--------------------------------------------------------------------------
  # ? update
  #--------------------------------------------------------------------------
  def update
      @event_map.update
      if $game_system.map_interpreter.running?
        @event_map.visible = false
      else
        @event_map.visible = true
      end
      if Input.trigger?(Input::CTRL)
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_MiniMap.new
        return
      end
      update_minimap
  end
  #--------------------------------------------------------------------------
  # ? transfer_player
  #--------------------------------------------------------------------------
  def transfer_player
      transfer_minimap
      @event_map.dispose
      @event_map = Map_Event.new(@corner, @use_windowskin)
  end
end
avatar
Wecoc
Administrador
Administrador



Créditos 9129

Gracias : 471

Volver arriba Ir abajo

RPG Maker XP Re: Minimapa (con el tileset)

Mensaje por orochii el 2011-07-25, 19:44

Está bonito, aunque no sé si sería más fácil hacer un blit de los viewports del Scene_Map (creo que los eventos usan un viewport distinto). También no sé si eso se podrá xD, como obtener la información visible desde un viewport.
Y eso lo digo porque al principio empieza cargando el tileset y los datos del mapa.
No sé si funcionaría, pero es una idea... xD.

Pero en fin, felicitaciones a Squall, el script está genial ;D, gracias por el aporte Wecoc,
Orochii Zouveleki
avatar
orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6359

Gracias : 325

http://ragnarokrproject.com/

Volver arriba Ir abajo

RPG Maker XP Re: Minimapa (con el tileset)

Mensaje por Clark-CLK el 2011-07-25, 19:48

xDD Pedazo script xD
Esta vez creo que si usaré el maldito minimapa uqe tan inexacto era xD (creo) =)
bueno,

salu2

Wong Wong!!
avatar
Clark-CLK
Veterano
Veterano

0/3

Créditos 1350

Gracias : 3

http://ahoperpg-maker.ucoz.es

Volver arriba Ir abajo

RPG Maker XP Re: Minimapa (con el tileset)

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


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