Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[RMXP/VX] Desbloqueables

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [RMXP/VX] Desbloqueables

Mensaje por Wecoc el 2013-09-23, 22:04

Este script lo he hecho en exactamente 7 minutos xDD No pido créditos si lo usáis.
Lo que hace es permitirte tener un desbloqueable en el juego.

Os pondré un ejemplo; imaginad que queréis que pasado el último punto de guardado de vuestro juego (es decir que ya prácticamente se puede decir que el jugador se ha pasado el juego entero al menos una vez) queréis que si vuelve a iniciar el juego tenga algunas opciones que la primera vez no tenía.

Eso es lo que hace este script. Para usarlo, en ese punto donde se activa el desbloqueable lo único que tenéis que hacer es activar un interruptor. Luego usáis este script y en la primera línea ponéis la ID del interruptor, donde pone DES_SW = 1. Eso hará que mientras exista esa partida guardada el juego al empezar se inicie con ese interruptor ya activado; jugando con ese interruptor podréis poner condiciones en eventos que harán las cosas que no salían la primera vez.

Código:
#==============================================================================
# ** [XP] Desbloqueable (Extendido)
#==============================================================================

module Wep
  DES_SW = [1] # ID del switch que activará el proceso desbloqueable
  NEW_PLUS = true # Sale como Nuevo+ si está activado
end

class Window_Command < Window_Selectable
  def size
    return @item_max
  end
end

class Scene_Title
  include Wep
  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
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    draw_commands
    @continue_enabled = false
    for i in 0..3
      if FileTest.exist?("Save#{i+1}.rxdata")
        @continue_enabled = true
      end
    end
    if @continue_enabled
      @command_window.index = @command_window.size - 2
    else
      @command_window.disable_item(@command_window.size - 2)
    end
    $game_system.bgm_play($data_system.title_bgm)
    Audio.me_stop
    Audio.bgs_stop
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      break if $scene != self
    end
    Graphics.freeze
    @command_window.dispose
    @sprite.bitmap.dispose
    @sprite.dispose
  end
  
  def draw_commands
    s1 = "Nuevo"
    s2 = "Nuevo +"
    s3 = "Cargar"
    s4 = "Salir"
    if NEW_PLUS
      result = []
      for r in 0...DES_SW.size
        result.push(false)
      end
      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)
          for r in 0...DES_SW.size
            result[r] = true if $game_switches[DES_SW[r]] == true
          end
          file.close
        end
      end
      result.delete(false)
      array = result.size > 0 ? [s1, s2, s3, s4] : [s1, s3, s4]
    else
      array = [s1, s3, s4]      
    end
    @command_window = Window_Command.new(192, array)
    @command_window.back_opacity = 160
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 288
  end
  
  def update
    @command_window.update
    if Input.trigger?(Input::C)
      if @command_window.size == 4
        case @command_window.index
        when 0  # New game
          command_new_game
        when 1  # New game plus
          command_new_game_plus
        when 2  # Continue
          command_continue
        when 3  # Shutdown
          command_shutdown
        end
      else
        case @command_window.index
        when 0  # New game plus
          command_new_game_plus
        when 1  # Continue
          command_continue
        when 2  # Shutdown
          command_shutdown
        end
      end
    end
  end

  def command_new_game_plus
    if DES_SW == nil or DES_SW.size == 0
      command_new_game
      return
    end
    result = []
    for r in 0...DES_SW.size
      result.push(false)
    end
    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)
        for r in 0...DES_SW.size
          result[r] = true if $game_switches[DES_SW[r]] == true
        end
        file.close
      end
    end
    command_new_game
    for r in 0...result.size
      $game_switches[DES_SW[r]] = true if result[r] == true
    end
  end
end
Código:
#==============================================================================
# ** [VX] Desbloqueable (Extendido)
#==============================================================================

module Wep
  DES_SW = [1] # ID del switch que activará el proceso desbloqueable
  NEW_PLUS = true # Sale como Nuevo+ si está activado
end

class Window_Command < Window_Selectable
  def size
    return @item_max
  end
end

