Romxhacking Romxhacking
- Nasío pa'jakear -
 
 F.A.Q.F.A.Q.   BuscarBuscar   Lista de MiembrosLista de Miembros   Grupos de UsuariosGrupos de Usuarios   RegístreseRegístrese 
 PerfilPerfil   Identifíquese para revisar sus mensajesIdentifíquese para revisar sus mensajes   ConectarseConectarse 


Menú principal
Portal
Foros
F.A.Q.
Buscar
Lista de miembros
Grupos de usuarios
Perfil

Usuario
Nombre de Usuario:

Contraseña:

 Recordarme



He olvidado mi contraseña

¿Aún no tiene su cuenta?
Puede registrarse Aquí, es GRATIS.


Anuncio del administrador
No pretendemos solucionar todos los problemas ni ser referencia de nada, simplemente nos reunimos aquí para charlar de nuestras cosas.
NO SE RESPONDERÁ A NADA POR PRIVADO, QUE EL FORO ESTÁ PARA ALGO

Ayuda Chocobo Dungeon 2 [Fuente]
Ir a página 1, 2  Siguiente
 
Publicar Nuevo Tema   Responder al Tema    Romxhacking -> Dudas y Preguntas
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
tchusami



Sexo: Sexo:Hombre
Registrado: 29 Jan 2011
Edad: 25
Mensajes: 86
Ubicación: Librilla
Estado: Offline
MensajePublicado: Fri Jun 03, 2011 4:25 pm    Título del mensaje: Ayuda Chocobo Dungeon 2 [Fuente] Responder citando

Pues como me has dicho cue, me paso por aqui y dejo unas imagenes en el post referentes a la fuente, si quieres puedo pasarte el link del juego por mp o cualquier cosa:

Fuente vista con tile molester a 2bpp reverse-order


Fuente vista en ram


Gracias por todo tio!
Volver arriba
Ver perfil del usuario Enviar mensaje privado [ Oculto ] Visitar sitio web del autor
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5435
Estado: Offline
MensajePublicado: Fri Jun 03, 2011 4:42 pm    Título del mensaje: Responder citando

Necesito dos cosas:
- un savestate con la VRAM para ver "in situ" cómo está la fuente
- el fichero con la fuente, aunque recuerdo que era un fichero 'gordo', pero con el WinRAR se rebajaba bastante, que no se permiten enlaces a descargas de juegos, no sea que luego venga el osito Teddy a darnos por el c*l* Wink

De entrada ya te digo que son 4bpp reverse-order. También que no sale la fuente como tal, pues es una mezcla de 2, como se puede ver en la segunda imagen que has puesto, con la jodienda que cada carácter trae unos bytes de más, no sé si para indicar el ancho o algo por el estilo. Luego lo explico mejor, que ahora ando un poco liado. También busco luego a ver si tengo algo guardado de ese juego, que pasé de él porque por aquella época estaba muy pez y había cosas que no sabía hacer (ahora tampoco, pero no lo comentes a nadie, jeje).
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
tchusami



Sexo: Sexo:Hombre
Registrado: 29 Jan 2011
Edad: 25
Mensajes: 86
Ubicación: Librilla
Estado: Offline
MensajePublicado: Fri Jun 03, 2011 5:58 pm    Título del mensaje: Responder citando

Bien jeje por aqui el archivo que contiene la fuente: http://dl.dropbox.com/u/23705939/ALLBIN.rar
y por aqui el save: http://dl.dropbox.com/u/23705939/SaveState_ChD2.rar

A ver si cuando puedas te aclaras con esto tio que yo voy a seguir estudiando...
Gracias de nuevo Wink
Volver arriba
Ver perfil del usuario Enviar mensaje privado [ Oculto ] Visitar sitio web del autor
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5435
Estado: Offline
MensajePublicado: Fri Jun 03, 2011 8:09 pm    Título del mensaje: Responder citando

