Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 4140 miembros registrados.
El último usuario registrado es ReyPizza.

Nuestros miembros han publicado un total de 84809 mensajes en 12071 argumentos.

[XP] Spriteset File System

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Spriteset File System

Mensaje por Wecoc el 2015-09-08, 00:32

Éste script no es mío, me lo encontré por ahí y estaba fatal (lleno de bugs, ordenado de forma rarísima...) así que lo modifiqué un poco ;D
Edit: Como no entiendo mucho su planteamiendo he hecho mi propia versión para lograr el mismo efecto. Pongo aquí ambas versiones.

Versión de Kratos:
Código:
#==============================================================================
#------------------------------------------------------------------------------
#====================== * Spriteset File System * =============================
#================== Author: Kratos (no credits required) ======================
#=========================== Version 1.0 ======================================
#------------------------------------------------------------------------------
#==============================================================================

module Save_Module
  TEMP_NAME = "SaveTemp.rxdata"
  BACK_PICTURE = ''
  DEBUG_PRINT = false
  SAVE_TO_MENU = true
end

class Scene_File
  include Save_Module
  
  def main
    unless $game_party.nil?
      write_save_data(filename_temp)
    end
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.picture(BACK_PICTURE) rescue nil
    @sprite.z = -100
    @help_window = Window_Help.new
    @help_window.set_text(@help_text)
    @help_window.back_opacity = 160
    @savefile_windows = []
    for i in 0..3
      save_window = Window_SaveFile.new(i, make_filename(i))
      save_window.back_opacity = 160
      @savefile_windows.push(save_window)
    end
    @savefile_index = $game_temp.last_file_index
    @file_index = $game_temp.last_file_index
    @savefile_windows[@file_index].selected = true
    refresh_spriteset
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @help_window.dispose
    for i in @savefile_windows
      i.dispose
    end
    read_save_data(filename_temp)
    if FileTest.exist?(filename_temp)
      File.delete(filename_temp)
    end
    @spriteset.dispose rescue nil
    @sprite.dispose
  end
  
  def filename_temp
    return TEMP_NAME
  end
  
  def read_save_data(filename)
    unless FileTest.exist?(filename)
      return
    end
    if $DEBUG && DEBUG_PRINT
      print "Read #{filename}"
    end
    file = File.open(filename, "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)
      $game_self_switches  = Marshal.load(file)
      $game_screen         = Marshal.load(file)
      $game_actors         = Marshal.load(file)
      $game_party          = Marshal.load(file)
      $game_troop          = Marshal.load(file)
      $game_map            = Marshal.load(file)
      $game_player         = Marshal.load(file)
      if $game_system.magic_number != $data_system.magic_number
        $game_map.setup($game_map.map_id)
        $game_player.center($game_player.x, $game_player.y)
      end
      $game_party.refresh
    file.close
  end
  
  def write_save_data(filename)
    if $DEBUG && DEBUG_PRINT
      print "Load #{filename}"
    end
    file = File.open(filename, "wb")
      characters = []
      for i in 0...$game_party.actors.size
        actor = $game_party.actors[i]
        characters.push([actor.character_name, actor.character_hue])
      end
      Marshal.dump(characters, file)
      Marshal.dump(Graphics.frame_count, file)
      $game_system.save_count += 1
      $game_system.magic_number = $data_system.magic_number
      Marshal.dump($game_system, file)
      Marshal.dump($game_switches, file)
      Marshal.dump($game_variables, file)
      Marshal.dump($game_self_switches, file)
      Marshal.dump($game_screen, file)
      Marshal.dump($game_actors, file)
      Marshal.dump($game_party, file)
      Marshal.dump($game_troop, file)
      Marshal.dump($game_map, file)
      Marshal.dump($game_player, file)
    file.close
  end
  
  def refresh_spriteset
    filename = make_filename(@file_index)
    unless FileTest.exist?(filename)
      @spriteset.dispose rescue nil
      return
    end
    read_save_data(filename)
    @spriteset.dispose rescue nil
    @spriteset = Spriteset_Map.new
  end

  alias savefile_spriteset_upd update unless $@
  def update
    unless @spriteset.nil?
      @spriteset.update rescue nil
    end
    if @savefile_index != @file_index
      @savefile_index = @file_index
      refresh_spriteset
    end
    savefile_spriteset_upd
  end
end

class Scene_Save < Scene_File
  def write_save_data(filename)
    super(filename)
  end
  
  def read_save_data(filename)
    super(filename)
  end
  
  def on_decision(filename)
    read_save_data(filename_temp)
    @spriteset.dispose rescue nil
    @spriteset = Spriteset_Map.new
    $game_system.se_play($data_system.save_se)
    write_save_data(filename)
    if $game_temp.save_calling
      $game_temp.save_calling = false
      $scene = Scene_Map.new
      return
    end
    if SAVE_TO_MENU
      $scene = Scene_Menu.new(4)
    end
  end
end

class Scene_Load < Scene_File
  def write_save_data(filename)
    super(filename)
  end
  
  def read_save_data(filename)
    super(filename)
  end
  
  def on_decision(filename)
    unless FileTest.exist?(filename)
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    $game_system.se_play($data_system.load_se)
    read_save_data(filename)
    $game_system.bgm_play($game_system.playing_bgm)
    $game_system.bgs_play($game_system.playing_bgs)
    $game_map.update
    $scene = Scene_Map.new
  end
end

module Kernel
  alias filetemp_exit exit unless $@
  def exit(*args)
    filename_temp = Save_Module::TEMP_NAME
    if FileTest.exist?(filename_temp)
      File.delete(filename_temp)
    end
    filetemp_exit(*args)
  end
end

Versión de Wecoc:
Código:
#==============================================================================
# ** [XP] Spriteset File System
#------------------------------------------------------------------------------
# Autor: Wecoc (no requiere créditos)
#==============================================================================

class Scene_File
 
  BACK_PICTURE = ''
 
  unless $@
    alias spriteset_file_ini initialize
    alias spriteset_file_upd update
  end
 
  def initialize(*args)
    spriteset_file_ini(*args)
    @game_system        = $game_system.clone        rescue nil
    @game_switches      = $game_switches.clone      rescue nil
    @game_variables    = $game_variables.clone    rescue nil
    @game_self_switches = $game_self_switches.clone rescue nil
    @game_screen        = $game_screen.clone        rescue nil
    @game_actors        = $game_actors.clone        rescue nil
    @game_party        = $game_party.clone        rescue nil
    @game_troop        = $game_troop.clone        rescue nil
    @game_map          = $game_map.clone          rescue nil
    @game_player        = $game_player.clone        rescue nil
  end
 
  def main
    @background = Sprite.new
    if BACK_PICTURE != ''
      @background.bitmap = RPG::Cache.picture(BACK_PICTURE) rescue nil
    end
    @help_window = Window_Help.new
    @help_window.set_text(@help_text)
    @savefile_windows = []
    for i in 0..3
      @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
    end
    @help_window.back_opacity = 160
    for i in @savefile_windows
      i.back_opacity = 160
    end
    @file_index = $game_temp.last_file_index
    @savefile_windows[@file_index].selected = true
    refresh_background
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @background.dispose
    @help_window.dispose
    for i in @savefile_windows
      i.dispose
    end
    if !@spriteset.nil?
      @spriteset.dispose
      @spriteset = nil
    end
  end
 
  def update
    @background.update
    file_index = @file_index
    spriteset_file_upd
    if file_index != @file_index
      refresh_background
    end
  end
 
  def refresh_background
    if !@spriteset.nil?
      @spriteset.dispose
      @spriteset = nil
    end
    f = @savefile_windows[@file_index]
    filename = f.filename
    if FileTest.exist?(filename)
      file = File.open(filename, "r")
      characters = Marshal.load(file)
      frame_count = Marshal.load(file)
      $game_system        = Marshal.load(file)
      $game_switches      = Marshal.load(file)
      $game_variables    = Marshal.load(file)
      $game_self_switches = Marshal.load(file)
      $game_screen        = Marshal.load(file)
      $game_actors        = Marshal.load(file)
      $game_party        = Marshal.load(file)
      $game_troop        = Marshal.load(file)
      $game_map          = Marshal.load(file)
      $game_player        = Marshal.load(file)
      $game_map.setup($game_map.map_id)
      $game_player.center($game_player.x, $game_player.y)
      $game_party.refresh
      file.close
      @spriteset = Spriteset_Map.new
    end
  end
 
  def reset_data
    $game_system        = @game_system
    $game_switches      = @game_switches
    $game_variables    = @game_variables
    $game_self_switches = @game_self_switches
    $game_screen        = @game_screen
    $game_actors        = @game_actors
    $game_party        = @game_party
    $game_troop        = @game_troop
    $game_map          = @game_map
    $game_player        = @game_player
  end
end

class Scene_Load < Scene_File
  alias spriteset_file_on_cancel on_cancel unless $@
  def on_cancel
    spriteset_file_on_cancel
    reset_data
  end
end

class Scene_Save < Scene_File
  unless $@
    alias spriteset_file_on_cancel  on_cancel
    alias spriteset_file_on_decision on_decision
  end
 
  def on_cancel
    spriteset_file_on_cancel
    reset_data
  end
 
  def on_decision(filename)
    reset_data
    spriteset_file_on_decision(filename)
  end
end

No se requieren créditos en ninguna de las dos versiones.

Lo que hace el script es mostrar debajo de las ventanas de Cargar / Guardar el mapa tal y como estaba en la partida, o bien una imagen que hay que definirla donde pone BACK_PICTURE = '' en el caso de que la ranura seleccionada esté vacía.

Lo de mostrar el mapa me recordó a scripts como el Law's Custom Save System o el Woratana's Neo Save Script pero éste está montado de forma más simple, sin necesidad de reescribir Spriteset_Map.

Screen: Screen File

Cada vez que miro en webs ajenas acabo haciendo igual xDD


Última edición por Wecoc el 2017-04-29, 12:01, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 9218

Gracias : 493

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Spriteset File System

Mensaje por orochii el 2015-09-08, 15:37

Al principio pensé que era que mostraba una imagen del mapa por cada archivo, no como fondo sino como algo junto al texto. Pero pues... está interesante que sea como fondo. Habría que probarlo con otros sistemas no default, porque digo, si se dejan las partes importantes, se pueden hacer alias y que se actualice el mapa mostrado y tal sólo cuando cambie el índice de selección. Pero no he visto el script entonces no sé cómo está hecho xD.

Buen aporte :^D.

EDIT: Oh, de hecho después de mirarlo un poco creo que sí parece ser compatible con otras cosas :^D.
avatar
orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6389

Gracias : 332

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Spriteset File System

Mensaje por Ledai el 2017-04-28, 11:37

Perdón por el Necro, Pero esta vez vengo a aportar un detalle al script que le e encontrado tras testearlo.

El scrip funciona muy bien, pero al llamar a la pantalla de carga desde el mapa no actualiza la escena cargada, solo actualiza el audio, lo demás no; por lo que se hace imposible cargar la partida nueva.

Me refiero al usar "$scene = Scene_Load.new"

Por ejemplo, si en el guarda partidas quieres poner la opción de cargar directamente sin pasar por el menú, no se puede ya que no cambia a la partida nueva. No sé a qué se debe, por eso lo comento y quedo el aviso.

Chao!

PD: La actualización del indice de Script con los iconos de los makers y todo ha quedado estupenda, ahora se encuentra todo mucho mejor, gracias al Staff!!

Edt: XDD Ohh tiene un Bug, mortal... al cargar una partida, y luego salir a la pantalla de título y volver a cargar otra partida... no lo hace, regresa a la primera partida cargada.
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 2354

Gracias : 170

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Spriteset File System

Mensaje por Wecoc el 2017-04-29, 12:02

Esos fallos que te ocurren puede que sean por incompatibilidades o algo.
El post principal ha sido actualizado con una nueva versión totalmente distinta del script, hecha por mí.
A ver si ésta te sirve ;D

PD.- No cambiaré la de Kratos porque está planteada de modo algo especial, si no os funciona probad con mi versión.
No digo que una versión sea mejor que la otra pero... la mía es mejor :P
avatar
Wecoc
Administrador
Administrador



Créditos 9218

Gracias : 493

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Spriteset File System

Mensaje por Ledai el 2017-04-29, 14:08

No, debía de ser por problemas de bug o algo, ya que cuando testeo y reporto bugs desde el propio tema de aporte, me cercioro de que el error no solo lo ocasione en mi proyecto, si no que lo pruebo a conciencia en un proyecto en blanco.

Acabo de testear tu versión y tampoco digo que sea mejor o peor, solo digo que no me da ningun tipo de problema antes citado (?) Por lo que debe de ser mejor XD
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 2354

Gracias : 170

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Spriteset File System

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.