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

Extracción e Inserción en textos y gráficos Devil Suvivor 2
Ir a página Anterior  1, 2, 3
 
Publicar Nuevo Tema   Responder al Tema    Romxhacking -> Dudas y Preguntas
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5433
Estado: Offline
MensajePublicado: Sat Sep 15, 2012 8:19 am    Título del mensaje: Responder citando

Aquí está todo: http://www.mediafire.com/?aat11a75cxlwdrx

En realidad, cuando hablamos de SJIS nos referimos al codepage 932, que es más completo porque incluye los ASCII de 7 bits.

En el archivo hay 3 tablas:
- la ASCII, que es la chapuza para usar con el WindHex32
- la UTF8, que usaba antes en mis programas
- la UNICODE, que es la que uso ahora
Son la misma tabla, hechas por mí, 100% completas, no como las que circulan normalmente por la red, que las faltan los códigos finales. Yo suelo utilizar la UNICODE por eso de que cada carácter ocupa siempre 2 bytes, así no tengo que estar interpretando nada, que si ocupa un byte, que si no, etc.

Además de las tablas hay un fichero en formato HTML, por si quieres ver los caracteres de golpe, o para hacer copy&paste de ellos, que es lo que suelo usar yo.

¿Debo entender por lo que dices que sabes algo de programación? Si es así te paso una rutinita en C de las muchas que tengo para la transformación. Y/o te explico cómo lo hago, por si hay dudas.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Drek9



Sexo: Sexo:Hombre
Registrado: 04 Sep 2012
Edad: 32
Mensajes: 10
Estado: Offline
MensajePublicado: Sat Sep 15, 2012 11:32 am    Título del mensaje: Responder citando

Sí, sé programar. No soy ningún experto pero me desemvuelvo. Aunque C no es mi fuerte, pero lo he usado.

Oky, te agradecería mucho tu rutinita, para ir échandole un ojo a la transformación.

Yo hasta ahora usaba el mapa de caracteres de windows para poder escribir el "abc" en doble ancho jaja. Pero más rápido copiar de tu html.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5433
Estado: Offline
MensajePublicado: Sat Sep 15, 2012 2:09 pm    Título del mensaje: Responder citando

La cosa de la tabla: http://www.mediafire.com/?kzs5z5czxjurcap

Lo miras y ya lo explicaré con un poco más de calma, que es bastante sencillo de entender.

También van las fuentes con sus datos, que son bastante simples, todas a 1bpp, de 8 ó 16 pixeles de ancho, cada una con su altura. Lo único a tener en cuenta es que los pixeles están al revés, de derecha a izquierda en vez de ir de izquierda a derecha, que es lo habitual. En los BMP no se nota porque los saco bien, pero hay que tenerlo en cuenta cuando se quiera leer/grabar la fuente.

Por cierto, los caracteres usados están en el ARM9. Busca los códigos SJIS de los números y los encontrarás.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Drek9



Sexo: Sexo:Hombre
Registrado: 04 Sep 2012
Edad: 32
Mensajes: 10
Estado: Offline
MensajePublicado: Sat Sep 15, 2012 4:32 pm    Título del mensaje: Responder citando

Por las fuentes no hay problema, son sencillas. La usada por los textos de la carpeta event es la 12x12, el resto supongo que será de los menus entre otros.

Le he estado echando un ojo, y me parece que necesito otros fuentes, por ejemplo con el método FileSize, FileLoad, Memory... ya que usa los métodos pero no están en el source que me pasaste.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5433
Estado: Offline
MensajePublicado: Sat Sep 15, 2012 7:05 pm    Título del mensaje: Responder citando

Pues no parece haber más fuentes. ¿Estás seguro de que no se trata de gráficos, que es una opción bastante común?
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Drek9



Sexo: Sexo:Hombre
Registrado: 04 Sep 2012
Edad: 32
Mensajes: 10
Estado: Offline
MensajePublicado: Sat Sep 15, 2012 9:35 pm    Título del mensaje: Responder citando

Gráficos? Ah! Cuando dije fuentes en el segundo parrafo, yo me referia a sources adicionales a tabla.c

