Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

Colaboración para descubrir formato de savegames

Ver el tema anterior Ver el tema siguiente Ir abajo

Colaboración para descubrir formato de savegames

Mensaje por fdelapena el 2014-03-21, 17:23

En RPG Maker 2000/2003 el formato de partidas guardadas es como mínimo un 25% desconocido. Esto significa que no sabemos qué hacen ciertos bloques de datos. Esto es vital para poder interpretar al 100% las partidas guardadas en RPG Maker para el proyecto EasyRPG.

Para solucionar este enigma disponemos de una herramienta que permite leer de forma sencilla qué puede contener el archivo y diseñado para que cualquier persona con RPG Maker 2000/2003 pueda ayudar a completar este reto.

Cómo colaborar:

1: Descargar las siguientes herramientas:
LCF2XML (8 MB aproximadamente)
WinMerge Portable (5 MB aproximadamente)

3: Abrir este archivo con un editor de texto (o mejor aún, con un programa hoja de cálculo tipo Excel o LibreOffice):
https://raw.githubusercontent.com/EasyRPG/liblcf/master/generator/csv/fields.csv

4: Revisar las líneas que comienzan por las letras "Save" todas las que tienen un valor "unknown" (desconocido).
Estas líneas hacen referencia a los bloques que faltan. En el contexto que mencionan es más sencillo saber a qué hace referencia, por ejemplo a personajes (events, party, vehicle, comparten varios bloques similares) o a otros aspectos.

5: Crear un proyecto nuevo limpio en RPG Maker 2000 o 2003.

6: Crear un mapa que contenga un elemento que esté desconocido de acuerdo a lo que hayáis visto en la lista del CSV.

7: Ejecutar el juego y guardar la partida en un slot, por ejemplo en el 1. No cerrar el juego.

8: Se generará un archivo Save01.lsd en la carpeta del juego.

9: Copiar el archivo lcf2xml.exe en la carpeta del juego.

9: Arrastrar el archivo Save01.lsd encima de lcf2xml. Se creará Save01.xml.
ATENCIÓN: Si se usa Windows XP el archivo podría crearse en C:\Documents and settings\usuario
Se recomienda migrar a Windows 7

10: Tras un acontecimiento en el juego que interese probar, volver a guardar la partida en el slot 2.

11: Arrastrar el archivo Save02.lsd encima de lcf2xml. Se creará Save02.xml
ATENCIÓN: Si se usa Windows XP el archivo podría crearse en C:\Documents and settings\usuario
Se recomienda migrar a Windows 7

12: Abrir WinMerge portable y cargar Save01.xml y Save02.xml

13: Comparar qué líneas han cambiado e interpretar qué puede ser a partir de las diferencias que se vieron entre los guardados en el juego.

14: A la hora de reportar en el foro qué puede ser, indicar qué línea y valores tenían antes y después y su significado.


Última edición por fdelapena el 2014-03-24, 19:20, editado 3 veces

fdelapena
Soñador
Soñador

0/3

Créditos 266

Gracias : 74

Volver arriba Ir abajo

Re: Colaboración para descubrir formato de savegames

Mensaje por Wecoc el 2014-03-21, 22:23

No sé si ayudaré o no (probarlo sí lo probaré xD) pero haré algo: A cada uno del foro que ayude aportando nuevas diferencias como se dijo en el punto 14 le daré 100 Créditos Mundo Maker by the face (sé que no es mucho teniendo en cuenta para qué los usáis, nisiquiera hay maker-pilinguis, pero bueno xDD)

Y antes de intentarlo, tengo varias preguntas, que nadie me considere lerdo por ello xD.

- ¿En 2000 y 2003 los guardados van igual, o conviene hacer esas cosas tanto con uno con el otro?

- Vale, supongamos que quiero testear una de las líneas unknown de SaveEvents, y lo hago testeando un evento y mirando diferencias entre los xml antes y después de interactuar con ese evento. ¿Cómo sé que esas diferencias son de esa línea y no de las muchas otras unknown dentro de SaveEvents?

