¡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 [VX] Elección de heroe el Dom Ene 15, 2012 8:57 pm

FIGO

avatar
Este script permite la elección de un heroe antes de comenzar la partida.
Perdonen la traducción pero lo hice lo mejor que pude con google ya que estaba en japones.

Version: VX-RGSS2-28 [Ver.1.0.0]
SCript: Elecciòn del heroe
Autor: Claimh

imagen
Spoiler:

Codigo
Código:
#==============================================================================
# ■ VX-RGSS2-28 Elección de Heroe [Ver.1.0.0]            by Claimh
#------------------------------------------------------------------------------
#Seleccione un héroe antes de comenzar.
#El actor seleccionado ID # se puede encontrar en $game_system.hero_id.
#------------------------------------------------------------------------------
#[ オープンングで選択させるには ]
# Scene_Title#command_new_game の中などで
#  $scene = Scene_SelectHero.new
# に呼ぶように変更しておいて下さい。
#------------------------------------------------------------------------------
#[Los caracteres de control se puede utilizar en la descripción ]
#  \\c[n]  : cambio de color de la fuente
#  \\+    : Inicio / parada de la pantalla en negrita
#  \\-    : Inicio / fin de la letra cursiva
#  \\x[n]  : n extraídas de la ubicación de la dirección del eje X
#  \\n    : nueva línea
#==============================================================================

#==============================================================================
# ■ StartPos : posición inicial
#==============================================================================
module SelectHero
  class StartPos
    attr_reader :map_id
    attr_reader :x
    attr_reader :y
    attr_reader :actors
    #--------------------------------------------------------------------------
    # ● Inicialización de objetos
    #  map_id  : mapa ID
    #  x      : Posición X de partida
    #  y      : Posición Y de inicio
    #  actors  : ID de actor de los miembros iniciales
    #--------------------------------------------------------------------------
    def initialize(map_id, x=0, y=0, actors=[])
      @map_id = map_id; @x = x; @y = y; @actors = actors
    end
  end
end


#==============================================================================
# ■ ajuste
#==============================================================================
module SelectHero
  # fondo(Graphics/Pictures)
  BACK = "StarlitSky.png"
 
  # BGM(RPG::BGM)
  BGM = RPG::BGM.new("Theme2")

  # método de visualización
  #  0..imágenes de carácter
  #  1..Gráficos de cara
  TYPE = 0
 
  # Número máximo de líneas de descripción
  LINE = 4

  # héroe establecido
  HEROES = {
  # actorーID => [posición inicial(StartPos), leyenda]
    1 => [StartPos.new(1, 10, 10, [1,7,8]),
          "HEROE 1 Descripción\\n\\c[1]Historia\\c[0]\\n\\+Test\\+\\n"\
          "ABC"
    ],
    2 => [StartPos.new(2, 8, 7, [2]),
          "HEROE 2 Descripción\\n\\c[2]Historia\\c[0]\\n\\-Test\\-"
    ],
    4 => [StartPos.new(3, 2, 8, [4,5]),
          "HEROE 3 Descripción\\n\\c[3]Historia\\c[0]\\n\\-\\+Test\\+\\-"
    ],
  }
end


#=begin  # Scene_Title ejemplo de cómo cambiar
class Scene_Title
  #--------------------------------------------------------------------------
  # ● Comando: Nuevo juego
  #--------------------------------------------------------------------------
  def command_new_game
    Sound.play_decision
    $scene = Scene_SelectHero.new
    RPG::BGM.fade(1500)
    close_command_window
    Graphics.fadeout(60)
    Graphics.wait(40)
    Graphics.frame_count = 0
    RPG::BGM.stop
  end
end
#=end


#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System
  #--------------------------------------------------------------------------
  # ● Las variables
  #--------------------------------------------------------------------------
  attr_accessor  :hero_id      # Actor protagonistaーID
  #--------------------------------------------------------------------------
  # ● Inicialización de objetos
  #--------------------------------------------------------------------------
  alias initialize_hero initialize
  def initialize
    initialize_hero
    @hero_id = 0
  end
end


#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party
  #--------------------------------------------------------------------------
  # ●La configuración inicial de la party [redefinir]
  #--------------------------------------------------------------------------
  alias setup_starting_members_hero setup_starting_members
  def setup_starting_members
    if $game_system.hero_id == 0
      setup_starting_members_hero
    else
      @actors = []
      for i in SelectHero::HEROES[$game_system.hero_id][0].actors
        @actors.push(i)
      end
    end
  end