Por hoy no voy a hacer nada más, que es viernes y me piro a tomarme unas cervezas, mientras otros os jodéis estudiáis.

Aquí está la VRAM, con la fuente arriba a la derecha a 16bpp. En la parte inferior está a 4bpp, con una paleta buscada a ojo para que se vea cómo se superponen los caracteres:


Aquí la fuente sin nada más, con un ligero cambio de paleta para que se note mejor la superposición de caracteres:


Así es como está la fuente en el fichero, a 4bpp, con caracteres de 12 pixeles de ancho y 14 de alto (las dos últimas filas de cada carácter no tengo ni idea de lo que son, pero imagino que contendrán el ancho del carácter entre otras cosas):


Aquí está la fuente separando los caracteres, y sí, son así de feos, igual que salen en el juego:



¿Por qué se superponen los caracteres? Por comodidad. Al emplear 4bpp lo que hacemos es que cada pixel ocupe 4 bits, los 2 superiores pertenecientes a una parte de los caracteres y los inferiores a la otra. Al mezclarlos es cuando nos da esa imagen que tenemos en la VRAM. Se hace así para no tener que trabajar con 2bpp, que es la resolución real de la fuente, y en el mismo 'gráfico' va todo, encargándose el programa de tomar los bits correspondientes cuando tiene que coger un carácter.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
tchusami



Sexo: Sexo:Hombre
Registrado: 29 Jan 2011
Edad: 25
Mensajes: 86
Ubicación: Librilla
Estado: Offline
MensajePublicado: Sun Jun 05, 2011 10:55 pm    Título del mensaje: Responder citando

Impresionante, de verdad me tienes que explicar como has hecho eso xD, oye te dejo mi direccion de correo por mp, me agregas y hablamos, ok? aunque hasta el miercoles despues del catastrofico examen de programacion no podre hacer nada... bueno en eso quedamos tio!
Volver arriba
Ver perfil del usuario Enviar mensaje privado [ Oculto ] Visitar sitio web del autor
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5435
Estado: Offline
MensajePublicado: Mon Jun 06, 2011 10:56 am    Título del mensaje: Responder citando

¿Tengo que explicar todo o algo en concreto? Es que estoy en época de vaguitis y las ganas que tengo de hacer algo es directamente proporcional a nada Wink

Bueno, pues con lo que dices del examen de programación creo que puedo hacer de cabroncete. Te explicaré cómo sacar la fuente y lo programas tú, que es una chorrada y no me apetece tampoco hacerlo. Así practicas para el siguiente examen Twisted Evil

Hay un ligero error en lo que he contado. Las dos filas con datos están al principio del carácter y no al final, y, para fastidiar, no llevan el ancho del carácter.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
tchusami



Sexo: Sexo:Hombre
Registrado: 29 Jan 2011
Edad: 25
Mensajes: 86
Ubicación: Librilla
Estado: Offline
MensajePublicado: Tue Jun 07, 2011 8:58 pm    Título del mensaje: Responder citando

Bueno no todo, tu explicame cosillas de como programar el extractor de la fuente a ver si lo pillo que en cuanto venga de hacer el examen me pongo a calentarme la cabeza jeje
Volver arriba
Ver perfil del usuario Enviar mensaje privado [ Oculto ] Visitar sitio web del autor
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5435
Estado: Offline
MensajePublicado: Wed Jun 08, 2011 11:18 am    Título del mensaje: Responder citando

Primero hay que entender cómo está grabada. Como ya he visto que más o menos la has sacado del fichero, me salto la búsqueda. Como curiosidad, puedes usar el tilemolester y decirle que te muestra tiles de 3 de ancho a 4bpp reverse y "verás" los caracteres partidos. Cada uno es de 12 bits de ancho, y nunca me molesté en averiguar si el TM puede mostrar esos valores, pero como muestra los tiles siempre en múltiplos de 8 bits, al usar 3 tiles de ancho estamos mostrando 3*8/12 = 2 líneas de cada carácter en una misma línea, y así podemos ver la fuente, aunque partida.

