Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP/VX] Edit & Play

Ver el tema anterior Ver el tema siguiente Ir abajo

[XP/VX] Edit & Play

Mensaje por AsFzKakarotto el 2018-02-09, 22:11

Este sencillo script permite que mientras editemos el proyecto a su vez lo vayamos probando o jugando.
Aunque hay que aclarar que los cambios que se hacen no se van actualizando.
El script abrirá otra ventana para Testear el juego.

Sin tener este Script:
Nos Obliga a cerrar el programa para poder usar otro programa o el mismo editor.

Ya no verán más este mensaje XD.



Nota:
No se puede hacer el modo pantalla completa (Alt +enter)

Script:

Código:
#===============================================================================
# * Edit & Play
#-------------------------------------------------------------------------------
#   - Version: 2.1
#   - Date   : 14 / 08 / 2011
#   - Author : .:Fênix:.
#   - MSN    : bmotamer@hotmail.com
#-------------------------------------------------------------------------------
#   - Description:
#     Let you edit and play your game at the same time
#-------------------------------------------------------------------------------
#   - Compability:
#     RPG Maker XP and RPG Maker VX
#===============================================================================
 
module Edit_and_Play
  # Activate the script? (true / false)
  Activate = true
  # Key which updates the game
  Update_Key = Input::ALT
  # Data files that won't be reloaded
  File_Exclude = []
  # Scripts that won't be reloaded
  Scripts_Exclude = ["Edit & Play", "Main"]
end
 
$VX ||= defined?(Graphics.wait)
 
if ((Edit_and_Play::Activate) && !(File.file?("Game.rgss#{$VX ? '2a' : 'ad'}")))
 
  char     = $VX ? "v" : "x"
  old_file = "Data/BT_Actors.r#{char}data"
  new_file = "Data/BT_Actors2.r#{char}data"
 
  if ($TEST || $DEBUG)
    File.rename(old_file, new_file) if ($BTEST)
    Thread.new {system("Game.exe")}
    exit
  else
    $TEST = $DEBUG = true
    if (File.file?(new_file))
      File.rename(new_file, old_file)
      $BTEST = true
    end
  end
 
  unless ($VX)
    class Scene_Battle
    
      alias :edit_and_play_1 :main unless ($@)
    
      def main
        edit_and_play_1
        $scene = Scene_Battle.new if ($BTEST)
      end
    
    end
  end
 
  class << Input
  
    alias :edit_and_play_2 :update unless ($@)
  
    def update
      if (trigger?(Edit_and_Play::Update_Key))
        for file in (Dir.entries("Data") - [".", "..", *Edit_and_Play::File_Exclude])
          next if (file.include?("Map"))
          basename = File.basename(file, ".*").downcase!
          if (basename == "scripts")
            ($VX ? Cache : RPG::Cache).clear
            for data in load_data("Data/#{file}")
              next if (Edit_and_Play::Scripts_Exclude.include?(data[1]))
              eval(Zlib::Inflate.inflate(data[2]))
            end
            $game_map.setup($game_map.map_id) if ($game_map != nil && $game_map.map_id != 0)
            $scene = $scene.class.new
          else
            eval("$data_#{basename} = load_data('Data/#{file}')")
          end
        end        
      end
      edit_and_play_2
    end
  
  end
 
end

Autor: .:Fênix:.
avatar
AsFzKakarotto
Soñador
Soñador

0/3

Créditos 320

Gracias : 70

Volver arriba Ir abajo

Re: [XP/VX] Edit & Play

Mensaje por Wecoc el 2018-02-11, 01:06

Está muy bien, es interesante ver cómo está hecho, nunca se me habría ocurrido hacer algo así xD

Es fácil de usar: Ejecutas el juego en modo Debug (desde el editor), juegas como siempre, luego puedes ir al editor, hacer cambios, Guardar, y al volver al juego y pulsar Alt los cambios se actualizan como "por arte de magia". Eso ahorra bastante tiempo de testeo.

Algo que no comentaste: Estoy casi seguro que para que funcione del todo bien hay que llamar el script Edit & Play exactamente (nombre en la lista de scripts).

-------------------------

He hecho una pequeña modificación al script. Solo lo probé en XP pero debería servir en VX igualmente.

Mi modificación hace que la nueva ventana siga estando en modo Debug, por lo que sigues teniendo la opción de ver los FPS con F2 entre otras cosas.

Aclaración:
Hasta ahora solo se reactivaba la global $DEBUG para que pudieras ir a la ventana de Debug del juego mediante F9 y saltarte la pasabilidad y encuentros con CTRL, pero digamos que el modo Debug de la ventana es más cosas que solo eso.

Además cambié la tecla de Alt por F6 para que la pantalla completa siga funcionando como antes.
Si queréis cambiar la tecla solo tenéis que hacerlo en ésta línea del script: [line]Update_Key = Input::F6 # Input::ALT[/line]

Por último también añadí una nueva global llamada $DEBUG_START_WINDOW, que a parte de usarse en el mismo script también podéis usarla en otros si hace falta. El script funciona así: Cierra la ventana creada desde el Editor y crea una nueva inmediatamente, que a diferencia de la primera no estorba para los cambios del Editor. Esa global vale true durante la primera ventana y false durante la segunda (la buena) así que con esa se puede diferenciar en qué estado del script te encuentras.

