¡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, conéctate 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.]

#1KMapSign RG Empty KMapSign RG el Sáb Jul 25, 2020 6:37 am

kyonides

kyonides
KMapSign RG


por Kyonides Arkanthes


Introducción
Este es otro script de mostrar un rótulo con el nombre del mapa actual. Ópalo Carcajada
Bueno el asunto es que sirve para los 3 Makers con Ruby. Ópalo Aplaudiendo
No es tan plug & play como se lo imaginan porque hay mucho que pueden personalizar a su gusto. Opalo Sorprendido

Para más información específica, no dejen de leerse los comentarios que les incluí allí.

Script

Código:
# * KMapSign RG
#   Scripter : Kyonides Arkanthes
#   v1.0.0 - 2020-07-24

# Este es otro script para Mostrar Nombre del Mapa Actual.
# Considero que esta versión es muy personalizable.
# Pueden necesitar que cambien los valores de las Constantes del módulo KMapSign
# en algún momento antes de testear su juego.
# El rótulo podría desaparecer de inmediato o luego de n segundos.

#* Para Desarrolladores con Rótulos diseñados en Photoshop o GIMP *#
  # Mejor creen rótulos con un ancho y una altura que sean múltiplos de 4.
  # Es lo que scripters y programadores usualmente recomiendan.

# * Llamados a Script * #

# Excluir Mapas que no necesitan un rótulo - Dentro del Juego
#   $game_system.exclude_maps!(IDMapa1, etc.)

# Cadena con Nombre del Mapa! Si existe...
#   $game_system.map_name(IDMapa)

# Cambiar Nombre del Mapa! - Sesión Actual o Partida Cargada
#   $game_system.change_map_name(IDMapa, 'Nuevo Nombre Mapa')

# Borrar Nombre del Mapa!
#   $game_system.delete_map_name(IDMapa)

# KMapSign.align = 0 #-> Escojan entre 0, 1 y 2
# KMapSign.pos_x = :left o :right o :center (para izq o der o centro)
# KMapSign.pos_y = :upper o :lower o :center (para arriba abajo o centro)

# Elijan dirección de animación simple de rótulo!
# Opciones: :left, :right, :up o :down según la posición
#   KMapSign.direction = SuDirecciónFavorita

# Escoger fondo predefinido para su rótulo!
#   KMapSign.backdrop = nombre ## Debe ser una 'cadena' o :símbolo

# ¿Este script deberá crear y desplegar  el nombre al vuelo?
#   KMapSign.render_text = true ## Verdadero o false para Falso

# ¿Este script mostrará el rótulo después de salir de un menú?
#   KMapSign.show_after_menu_exit = true ## O bien false