- No entiendo el porqué de migrar a Windows 7, aunque se cree en C:\Documents and settings\Pepito es cuestión de tener esa otra ventana abierta y hacer Recortar-Pegar, ¿no? (Es que lo veo más sencillo vaya xDD)

- ¿Todo se puede comprobar con esa técnica de comparación antes/después? ¿No habrá cosas que afectaran quieras o no nada más iniciar el juego/mapa, como las coordenadas del evento? (se me ocurre que quizá una manera de evitar eso sería cerrar el juego una vez guardado el slot 1, modificar lo que convenga del mapa, re-cargar la partida (o incluso reiniciar otra) y volver a guardar en el slot 2, no sé si eso sería viable xD)
avatar
Wecoc
Administrador
Administrador



Créditos 12148

Gracias : 613

Volver arriba Ir abajo

Re: Colaboración para descubrir formato de savegames

Mensaje por fdelapena el 2014-03-22, 02:32

Muchas gracias Wecoc por la iniciativa, la verdad es que este proyecto beneficiará después a todos y demostrará que la comunidad del foro tiene capacidad de participación para unir esfuerzos en grandes proyectos.

Algunas respuestas:

¿En 2000 y 2003 los guardados van igual, o conviene hacer esas cosas tanto con uno con el otro?

RPG Maker 2003 tiene algunas novedades con respecto al 2000, por ejemplo 2 temporizadores, profesiones y demás relacionado con las batallas. De todos modos la mayoría son bloques comunes y los específicos del 2003 no entrarían en conflicto sino que tendrían códigos exclusivos nuevos. Una vez identificado para qué sirve puede probarse luego en ambos por parte de los desarrolladores para confirmar si son exclusivos de cada versión aunque generalmente suele resultar obvio por la característica (por ejemplo, si se detectara algo de profesiones es obvio que es de 2003 exclusivamente). En el archivo fields.csv hay algunos comentarios en bloques ya documentados de base de datos y demás que indican que algunos son específicos de 2003.

Vale, supongamos que quiero testear una de las líneas unknown de SaveEvents, y lo hago testeando un evento y mirando diferencias entre los xml antes y después de interactuar con ese evento. ¿Cómo sé que esas diferencias son de esa línea y no de las muchas otras unknown dentro de SaveEvents?

Es posible que a la hora de probar habrá diferencias en múltiples líneas con unknown_XX. Pueden estar relacionadas con la orientación de los eventos del mapa o del grupo del jugador (party), aunque me comentan que algunos como uno de los bloques de SaveEvents (creo) llamado unknown_34 van cambiando aunque no se mueva del sitio nada. Quizás es el número de segundos de ejecución o no sé. En cambio otros pueden ser mucho más fáciles de identificar y descartar los que sean un misterio por ahora.

La estrategia para detectarlos es probar patrones y sucesiones repetitivas, que sigan alguna regla según lo que estemos probando. Descartar valores que cambian sin sentido aparente y buscar esos cambios en otros. Si no se conociera la orientación de un evento, probar cambios en orientación, cambios en prioridad, cambios en "paso" de animación, animación rotando, etc. Muchas ya están documentadas de hecho.
Algunos en contexto se pueden intentar adivinar, por ejemplo:
SaveScreen,unknown_22 está entre otros bloques de shake, por lo que podría probarse todo tipo de operaciones de shake hasta ver particularidades que cambien este valor.
SaveScreen,battleanim_unk_2d y SaveScreen,unknown_2e también se cree que son de animaciones de batalla, sobre todo el primero xD
SaveMapEvent,unknown_18, SavePartyLocation,unknown_18, SaveVehicleLocation,unknown_18... estos códigos de bloque tienen el mismo ID para este trío. Esto significa que son aplicables en comportamiento para el chara de los 3, ya que tanto eventos de mapa, sprite del jugador y vehículo emplean charas. Si enviar comandos a un evento tiene más bloques desconocidos es más fácil ejecutar comandos sobre vehículos o sobre el propio chara del jugador, que tiene menos bloques desconocidos debido a su naturaleza y características.

