Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP] Birdsite GameOver Style

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Birdsite GameOver Style

Mensaje por Wecoc el 2015-10-19, 18:59

Éste script es una modificación que hice para mi juego Birdsite hace tiempo (allí está adaptado muy distinto porque toqué mucho las bases... en fin xD) para hacer el Game Over un poco más dinámico. No es una modificación muy elaborada que digamos, por lo que no me importa compartirla con la comunidad.

Lo que hace es mostrar una ventana con un texto, en la parte inferior del Game Over. Ese texto depende del capítulo actual del juego, el cual está definido por una variable del juego normal. Puedes desactivar eso de modo que el capítulo siempre sea 0. A parte de eso, cada capítulo puede tener distintas posibilidades (las que quieras), y esas se escojen al azar.

A parte de ponéroslo un poco más fácil si en vez de usar un ME queréis usar un BGM o BGS en el Game Over, o bien si al pulsar Aceptar para ir a título queréis que suene el sonido típico de Aceptar (son cosas que encontraréis fácilmente al miraros las descripciones del script), añade tres globales de tiempo.

TRANSITION_FRAMES --> Tiempo en el que transcurre la transición hacia el Game Over, por defecto 120 frames.

PRESS_WAIT_FRAMES --> Tiempo necesario para que Aceptar funcione, por ejemplo si queréis impedir que se pulse antes que termine el ME. Por defecto vale nil, lo que significa que está desactivado (no hay tiempo mínimo).

MAX_WAIT_FRAMES --> Tiempo máximo que puede durar el Game Over, si llega a éste salta al menú aunque no pulses Aceptar. Por defecto vale nil, está desactivado (no hay tiempo máximo).

Óbviamente la global más importante a cambiar es TEXTS, que define los textos posibles.

Código:
#==============================================================================
# ** Birdsite GameOver Style
#------------------------------------------------------------------------------
#  By: Wecoc (no requiere créditos)
#==============================================================================

#==============================================================================
# ** Window_Gameover
#==============================================================================

class Window_Gameover < Window_Base
  def initialize
    super(0, 480 - 64, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
  end
  
  def set_text(text, align = 0)
    self.contents.clear
    self.contents.font.color = normal_color
    x = y = 0
    text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
      $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
    end
    c_text = text.clone
    text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
    c_text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "" }
    w = self.contents.text_size(c_text).width
    case align
    when 1
      x += (self.width - 32) / 2
      x -= (w / 2)
    when 2
      x += (self.width - 32) - 16
      x -= w
    end
    while ((c = text.slice!(/./m)) != nil)
      if c == "\001"
        text.sub!(/\[([0-9]+)\]/, "")
        color = $1.to_i
        if color >= 0 and color <= 7
          self.contents.font.color = text_color(color)
        end
        next
      end
      self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
      x += self.contents.text_size(c).width
    end
  end
end

#==============================================================================
# ** Scene_Gameover
#==============================================================================

class Scene_Gameover
  
  CHAPTER_VARIABLE = 1  # Variable que controla el capítulo.
                        # (Capítulo = 0 equivaldría a introducción)
                        # Si vale nil siempre considera Capítulo = 0
  
  TRANSITION_FRAMES = 120 # Frames que dura la transición de pantalla
  
  PRESS_WAIT_FRAMES = nil # Número mínimo de frames que deben pasar hasta que
                          # puedes pulsar Aceptar e ir al título
  
  MAX_WAIT_FRAMES = nil # Número máximo de frames que dura el Game Over hasta
                        # que automáticamente salta al título
  
  # Chapter => [(opciones)]
  
  TEXTS =
    {0 =>  ["¡Menudo cateto estás hecho! ¡Si aún vamos por la intro!"],
     1 =>  ["\\c[1]\\n[2]\\c[0]: No puedo hacer nada para evitar tu muerte.",
            "¡Sigue intentándolo! ¡No te rindas!"]
    }
  
  def main
    # Parar música y sonido (BGM y BGS)
    $game_system.bgm_play(nil)
    $game_system.bgs_play(nil)
    # Reproducir música de Gameover (ME)
    $game_system.me_play($data_system.gameover_me)
    # Reproducir música de Gameover (BGM y BGS)
      ## $game_system.bgm_play("Nombre")
      ## $game_system.bgs_play("Nombre")
    # Mostrar imagen de Game Over
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.gameover($data_system.gameover_name)
    # Mostrar ventana con el texto
    @help_window = Window_Gameover.new
    chapter = 0
    if !CHAPTER_VARIABLE.nil? and CHAPTER_VARIABLE > 0
      chapter = $game_variables[CHAPTER_VARIABLE]
    end
    text_array = TEXTS[chapter]
    unless text_array.nil?
      i = rand(text_array.size)
      text = text_array[i].clone
      @help_window.set_text(text, 1) # 0: Izquierda, 1: Centro, 2: Derecha
    end
    # Definir contador
    @wait_count = 0
    # Ejecutar transición de pantalla
    Graphics.transition(TRANSITION_FRAMES)
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    # Borrar el gráfico y la ventana
    @sprite.bitmap.dispose
    @sprite.dispose
    @help_window.dispose
    # Ejecutar transición de pantalla
    Graphics.transition(40)
    Graphics.freeze
    # Cerrar el juego si está en modo Prueba de Batalla
    $scene = nil if $BTEST
  end

  def update
    @wait_count += 1
    # Si el número mínimo de frames para pasar ha sido superado
    if PRESS_WAIT_FRAMES.nil? or @wait_count > PRESS_WAIT_FRAMES
      # Si pulsas Aceptar
      if Input.trigger?(Input::C)
        # Reproducir sonido SE
        # $game_system.se_play($data_system.decision_se)
        # Ir a título
        command_to_title
      end
    end
    # Si el número máximo de frames antes de ir a título ha sido superado
    if !MAX_WAIT_FRAMES.nil? and @wait_count >= MAX_WAIT_FRAMES
      # Ir a título
      command_to_title
    end
  end
  
  def command_to_title
    # Silenciar BGM, BGS, and ME
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # Ir a la escena de título
    $scene = Scene_Title.new
  end
end
avatar
Wecoc
Administrador
Administrador



Créditos 12211

Gracias : 632

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.