class Scene_Title
  include Wep
  def create_command_window
    s1 = Vocab::new_game
    s2 = Vocab::new_game + " +"
    s3 = Vocab::continue
    s4 = Vocab::shutdown
    if NEW_PLUS
      result = []
      for r in 0...DES_SW.size
        result.push(false)
      end
      for i in 0..3
        if FileTest.exist?("Save#{i+1}.rvdata") and (Wep::DES_SW).size > 0
          file = File.open("Save#{i+1}.rvdata", "rb")
          characters           = Marshal.load(file)
          Graphics.frame_count = Marshal.load(file)
          @last_bgm            = Marshal.load(file)
          @last_bgs            = Marshal.load(file)
          $game_system         = Marshal.load(file)
          $game_message        = Marshal.load(file)
          $game_switches       = Marshal.load(file)
          for r in 0...DES_SW.size
            result[r] = true if $game_switches[DES_SW[r]] == true
          end
          file.close
        end
      end
      result.delete(false)
      array = result.size > 0 ? [s1, s2, s3, s4] : [s1, s3, s4]
    else
      array = [s1, s3, s4]    
    end
    @command_window = Window_Command.new(192, array)
    @command_window.back_opacity = 160
    @command_window.x = (544 - @command_window.width) / 2
    @command_window.y = @command_window.size == 3 ? 288 : 262
    if @continue_enabled
      @command_window.index = @command_window.size - 2
    else
      @command_window.draw_item(@command_window.size - 2, false)
    end
    @command_window.openness = 0
    @command_window.open
  end
 
  def update
    @command_window.update
    if Input.trigger?(Input::C)
      if @command_window.size == 4
        case @command_window.index
        when 0  # New game
          command_new_game
        when 1  # New game plus
          command_new_game_plus
        when 2  # Continue
          command_continue
        when 3  # Shutdown
          command_shutdown
        end
      else
        case @command_window.index
        when 0  # New game plus
          command_new_game_plus
        when 1  # Continue
          command_continue
        when 2  # Shutdown
          command_shutdown
        end
      end
    end
  end

  def command_new_game_plus
    if DES_SW == nil or DES_SW.size == 0
      command_new_game
      return
    end
    result = []
    for r in 0...DES_SW.size
      result.push(false)
    end
    for i in 0..3
      if FileTest.exist?("Save#{i+1}.rvdata") and (Wep::DES_SW).size > 0
        file = File.open("Save#{i+1}.rvdata", "rb")
        characters           = Marshal.load(file)
        Graphics.frame_count = Marshal.load(file)
        @last_bgm            = Marshal.load(file)
        @last_bgs            = Marshal.load(file)
        $game_system         = Marshal.load(file)
        $game_message        = Marshal.load(file)
        $game_switches       = Marshal.load(file)
        for r in 0...DES_SW.size
          result[r] = true if $game_switches[DES_SW[r]] == true
        end
        file.close
      end
    end
    command_new_game
    for r in 0...result.size
      $game_switches[DES_SW[r]] = true if result[r] == true
    end
  end
end
Versión antígua (XP):

Código:
#==============================================================================
# ** Desbloqueable
#==============================================================================

module Wep
  DES_SW = 1 # ID del switch que activará el proceso desbloqueable
end

class Scene_Title
  alias switch_command_new_game command_new_game unless $@
  def command_new_game
    result = false
    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)
        result = true if $game_switches[Wep::DES_SW] == true
        file.close
      end
    end
    switch_command_new_game
    $game_switches[Wep::DES_SW] = true if result == true
  end
end

Cualquier duda me lo decís. No creo que sea difícil pasarlo a VX o Ace pero de momento no lo he mirado. Además lo puse para un solo interruptor, pero cambiar eso no sería complicado en caso de que quisiérais "desbloqueables múltiples" xD

Edito: He editado el script, ahora permite poner más de un interruptor haciendo desbloqueables múltiples.
Funciona igual, pero al principio podéis poner más de una id separadas por comas:
DES_SW = [3, 4, 9, 21]

Edito otra vez: He subido la versión para VX.

Edito aún otra vez: Debido a un bug en la última versión recuperé la que estaba bien, mañana intentaré subir la versión múltiple y la versión para VX de nuevo, ésta vez arregladas bien.

Edito por última vez: Resubido lo que faltaba por hacer.


Última edición por Wecoc el 2015-10-21, 19:41, editado 10 veces
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Desbloqueables

Mensaje por Dorvin el 2013-09-24, 13:08

Es muy útil!!
Siempre quise hacerlo pero no sabía como...
Me resultaba imposible hacerlo por engines...
Muy probablemente lo use, muchas gracias!

Que ironico que en 7 minutos logres hacer lo que no he hecho yo en 4 años xD Maldito RGSS!
avatar
Dorvin
Veterano
Veterano

0/3

Créditos 475

Gracias : 22

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Desbloqueables

Mensaje por Ganelan el 2013-09-24, 13:29

Vaya, muy interesante! A mi ese tipo de detalles de: "Si te acabas el juego salen cosas nuevas al darle nueva partida" en plan la saga "tales of" que a veces necesitas para algunas cosas empezar la partida una vez mas. Voy a hecharle un ojo, realmente me interesa.
avatar
Ganelan
Veterano
Veterano