Los datos de la fuente comienzan en la posición 0xA40000 del fichero ALLBIN.BIN, y se componen de:
-0xA40000: 4 bytes con la cabecera del fichero (0x20000100)
-0xA40004: la paleta de colores en formato ABGR1555, es decir, 2 bytes para cada color
-0xA40044: 4 bytes con el número de caracteres de la fuente
-0xA40048: los datos raw de la fuente

La cabecera puede indicar el número de colores de la fuente (0x20, es decir, 16 para cada semifuente), pero realmente no nos importa lo que signifique.

La paleta es el formato normal de PSX, 2 bytes por color, formato ABGR, con 5 bits para cada intensidad y 1 bit para enmascaramiento. La verdad es que no se necesita para nada pues se puede poner la paleta que se quiera. Hay 32 colores, que corresponden a 16 por cada una de las semifuentes, algo normal pues estamos con gráficos de 16 colores (4bpp).

Los datos de cada carácter siempre están precedidos de 12 bytes:
- 2 bytes con la posición horizontal del carácter en la VRAM
- 2 bytes con la posición vertical del carácter en la VRAM
- 2 bytes con la anchura en la VRAM, siempre 0x0003 (el ancho se mide en múltiplos de 4)
- 2 bytes con la altura en la VRAM, siempre 0x000C
- 2 bytes con el número de bytes del carácter, siempre 0x0048
- 2 bytes de relleno, siempre 0x0000, aunque también pueden indicar el número de millones que me van a dar por explicar esto

Hasta ahora no necesitamos nada de esa información, ni el número de caracteres de la fuente. Es información que nos la trae floja y sólo nos sirve para saber dónde empieza cada carácter realmente y poder escribir todas estas marranadas que, como mucho, interesarán a dos personas (si es que siempre aparecen un par de locos, cachis).

Después de esos 12 bytes ya tenemos los datos del carácter, con la peculiaridad de que siempre van dos caracteres juntos. Como son datos de 4bpp significa que cada 4 bits nos define un punto, pero de esos 4 bits los 2 superiores pertenecen a un carácter y los 2 inferiores a otro.

Un ejemplo para que se vea más claro: Si un byte tiene el valor binario 'abcdefgh', eso indica que un punto es 'abcd' y otro 'efgh', que correponden a los puntos 'ab' y 'ef' de una semifuente y a los puntos 'cd' y 'gh' de la otra.

Con datos numéricos, y tomando un byte que valga 0x74:
- 0x74 es 01110100 en binario
- 01110100 se descompone en dos puntos: 0111 y 0100
- 0111 se descompone en 01 y 11
- 0100 se descompone en 01 y 10
- Así que de ese byte sacamos que 01 y 01 son dos puntos de la primera semifuente y 11 y 10 son dos puntos de la segunda

Para ponerlo más sencillo aún: cada uno de los 0x48 bytes hay que descomponerlo en grupitos de 2 bits, y se van poniendo alternativamente en cada fuente, es decir, se graban 2 bits en un fichero, los 2 siguientes en otro, los 2 siguientes otra vez en el primero, etc. Así podremos sacar dos ficheros raw de 2bpp lineares que se podrán modificar fácilmente. Una vez modificados, se hace la operación inversa, cogiendo alternativamente 2 bits de cada fichero para reinsertarlos en la fuente original.

*** Si vas a utilizar el TM para editar los ficheros recuerda añadir 4 puntos en blanco después de cada 12. Así consigues que los caracteres sean de 16 pixeles de ancho y podrás visualizarlos bien. O eso o que el TM tenga alguna opción que no me molesté en mirar y que permita visualizar anchos que no sean múltiplo de 8 bits.

Hay un problema en estos datos: No se especifica el ancho del carácter, por lo que si se cambia alguno habrá que hacerlo sobre uno que tenga el mismo ancho.

