Autor Tema: Text Packer para New Horizons  (Leído 354 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado SkaZZ

  • HAL9000
  • ****
  • Mensajes: 2097
  • Registrado: 21 Nov, 2004
  • es España
  • Karma: 11
  • Sexo: Masculino
  • ZzZzzZz... Dark Souls... ZzZzzZz...
    • Ver Perfil
Text Packer para New Horizons
« en: Febrero 20, 2021, 13:52:03 pm »
Aquí tenéis la herramienta para extraer/insertar textos en los archivos de mensajes del juego New Horizons de la serie Uncharted Waters.

El formato es muy sencillo, pero viene en con offsets en 16 y 32 bits y, como es un juego japonés, usa Big Endian en vez de Little Endian.

16 bits:

Name        Type        Len       Description
--------------------------------------------------------------------------------
offset1     ushort      2         Offset to first position
offset2     ushort      2         Offset to second position
...
text1       char[]      variable  First text
text2       char[]      variable  Second text
--------------------------------------------------------------------------------


32 bits:

Name        Type        Len       Description
--------------------------------------------------------------------------------
offset1     uint        4         Offset to first position
offset2     uint        4         Offset to second position
...
text1       char[]      variable  First text
text2       char[]      variable  Second text
--------------------------------------------------------------------------------


¿Cómo determinamos el número total de textos? Bueno, es sencillo:
Count texts = offset1 / (bits / 8 )

Aquí os dejo el código fuente en mi Git.
Aquí os dejo el ejecutable para descargar de mi Git.

Cuando R1 compruebe que funciona todo bien, entonces será compilado en Release.

NOTAS:
- Dado que siempre voy con el tiempo a cuestas, el código no está 100% optimizado.
- Como siempre, si quieres modificar el código fuente, adelante.
« Última modificación: Febrero 20, 2021, 19:55:45 pm por SkaZZ »



      //////       Hora de abandonware llegó, coge a tus
     (o   O)       amigos y vámonos. Con Kendo el friki y
       (_)         SkaZz el chiflado, lo pasaremos guay.
--oooO-----Oooo--  ¡Hora de abandonware!

Desconectado gatuno

  • IBM Roadrunner
  • ****
  • Mensajes: 1188
  • Registrado: 11 Abr, 2018
  • gs South Georgia and the South Sandwich Islan
  • Karma: 11
  • eterno aprendiz
    • Ver Perfil
Re:Text Packer para New Horizons
« Respuesta #1 en: Febrero 20, 2021, 18:12:29 pm »
B)++;

Desconectado R1

  • Sinclair ZX Spectrum
  • **
  • Mensajes: 239
  • Registrado: 10 Nov, 2015
  • ar Argentina
  • Karma: 4
    • Ver Perfil
Re:Text Packer para New Horizons
« Respuesta #2 en: Febrero 20, 2021, 19:21:12 pm »
Gracias SkaZZ... Te re pasaste con la herramienta jeje... Incluso con el icon de Catalina :lol: ... Pero lo más importante es que se puede recalcular pulsando un botón que es lo que quería... Se puede editar con el Notepad++ es prácticamente lo mismo a como lo venía haciendo..

Aún no lo revisé todo pero ya le encontré un problema y a decir verdad me temía el primero pero bueno la culpa es mía :worthy: ...

Por ejemplo con el SNR1.MES y el SNR6.MES cuando llega a recorrer la frase "Always talking in puzzles, that bloke. He must mean Atlantis, the secret of Atlantis." o "Of course you. And... well... what would you say to moving in with us?" en ambos casos ahí termina en la dirección FF FF.. Cuando salta al offset 01 00 00 se buguea totalmente y empieza a extraer basura y luego empieza del principio pero como "corrido".

Ahí el error es mío pues te di un ejemplo de lo que hacía pero no te comenté que esos archivos eran demasiado grande y se incrementaba el tercer byte de la cadena en 1 ya que supera el FF FF en un momento.. con los otros archivos no pasa. Creo que debe de pasar por ahí... Por eso luego empieza del principio...

Luego hay un error menor...

Y es cuando se extraen los textos que incluyen un 0A que viene a ser un salto de línea o algo así... Está bien.. en tu caso lo representas como "\r" pero luego al importarlo en el archivo del juego al valor lo guarda como 0D (que seguramente sea también salto de línea, no lo sé, pero asumo que sí) en lugar de 0A.. Pero el juego no lo entiende así y la línea que está entre 00 y 0D se lo come,... o sea no lo imprime en pantalla... hice la prueba de pasarlo a 0A a mano y ahí si funciona.

Los de 16 bits no te se decir ya que contienen unas historias que no se cómo se comportan todavía, pero pinta que está todo bien salvo el mismo problema del 0A y 0D... lo revisaré a los archivos de 16 bits cuando esto otro lo haya terminado... ya terminé el de MENU.DAT que era de 16 bits pero, yéndome del tema, hay algunos mensajes que creo que no está implementado y quedaron como basura..
Spoiler (click para mostrar/ocultar)
Y hay otros mensajes que no estoy seguro de que están hablando así que los dejé en inglés, algunos de ellos si son importantes, pero no sé cual es el contexto. Eso se verá al final.

Ahora en un rato subo la versión japonesa de Windows 95,.. ya tengo todo subido de la otra semana es solo darle a publicar.

Aquí una imagen re insertando el texto y funcionando usando la herramienta tuya.


Saludos y muchas gracias por la herramienta :) (Un muro menos)