Aclaración:
Eso puede servir por ejemplo en scripts especiales como sería uno de autocargado de fuentes al juego. Ese tipo de scripts sucederían dos veces, uno para cada ventana, pero si impides que se ejecuten cuando $DEBUG_START_WINDOW vale true solo ocurrirá en la segunda ventana, que es la que interesa.

En fin, ya no me alargo más, aquí el script:

Código:
#===============================================================================
# * [XP/VX] Edit & Play
#------------------------------------------------------------------------------
# Este script es una adaptación del Edit & Play de .:Fênix:. versión 2.1 y de
# AWorks Library (ALibrary) 1.03 de AWorks
#------------------------------------------------------------------------------
# Autor del nuevo script: Wecoc - Versión 1.0
# CRÉDITOS: .:Fênix:.
# Colocar encima de Main. Importante: El nombre del script debe ser Edit & Play
#------------------------------------------------------------------------------
# El script sirve para testear el juego y a la vez modificarlo en el editor
# No se actualiza directamente; hay que pulsar Alt para que se actualice.
#===============================================================================

module AWorks
  module_function
  module API
    FindWindowA = Win32API.new('user32', 'FindWindowA', 'pp', 'l')
    GPPSA = Win32API.new('kernel32', 'GetPrivateProfileStringA', 'PPPPLP', 'L')
  end
  module Ini
    module_function
    def get_string(id, tag = 'Game', file = '.\\Game.ini')
      buffer = "\0" * 255
      API::GPPSA.call(tag, id, '', buffer, 255, file)
      buffer.delete!("\0")
    end
  end
end

title = AWorks::Ini.get_string('Title')
HWND = AWorks::API::FindWindowA.call('RGSS Player', title)

$DEBUG_START_WINDOW = false
if ($DEBUG || $TEST)
  f = Win32API.new('user32', 'GetForegroundWindow', '', 'L').call
  if f == HWND
    $DEBUG_START_WINDOW = true
  end
end

#===============================================================================

module Edit_and_Play
  # Activate the script? (true / false)
  Activate = true
  # Key which updates the game
  Update_Key = Input::F6 # Input::ALT
  # Data files that won't be reloaded
  File_Exclude = []
  # Scripts that won't be reloaded
  Scripts_Exclude = ["Edit & Play", "Main"]
end

$VX ||= defined?(Graphics.wait)
 
if ((Edit_and_Play::Activate) && !(File.file?("Game.rgss#{$VX ? '2a' : 'ad'}")))
 
  char     = $VX ? "v" : "x"
  old_file = "Data/BT_Actors.r#{char}data"
  new_file = "Data/BT_Actors2.r#{char}data"
 
  if $DEBUG_START_WINDOW
    File.rename(old_file, new_file) if ($BTEST)
    Thread.new {system("Game.exe debug")}
    exit
  else
    $TEST = $DEBUG = true
    if (File.file?(new_file))
      File.rename(new_file, old_file)
      $BTEST = true
    end
  end
 
  unless ($VX)
    class Scene_Battle
    
      alias :edit_and_play_1 :main unless ($@)
    
      def main
        edit_and_play_1
        $scene = Scene_Battle.new if ($BTEST)
      end
    
    end
  end
 
  class << Input
  
    alias :edit_and_play_2 :update unless ($@)
  
    def update
      if (trigger?(Edit_and_Play::Update_Key))
        for file in (Dir.entries("Data") - [".", "..", *Edit_and_Play::File_Exclude])
          next if (file.include?("Map"))
          basename = File.basename(file, ".*").downcase!
          if (basename == "scripts")
            ($VX ? Cache : RPG::Cache).clear
            for data in load_data("Data/#{file}")
              next if (Edit_and_Play::Scripts_Exclude.include?(data[1]))
              eval(Zlib::Inflate.inflate(data[2]))
            end
            $game_map.setup($game_map.map_id) if ($game_map != nil && $game_map.map_id != 0)
            $scene = $scene.class.new
          else
            eval("$data_#{basename} = load_data('Data/#{file}')")
          end
        end        
      end
      edit_and_play_2
    end
  
  end
 
end

Los créditos van para .:Fênix:. igualmente, mis cambios no son para tanto en realidad.
Igualmente es uno de esos scripts que cuando publicas el juego definitivo puedes borrarlo sin más...
Así que no creo que tengáis que dar créditos a nadie en ningún caso xD
avatar
Wecoc
Administrador
Administrador



Créditos 12310

Gracias : 654

Volver arriba Ir abajo

Re: [XP/VX] Edit & Play

Mensaje por AsFzKakarotto el 2018-02-13, 04:44

Muy Agradecido Wecoc.
Desconocía completamente que se pudiera actualizar con "Alt" es increíble y sobre los créditos... bueno tu mandas XD
avatar
AsFzKakarotto
Soñador
Soñador

0/3

Créditos 320

Gracias : 70

Volver arriba Ir abajo

Re: [XP/VX] Edit & Play

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.