module KMapSign
  # ¿Cuánto debe estar visible? Usen segundos como 2.5
  SLIDE_TIMER = 2
  CLOSE_TIMER = 0 # 0 segundos - Cierre inmediato, 1+ - Desaparezca lentamente
  SPEED_X = 4 # Múltiplo de 4 es lo recomendable
  SPEED_Y = 4 # Múltiplo de 4 es lo recomendable
  # Estas coordenadas se usan al moverlo hacia ese punto límite.
  X = { :left => 8, :right => 512 }
  Y = { :upper => 8, :center => 8, :lower => 592 }
  # Incluyan tantos IDs de Mapas como quieran o déjenlo vacío
  EXCLUDE_MAPS = []
  # { ID => NombreImagenFondo, etc. } donde ID sería 'cadena' o :símbolo
  BACKDROPS = {}
  # Imagen de Fondo por Defecto según su ID -> nil - muestra 1 caja blanca
  @backdrop = nil
  @render_text = true # false si usará imágenes con texto propio
  @show_after_menu_exit = false
  BACKDROP_MARGIN_X = 8 # Margen Izquierdo o Derecho
  BACKDROP_MARGIN_Y = 8 # Margen Superior o Inferior
  # nil - default, 'Times New Roman' o "Dejavu Sans" - Fuente o Tipo escogido
  FONT_NAME = 'Verdana'
  FONT_SIZE = 19 # Tamaño de Fuente
  # Algunos caracteres se recortan si este valor no es superior al de FONT_SIZE
  # según la versión del RM y de la Fuente escogida
  FONT_BOX_HEIGHT = 24 # Tamaño de Fuente con espacio para g, j, p, q, y
  FONT_UPPER_MARGIN = 4 # Margen de Fuente - Texto creado al vuelo
  @align = 1 # 0 - izquierda, 1 - centro, 2 - derecha
  @pos_x = :left  # Posición Horizontal
  @pos_y = :upper # Posición Vertical
  @direction = :right
  WIDTH  = 640 # Ancho de Ventana en XP - Cambien esto por el suyo
  HEIGHT = 480 # Altura de Ventana en XP - Cambien esto por el suyo
  NO_CUSTOM_NAME = 'No Custom Map Name' # Para despulgarlo
  class << self
    attr_accessor :show, :render_text, :backdrop, :pos_x, :pos_y, :direction
  end
  module_function
  def find_version
    @version = ''
    lines = File.readlines('Game.ini')
    lines.each do |line|
      next unless line =~ /library/i
      return @version = line.scan(/\d/)[0].to_i
    end
  end

  def set_timers(map_id)
    @last_map_id = map_id
    @slide_timer = Graphics.frame_rate * SLIDE_TIMER
    if CLOSE_TIMER > 0
      @close_timer = Graphics.frame_rate * CLOSE_TIMER
      @close_frames = (255 / @close_timer).round
    end
  end

  def set_mapname
    unless $game_system.map_names.include?(@last_map_id)
      mapname = NAMES[@last_map_id].name
      @mapname = mapname.gsub(/\[\w+\]|\{\w+\}|\(\w+\)/, '')
    else
      @mapname = $game_system.map_names[@last_map_id]
    end
  end

  def create_graphics
    @viewport = Viewport.new(0, 0, WIDTH, HEIGHT)
    @viewport.z = 9000
    @sign = Sprite.new(@viewport)
    back = BACKDROPS[@backdrop]
    if back == nil
      @render_text = true
      bit = Bitmap.new(240, 32)
      bit.fill_rect(bit.rect, Color.new(255, 255, 255, 128))
    else
      bit = RPG::Cache.picture(back).dup
    end
    @sign.bitmap = bit
  end

  def create(map_id)
    return if @last_map_id == map_id and !@show_after_menu_exit
    @show = !$game_system.hide_mapsign?(map_id)
    return unless @show
    set_timers(map_id)
    set_mapname
    create_graphics
    b = @sign.bitmap
    d = @direction
    if @pos_x == :left
      @sign.x = BACKDROP_MARGIN_X
      if @pos_y == :upper
        @sign.x = -b.width if d == :right
        @sign.y = d == :right ? BACKDROP_MARGIN_Y : -b.height
      elsif @pos_y == :center
        @direction = :right
        @sign.y = HEIGHT / 2 - b.height / 2
      elsif @pos_y == :lower
        @direction = :up if d != :right
        @sign.x = -b.width if d == :right
        @sign.y = d == :right ? BACKDROP_MARGIN_Y : -b.height
      end
    elsif @pos_x == :center
      @sign.x = WIDTH / 2 - b.width / 2
      if @pos_y == :upper
        @direction = :down
        @sign.y = -b.height
      elsif @pos_y == :lower
        @direction = :up
        @sign.y = HEIGHT + b.height
      end
    elsif @pos_x == :right
      @sign.x = WIDTH - BACKDROP_MARGIN_X
      if @pos_y == :upper
        @sign.x += BACKDROP_MARGIN_X if d == :left
        @sign.y = d == :left ? BACKDROP_MARGIN_Y : -b.height
      elsif @pos_y == :center
        @direction = :left
        @sign.y = HEIGHT / 2 - b.height / 2
      elsif @pos_y == :lower
        @direction = :up if d != :left
        @sign.x += BACKDROP_MARGIN_X if d == :left
        @sign.y = HEIGHT - (d == :left ? BACKDROP_MARGIN_Y : 0)
      end
    end
    return unless @render_text
    b.font.name = FONT_NAME if FONT_NAME
    height = FONT_BOX_HEIGHT
    b.draw_text(0, FONT_UPPER_MARGIN, b.width, height, @mapname, @align)
  end

  def update_show_dir
    case @direction
    when :right
      @sign.x += SPEED_X
      @show = @sign.x != X[@pos_x]
    when :down
      @sign.y += SPEED_Y
      @show = @sign.y != Y[@pos_y]
    when :left
      @sign.x -= SPEED_X
      @show = @sign.x != X[@pos_x]
    when :up
      @sign.y -= SPEED_Y
      @show = @sign.y != Y[@pos_y]
    end
  end

  def dispose
    return unless @sign
    @show = false
    @sign.visible = false
    @sign.bitmap.dispose
    @sign.dispose
    @viewport.dispose
    @sign = nil
    @viewport = nil
  end
    
  def update_sign
    return update_show_dir if @show
    return @slide_timer -= 1 if @slide_timer > 0
    if @close_timer > 0
      @sign.opacity -= @close_frames
      return @close_timer -= 1
    end
    dispose
  end

  def get_extension
    @version == 3 ? 'rvdata2' : @version == 2 ? 'rvdata' : 'rxdata'
  end

  def reset
    @last_map_id = 0
    @close_timer = 0
  end
  find_version
  NAMES = load_data('Data/MapInfos.' + get_extension)
end

class Game_System
  alias :kyon_mapsign_gm_screen_init :initialize
  def initialize
    kyon_mapsign_gm_screen_init
    KMapSign.reset
    @map_names = {}
    @map_names.default = KMapSign::NO_CUSTOM_NAME
    @exclude_maps = KMapSign::EXCLUDE_MAPS.dup
  end

  def exclude_maps!(*ids)
    @exclude_maps += ids
    @exclude_maps = @exclude_maps.uniq.sort
  end
  def map_name(map_id) @exclude_maps[map_id] end
  def change_map_name(map_id, name) @exclude_maps[map_id] = name end
  def delete_map_name(map_id) @exclude_maps.delete(map_id) end
  def hide_mapsign?(map_id) @exclude_maps.include?(map_id) end
  attr_reader :map_names, :exclude_maps
end

class Spriteset_Map
  alias :kyon_mapsign_smap_init :initialize
  alias :kyon_mapsign_smap_up :update
  alias :kyon_mapsign_smap_disp :dispose
  def initialize
    KMapSign.create($game_map.map_id)
    kyon_mapsign_smap_init
  end

  def update
    kyon_mapsign_smap_up
    KMapSign.update_sign
  end

  def dispose
    kyon_mapsign_smap_disp
    KMapSign.dispose
  end
end

Términos de Uso

Libre de utilizarse en proyectos no comerciales.
Mencionen mi pseudónimo y a este foro en sus créditos.

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.