PD: Estos son 2 capturas mías anteriores recalculado a mano =P
Me gusta la tarta de puerros y de zapallito.

¿Cara o Cruz?
https://www.youtube.com/watch?v=tJHErlPywdA

Desconectado SkaZZ

  • HAL9000
  • ****
  • Mensajes: 2097
  • Registrado: 21 Nov, 2004
  • es España
  • Karma: 11
  • Sexo: Masculino
  • ZzZzzZz... Dark Souls... ZzZzzZz...
    • Ver Perfil
Re:Text Packer para New Horizons
« Respuesta #3 en: Febrero 20, 2021, 19:52:19 pm »
Vale, quizás según veo es que realmente lo que lee son 2 ushort (típico en juegos japoneses, también pasa en Clock Tower). El primero habría que sumarle uno y multiplicarlo por 0x8000, luego sumarle el segundo ushort. O quizás se me ha ido la pinza en alguna parte.

Lo del 0x0a por 0x0d, es porque creí que /r lo pasaría a 0x0a. Eso tiene fácil solución. Mañana te comento.

P.D.: dado que contienen las cadenas de texto, puede tener las de los comandos/funciones/cosas internas de los desarrolladores, como mensajes de error o similares... puede que también haya cut content.
« Última modificación: Febrero 20, 2021, 19:54:54 pm por SkaZZ »



      //////       Hora de abandonware llegó, coge a tus
     (o   O)       amigos y vámonos. Con Kendo el friki y
       (_)         SkaZz el chiflado, lo pasaremos guay.
--oooO-----Oooo--  ¡Hora de abandonware!

Desconectado SkaZZ

  • HAL9000
  • ****
  • Mensajes: 2097
  • Registrado: 21 Nov, 2004
  • es España
  • Karma: 11
  • Sexo: Masculino
  • ZzZzzZz... Dark Souls... ZzZzzZz...
    • Ver Perfil
Re:Text Packer para New Horizons
« Respuesta #4 en: Febrero 20, 2021, 19:56:28 pm »
Mira tú por donde, ¿podéis desactivar los emoticonos si están dentro de un tag de código?



      //////       Hora de abandonware llegó, coge a tus
     (o   O)       amigos y vámonos. Con Kendo el friki y
       (_)         SkaZz el chiflado, lo pasaremos guay.
--oooO-----Oooo--  ¡Hora de abandonware!

Desconectado SkaZZ

  • HAL9000
  • ****
  • Mensajes: 2097
  • Registrado: 21 Nov, 2004
  • es España
  • Karma: 11
  • Sexo: Masculino
  • ZzZzzZz... Dark Souls... ZzZzzZz...
    • Ver Perfil
Re:Text Packer para New Horizons
« Respuesta #5 en: Febrero 20, 2021, 20:14:16 pm »
Pues no, la primera culpa mía que se me olvidó poner los 32 bits como 32 bits.
La segunda que C# coge /r como 0x0d y /n como 0x0a. A lo mejor es mi memoria y le he dado la vuelta. Bueno, ya he subido la nueva versión y la probé con el SNR6 y funciona.

Try again!



      //////       Hora de abandonware llegó, coge a tus
     (o   O)       amigos y vámonos. Con Kendo el friki y
       (_)         SkaZz el chiflado, lo pasaremos guay.
--oooO-----Oooo--  ¡Hora de abandonware!

Desconectado R1

  • Sinclair ZX Spectrum
  • **
  • Mensajes: 239
  • Registrado: 10 Nov, 2015
  • ar Argentina
  • Karma: 4
    • Ver Perfil
Re:Text Packer para New Horizons
« Respuesta #6 en: Febrero 21, 2021, 02:04:01 am »
Okay! Muchas gracias por tus prontas respuestas ;) .. Ya lo probé y está terriblemente impecable! puedo moverme con libertad de aquí y para allá, a como lo vaya viendo, muchas gracias de verdad... Menos mal para ti que era un error de dedo y lo pudiste solucionar rápido, me imaginé que algo de eso era porque empezaba del principio otra vez.

Por cierto ahí vi lo que me decías del MESSAGE jeje, es la primera línea, muchas gracias por la observación, muy atento, eso me quedó ahí colgado.. es de cuando recién lo empezaba a revisar..

Y sobre los mensajes sí eso también lo había pensado.. hay otro apartado donde pone Blue, Green y Red, imagino que está relacionado con los colores de la pantalla.. puede que haya escondido algun modo de esos que dices....
Me gusta la tarta de puerros y de zapallito.

¿Cara o Cruz?
https://www.youtube.com/watch?v=tJHErlPywdA

Desconectado gatuno

  • IBM Roadrunner
  • ****
  • Mensajes: 1188
  • Registrado: 11 Abr, 2018
  • gs South Georgia and the South Sandwich Islan
  • Karma: 11
  • eterno aprendiz
    • Ver Perfil
Re:Text Packer para New Horizons
« Respuesta #7 en: Marzo 15, 2021, 15:53:55 pm »
por añadir algo de info, por si quieres aplicarlo para otros juegos...

desde un linux puedes obtener la posicion del caracter fin de cadena (byte 00) asi:



==primer comando
Código: [Seleccionar]
00000000: 2853 6169 6420 746f 0074 656c 6570 686f  (Said to.telepho
^^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^
 offset            volcado en hexa                 volcado en ASCII

==segundo comando
devuelve la posicion del caracter fin de cadena (byte 00)

PD: si ponemos el comando sin "|head -n 4", mostrara toooodo el archivo, no solo las 4 primeras lineas.