Otra estrategia es comprobar que no se alteran haciendo otras operaciones. Descartando los que se alteren tras no modificar nada sobre la característica del evento que acabas de probar podrían no estar relacionados y así aislar más claramente lo que estás buscando.

Hay algunos unknown que podrían haberse averiguado correctamente en este hilo pero no ha habido tiempo para verificarlos:
https://easy-rpg.org/blog/2012/07/crowdsourcing-unknown-savegame-data/#comments

Hay otra alternativa inversa: Modificar algún valor de los unknown del XML y luego convertirlo a LSD que luego se puede cargar en RPG_RT.exe. Si se arrastra el XML encima de LCF2XML lo reconvierte de nuevo al nativo (ojo, LCF2XML puede no ser perfecto y reventar al cargar la partida luego xD). También puede fallar por el simple hecho de agregar valores no válidos que RPG_RT.exe no reconozca o que no estén en el contexto del mapa y cueste detectarlos también, pero puede ayudar. De hecho los valores -1 podría significar que no están usándose y son relleno de LCF2XML si no están inicializados a 0. Es más seguro probar valores 1 al principio. En el archivo fields.csv si se indica que es de tipo int se pueden usar números, si es de tipo bool solo valores T y F creo (rara vez se sabe de antemano en los unknown y pueden estar documentados erróneamente como int).

No entiendo el porqué de migrar a Windows 7, aunque se cree en C:\Documents and settings\Pepito es cuestión de tener esa otra ventana abierta y hacer Recortar-Pegar, ¿no? (Es que lo veo más sencillo vaya xDD)

Migrar a Windows 7 es una recomendación porque desde el día 8 de abril Windows XP no tendrá más actualizaciones. Esto lo expone a problemas de seguridad que ni los cortafuegos ni antivirus podrían cubrir si se descubren ciertas nuevas vulnerabilidades de acceso remoto. Es correcto lo que dices que yendo a esa carpeta se pueden detectar los archivos, por lo que no es obligatorio migrar, solo una recomendación ya que el programa tiene esa incomodidad con Windows XP y que no está previsto arreglarla en el programa debido a la finalización del soporte oficial del mismo por parte de Microsoft.

¿Todo se puede comprobar con esa técnica de comparación antes/después? ¿No habrá cosas que afectaran quieras o no nada más iniciar el juego/mapa, como las coordenadas del evento? (se me ocurre que quizá una manera de evitar eso sería cerrar el juego una vez guardado el slot 1, modificar lo que convenga del mapa, re-cargar la partida (o incluso reiniciar otra) y volver a guardar en el slot 2, no sé si eso sería viable xD)

Claro, también se puede cambiar el mapa pero recomiendo más clonar el mapa y que el slot de guardado para este mapa sea otro. Hay un valor llamado save_count que viene referenciado en SavePartyLocation como map_save_count que es el número de veces guardado con respecto al mapa. Esto también se guarda en los SaveXX.lsd para evitar que se cargue una partida porque habría incoherencias con respecto al mapa al que hace referencia. Es decir: creo que no puedes cargar partidas (o no se ejecutan los eventos, no recuerdo) en mapas que has modificado o al menos los eventos no deberían ejecutarse correctamente. Sin embargo hay trucos para saltarse esto xD pero es un poco más complicado, como cambiar el valor de map_save_count para que coincida con el save_count del archivo .lmu del mapa, aunque es un fastidio y recomiendo más la técnica de clonar el mapa desde el editor mencionada antes.