Y te nombre los metodos que al compilar me dice [Linker error] undefined reference to `FileSize' y así con el resto que te puse, porque claro, llama a esos métodos pero no existen en el fichero.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5433
Estado: Offline
MensajePublicado: Sun Sep 16, 2012 9:22 am    Título del mensaje: Responder citando

Ah, coño. Para que luego me digan que las cervezas no afectan al funcionamiento normal del ser humano. Esas funciones son normaluchas, leer un fichero, coger el tamaño de un fichero, ... Lo tengo así para que cada uno use las que le apetezca, que siempre aparece un notas que dice que él prefiere hacerlo con no-sé-qué o que sólo sabe el no-sé-cuántos. Así dejo en el programa sólo las "cosas" básicas del lenguaje, y todas las funciones pueden ser sustituidas por las que más agraden. Además me sirve para añadir mensajitos por si pasa algo.

Más o menos deberían ser éstas:
Código:
/*----------------------------------------------------------------------------*/
int FileSize(char *filename) {
  FILE *fp;
  int   fs;

  if ((fp = fopen(filename, "rb")) == NULL) EXIT("File open error\n");
  fs = filelength(fileno(fp));
  if (fclose(fp) == EOF) EXIT("File close error\n");

  return(fs);
}

/*----------------------------------------------------------------------------*/
void *FileLoad(char *filename) {
  return(FileRead(filename, 0, FileSize(filename)));
}

/*----------------------------------------------------------------------------*/
void *FileRead(char *filename, int offset, int length) {
  FILE *fp;
  char *fb;

  if ((fp = fopen(filename, "rb")) == NULL) EXIT("File open error\n");
  if (fseek(fp, offset, SEEK_SET)) EXIT("File seek error\n");
  fb = Allocate(length, sizeof(char));
  if (fread(fb, 1, length, fp) != length) EXIT("File read error\n");
  if (fclose(fp) == EOF) EXIT("File close error\n");

  return(fb);
}

/*----------------------------------------------------------------------------*/
void FileSave(char *filename, void *buffer, int length) {
  FileCreate(filename);
  FileWrite(filename, 0, buffer, length);
}

/*----------------------------------------------------------------------------*/
void FileCreate(char *filename) {
  FILE *fp;

  Folder(filename);

  if ((fp = fopen(filename, "w+b")) == NULL) EXIT("File create error\n");
  if (fclose(fp) == EOF) EXIT("File close error\n");
}

/*----------------------------------------------------------------------------*/
void FileWrite(char *filename, int offset, void *buffer, int length) {
  FILE *fp;

  if ((fp = fopen(filename, "r+b")) == NULL) EXIT("File open error\n");
  if (fseek(fp, offset, SEEK_SET)) EXIT("File seek error\n");
  if (fwrite(buffer, 1, length, fp) != length) EXIT("File write error\n");
  if (fclose(fp) == EOF) EXIT("File close error\n");
}

/*----------------------------------------------------------------------------*/
void Folder(char *path) {
  int i;

  for (i = 0; path[i]; i++) {
    if ((path[i] == '/') || (path[i] == '\\')) {
      path[i] = 0;
      if (mkdir(path) > 0) EXIT("Create folder error\n");
      path[i] = '/';
    }
  }
}

/*----------------------------------------------------------------------------*/
void *Allocate(int length, int size) {
  char *fb;

  fb = (char *)calloc(length, size);
  if (fb == NULL) EXIT("Memory error\n");

  return(fb);
}

/*----------------------------------------------------------------------------*/
void *ReAllocate(void *buffer, int length, int size) {
  char *fb;

  fb = realloc(buffer, length * size);
  if (fb == NULL) EXIT("Memory error\n");

  return(fb);
}

/*----------------------------------------------------------------------------*/
void Free(void *buffer) {
  free(buffer);
}

Con todo eso ya podrás cargar la tabla de conversión unicode. Ya sólo te queda leer el fichero con los textos y usar las tablas font/finv para convertir caracteres.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Drek9



Sexo: Sexo:Hombre
Registrado: 04 Sep 2012
Edad: 32
Mensajes: 10
Estado: Offline
MensajePublicado: Sun Sep 16, 2012 12:24 pm    Título del mensaje: Responder citando

Ah! Vale, vale jaja. Como llevo tiempo sin tocar C no habia caido en eso. Y es buena idea, la verdad.
Pero el metodo al que llamas "memory" es el que has puesto al final como "Free"?
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5433
Estado: Offline
MensajePublicado: Sun Sep 16, 2012 2:09 pm    Título del mensaje: Responder citando

El Memory es el Allocate y el Free no se usa en este caso, debería estar en vez de los free(). Es que depende de qué versión de las funciones sea, que las he cambiado mil veces.

Ahora aprovecho y sigo.

font y finv son tablas globales de 65536 elementos de 32 bits que se crean al cargar la tabla de conversión, que debe ser una tabla unicode, con formato XXXX=YYYY, siempre con 4 dígitos hexadecimales para el valor (YYYY) y creo que hasta 4 para el código (XXXX), aunque yo suelo poner siempre 4, rellenando con ceros a la izquierda si es el caso, que así queda todo del mismo tamaño. Verás que hago un montón de cosas, pero es porque me gusta poder poner comentarios en los ficheros, los típicos que van precedidos por ';'.

font va a llevar la conversión en sí, con el valor 0xFFFF si no está definido en la tabla, mientras que finv es la tabla inversa, que es la que nos da el código a partir del valor, lo que se usará para reinsertar los textos.

Lo único que tienes que hacer es leer el texto original, que será de 1-2 bytes, que eso te lo dejo a ti, mirar a ver si existe en font, o sea, que no tenga el valor 0xFFFF, y poner el valor. En caso de que sea 0xFFFF yo suelo poner el código hexadecimal entre llaves, para saber nada más verlo que estaba en el texto pero no tiene carácter convertido. Así siempre me aseguro que todo esté convertido, tenga o no definidos todos los caracteres usados. Otra cosa que hay que controlar es que si el valor corresponde a la llave de apertura puede dar problemas, así que ése es un carácter que pongo dos veces, parecido a lo que se hace con el '\\', pero yo con la llave, para dar la nota.

Para hacer el proceso inverso es lo mismo, leyendo dos bytes del texto unicode para analizarlo. Si hay una llave, se mira si sigue otra, lo que indicará que originalmente era una llave, y si no es así es que viene un código hexadecimal que se pondrá tal cual. Cualquier otro valor se mira en finv, pero teniendo en cuenta que ahora será 0xFFFFFFFF quien indique que no está definido. No es 0xFFFF porque 0xFFFF siempre será un valor valido en font, aunque no este usado. Si no está definido, mal asunto, algo está mal porque no podemos generar el código.

Y básicamente eso es todo. Todo el proceso, más o menos igual, está en alguna de las cosas que he subido a RHDN, así que puedes mirar por allí también.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Drek9



Sexo: Sexo:Hombre
Registrado: 04 Sep 2012
Edad: 32
Mensajes: 10
Estado: Offline
MensajePublicado: Sun Sep 16, 2012 3:46 pm    Título del mensaje: Responder citando

Oky! Es algo similar a lo que hiciste en Radiant Historia y Rune Factory.
Me pondré a ello pero seguramente reescribiré el código para aclararme mejor jeje, creo que será más rápido.

Lo que si te quiero pregunta es sobre el ancho de los caracteres. Están en arm9.bin, pero dónde exactamente? Podría reemplazarlo usando algunos kanjis o hiragana jaja.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
CUE
Administrador
Administrador


Sexo: Sexo:Hombre
Registrado: 24 Jan 2011
Mensajes: 5433
Estado: Offline
MensajePublicado: Sun Sep 16, 2012 4:58 pm    Título del mensaje: Responder citando

Claro que es similar. Yo todos los programas los hago con un copy&paste de otros anteriores, así que son primos hermanos por parte de padre. También es la razón por la que algunos bugs pasan de unos a otros, pero no se lo digas a nadie. Ahora mismo acabo de darme cuenta que esas funciones no son las "buenas", lo que no quiere decir que no funcionen, pero he visto que están limitadas a 31 bits de longitug de los ficheros, el típico int con signo, o sea, que como trates ficheros de más de 2 gigas te dará un error, pero no creo que sea el caso.

¿El ancho está en el ARM9? Pues si te he dicho eso no sé por qué ha sido. La verdad es que no sé de qué va el juego porque nunca lo he ejecutado, así que no sé si usa caracteres de ancho variable o no.
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
Drek9



Sexo: Sexo:Hombre
Registrado: 04 Sep 2012
Edad: 32
Mensajes: 10
Estado: Offline
MensajePublicado: Sun Sep 16, 2012 5:08 pm    Título del mensaje: Responder citando

Jaja gracias, y no, no es el caso de ficheros de más de 2GB.

Pues supongo que serán de doble ancho fijo, pero no lo puedo asegurar...
Ya le meteré mano a ver.

Gracias!
Volver arriba
Ver perfil del usuario Enviar mensaje privado  
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 Anterior  1, 2, 3
Página 3 de 3

 
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 Me ha llegado Santa antes de tiempo (eso espero) 25 CUE 2953 Fri Dec 23, 2016 11:40 am
CUE Ver último mensaje
No hay mensajes nuevos goodsets y todo eso ¿qué traducciones listan? 14 gadesx 5219 Thu Aug 21, 2014 3:58 pm
CUE Ver último mensaje
No hay mensajes nuevos El foro vuelve a ser para registrados 2 CUE 3036 Tue Nov 29, 2011 8:38 am
CUE Ver último mensaje
No hay mensajes nuevos Foro creado, sobre romhacking 13 gadesx 7800 Wed Feb 16, 2011 8:53 pm
zackner Ver último mensaje
No hay mensajes nuevos NORMAS DEL FORO (lectura obligatoria) 0 gadesx 2467 Thu Jan 27, 2011 3:43 pm
gadesx Ver último mensaje
 


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