Bueno, pues ahora te lo lees 10-12 veces para sacar algo en claro y las dudas que tengas, que las tendrás, no te quepa duda, me las comentas. Eso sí, a 100 euros la duda o fracción, así que más vale que espabiles Wink
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
tchusami



Sexo: Sexo:Hombre
Registrado: 29 Jan 2011
Edad: 25
Mensajes: 86
Ubicación: Librilla
Estado: Offline
MensajePublicado: Thu Jun 09, 2011 11:41 pm    Título del mensaje: Responder citando

Bueno CUE pues te voy a deber mucho mas de 100€ xD

Vayamos al grano, tengo aqui una duda y es, cuando yo forme un nuevo byte organizando los bits por parejas como me has dicho, creo un byte que contenga las dos parejas y los demas bits a 0, o formo un byte que contega cuatro parejas, dos que pertenecen al primer byte leido y otras dos que pertenecen al segundo?

Tambien tengo problemas con la sintaxis pero creo que en esto conseguire apañarme solito jejeje
Volver arriba
Ver perfil del usuario Enviar mensaje privado [ Oculto ] Visitar sitio web del autor
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5435
Estado: Offline
MensajePublicado: Fri Jun 10, 2011 7:20 am    Título del mensaje: Responder citando

Para ponerlo muchísimo más fácil, aquí va una explicación sencilla.

Hasta ahora sabemos, entre otras cosas:
- cada carácter es de 12x12 pixeles
- son 4 bpp, así que en un byte hay 2 pixeles, es decir, se necesitan 6 bytes por fila
- es lo que el TileMolester llama pomposamente "reverse-order", así que hay que intercambiar los dos dígitos hexadecimales
- cada pixel de 4bpp son en realidad 2 pixeles de 2bpp, cada uno correspondendiente a una semifuente

Para hacerlo más sencillo, llamemos a cada pixel con una letra. Así, inicialmente tenemos los 6 bytes de una fila como:
Código:
|  abABcdCD efEFghGH  |  ijIJklKL mnMNopOP  |  qrQRstST uvUVwxWX  |
luego se verá por qué los he llamado así y por qué los divido en 3 grupos de 2 bytes

Dividimos cada byte en sus 2 pixeles:
Código:
| abAB-cdCD efEF-ghGH | ijIJ-klKL mnMN-opOP | qrQR-stST uvUV-wxWX |
aquí ya vemos los 12 pixeles, separados en 3 grupos de 4 pixeles cada uno

No nos olvidemos que es "reverse":
Código:
| cdCD-abAB ghGH-efEF | klKL-ijIJ opOP-mnMN | stST-qrQR wxWX-uvUV |
NOTA: todo el mundo habla del "reverse" pero muy pocos saben realmente lo que es, aunque ahora, después de esta explicación, la mayoría dirá que ya lo sabía

Y ahora "repartimos" esos pixeles entre sus dos semifuentes:
Código:
|     cd-ab-gh-ef     |     kl-ij-op-mn     |     st-qr-wx-uv     | <--- semifuente 1
|     CD-AB-GH-EF     |     KL-IJ-OP-MN     |     ST-QR-WX-UV     | <--- semifuente 2
ahora queda claro por qué llamé a los bits de esa manera (mayúsculas para una semifuente, minúsculas para la otra)

Así es cómo se transforman cada dos bytes iniciales en un byte para cada una de las semifuentes. Y hasta aquí puedo leer, así que ahora toca lo de colorín, colorado, esta explicación se ha acabado.

El programa para extraer la fuente es en realidad una chorrada, de pocas líneas. Te lo podría dar hecho, que se tarda 5 minutos en hacer, pero entonces estaríamos como siempre, donde unos pocos tienen que dar las cosas siempre hechas y nunca os molestaríais en intentarlo. Si tienes problemas en hacer el programa, entonces haces un copy&paste de lo que hayas hecho, comentas lo que te pasa, y a partir de ahí se verá cómo solucinarlo.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
tchusami