Un clásico para cargar savegames en mapas guardados posteriormente es usar un mapa auxiliar. Guardar la partida en el auxiliar, que contiene un teletransporte al primero y modificar el primer mapa. De todos modos no recuerdo si persisten los inconvenientes mencionados, por lo que aconsejo lo de clonar los mapas, modificar ligeramente uno, guardar partidas en ambos en slots distintos y comparar los saves de cada uno.

fdelapena
Soñador
Soñador

0/3

Créditos 266

Gracias : 74

Volver arriba Ir abajo

Re: Colaboración para descubrir formato de savegames

Mensaje por orochii el 2014-03-22, 03:09

Lo de los eventos del mapa, lo que pasa es que cuando guardas, luego modificas el mapa, y cargas, todos los eventos en curso se detienen/reinician... en fin, el intérprete hace clear xD.

Eso lo he visto por ejemplo con un mini-engine de guardado en un juego de pruebas que tengo por ahí (lastimosamente es de pruebas de parches xD así que muchas cosas no son útiles, creo).
Con un objetivo explicativo, el engine de guardado es un evento común, automático, activado por interruptor, y es así:
Código:
<>Mostrar texto: "¿Guardar?"
<>Mostrar elección: "Sí", "No"
Si "Sí":
  <>Llamar menú guardar
Si "No":
:Fin
<>Operación de interruptor [guardar] OFF
Al guardar, el RPG Maker guarda el estado del intérprete (supongo que ID del evento y nº del último comando). Pero al cargar un mapa modificado, esos valores se resetean, y en el engine anterior por ejemplo, pasa que cargo y me manda el mensaje de "¿Guardar?" y las elecciones. Creo, no estoy seguro, que si el evento no es automático/paralelo, pues no se reinicia. Y tampoco se reinicia si es un automático y fue desactivado antes de guardar (los paralelos en cambio, apenas los desactivas -interruptor, etc-, se detienen).

Y... emmm... creo que eso es todo xD. No sé si hay algo útil en mi parloteo, pero bueh. Intentaré probarlo, hacer algo un día de estos (a.k.a. mañana xD). ¡Quiza saque algo nuevo y Wecoc me tenga que pagar muajajajajaja! Es joda xD.

Salut.
avatar
orochii
Reportero

0/3

Créditos 7630

Gracias : 421

Volver arriba Ir abajo

Re: Colaboración para descubrir formato de savegames

Mensaje por fdelapena el 2014-03-23, 16:52

Gracias orochii, a eso me refería con lo de que se desactivaban los eventos. Ya contaréis si lográis algo con la herramienta. Me gustaría probar algo pero sería la otra semana que tengo que arreglar unas cosas en la librería que maneja esto para sistemas Linux.

fdelapena
Soñador
Soñador

0/3

Créditos 266

Gracias : 74

Volver arriba Ir abajo

Re: Colaboración para descubrir formato de savegames

Mensaje por MarianoGNU el 2014-03-23, 22:58

@orochii escribió:
Código:
<>Mostrar texto: "¿Guardar?"
<>Mostrar elección: "Sí", "No"
Si "Sí":
  <>Llamar menú guardar
Si "No":
:Fin
<>Operación de interruptor [guardar] OFF

lo correcto sería....

Evento Comun 1 (automatico, interruptor[guardar])
Código:
<>Mostrar texto: "¿Guardar?"
<>Mostrar elección: "Sí", "No"
Si "Sí":
  <>Llamar Evento Comun: 2
Si "No":
:Fin
<>Operación de interruptor [guardar] OFF

EventoComun 2 (Llamar)
Código:
<>Operación de interruptor [guardar] OFF
<>Llamar menú guardar

al desligar el llamado del menu del evento en condiciñon automatica se evita que se reinicie.
avatar
MarianoGNU
Iniciado
Iniciado

0/3

Créditos 2

Gracias : 3

Volver arriba Ir abajo

Re: Colaboración para descubrir formato de savegames

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.