¡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.]

Wecoc

avatar
Desbloqueable
Cambiar título con variable


por Wecoc


Introducción

Encontré un viejo script básico que según parece resultó que no había posteado en ninguna parte, así que decidí ponerlo aquí. Lo que hace este script es crear un desbloqueable conjunto que modifica la escena de título. En detalle, cuando cambias una variable concreta y guardas la partida, se desbloquea el cambio. Luego al iniciar el juego otra vez en la escena de título comprueba en todas las partidas guardadas el valor de esa variable, y se queda con el más alto. Finalmente usa eso para cambiar el gráfico del título.

La utilidad de esto consiste en cambiar la imagen de título del juego según el capítulo del juego al que haya llegado el jugador.
También puede servir para Easter-eggs.

Código

Código:
#==============================================================================
# ** [XP] Desbloqueable - Cambiar título con variable
# Autor: Wecoc (no requiere créditos)
#==============================================================================

module Wep
  # ID de la variable que asignará el gráfico del título
  TitleChangeVar = 1
end

class Scene_Title
  def main
    if $BTEST
      battle_test
      return
    end
    $data_actors        = load_data("Data/Actors.rxdata")
    $data_classes       = load_data("Data/Classes.rxdata")
    $data_skills        = load_data("Data/Skills.rxdata")
    $data_items         = load_data("Data/Items.rxdata")
    $data_weapons       = load_data("Data/Weapons.rxdata")
    $data_armors        = load_data("Data/Armors.rxdata")
    $data_enemies       = load_data("Data/Enemies.rxdata")
    $data_troops        = load_data("Data/Troops.rxdata")
    $data_states        = load_data("Data/States.rxdata")
    $data_animations    = load_data("Data/Animations.rxdata")
    $data_tilesets      = load_data("Data/Tilesets.rxdata")
    $data_common_events = load_data("Data/CommonEvents.rxdata")
    $data_system        = load_data("Data/System.rxdata")
    $game_system = Game_System.new
    @continue_enabled = false
    for i in 0..3
      if FileTest.exist?("Save#{i+1}.rxdata")
        @continue_enabled = true
      end
    end
    @sprite = Sprite.new
    new_title = 0
    if @continue_enabled
      for i in 0..3
        if FileTest.exist?("Save#{i+1}.rxdata")
          file = File.open("Save#{i+1}.rxdata", "rb")
          characters = Marshal.load(file)
          Graphics.frame_count = Marshal.load(file)
          $game_system = Marshal.load(file)
          $game_switches = Marshal.load(file)
          $game_variables = Marshal.load(file)
          if $game_variables[Wep::TitleChangeVar] > new_title
            new_title = $game_variables[Wep::TitleChangeVar]
          end
        end
      end
    end
    case new_title
    when 0 # Valor por defecto (variable no asignada)
      @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    # Define aquí los nombres del título según el valor de la variable
    when 1
      @sprite.bitmap = RPG::Cache.title("Capítulo 1")
    when 2
      @sprite.bitmap = RPG::Cache.title("Capítulo 2")
    # Puedes añadir tantos como quieras aquí
    end
    s1 = "Nuevo"
    s2 = "Cargar"
    s3 = "Salir"
    @command_window = Window_Command.new(192, [s1, s2, s3])
    @command_window.back_opacity = 160
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 288
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.disable_item(1)
    end
    $game_system.bgm_play($data_system.title_bgm)
    Audio.me_stop
    Audio.bgs_stop
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @command_window.dispose
    @sprite.bitmap.dispose
    @sprite.dispose
  end
end

Instrucciones

Al principio del script veréis una línea donde se define TitleChangeVar = 1, solo tenéis que cambiar ese 1 por el índice de la variable que se usará para leer la imagen correcta.

Luego hacia el final del script hay una parte donde se definen de ejemplo los nombres "Capítulo 1" y "Capítulo 2" para los valores 1 y 2 de la variable respectivamente. Siguiendo el mismo patrón se pueden definir tantas versiones del título como se quiera. El código tiene algunos comentarios para hacerlo más fácil.

Ledai

avatar
Esto sirve para la escena de título estándar, no? Pero podría servir para una escena de título hecha por engine?? Ya sabes con el edit de Main que hace que empiece el juego en mapa...

Wecoc

avatar
Está hecho de modo que se aventaja del hecho que en Scene_Title aún no estén definidas la mayoría de globales que se almacenan al guardar, de modo que al cargarlas no reescribe nada. Intentarlo en el mapa no funcionaría. Con escenas de título personalizadas puede que funcione y puede que no; reescribe el método main de Scene_Title así que igual haya que adaptarle alguna cosa del otro script.

En cuanto a hacerlo en una escena de título por engine puedes usar una versión más genérica del mismo concepto.

Código:
#==============================================================================
# ** [XP] Desbloqueable - Variable máxima
# Autor: Wecoc (no requiere créditos)
#------------------------------------------------------------------------------
# Obtener el máximo de una variable a lo largo de todas las partidas guardadas
# En un evento usa esto:
#     get_var_from_files(ID de variable)
# Ejemplo: get_var_from_files(1)
#==============================================================================

class Interpreter
  def get_var_from_files(variable_id)
    result = 0
    for i in 0...4 # Cambia el 4 por el número máximo de partidas en tu juego
      if FileTest.exist?("Save#{i+1}.rxdata")
        file = File.open("Save#{i+1}.rxdata", "rb")
        characters = Marshal.load(file)
        Graphics.frame_count = Marshal.load(file)
        game_system = Marshal.load(file)
        game_switches = Marshal.load(file)
        game_variables = Marshal.load(file)
        if $game_variables[Wep::TitleChangeVar] > result
          result = $game_variables[Wep::TitleChangeVar]
        end
      end
    end
    return result
  end
end

En Condiciones y efectos o bien llamada de script puedes usar get_var_from_files(ID de variable) para obtener esa variable a lo largo de los archivos, y así dependiendo de esta poner una imagen u otra en el título.

Yo lo que haría es asignarlo en otra variable temporal para no tener que cargarlo otra vez, pondré un ejemplo en pseudo-código

Código:
# Asignar la variable 1 a lo largo de todas las partidas guardadas a una nueva variable 2
> Llamar script: $game_variables[2] = get_var_from_files(1)
# Encadenar varias Condiciones y Efectos según el valor de la variable
> Condiciones y Efectos: Variable 2 == 0
>> Mostrar Imagen: Título A
> Excepción
>> Condiciones y Efectos: Variable 2 == 1
>>> Mostrar Imagen: Título B
>> Excepción
>>> (ETC)
>> FIN
> FIN
# Volver a igualar la variable temporal a 0
> Opciones de variable: [0002] = 0

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.