end


#==============================================================================
# ■ Window_Hero : Mostrar héroe ventana
#==============================================================================
class Window_Hero < Sprite
  attr_reader :index
  #--------------------------------------------------------------------------
  # ● Inicialización de objetos
  #--------------------------------------------------------------------------
  def initialize(actor_id, i)
    super(nil)
    @actor = $data_actors[actor_id]
    @index = i
    case SelectHero::TYPE
    when 0; draw_character
    when 1; draw_face
    end
    refresh(i == 0)
  end
  #--------------------------------------------------------------------------
  # ● Nombre deL HERO
  #--------------------------------------------------------------------------
  def name
    return @actor.name
  end
  #--------------------------------------------------------------------------
  # ● altura
  #--------------------------------------------------------------------------
  def h
    return self.src_rect.height
  end
  #--------------------------------------------------------------------------
  # ● ancho
  #--------------------------------------------------------------------------
  def w
    return self.src_rect.width
  end
  #--------------------------------------------------------------------------
  # ● refrescar
  #--------------------------------------------------------------------------
  def refresh(active=false)
    self.opacity = active ? 255 : 100
    @cnt = -1
    update
  end
  #--------------------------------------------------------------------------
  # ● Dibujar personaje
  #--------------------------------------------------------------------------
  def draw_character
    self.bitmap = Cache.character(@actor.character_name)
    sign = @actor.character_name[/^[\!\$]./]
    if sign != nil and sign.include?('$')
      cw = bitmap.width / 3
      ch = bitmap.height / 4
    else
      cw = bitmap.width / 12
      ch = bitmap.height / 8
    end
    n = @actor.character_index
    self.src_rect.set((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
  end
  #--------------------------------------------------------------------------
  # ● Dibujo grafico de la cara
  #--------------------------------------------------------------------------
  def draw_face(size=96)
    self.bitmap = Cache.face(@actor.face_name)
    x = @actor.face_index % 4 * 96 + (96 - size) / 2
    y = @actor.face_index / 4 * 96 + (96 - size) / 2
    w = size
    h = size
    self.src_rect.set(x, y, w, h)
  end
  #--------------------------------------------------------------------------
  # ● marco de actualización
  #--------------------------------------------------------------------------
  def update
    return if SelectHero::TYPE != 0
    @cnt += 1
    if (@cnt % 8) == 0
      @cnt = 0 if @cnt >= (8 * 4)
      n = @actor.character_index
      case (@cnt / 8)
      when 0; self.src_rect.set((n%4*3+1)*self.w, (n/4*4)*self.h, self.w, self.h)
      when 1; self.src_rect.set((n%4*3+0)*self.w, (n/4*4)*self.h, self.w, self.h)
      when 2; self.src_rect.set((n%4*3+1)*self.w, (n/4*4)*self.h, self.w, self.h)
      when 3; self.src_rect.set((n%4*3+2)*self.w, (n/4*4)*self.h, self.w, self.h)
      end
    end
  end
end

#==============================================================================
# ■ Window_HeroName : ventana del nombre del Heroe
#==============================================================================
class Window_HeroName < Window_Base
  #--------------------------------------------------------------------------
  # ● Inicialización de objetos
  #--------------------------------------------------------------------------
  def initialize
    super(0, 300, 160, WLH/2+32)
    self.back_opacity = 128
    @sprite = Sprite.new
    @sprite.bitmap = Bitmap.new(width - 32, WLH)
    @sprite.z = self.z + 10
  end
  #--------------------------------------------------------------------------
  # ● objeto
  #--------------------------------------------------------------------------
  def dispose
    super
    @sprite.dispose
  end
  #--------------------------------------------------------------------------
  # ● refrescar
  #--------------------------------------------------------------------------
  def refresh(x, y, name)
    y = 260 if y > 260
    self.x = x
    self.y = y
    @sprite.bitmap.clear
    @sprite.x = x + 8
    @sprite.y = y + 8
    @sprite.bitmap.draw_text(0, 0, @sprite.bitmap.width, @sprite.bitmap.height, name, 1)
  end
end

#==============================================================================
# ■ Window_HeroInfo : ventana de Información del héroe
#==============================================================================
class Window_HeroInfo < Window_Base
  #--------------------------------------------------------------------------
  # ● Inicialización de objetos
  #--------------------------------------------------------------------------
  def initialize
    h = SelectHero::LINE * WLH + 32
    h += 1 if SelectHero::LINE == 0
    super(0, 416-h, 544, h)
    self.visible = false if SelectHero::LINE == 0
    self.contents = Bitmap.new(width - 32, height - 32)
  end
  #--------------------------------------------------------------------------
  # ● refrecar
  #--------------------------------------------------------------------------
  def refresh(i=0)
    self.contents.clear
    draw_info_text(0, 0, self.contents.width, WLH, SelectHero::HEROES[i][1])
  end
  #--------------------------------------------------------------------------
  # ●Dibujar Información
  #--------------------------------------------------------------------------
  def draw_info_text(x, y, w, text_h, txt)
    txt = "" if txt.nil?
    text = txt.dup
    xx = 0
    line = 0
   
    # para mayor conveniencia
    text.gsub!(/\\\\/) { "\000" }
    # \\c[n]  : Cambiar color de la fuente
    text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
    # \\+    : Start / Stop pantalla en negrita
    text.gsub!(/\\[+]/) { "\002" }
    # \\-    : Inicio / final de cursiva
    text.gsub!(/\\[-]/) { "\003" }
    # \\x[n]  :Partiendo de la ubicación de la dirección del eje X n
    text.gsub!(/\\[Xx]\[([0-9]+)\]/) { "\004[#{$1}]" }
    # \\n    : romper
    text.gsub!(/\\[Nn]/) { "\005" }
   
    while ((c = text.slice!(/./m)) != nil)
      break if SelectHero::LINE <= line
      # \\ の場合、本来の文字に戻す
      c = "\\" if c == "\000"
      # \\c[n]  :Cambiar color de la fuente
      if c == "\001"
        # Cambiar el color del texto
        text.sub!(/\[([0-9]+)\]/, "")
        self.contents.font.color = text_color($1.to_i)
        next  # Siguiente carácter
      end
      # \\+    : Start / Stop pantalla en negrita
      if c == "\002"
        self.contents.font.bold = !self.contents.font.bold
        next  # Siguiente carácter
      end
      # \\-    : Inicio / final de cursiva
      if c == "\003"
        self.contents.font.italic = !self.contents.font.italic
        next  # Siguiente carácter
      end
      if c == "\004"
        # Cambiar la posición de dibujo
        text.sub!(/\[([0-9]+)\]/, "")
        xx = $1.to_i
        next  # Siguiente carácter
      end
      # \\n    : romper
      if c == "\005"
        xx = 0; y += text_h; line += 1
        next  # Siguiente carácter
      end
      # Dibujar la letra
      self.contents.draw_text(x+xx, y, 40, text_h, c)
      # x Más el ancho de carácteres dibujados
      xx += self.contents.text_size(c).width
      # salto de línea automático
      if xx > w
        xx = 0; y += text_h; line += 1
      end
    end
  end
end

#==============================================================================
# ■ SelectHeroes : Elija un héroe
#==============================================================================
class SelectHeroes
  OFFSET = SelectHero::TYPE == 0 ? 120 : 100

  attr_reader :index
  #--------------------------------------------------------------------------
  # ● Inicialización de objetos
  #--------------------------------------------------------------------------
  def initialize
    @sprites = []
    @ids = SelectHero::HEROES.keys
    s = @ids.size
    w = 504 / s
    @h = 100
    for i in 0...s
      @sprites.push(Window_Hero.new(@ids[i], i))
      @h = @sprites[i].h if @h < @sprites[i].h
    end
    for i in 0...s
      @sprites[i].x = 20 + w * i + (w - @sprites[i].w) / 2
      @sprites[i].y = OFFSET + (@h - @sprites[i].h) / 2
    end
    @index = 0
    @window = Window_HeroInfo.new
    @name = Window_HeroName.new
    refresh
  end
  #--------------------------------------------------------------------------
  # ● objeto
  #--------------------------------------------------------------------------
  def dispose
    for s in @sprites
      s.dispose
    end
    @window.dispose
    @name.dispose
  end
  #--------------------------------------------------------------------------
  # ●actor ID
  #--------------------------------------------------------------------------
  def actor_id
    return @ids[@index]
  end
  #--------------------------------------------------------------------------
  # ● el nombre del actor
  #--------------------------------------------------------------------------
  def name
    return @sprites[@index].name
  end
  #--------------------------------------------------------------------------
  # ● actor ID
  #--------------------------------------------------------------------------
  def start
    return SelectHero::HEROES[self.actor_id][0]
  end
  #--------------------------------------------------------------------------
  # ● Desplazar a la derecha
  #--------------------------------------------------------------------------
  def shift_right
    @index = (@index + 1) % @sprites.size
    refresh
  end
  #--------------------------------------------------------------------------
  # ● Desplazamiento a la izquierda
  #--------------------------------------------------------------------------
  def shift_left
    @index = (@index - 1 + @sprites.size) % @sprites.size
    refresh
  end
  #--------------------------------------------------------------------------
  # ● refrescar
  #--------------------------------------------------------------------------
  def refresh
    for s in @sprites
      if s.index == @index
        s.refresh(true)
        @window.refresh(self.actor_id)
        x = s.x + (s.w - @name.width) / 2
        @name.refresh(x, OFFSET+@h, s.name)
      else
        s.refresh(false)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● marco de actualización
  #--------------------------------------------------------------------------
  def update
    for s in @sprites
      s.update if s.index == @index
    end
  end
end


#==============================================================================
# ■ Scene_SelectHero : Seleccione un héroe escena
#==============================================================================
class Scene_SelectHero < Scene_Base
  T_SELECT = "Por favor, elija un héroe"
  T_YESNO  = "¿Seleccionar y comenzar?"
  #--------------------------------------------------------------------------
  # ● Inicie el procesamiento
  #--------------------------------------------------------------------------
  def start
    if SelectHero::BACK != nil
      @back = Sprite.new
      @back.bitmap = Cache.picture(SelectHero::BACK)
    end
    SelectHero::BGM.play
    #
    @help_window = Window_Help.new
    @help_window.set_text(T_SELECT)
    @characters = SelectHeroes.new
    #
    @yn_window = Window_Command.new(140, ["sí", "no"])
    @yn_window.x = (544 - 140) / 2
    @yn_window.y = 140
    @yn_window.active = @yn_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● finalizar el procesamiento
  #--------------------------------------------------------------------------
  def terminate
    @back.dispose if SelectHero::BACK != nil
    @characters.dispose
    @help_window.dispose
    @yn_window.dispose
  end
  #----------------------------------------------------------------------------
  # ● marco de actualización
  #----------------------------------------------------------------------------
  def update
    if @yn_window.active
      @yn_window.update
      if Input.trigger?(Input::B)
        Sound.play_cancel
        @yn_window.active = @yn_window.visible = false
        @help_window.set_text(T_SELECT)
      elsif Input.trigger?(Input::C)
        Sound.play_decision
        case @yn_window.index
        when 0; selection
        when 1; @yn_window.active = @yn_window.visible = false
                @help_window.set_text(T_SELECT)
        end
      end
    else
      update_select
    end
    @characters.update
  end
  #----------------------------------------------------------------------------
  # ● marco de actualización
  #----------------------------------------------------------------------------
  def update_select
    if Input.trigger?(Input::C)
      Sound.play_decision
      @yn_window.active = @yn_window.visible = true
      @yn_window.index = 1
      @help_window.set_text(sprintf(T_YESNO, @characters.name))
    elsif Input.repeat?(Input::RIGHT)
      Sound.play_cursor
      @characters.shift_right
    elsif Input.repeat?(Input::LEFT)
      Sound.play_cursor
      @characters.shift_left
    end
  end
  #----------------------------------------------------------------------------
  # ● proceso de selección
  #----------------------------------------------------------------------------
  def selection
    # Añadir el ID de actor seleccionado
    $game_system.hero_id = @characters.actor_id
    #
    $game_party.setup_starting_members            # Party inicial
    $game_map.setup(@characters.start.map_id)    #posición inicial en Mapa
    $game_player.moveto(@characters.start.x, @characters.start.y)
    $game_player.refresh
    $scene = Scene_Map.new
    Graphics.frame_count = 0
    RPG::BGM.stop
    $game_map.autoplay
  end
end

#2 Re: [VX] Elección de heroe el Dom Ene 15, 2012 11:12 pm

Cuervoso

avatar
Buen Aporte FIGO, pero debo decir que hay varias formas de hacer esto sin Scripts xD.
Pero con este puedes hacer juegos como "Treasures of the Rudras".

¡+15 Makeadas!

Saludos!






Cuervoso! No te pases ¬_¬

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.