Sexo: Sexo:Hombre
Registrado: 29 Jan 2011
Edad: 25
Mensajes: 86
Ubicación: Librilla
Estado: Offline
MensajePublicado: Sun Jun 12, 2011 5:19 pm    Título del mensaje: Responder citando

yo lo estoy haciendo en C# y he conseguido separar el archivo en dos tal y como dice CUE pero no consigo que se vean los caracteres claros T_T
Volver arriba
Ver perfil del usuario Enviar mensaje privado [ Oculto ] Visitar sitio web del autor
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5435
Estado: Offline
MensajePublicado: Mon Jun 13, 2011 10:02 am    Título del mensaje: Responder citando

¿¿¿Has probado a limpiarte las gafas??? Wink

Sin saber cómo está hecho no puedo decir cómo arreglarlo. Estas cosas son así, hasta que no se ven no se sabe por qué fallan.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
tchusami



Sexo: Sexo:Hombre
Registrado: 29 Jan 2011
Edad: 25
Mensajes: 86
Ubicación: Librilla
Estado: Offline
MensajePublicado: Tue Jun 14, 2011 5:35 pm    Título del mensaje: Responder citando

Jajajaja es lógico que no puedas ver lo que esta mal sin tener el codigo xD asi que te lo dejo por aqui xD.
No te asustes que esta bastante chapucero xD

Código:
using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;

namespace ConsoleApplication1
{

    class Program
    {

        static void Main(string[] args)
        {
            Byte leido;
            byte[] leido2;
            BitArray a1 = new BitArray(8);
            BitArray a2 = new BitArray(8);
            bool selec = true;
            byte b = 0;
            int n = 0;

            FileStream of = new FileStream(".\\Fuente1.raw",FileMode.Create,FileAccess.Write);
            FileStream pf = new FileStream(".\\Fuente2.raw",FileMode.Create,FileAccess.Write);
            FileStream f = new FileStream(".\\ALLBIN.bin",FileMode.Open,FileAccess.Read);
            BinaryReader reader = new BinaryReader(f);

            int offset = 10747904; //Offset 0xA40000
            int offsetmod = offset;
            for(int i = 0; i<offset; i++) reader.ReadByte();//Avanza hasta el Offset de la fuente
            for (int a = 0; a < 72; a++)
            {
                leido = reader.ReadByte();
                of.WriteByte(leido);
                pf.WriteByte(leido);
                offsetmod++;
            }
            while (offsetmod < 10779728) //Lee hasta el Offset 0xA47C50 (fin de fuente)
            {
                for (int a = 0; a < 12; a++)//Lee los 12 bytes de cabecera
                {
                    leido = reader.ReadByte();
                    of.WriteByte(leido);
                    pf.WriteByte(leido);
                    offsetmod++;
                }
                n = 0;
                for (int a = 0; a < 72; a++)//Lee dos caracteres
                {
                    leido2 = reader.ReadBytes(1);
                    BitArray bits = new BitArray(leido2);

                    if (selec)
                    {
                        #region AsignaBits(1)
                        a1[0] = bits.Get(4);
                        a1[1] = bits.Get(5);
                        a1[2] = bits.Get(0);
                        a1[3] = bits.Get(1);
                        a2[0] = bits.Get(6);
                        a2[1] = bits.Get(7);
                        a2[2] = bits.Get(2);
                        a2[3] = bits.Get(3);
                        selec = false;
                        #endregion
                    }

                    else
                    {
                        #region AsignaBits(2)
                        a1[4] = bits.Get(4);
                        a1[5] = bits.Get(5);
                        a1[6] = bits.Get(0);
                        a1[7] = bits.Get(1);
                        a2[4] = bits.Get(6);
                        a2[5] = bits.Get(7);
                        a2[6] = bits.Get(2);
                        a2[7] = bits.Get(3);
                        #endregion

                        #region ArrayBits2Byte(1)
                        if (a1.Get(7)) b++;
                        if (a1.Get(6)) b += 2;
                        if (a1.Get(5)) b += 4;
                        if (a1.Get(4)) b += 8;
                        if (a1.Get(3)) b += 16;
                        if (a1.Get(2)) b += 32;
                        if (a1.Get(1)) b += 64;
                        if (a1.Get(0)) b += 128;
                        #endregion
                       
                        of.WriteByte(b);
                        b = 0;

                        #region ArrayBits2Byte(2)
                        if (a2.Get(7)) b++;
                        if (a2.Get(6)) b += 2;
                        if (a2.Get(5)) b += 4;
                        if (a2.Get(4)) b += 8;
                        if (a2.Get(3)) b += 16;
                        if (a2.Get(2)) b += 32;
                        if (a2.Get(1)) b += 64;
                        if (a2.Get(0)) b += 128;
                        #endregion

                        pf.WriteByte(b);
                        b = 0;
                        selec = true;
                    }
                    n++;
                    if (n==24) || (n==48) || (n == 72)
                    {
                        for (int p = 0; p < 4; p++)
                        {
                            of.WriteByte(0);
                            pf.WriteByte(0);
                        }
                    }
                   
                    offsetmod++;
                }
            }
            of.Close();
            pf.Close();
        }
    }
}