0/3

Créditos 583

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Desbloqueables

Mensaje por PROmaster el 2013-09-24, 21:34

Podría ser fácilmente un "Nueva Partida +", ¿verdad?

También podría modificarse para que, al igual que pasa en juegos como los Mass Effect, Dragon Age, y semejantes, leyera un archivo para poder usar esos datos en una posible secuela a modo de elecciones anteriores o algo así.
avatar
PROmaster
Principiante
Principiante

0/3

Créditos 322

Gracias : 0

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Desbloqueables

Mensaje por ferenci el 2013-09-25, 07:14

WOW!!!
Rejugabilidad POWER!!!

La idea que aporta PROmaster también es interesante, ¿eso se puede hacer?
avatar
ferenci
Iniciado
Iniciado

0/3

Créditos 29

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Desbloqueables

Mensaje por Dorvin el 2013-09-25, 08:01

A ver lo de jugar un nuevo juego + con cosas que antes no había en el juego si, por supuesto, deboquear extras o trofeos... Pero pasarlo para otra versión de la saga evidentemente no. Como Wecoc dice se necesita el Save para que esto funcione, si pones el save en un proyecto distinto simplemente da error. Y de todos modos, con lo que cuesta hacer un juego, vais a hacer una saga? XD Relajaos un poco y ser realistas.
avatar
Dorvin
Veterano
Veterano

0/3

Créditos 475

Gracias : 22

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Desbloqueables

Mensaje por Wecoc el 2013-09-25, 14:43

Vigilad eso de las secuelas, a veces pueden ser mortales.

A ver os lo cuento a modo de tutorial, porque se podría hacer una secuela dentro del mismo juego de esa manera. Aún así lo veo un poco raro la verdad, los desbloqueables la mayoría de veces son detalles.

Pero se puede dividir un juego en dos "partes" usando este script, lo único que tenéis que hacer es empezar el juego en un mapa vacío con un evento en Inicio Automático. Luego ponéis en las condiciones y efectos si el interruptor está vacío o si no y según el caso transportáis al héroe en un mapa u otro. A partir de ahí el juego puede estar perfectamente dividido siendo solo un proyecto. Pero ya digo que es raro, al menos en RPGs xD

Bueno, ya he subido una versión más extendida del script y ahora ya funciona lo del Nuevo+ y lo de los desbloqueables múltiples, ya más no haré al sistema, solo pasarlo a VX y ya está.
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Desbloqueables

Mensaje por Avenger_K el 2013-09-29, 12:35

Buen aporte :)
Yo no voy a usarlo porque ya tengo algo similar por eventos, pero espero que la gente se anime a usarlo en sus juegos, ya que opciones que inciten a re jugar el juego es algo que no abunda demasiado en los juegos del maker.
Bye Bye!
avatar
Avenger_K
Soñador
Soñador

0/3

Créditos 338

Gracias : 15

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Desbloqueables

Mensaje por ElNachGames el 2015-10-21, 18:43

podes hacer una versión para el VX Ace
avatar
ElNachGames
Iniciado
Iniciado

0/3

Créditos 29

Gracias : 6

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Desbloqueables

Mensaje por Ledai el 2015-10-21, 19:37

No había visto este Script... la verdad es que me encanta la idea O.O Muchas gracias por aportarlo... seguro que le encuentro utilidad ^_^!!!!! Me lo guardo sin duda.
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 5210

Gracias : 215

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Desbloqueables

Mensaje por Wecoc el 2015-10-21, 19:53

Acabo de arreglarle un fallo que me han comentado que tenía, extrañamente no causaba ningún bug (igualmente lo debería haber notado x_x) pero sí bastante... confusión. Era una cosa del for i, muchas veces cuando no le asigno un nombre más concreto uso la i (de Integer) como variable para esos bucles y sin querer concatené dos for i, uno dentro del otro, lo cual es muy feo :(

También es cierto que usando Dir.glob (como hice en algunos scripts de Load/Save) hubiera ahorrado algunas líneas y la necesidad de comprobar si existe el archivo, pero no lo usé porque preferí usar la comprobación de archivos tal y como lo hace el maker por defecto. Digamos que fui a lo seguro xDD

ElNachGames: No tengo el VX Ace ni conozco lo suficiente el RGSS3 como para poder hacerlo sin mirar las bases. Quizá alguien pueda adaptarte el del VX.
avatar
Wecoc
Administrador
Administrador



Créditos 12297

Gracias : 648

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP/VX] Desbloqueables

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.