Bueno, tu diras jeje
Volver arriba
Ver perfil del usuario Enviar mensaje privado [ Oculto ] Visitar sitio web del autor
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5435
Estado: Offline
MensajePublicado: Wed Jun 15, 2011 8:17 am    Título del mensaje: Responder citando

Cuando venga esta tarde-noche explico cómo hacerlo, de una forma sencilla. Espero que no sea eso lo que se enseña hoy día, que eso de avanzar hasta el offset y el tratamiento de números binarios es para colgarte. Como castigo te vas a ver todas las fotos de la Carmen de Mairena que hay en la red y te pones de fondo de pantalla alguna donde esté en bolas.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
tchusami



Sexo: Sexo:Hombre
Registrado: 29 Jan 2011
Edad: 25
Mensajes: 86
Ubicación: Librilla
Estado: Offline
MensajePublicado: Wed Jun 15, 2011 2:01 pm    Título del mensaje: Responder citando

ok tio xD si es que no me han explicado nada de como trabajar con bytes en la uni, solo me explican mierda xD
Volver arriba
Ver perfil del usuario Enviar mensaje privado [ Oculto ] Visitar sitio web del autor
Mostrar mensajes anteriores:   
Publicar Nuevo Tema   Responder al Tema    Romxhacking -> Dudas y Preguntas Todas las horas están en GMT + 1 Hora
Ir a página 1, 2  Siguiente
Página 1 de 2

 
Saltar a:  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

Temas Relacionados
 Temas   Respuestas   Autor   Lecturas   Último Mensaje 
No hay mensajes nuevos CUE es omnipresente 16 Davoker 3546 Wed Jul 12, 2017 6:46 pm
gadesx Ver último mensaje
No hay mensajes nuevos De todo un poco 2 gadesx 1082 Wed Jul 01, 2015 8:14 am
gadesx Ver último mensaje
No hay mensajes nuevos goodsets y todo eso ¿qué traducciones listan? 14 gadesx 5233 Thu Aug 21, 2014 3:58 pm
CUE Ver último mensaje
No hay mensajes nuevos Las herramientas estas que sirven para todo... xd 1 gadesx 1186 Mon Oct 29, 2012 8:41 am
CUE Ver último mensaje
El tema está bloqueado: no pueden editarse ni agregar mensajes. [Para CUE] Sobre un proyecto de edicion del BOF3/4 de PS1 1 Davoker 1130 Sun Nov 13, 2011 9:00 am
CUE Ver último mensaje
 


Crear foro gratis - Powered by phpBB © 2001, 2005 phpBB Group
subRebel style by ktauber