[Proyecto] Traducción Dissidia

1, 2, 3, 4, 5
neowar3020 escribió:
franzrogar escribió:¿Cual es el problema? Pues que que no soy capaz de encontrar dónde demonios tiene package.bin la toc y, por ende, la división correcta de archivos...


entonces no viene tampoco esa info en el package_info.bin? mmm...

Si te soy sincero: en package.bin no lo encuentro y package_info.bin está muy bien organizado, pero que no encuentro las direcciones conocidas de archivos.

Aún suponiendo que package_info.bin tenga el tamaño y el puntero de los archivos... ¿dónde están los nombres de los MPKs? Porque en package_info.bin no están... -_- o yo no los encuentro...
franzrogar escribió:Aún suponiendo que package_info.bin tenga el tamaño y el puntero de los archivos... ¿dónde están los nombres de los MPKs? Porque en package_info.bin no están... -_- o yo no los encuentro...


En el eboot.bin :). Lo desencripte con el prxdecryptor y luego le hice un desensamblado con prxtool y alli estan los nombres de los mpk y muchos otros más.

Pequeño extracto de nombres:
.....
0x00366BD0: "system_effect.mpk"
0x00366BE4: "battle_system-effe.mpk"
0x00366BFC: "arrow-effe.mpk"
0x00366C0C: "crystal-effe.mpk"
0x00366C20: "desion-effe.mpk"
0x00366C30: "effect/system/system_effect.mpk"
....
0x003686F0: "region/region_achievement.dat"
0x00368710: "sound/snd_region.scd"
0x00368728: "effect/%s.mpk"
0x00368738: "region/reward/DPB_get_tbl.dgt"
0x00368758: "region/reward/DPB_set_tbl.dst"
......


Hablando un poco de los archivos .gim, me da mala espina en la sección en que se encuentran:

Un extracto (ummm, menu....text........dios, que no este todo el texto en imagenes!!!)
............
0x003621B8: "menu/battle/encount/encount_text_tim2/encount_one100.gim"
0x003621F4: "menu/battle/encount/encount_text_tim2/encount_one200.gim"
0x00362230: "menu/battle/encount/encount_text_tim2/encount_two100.gim"
0x0036226C: "menu/battle/encount/encount_text_tim2/encount_two200.gim"
0x003622A8: "menu/battle/encount/encount_text_tim2/encount_thr100.gim"
0x003622E4: "menu/battle/encount/encount_text_tim2/encount_thr200.gim"
0x00362320: "menu/battle/encount/encount_text_tim2/encount_for100.gim"
0x0036235C: "menu/battle/encount/encount_text_tim2/encount_for200.gim"
0x00362398: "menu/battle/encount/encount_text_tim2/encount_fiv100.gim"
0x003623D4: "menu/battle/encount/encount_text_tim2/encount_fiv200.gim"
0x00362410: "menu/battle/encount/encount_text_tim2/encount_six100.gim"
0x0036244C: "menu/battle/encount/encount_text_tim2/encount_six200.gim"
0x00362488: "menu/battle/encount/encount_text_tim2/encount_sev100.gim"
0x003624C4: "menu/battle/encount/encount_text_tim2/encount_sev200.gim"
0x00362500: "menu/battle/encount/encount_text_tim2/encount_eht100.gim"
0x0036253C: "menu/battle/encount/encount_text_tim2/encount_eht200.gim"
0x00362578: "menu/battle/encount/encount_text_tim2/encount_nin100.gim"
0x003625B4: "menu/battle/encount/encount_text_tim2/encount_nin200.gim"
0x003625F0: "menu/battle/encount/encount_text_tim2/encount_ten100.gim"
0x0036262C: "menu/battle/encount/encount_text_tim2/encount_ten200.gim"
0x00362668: "menu/battle/encount/encount_text_tim2/encount_gst100.gim"
0x003626A4: "menu/battle/encount/encount_text_tim2/encount_gst200.gim"
0x00362840: "menu/battle/encount/encount_text_tim2/encount_org200.gim"
0x0036287C: "menu/battle/encount/encount_text_tim2/encount_zako_01.gim"
....


Le echare un vistazo al formato gim para conocer de donde puedo sacar su tamaño, ver como los consigo extraer y salir de la grán duda.

P.D.: aun sin sinformación de como dividir el bigfile principal :/
codestation escribió:
franzrogar escribió:Aún suponiendo que package_info.bin tenga el tamaño y el puntero de los archivos... ¿dónde están los nombres de los MPKs? Porque en package_info.bin no están... -_- o yo no los encuentro...


En el eboot.bin :). Lo desencripte con el prxdecryptor y luego le hice un desensamblado con prxtool y alli estan los nombres de los mpk y muchos otros más.

Pequeño extracto de nombres [...]

Hablando un poco de los archivos .gim, me da mala espina en la sección en que se encuentran:

Un extracto (ummm, menu....text........dios, que no este todo el texto en imagenes!!!) [...]

Le echare un vistazo al formato gim para conocer de donde puedo sacar su tamaño, ver como los consigo extraer y salir de la grán duda.

P.D.: aun sin sinformación de como dividir el bigfile principal :/

Una noticia genial que ya haya nombres (miraré qué otros archivos rondan por el UMD) y ahora a encontrar offsets y poder sacar los otros archivos. (Ni se me hubiera ocurrido volver a abrir el UMD para mirar si había otros archivos [ayay] )

Si por bigfile te refieres al package.bin... se pueden sacar (y desempaquetar) los MPKs, el resto de archivos... pues sin los offsets y sizes no se puede aún (a no ser que ocupen un hueco entre dos MPKs y en la lista de archivos indique que ahí sólo hay un archivo ;-) ) De hecho, sólo hay que buscar la cadena 4D504B20 y donde apunte 4D, pues cambiarlo en tu programa. Nota: son 397 MPKs XD... así que habría que modificarlo para que en vez de desplazarse a una posición fija, vaya buscando la cadena y, si la encuentra, ejecute el desempaquetamiento. Por que, a mano, es una atrocidad.

De hecho, todos los archivos que extrae por defecto el programa que pusiste son los correspondientes al primer MPK ;-) Yo extraje unos 15 de prueba. Sólo habría que revisar (no he tenido tiempo) por qué en los PNGs añade al final, después de la cadena de cierre, algunos bytes que no son suyos (explicación en la página anterior).

Si no hay otro tipo de archivo suelto por ahí, el resto serían TEX, aunque me resultaría muy raro que no hubiera más.



Y ahora... el pánico XD No, no me quiero imaginar que los textos estén en imágenes.... No, no quiero XD En cuanto extraiga la lista del eboot.bin miraré dónde se encuentran para echarles un vistazo (miedo me dan, miedo me dan).



Sobre el formato gim poco se sabe: es una imagen con capa alpha normalmente utilizada para iconos (aunque el chocobo es un .gim diseñado como los sprites antiguos de los juegos: todos los movimientos en una misma imagen). Aquí te puedes descargar el GimConv 1.2 de Sony (línea de comandos, como siempre). Necesita MS-VC8 runtime. Si no los tienes, los puedes descargar de aquí. En Linux, instala de las últimas versiones de Wine y, del mismo enlace, instala las MS-VC8. Se ejecuta como cualquier otro programa de Windows.

Nota: el servidor no admite ejecutables, así que cambiad «ejecutable» por «exe» ;-)

La traducción ya pinta como «posible» ;-)


EDITADO: Ya he desencriptado eboot.bin... cuanta basura en la salida -_- 89MB y seguro que 88MB no sirven para nada... Bueno, son la 4:50 am... así que no creo que haga por ahora mucho más...
franzrogar escribió:De hecho, todos los archivos que extrae por defecto el programa que pusiste son los correspondientes al primer MPK ;-) Yo extraje unos 15 de prueba. Sólo habría que revisar (no he tenido tiempo) por qué en los PNGs añade al final, después de la cadena de cierre, algunos bytes que no son suyos (explicación en la página anterior).


No me habia fijado, esos 4 bytes al final de cada fichero parece que estan de más. Probablemente se arregle restando 4 al tamaño de los archivos antes de iniciar la copia. Lo mirare mañana (24 de diciembre a las 11pm y yo en la PC con un editor hexadecimal abierto [mad] )

P.D.: Feliz Navidad XD
codestation escribió:
franzrogar escribió:De hecho, todos los archivos que extrae por defecto el programa que pusiste son los correspondientes al primer MPK ;-) Yo extraje unos 15 de prueba. Sólo habría que revisar (no he tenido tiempo) por qué en los PNGs añade al final, después de la cadena de cierre, algunos bytes que no son suyos (explicación en la página anterior).


No me habia fijado, esos 4 bytes al final de cada fichero parece que estan de más. Probablemente se arregle restando 4 al tamaño de los archivos antes de iniciar la copia. Lo mirare mañana (24 de diciembre a las 11pm y yo en la PC con un editor hexadecimal abierto [mad] )

P.D.: Feliz Navidad XD

Ok :-D

¡Feliz Navidad! Cierto XD Es que tengo más malos modales... (u olvidadizo [sonrisa] )

EDITADO: Pues para mí ya son las 4:50 am XD


Terror... menu/battle/encount/encount_text_tim2/encount_one100.gim corresponde a una imagen con el texto "Guerrero de la Luz"... por lo que me lleva a la conclusión de que han sido unos [+furioso] [discu] [uzi]
jaja, FELIZ NAVIDAD! 11:30!
Que c@%!$&es! osea que los textos están dentro de las imágenes...
Sobre el formato gim (sin especificación pública encontrada):
- «Por ahora todos» empiezan por 4D49472E30302E3150535000.
- «Todos» terminan por 0047696D436F6E7620 más 5 bytes que pueden variar pues informan de la versión del programa con que se realizaron, pero forman parte de la imagen y deben añadirse.

EDITADO: Correción de la cabecera de los archivos GIM. Realmente, indica la versión de formato escrita en japonés (leer de izquierda a derecha) XD Por lo que se leería PSP 1.00.GIM


Por ahora, un programa (en pseudocódigo) para descompilar package.bin sería:

skip .bin header (ya que no hay toc... ignoramos la cabecera)
while(!EOF)
Leer byte:
-- ¿Pertenece a MPK?
----> Sí: descompilar (programa ya hecho, corregir los 4 bytes finales) y continuar por el byte final de MPK +1
----> No: ¿Pertenece a GIM? (hay archivos .gim sueltos por package.bin)
--------------> Sí: descompilar y continuar por el byte final de GIM +1
--------------> No: ¿Pertenece a TEX?
---------------------------> Sí: avisar por consola de su existencia (no conocemos dónde termina, por lo que no podemos extraerlo, aún)
----------------------------> No. Iterar (aún no sabemos si hay más archivos sueltos por package.bin)
done


La imagen de «Guerrero de la Luz» la extraje a fuerza bruta, por si alguien se pregunta cómo la extraje ;-)


Sigo buscando una toc para package.bin... sin éxito.


EDITADO: Hay otro tipo de contenedor llamado ARC en package.bin que aún no sé qué contiene.


EDITADO2: Aquí la modificación, burda eso sí, pero funcional ;-) del programa para que no copie bytes extras:
         FILE *tfd = fopen(filename, "w");
         if(tfd) {
            while(file_size--) {
               fread(&tmp, 1, 1, fd);
               fwrite(&tmp, 1, 1, tfd);
            }
            fclose(tfd);
         } else {

Sólo habría que cambiar la parte real del «if». El resto está para que lo encuadréis (no lo he puesto en formato patch porque no sé que sistema utilizáis)
Yo de programación sé bien poco, estoy en proceso de aprender (estudio informática), pero de japonés se bastante, entre yo y el google hacemos uno xDD. Yo no soy partidiario de los juegos en version USA O PAL, ya que ponen las voces americanas y capan bandas sonoras, así que pienso ayudar en todo lo que haga falta para parchear la versión JAP al español.
Ya me diréis si queréis mi ayuda.

Un saludo.
kaiseki escribió:Yo de programación sé bien poco, estoy en proceso de aprender (estudio informática), pero de japonés se bastante, entre yo y el google hacemos uno xDD. Yo no soy partidiario de los juegos en version USA O PAL, ya que ponen las voces americanas y capan bandas sonoras, así que pienso ayudar en todo lo que haga falta para parchear la versión JAP al español.
Ya me diréis si queréis mi ayuda.

Un saludo.

Bienvenido seas :-) Como siempre, toda ayuda es poca ;-)

http://franzrogar.googlepages.com/name_C_UP.tga ... una imagen... que me hace temer lo que se comentó por aquí...
Conocía los dos primeros kanjis que son fuego y llama y el tercero lo he buscado y significa flujo por lo cual:

火炎 = Kaen = Llama
= Ryuu/ru = Flujo/exilio/estilo

Por lo que 火炎流 sería algo como: Flujo de llama/flujo de fuego/corriente de fuego..., como quieras interpretarlo.

Hay kanjis que juntos forman una palabra por así decirlo, común, es decir, algo habitual, como es el ejemplo: 今日(kyou=hoy), que está formado por (ahora) y (día), si te fijas es bastante simple y lógico, pero en el caso de la imagen que me has pasado no la forman y es por eso que dudo, me he estado informando y tratándose de un juego es posible que se refiera al ataques tipo fuego.
Bueno siento haber metido el tostón. Y temer no sé, pero si me ha dado que calentarme la cabeza la frase esta xD.

edit:
wiikeyo escribió:desgraciadamente no se como traducirlo,pero puedo ser de ayuda traduciendolo de la version inglesa ;)


Bueno no lo había dicho pero también sé inglés, de hecho muchas palabras en japonés son americanas.

Espero haber sido de ayuda, un saludo.
desgraciadamente no se como traducirlo,pero puedo ser de ayuda traduciendolo de la version inglesa ;)
@kaiseki Muy buena interpretación :-D. Quizá más afinada sería 火炎流 = Llamarada ;-) Aunque también depende de si es un ataque de un personaje en particular (y por lo tanto con una traducción «peculiar») ya que podría estar utilizando 火炎 en sentido figurado (como en español «estar caliente») lo que vendría a ser tal que «modo embestida» o del estilo.

Offtopic: ¿Utilizas un diccionario digital? Es que el de papel que tengo es lento de trabajar y en digital no he encontrado ninguno de mi agrado (tienen muchas carencias e incluso malformaciones).

@wiikeyo Digo lo que mismo que a kaiseki: toda ayuda es poca :-)


EDITADO: Me pondré a extraer todo lo que pueda y a decompilar para ver qué podemos ir traduciendo (cuanto menos, imágenes hay para un rato y... por lo visto hasta ahora... el texto lo han hecho en capas de imágenes [si son bestias]). ¿Qué tal el dominio de editores gráficos? Tal que Photoshop, GIMP...
franzrogar escribió:EDITADO: Me pondré a extraer todo lo que pueda y a decompilar para ver qué podemos ir traduciendo (cuanto menos, imágenes hay para un rato y... por lo visto hasta ahora... el texto lo han hecho en capas de imágenes [si son bestias]). ¿Qué tal el dominio de editores gráficos? Tal que Photoshop, GIMP...


Pues excelente, mientras no sea la historia no hay problema, que ahorita ando traduciendo el manga de MonsterHunter2 al ingles y todavia me falta bastante, pero si sin los menus le daria prioridad para ya tenerlo, solo me dirias en que formato quedan *tga png, psd..? para regresarte el rar y que lo recompiles.
neowar3020 escribió:
franzrogar escribió:EDITADO: Me pondré a extraer todo lo que pueda y a decompilar para ver qué podemos ir traduciendo (cuanto menos, imágenes hay para un rato y... por lo visto hasta ahora... el texto lo han hecho en capas de imágenes [si son bestias]). ¿Qué tal el dominio de editores gráficos? Tal que Photoshop, GIMP...


Pues excelente, mientras no sea la historia no hay problema, que ahorita ando traduciendo el manga de MonsterHunter2 al ingles y todavia me falta bastante, pero si es el menu y las cosas de items le daria prioridad para ya tenerlo, solo me dirias en que formato quedan *tga? para regresarte el rar y que lo recompiles.

Por ahora, todas las imágenes que he ido encontrando están en formato .gim. Tengo el conversor oficial de Sony, así que no hay pérdidas ;-) y las convierto en su salida natural .tga

Por ahora, todas las imágenes corresponden a partes del menú (por ejemplo, nombres de contrincantes cuando dice lo de «vs Quien_sea» y demás), es decir, las partes de texto que tienen efectos visuales. A parte de un par de iconos sueltos por allí.
franzrogar escribió:
neowar3020 escribió:
franzrogar escribió:EDITADO: Me pondré a extraer todo lo que pueda y a decompilar para ver qué podemos ir traduciendo (cuanto menos, imágenes hay para un rato y... por lo visto hasta ahora... el texto lo han hecho en capas de imágenes [si son bestias]). ¿Qué tal el dominio de editores gráficos? Tal que Photoshop, GIMP...


Pues excelente, mientras no sea la historia no hay problema, que ahorita ando traduciendo el manga de MonsterHunter2 al ingles y todavia me falta bastante, pero si es el menu y las cosas de items le daria prioridad para ya tenerlo, solo me dirias en que formato quedan *tga? para regresarte el rar y que lo recompiles.

Por ahora, todas las imágenes que he ido encontrando están en formato .gim. Tengo el conversor oficial de Sony, así que no hay pérdidas ;-) y las convierto en su salida natural .tga

Por ahora, todas las imágenes corresponden a partes del menú (por ejemplo, nombres de contrincantes cuando dice lo de «vs Quien_sea» y demás), es decir, las partes de texto que tienen efectos visuales. A parte de un par de iconos sueltos por allí.


ok, pues si quieres hagamos una prueba y mandame alguna imagen que sepas donde ubicar, para editarla, la compiles de nuevo y testees si funciona o se llega a colgar.
Uso NJSTAR, es un procesador de texto en el que puedes escribir japonés, también tiene función de traductor y una que es la mejor, cuando no entiendes un kanji puedes buscarlo en una tabla que hay, hay kanjis combinados y puedes ir clickando kanjis hasta encontrar el que buscas, obviamente hay una opción para que te traduzca el kanji seleccionado.

Yo también tengo uno físico pero más que nada es vocabulario, es mucho mejor utilizar el programa que yo uso, y luego para las dudas gordas pones los kanjis en google y a ale, a ver si de casualidad descubres algo xD.

Y sobre lo de la traducción es tal como tú dices, puede ser cualquier cosa relacionada con fuego. Pero de todas maneras creo que en poco tiempo descubriremos que es ;), yo iré mirando cada día.

Un saludo.
Proof of concept:
Imagen

He aquí cómo se hace:

Descargar esta imagen: http://3x3ojos.googlepages.com/ICON0_NEW.png
Abrir PACKAGE.BIN con editor hexadecimal.
Reemplazar los bytes desde 8D070 hasta 8FCBD (ambos incluidos)
Reempaquetar y probar ;-)

Nota: el png editado ocupaba menos que el original*, así que para «llenar» el espacio que faltaba, se puede rellenar con cualquier byte. Yo, por seguir la norma de facto, lo rellené con «00».

* Hice que ocupara menos para no tener que cambiar todos y cada uno de los punteros existentes... porque para una prueba de concepto qué más da si tiene menor calidad o se parece algo menos...




EDITADO: Proof of concept 2
Imagen

Archivo: http://3x3ojos.googlepages.com/encounter2002.gim
Límite superior: 25BD8000 (incluido)
Límite inferior: 25BDC51F (incluido)
Repetir los mismos pasos que para el anterior.

PD: Sí, ya sé... pero ¿cómo darse cuenta dónde se mostraba el cambio?... Pues haciendo que, de verse, sea muy llamativo XD

EDITADO: «Luciérnaga verde» es «Warrior of Light» (Guerrero de la Luz) en modo «Combate rápido».
franzrogar escribió:PD: Sí, ya sé... pero ¿cómo darse cuenta dónde se mostraba el cambio?... Pues haciendo que, de verse, sea muy llamativo XD

EDITADO: «Luciérnaga verde» es «Warrior of Light» (Guerrero de la Luz) en modo «Combate rápido».


relol, jaja, buena, bueno entonces no hubo nigun cuelgue, ahora solo quedaria entonces encontrar los del menu.
Hola, yo tambien querria ayudar, tengo mucho tiempo libre asi que podria encontrar y traducir partes del juego XD, se algo de programacion y edicion hexadecimal aunque no mucho, por favor decirme que editor (nombre) usais y en k modo (ej: unicode) en seguida me pondria a intentar por lo menos traducir XD. Saludos.
raymc escribió:Hola, yo tambien querria ayudar, tengo mucho tiempo libre asi que podria encontrar y traducir partes del juego XD, se algo de programacion y edicion hexadecimal aunque no mucho, por favor decirme que editor (nombre) usais y en k modo (ej: unicode) en seguida me pondria a intentar por lo menos traducir XD. Saludos.


La verdad es que estaría bien que explicarais como se hace, así aprendemos los otros y podemos ir ayudando, que aparte me gustaría aprender. :P

saludos.
lo explican mas arriba, lee desde la pag 1 y te enteraras de todo...

pero en resumen, lo k han echo a sido:

extraen el archivo gim, con el programa k puso codestation, luego, miran su composicion hexadecimal, la buscan en el package.bin, con el programa gimtotga (creo, k libero sony), lo pasan a tga, a tga editan el archivo, si te fijas la caldidad, a bajado notoriamente, pork si un archivo, (Simplificando es (hexadecimalmente) 13 23 21 f1), no puede convertirse en 13 23 21 f1 01 (osea, un bite mas, pork eso desekilibraria el archivo, ya k si un puntero, indica la direccion (que ahora es 01 y antes no formaba parte del archivo) no indicara el archivo k fuese siguiente, sino el gim editado...


nose si me explico... bueno, entonces una vez editado, a calidad menor, cojen el tga, lo pasan a gim, miran el codigo, y lo reemplazan, reempaquetan, y listo...




creo k es eso
Tranquilos todos XD Estoy escribiendo un tutorial para trabajar con lo que ya sabemos que hay (con el resto, hay que esperar). Por ahora, se pueden las imágenes (y en ellas hay texto) pero aún no sé si hay archivos de texto (creo que los hay... pero lo que está escrito no tiene sentido... ni se sabe dónde acaban)

Así que, de principio, estas dos cosas:
1 - Editor binario: MadEdit (Windows, Linux, FreeBSD y sources)

2 - Desempaquetador. 7-Zip, File Roller, WinRAR, WinZIP... para descomprimir la ISO.

Cuando la descomprimáis, vais a carpeta/PSP_GAME/USRDIR/DATA/ y allí tenéis «PACKAGE.BIN». Copiadlo en otro sitio como «copia de seguridad» (para no tener que desempaquetarlo otra vez).

Abrid «package.bin» con MadEdit y, si no se muestra el código hexadecimal, pulsad «Alt+3» (o el último icono de la barra de herramientas). Ya estáis viendo el código hexadecimal.

No sigo aquí, pondré una página web completa porque la información necesaria y las explicaciones son tan largas, que resultaría incómodo de leer aquí en un foro.
franzrogar escribió:No sigo aquí, pondré una página web completa porque la información necesaria y las explicaciones son tan largas, que resultaría incómodo de leer aquí en un foro.


Nos dejas con la miel en la boca, justo en la importante xDD. Es broma no pasa nada, gracias por el tuto :P. Ya tengo ganas de trastear con esto.

Saludos.
kaiseki escribió:
franzrogar escribió:No sigo aquí, pondré una página web completa porque la información necesaria y las explicaciones son tan largas, que resultaría incómodo de leer aquí en un foro.


Nos dejas con la miel en la boca, justo en la importante xDD. Es broma no pasa nada, gracias por el tuto :P. Ya tengo ganas de trastear con esto.

Saludos.

Ya está XD

GUÍA - TUTORIAL
franzrogar escribió:
kaiseki escribió:
franzrogar escribió:No sigo aquí, pondré una página web completa porque la información necesaria y las explicaciones son tan largas, que resultaría incómodo de leer aquí en un foro.


Nos dejas con la miel en la boca, justo en la importante xDD. Es broma no pasa nada, gracias por el tuto :P. Ya tengo ganas de trastear con esto.

Saludos.

Ya está XD

GUÍA - TUTORIAL


¡Oh yeah! Tú eres de los míos, de tirarse toda la noche trasteando, como molas [tadoramo] . Me parece que hoy no duermo trasteando [toctoc] .

Un saludo.
kaiseki escribió:
franzrogar escribió:GUÍA - TUTORIAL


¡Oh yeah! Tú eres de los míos, de tirarse toda la noche trasteando, como molas [tadoramo] . Me parece que hoy no duermo trasteando [toctoc] .

Un saludo.

[sonrisa] Como veas ;-) Recuerda descansar la vista de vez en cuando ;-)

Sólo como nota: los pasos son los que yo doy, pero el llegar a saberlos es mucho, mucho más largo [carcajad] pero consideré que toda esa información adicional está de más y quería simplificarla para ser útil.

Resumiendo a la mínima expresión sería:
- Abre el archivo «package.bin»
- Busca la cabecera y el final (pie) del archivo GIM. Lo llamaré «SELECCIÓN»
- Guarda la selección en formato binario (los bytes entre la cabecera y el pie) en un archivo nuevo en modo binaro.
- Ejecuta GimConv para pasar la imagen a TGA
- Edita la imagen y guárdala «sin compresión»
- Ejecuta GimConv para pasar la imagen a GIM
- Si el archivo editado (ya en formato GIM) ocupa más que el original, vuelve a editar el TGA hasta que ocupe los mismos bytes o menos.
- Si ocupa menos, rellena con bytes «00»
- Elimina la «SELECCIÓN» y, luego, pega los bytes del archivo editado.
- Crea el nuevo UMD
me parece muy interesante esto de traducir el dissidia, por que la verdad esperar medio año para tenerlo en español ya ves... Aunque sean los menus y tal (sin historia) la verdad que no me importaria, me gustaria ayudaros pero no entiendo NADA de esto. Si quereis que os eche una mano a algo facilillo darme un toque ;) salu2
Jxus escribió:me parece muy interesante esto de traducir el dissidia, por que la verdad esperar medio año para tenerlo en español ya ves... Aunque sean los menus y tal (sin historia) la verdad que no me importaria, me gustaria ayudaros pero no entiendo NADA de esto. Si quereis que os eche una mano a algo facilillo darme un toque ;) salu2

Ok. Sólo una cosita... esperarás «medio año» para la versión americana (que no implica que tenga el español). Para el español de España, aún no hay fecha (puede ser en diciembre del año que va a empezar).
conozco un amigo q sabe japo si te interesa enviame mp
franzrogar escribió:
Jxus escribió:me parece muy interesante esto de traducir el dissidia, por que la verdad esperar medio año para tenerlo en español ya ves... Aunque sean los menus y tal (sin historia) la verdad que no me importaria, me gustaria ayudaros pero no entiendo NADA de esto. Si quereis que os eche una mano a algo facilillo darme un toque ;) salu2

Ok. Sólo una cosita... esperarás «medio año» para la versión americana (que no implica que tenga el español). Para el español de España, aún no hay fecha (puede ser en diciembre del año que va a empezar).


Y con sus posibles consecuentes capadas de voces, bandas sonoras y a saber que más. Ahí gente que le dará igual, pero a mi me gusta jugar todo a su versión original, de por mi fuera me gustaría jugarlo en japonés pero mi nivel no es tan alto, me entero de la mitad de cosas por ahora.

un saludo.
Bueno, gracias por la múltiples ofertas.

Ahora mismo, lo que hace falta es un programador... :-| He enviado un MP a codestation pero no he obtenido aún respuesta (probablemente por las fechas en las que estamos XD )

Así, que, aquí comento qué hace falta por si alguno es programador para que pueda hacerlo en ANSI C (preferentemente):

El programa debe hacer esto (pseudocódigo):

- Abrir package.bin (fopen en modo «r»)
- Desplazarse 0x1800 bytes (fseek)
- Desde ese byte hasta el final del archivo «buscando byte a byte»****:
-----> Buscar la cadena hexadecimal 0x4D49472E30302E3150535000
-----------> Si la encuentra: buscar la cadena hexadecimal 0x0047696D436F6E7620343100
----------------------> Si la encuentra, copiar todo lo que haya entre ellas (y ellas mismas) en un archivo. Mostrar también su «offset» ********.
----------------------> Si no, mostrar ERROR
-----------> Si no la encuentra, desplazarse al siguiente byte del archivo y seguir buscando hasta el final de package.bin

**** «byte a byte» se refiere. Cojo un byte y miro si, a partir de ahí está esa cadena. Si no está, miro en el byte siguiente (no al final de los 12 bytes que conforman la cadena).

*********** «offset» Se necesitan 3 cosas para poder reconstruir después el parche:
1º El byte donde comienza la primera cadena.
2º El byte donde acaba la segunda cadena.
3º El nombre del archivo que hemos guardado.

El nombre debe acompañar a los otros datos (para poner las cosas en su sitio exacto ;-)



Como nota: yo entré como traductor [rtfm] y he pasado a ser uno de los que mira el formato [qmparto] Vale que tenga conocimientos de informática (qué cuatro años más malgastados... [enfado1]) pero ANSI C nunca fue mi fuerte...
Sin intención de ofender y con todo el respeto del mundo, pero me parece una chorrada. Te sale mucho más sencillo coger las voces japonesas e insertarlas en la versión PAL o USA a pegarte el palizón de traducir todas las string table. Como bien se hizo con el Crisis Core FFVII, y siendo ambos juegos de SE seguramente el formato de audio será el mismo y el mismo método de sobreescribirlos.
Además de que hay muchos videos del narrador que no tienen subtítulos, sino que los textos están incrustados en el video y eso no lo podéis traducir.

Y luego no es solamente traducir Kanjis con babelfish, porque hay términos y habilidades que tendréis que ir trasteando y compilando la ISO cada dos por tres para ver si tiene sentido.

Pero bueno, cada uno que haga lo que quiera.

PD: Irónicamente, yo estoy esperando la versión USA para poder tener las voces en inglés, las japos no me molan demasiado.
ola buenas...
estoy siguiendo los pasos e "intentar" traducir...
pero solo no puedo,necesito algo de ayuda...
asik si alguien lo desea,podria ayudarme
gracias
me parece una tonteria traducir un juego que ya va a ser traducido que no traducir otros juegos que nunca estaran en ingles y que llevamos esperando una traduccion de alguna alma caritativa.
Muy buenas!
Hace bastante tiempo que no me paso por EOL, (he estado ocupado [angelito] ); y he visto cómo se ha montado en 8 días todo un equipo de gente dispuesta a traducir un juego.
Por tanto, este mensaje lo veo ahora por primera vez y tampoco tengo el juego.

Si aún no teneis programador, por favor, decidme cuanto ocupa más o menos el archivo que teneis que "desmenuzar" (porque desempaquetar sería quitar todos los trozos ¿no? ^_^) y si no es demasiado tal vez haya otra forma...
Lo digo porque C no es mi fuerte tampoco, pero PHP ya es otra cosa ;)

Si no es demasiado pesado (es decir, mi memoria "puede" con el procesado del archivo; supongo que sí) tal vez pudiera hacerlo.

No tengo el archivo como ya he dicho, así que no puedo ver aquí el hexadecimal xD

Y oye, franzrogar, ¿por qué hay que buscar byte-a-byte?
[Abriendo la cadena en modo 1byte-1caracter (en cualquier codificación) se puede hacer $cadena_a_buscar = chr(0x4D).chr(0x49).chr(0x47).[ETC] (siendo . el operador de concatenación) hasta completar la secuencia de caracteres y luego hacer strpos($cadena_que_contiene_archivo_entero, $cadena_a_buscar) ]
De la forma entre corchetes, se puede obtener la posición del inicio del paquete; de una forma similar se encuentra la cadena fin (teniendo en cuenta que inicio < fin; sino se puede hacer que el programa trunque el archivo por el comienzo) y luego tan solo hay que copiarlo.

Y si no me equivoco, el offset tiene que ser [posición_inicio] en hexadecimal. Esto último tendría que comprobarlo, acabo de pensarlo.


Feliz Navidad!
compañeros estais haciendo un trabajo fascinante y os mando todo mi apoyo para que consigais traducirlo ;) suerte y un saludo!! :)
aver no seria una perdida de tiempo entre todos, traducir los menus (por lo menos) bueno me refiero a todos los menus, extras, equipos, los botones de arriba que salen en el menu principal que nadie o por lo menos yo no se... si entre todos lo hacemos de aqui a 6 meses que lo saquen en ingles, aprendes por lo menos a hacer las cosas. Yo ahora despues de 2 semanas he aprendido cosas jugando que antes no sabia, por que no me enteraba de nada [carcajad]
Veamos, voy a responder a dos mensajes pero no debería porque siempre he sido de la idea de no alimentar a los trolls.

Ponisito escribió:Sin intención de ofender y con todo el respeto del mundo, pero me parece una chorrada. Te sale mucho más sencillo coger las voces japonesas e insertarlas en la versión PAL o USA a pegarte el palizón de traducir todas las string table. Como bien se hizo con el Crisis Core FFVII, y siendo ambos juegos de SE seguramente el formato de audio será el mismo y el mismo método de sobreescribirlos.
Además de que hay muchos videos del narrador que no tienen subtítulos, sino que los textos están incrustados en el video y eso no lo podéis traducir.

Y luego no es solamente traducir Kanjis con babelfish, porque hay términos y habilidades que tendréis que ir trasteando y compilando la ISO cada dos por tres para ver si tiene sentido.

Pero bueno, cada uno que haga lo que quiera.

PD: Irónicamente, yo estoy esperando la versión USA para poder tener las voces en inglés, las japos no me molan demasiado.

Primero, decir que no tienes «intención de ofender» y decir que el trabajo que estamos haciendo «parece una chorrada», es la mayor mentira que pueda existir. El indicar que traducimos con Babelfish (lo que sea eso) indica que ni has tenido la decencia de molestarse en leer este hilo. El resto es una soberana idiotez sin sentido. Sinceramente, si no tienes nada que hacer más que marcar tu ironía, por favor, no envíes más spam si no tienes ninguna crítica constructiva. El que tenga que malgastar mi tiempo en responder un mensaje que no aporta nada no me hace la menor gracia.

buddy669 escribió:ola buenas...
estoy siguiendo los pasos e "intentar" traducir...
pero solo no puedo,necesito algo de ayuda...
asik si alguien lo desea,podria ayudarme
gracias

Buenas y bienvenido. codestation ya ha contactado conmigo, así que pronto se podrá repartir el trabajo ;-) Aquí ya somos varios, así que, si quieres, puedes colaborar y así completamos antes el trabajo ;-)

me parece una tonteria traducir un juego que ya va a ser traducido que no traducir otros juegos que nunca estaran en ingles y que llevamos esperando una traduccion de alguna alma caritativa.

A mí, lo que me parece una tontería es alimentar a los trolls como comenté en el primer mensaje. Vuelvo a reiterar: si no tienes nada interesante que decir ni nada constructivo, por favor, crea un nuevo hilo titulado «A mí me gustaría... o como llenar de spam otros hilos». Sinceramente, ¿si nadie ha traducido esos juegos será porque a nadie les interesa traducirlos? Te parecerá agria la respuesta pero no mereces otra para quien quiere hacer una petición diciendo que el trabajo que estamos haciendo aquí le «parece una tontería»; porque puedes encontrar respuestas tales como «es una idiotez traducir esos juegos». Y como dije antes, si no tienes nada constructivo o interesante que comentar, por favor, no llenes de spam este hilo.

santhy escribió:Muy buenas!
Hace bastante tiempo que no me paso por EOL, (he estado ocupado [angelito] ); y he visto cómo se ha montado en 8 días todo un equipo de gente dispuesta a traducir un juego.
Por tanto, este mensaje lo veo ahora por primera vez y tampoco tengo el juego.

Si aún no teneis programador, por favor, decidme cuanto ocupa más o menos el archivo que teneis que "desmenuzar" (porque desempaquetar sería quitar todos los trozos ¿no? ^_^) y si no es demasiado tal vez haya otra forma...
Lo digo porque C no es mi fuerte tampoco, pero PHP ya es otra cosa ;)

Si no es demasiado pesado (es decir, mi memoria "puede" con el procesado del archivo; supongo que sí) tal vez pudiera hacerlo.

No tengo el archivo como ya he dicho, así que no puedo ver aquí el hexadecimal xD

Y oye, franzrogar, ¿por qué hay que buscar byte-a-byte?
[Abriendo la cadena en modo 1byte-1caracter (en cualquier codificación) se puede hacer $cadena_a_buscar = chr(0x4D).chr(0x49).chr(0x47).[ETC] (siendo . el operador de concatenación) hasta completar la secuencia de caracteres y luego hacer strpos($cadena_que_contiene_archivo_entero, $cadena_a_buscar) ]
De la forma entre corchetes, se puede obtener la posición del inicio del paquete; de una forma similar se encuentra la cadena fin (teniendo en cuenta que inicio < fin; sino se puede hacer que el programa trunque el archivo por el comienzo) y luego tan solo hay que copiarlo.

Y si no me equivoco, el offset tiene que ser [posición_inicio] en hexadecimal. Esto último tendría que comprobarlo, acabo de pensarlo.


Feliz Navidad!

Hola :-) Programador tenemos a codestation (que le engatusé ;-) e hizo el enorme favor de ayudar) que iba a ser el soporte logístico y ayuda para que nosotros nos peleáramos con ello, aunque es un miembro vital para la traducción de este juego.

No obstante, nunca viene de más que haya más gente ;-) El archivo ocupa 600MB [boing]

¿Por qué byte a byte? Porque si buscamos 0ABC (2 bytes) y el archivo es 3F0ABC, si cogemos el primer byte y buscamos (leer 2 bytes), entonces leería 3F0A. El puntero estaría en el 3er byte. Como no lo ha encontrado, si no buscamos byte a byte, la siguiente cadena que encontraría sería BC[EOF]... y diría que no está la cadena en el archivo ;-) (cosa que no es cierta)


minihuesos escribió:compañeros estais haciendo un trabajo fascinante y os mando todo mi apoyo para que consigais traducirlo ;) suerte y un saludo!! :)

Muchísimas gracias :-D Esperamos tener algo funcional pronto ;-)
yo tengo muchas ganas de ayudar, tengo muchas ganas, pero nose ni C ni japo, pense k con google podria areglarmelas, pero, el problema es k si vienen en imagenes, la cosa se complica....

nose si podre ayudar.... [buuuaaaa]
Primero, decir que no tienes «intención de ofender» y decir que el trabajo que estamos haciendo «parece una chorrada», es la mayor mentira que pueda existir. El indicar que traducimos con Babelfish (lo que sea eso) indica que ni has tenido la decencia de molestarse en leer este hilo. El resto es una soberana idiotez sin sentido. Sinceramente, si no tienes nada que hacer más que marcar tu ironía, por favor, no envíes más spam si no tienes ninguna crítica constructiva. El que tenga que malgastar mi tiempo en responder un mensaje que no aporta nada no me hace la menor gracia.

Jarl, esta si que es buena. Mi post es una opinión como cualquier otra. Y si es "spam" o no que lo decida un mod, por esa regla de tres el tuyo también lo es. ¿que no aporta nada? Mira, si no aceptas críticas constructivas y solo quieres que se te de la razón lo vas a tener muy dificil, no solo en internet, sino en cualquier sitio.

Y perdona por no leerme 90 post de una sentada. Pero es que tengo que hacer cosas como trabajar y no tengo tanto tiempo libre como algunos.

¿Y no es una critica constructiva? ¿por qué? Me da a mi que simplemente es que son verdades como puños que no puedes responder con argumentos que apoyen a lo que tu crees correcto. Simplemente haces lo tipico de desprestigiar en vez de contestar.

Lo de chorrada dije, sin ironía y malos rollos como ya posteé, porque realmente pienso que no tiene sentido traducir algo que se va a traducir de forma oficial y que simplemente sería extraer el archivo de audio de la iso JAP insertarlo y renombrarlo en la PAL y compilarlo otra vez. Vamos, como en el CC una persona tardaría unos 3 días, mientras que en vuestra traducción tradujendo fuera de contexto los diálogos y habilidades con los posibles errores que conlleva, los videos de narrador imposibles de traducir, ect. Pues si, veo una chorrada hacer eso durante meses cuando por impaciencia y esperar unos meses lo podéis hacer en unas pocas horas.

"Te sale mucho más sencillo coger las voces japonesas e insertarlas en la versión PAL o USA a pegarte el palizón de traducir todas las string table."
¿Es esto mentira? Dime entonces un argumento de por qué.

" Como bien se hizo con el Crisis Core FFVII."
¿Es esto mentira? Dime entonces un argumento de por qué.

"Además de que hay muchos videos del narrador que no tienen subtítulos, sino que los textos están incrustados en el video y eso no lo podéis traducir."
¿Es esto mentira? Dime entonces un argumento de por qué.

Que yo no lo digo que no lo hagáis, como si queréis poneros a barrer en el desierto. Solo es una critica personal y un consejo.

PD: No van a cambiar la musica. En Dragon Ball es la unica saga de juegos en el que se hace por temas de licencias y copyright. Lo cual no es el caso.

PD2: Además, al igual que Final Fantasy X, Final Fantasy XII, Dirge of Cerberus FFVII, Kingdom Hearts, Crisis Core FFVII y demás juegos de Square-Enix; la versión PAL seguramente tenga más contenidos extra inéditos que la JAP por lo que es otra cosa a tener en cuenta.

PD3: Que yo también se de traducciones, mira "Keeper" en el leeme de los RPGMaker.
Bueno... 600MB son ya bastantes, xDD
Si codestation hace él el programa entonces ya nada, pero sino... quizás aumentando el memory_limit...., xD
Mi problema sería obtener el archivo, pues no tengo el juego en JAP y 600MB no pasan por el messenger, [+risas]
Y lo de byte a byte....
Es cierto, pero lo que se puede hacer es buscar el 1er byte (buscamos 0x0ABCDEFA en 0xFF0AC00ABCDEFADDE4) de esta forma: buscamos todos los 0x0A en el archivo (encontramos 0xFF0AC00ABCDEFADDE4). En cada uno de los encontrados buscamos lo que falta (en 0xFF0ACO != 0x0ABC..., pero en el otro 0ABCDEFA(DDE4...) == 0ABCDEFA).
Ya lo hemos encontrado.

Haré una prueba a ver si funciona en la práctica ;)
      int buscar(string myFile ){
         int offset=0,  chunk,  step=65535,  contador=0, tope=16;
         byte[] databin= {0xd6,0xe3,0x69,0xa0,0x50,0xfd,0xe5,0x23,0x10,0x75,0xa4,0xcc,0x86,0xbc,0x8e,0xec};
         byte[] buffer = new byte[step];
         
         int inicio=0,acierto_inicio=0,i;
         
         if (myFile=="") return -1;
         BinaryReader br = new BinaryReader(   File.Open(myFile, FileMode.Open, FileAccess.Read));
         
         while ((chunk=br.Read (buffer,0,step ))>0 ){
            inicio=0;
            
            while (inicio<step) {
               if (contador>0) {
                  for(i=contador;(i<databin.Length);i++){
                     if (databin[i]==buffer[i-contador]) {
                        contador++;
                     } else {
                         contador=0;
                         inicio++;
                         i=20;
                     };
                  }
               };
               if (contador==tope) {
                  br.Close(); return (offset-contador);
               }; //--------------------- objetivo logrado
               
               //vuelta a empezar :(
               acierto_inicio=busca_inicio(buffer,databin,step,inicio);
               if (acierto_inicio!=-1)
                  { // hemos encontrado algo que empieza igual :)
                  for( i = 0;(i<databin.Length) && (i+acierto_inicio<step);i++) {
                     if (databin[i]==buffer[i+acierto_inicio]) {
                        contador++;
                     } else {
                         contador=0;
                         acierto_inicio++;
                         i=20;
                     };
                  };
                     
                  if (contador==tope) {
                     br.Close();
                     return (offset+acierto_inicio);
                  };// ------ objetivo logrado
                  inicio=acierto_inicio;
                  } else {
                  inicio=step+1;
                  };
            }
            offset+=step;
            label1.Text = offset.ToString();
            Application.DoEvents ();
         };
         br.Close();
         return -1;
      }



      int busca_inicio(byte[] in_buff, byte[] data, int tope,int inicio)
      {
         int i=0;
         for (i=inicio;i<tope;i++){
            if (in_buff[i]==data[0]) return i;
         };
         return -1;
      }

Esta función retorna el punto de inicio de la cadena hex dada en DATABIN. Funciona, yo la uso para encontrar el inicio del fichero Data.Bin en el parcheador del MHP2G.
Con unas ligeras modificaciones puede que os sirva ;)
Si os interesa, tengo un script en PHP que ha funcionado para archivos pequeños.
En breve intentaré generar un archivo más grande (del orden de 500MB) a ver si funciona igual de bien.

Me explico:
No tengo el archivo package.bin, pero me he generado un archivo cualquiera (a base de for(i = 0; i < tamañodeseado; i++) ) el cual, un 1% del mismo (aproximadamente) son las que he llamado "cadenas mágicas".
No son las vuestras, sino otras que son más fáciles de ver a simple vista (para comprobar la rectitud de mi programa).
En archivos de 1kb mi script "analizador" termina en menos de un segundo.

Ahora me falta saber como quereis que extraiga las partes entre las que están las cadenas mágicas.
Contactad conmigo por MP y hablamos por MSN o GTalk si quereis, que es más rápido ;)
Aqui esta el extractor de los archivos gim. En total extrajo 4820 archivos, 143.3 MiB. Los nombres de archivo tienen el siguiente formato: [numero_fichero]_[offset].gim. Tengo algunos problemas con el Virtualbox asi que no pude convertirlos/revisarlos todos con el GimConv.

gimext.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define PACKAGE_SIZE 636454912

char gim_header[] = {0x4D, 0x49, 0x47, 0x2E, 0x30, 0x30, 0x2E, 0x31, 0x50, 0x53, 0x50, 0x00};
char gim_footer[] = {0x47, 0x69, 0x6D, 0x43, 0x6F, 0x6E, 0x76, 0x20, 0x31, 0x2E, 0x34, 0x31, 0x00};

long find_data(FILE *fd, char *data, long size, long current_offset, long end_offset) {
   char tmp[16];
   while(!feof(fd) || (current_offset + size) <= end_offset) {
      fseek(fd, current_offset, SEEK_SET);
      fread(&tmp, size, 1, fd);
      if(!memcmp(data, tmp, size)) {
         return ftell(fd) - size;
      } else {
         current_offset++;
      }
   }
   return -1;
}

int save_file(FILE *fd, int counter, long gim_offset, int size) {
   char filename[64];
   unsigned int data;
   sprintf(filename, "%i_%X.gim", counter, gim_offset);
   FILE *tfd = fopen(filename, "w");
   if(fd) {
      fseek(fd, gim_offset, SEEK_SET);
      while(size) {
         fread(&data, 4, 1, fd);
         fwrite(&data, 4, 1, tfd);
         if(size > 4) {
            size -= 4;
         } else {
            fread(&data, size, 1, fd);
            fwrite(&data, size, 1, tfd);
            size = 0;
         }
      }
      fclose(tfd);
      return 0;
   }
   return -1;
}

int main(int argc, char **argv) {
   long gim_offset;
   long gim_eof;
   long current_offset = 0;
   int size;
   int counter = 0;
   FILE *fd = fopen("package.bin","r");
   if(fd) {
      while((gim_offset = find_data(fd, gim_header, sizeof(gim_header), current_offset, PACKAGE_SIZE)) != -1) {
         printf("Found gim file at offset %X\n", gim_offset);
         if((gim_eof = find_data(fd, gim_footer, sizeof(gim_footer), gim_offset + sizeof(gim_header), PACKAGE_SIZE)) == -1) {
            fprintf(stderr, "Error, can't find footer of gim file at offset %X. Aborting\n", gim_offset);
            break;
         }
         size = gim_eof + sizeof(gim_footer) - gim_offset - 4;
         printf("Size of gim file: %i bytes\n", size);
         if(save_file(fd, counter, gim_offset, size) == -1) {
            fprintf(stderr, "Error, can't save file %i_%X.gim. Aborting\n", counter, gim_offset);
            break;
         }
         current_offset = gim_offset + size;
         fseek(fd, current_offset, SEEK_SET);
         counter++;
      }
      fclose(fd);
   } else {
      fprintf(stderr, "Error, can't find package.bin\n");
   }
   return 0;
}
como va el tema chicos? Aveis conseguido encriptar ya algun dato en la iso?
santhy escribió:Y lo de byte a byte....
Es cierto, pero lo que se puede hacer es buscar el 1er byte (buscamos 0x0ABCDEFA en 0xFF0AC00ABCDEFADDE4) de esta forma: buscamos todos los 0x0A en el archivo (encontramos 0xFF0AC00ABCDEFADDE4). En cada uno de los encontrados buscamos lo que falta (en 0xFF0ACO != 0x0ABC..., pero en el otro 0ABCDEFA(DDE4...) == 0ABCDEFA).
Ya lo hemos encontrado.

Haré una prueba a ver si funciona en la práctica ;)

Primero, muchas gracias por las molestias de y el tiempo que has dedicado para ayudar al proyecto ;) codestation acaba de poner el programa funcional :-)

No obstante, me gustaría comentar la solución que habías planteado. El modo de ejecución es bastante similar al que propuse (vas a tener que buscar byte a byte de todas formas para comprobar si está 0x0A ;-) No obstante, tu solución plantea dos problemas:
1 - Mucha carga de lectura. Vas a tener que leer 4 veces, como mínimo, el archivo ( buscar 0x0A, buscar cabecera, buscar pie y desplazarse al comienzo y guardar el archivo).
2 - ¿Cuánta memoria necesitará el almacenar los más de 4000 punteros de imágenes? ;-)


Nordal escribió:[... código]
[...código]
Esta función retorna el punto de inicio de la cadena hex dada en DATABIN. Funciona, yo la uso para encontrar el inicio del fichero Data.Bin en el parcheador del MHP2G.
Con unas ligeras modificaciones puede que os sirva ;)

Muchas gracias por el código. ¿Está en C-SHARP, no? No he podido comprobar si funciona debido a que utilizo Linux y la única máquina/compilador que conozco es el Proyecto Mono... y el día que consiga hacerlo funcionar será cuando saquen C-QUESTION-MARK [carcajad]

No obstante, gracias por el código. Te prometo que cuando funcione Mono lo compruebo (nunca está de más aprender cosas nuevas ;-)


santhy escribió:Si os interesa, tengo un script en PHP que ha funcionado para archivos pequeños.
[...]
Ahora me falta saber como quereis que extraiga las partes entre las que están las cadenas mágicas.
Contactad conmigo por MP y hablamos por MSN o GTalk si quereis, que es más rápido ;)

Muchas gracias (otra vez... empiezo a ser repetitivo... aunque estoy realmente agradecido). Espero, no obstante, que hayas aprendido algo nuevo (tal como hice yo al empezar este proyecto). [beer]



codestation escribió:Aqui esta el extractor de los archivos gim. En total extrajo 4820 archivos, 143.3 MiB. Los nombres de archivo tienen el siguiente formato: [numero_fichero]_[offset].gim. Tengo algunos problemas con el Virtualbox asi que no pude convertirlos/revisarlos todos con el GimConv.
[... código]

Qué decir... una imagen vale más que mil palabras: [tadoramo] [plas] (bueno, han sido dos)

Para convertir todas las imágenes en TGA, si estás en Linux, sólo tienes que instalar Wine y MSVC8 (con «wine programa.exe»). Luego, si usas bash, este script te hará el trabajo ;-)
#/bin/bash
echo -e "Converting from GIM to TGA"
LIST=`ls *.gim`
for i in $LIST ;
do wine GimConv.exe $i -TGA $i.tga;
echo -e "$i converted\n";
done

(PD: Hay tantas imágenes que lleva ya 5 minutos convirtiéndolas en TGA)


Jxus escribió:como va el tema chicos? Aveis conseguido encriptar ya algun dato en la iso?

Sí, las dos pruebas de concepto que puse (creo que están dos páginas atrás) son funcionales. Es decir: que están en la ISO y funcionando sin problemas ;-)
Desde luego, he aprendido mucho.
Me propuse como "reto" hacerlo en PHP; y lo conseguí (además del generador de archivos aleatorio para tener algo con lo que trabajar, xDD)
Y sí que funciona! (Con un archivo de 512MB).
Me di cuenta del "fallo" con la gran cantidad de memoria que hacía falta; además si se paraba la ejecución del programa tenía que volver a empezar desde el comienzo.
Y hallé una solución: tener otro archivo en modo w escribiendo los offsets que analizaba el programa. (Solo los offsets, no los contenidos)
De esta forma, evitaba tenerlos en memoria. (Y para un archivo que tiene MILLONES (probabilidad demasiado alta, xD) de cadenas como esa el archivo apenas ocupa 1MB).
Lecturas hace muchas, pero si supiésemos que entre cabecera y pie hay al menos X bytes se reducirían bastante.
En lugar de hacerlo byte a byte... hago esto
// $bcad es la cadena binaria buscada (el 0xFF0A....); se importa a la función desde fuera.
   // Leemos 30 Bytes (se puede asegurar que habrá 6 bytes entre cabecera y pie
   $kb = fread($fp, $READSIZE);
   $offset = NULL; // Por defecto

   $more = fread($fp, strlen($bcad)+1); // Prelectura. Se hace por si se encuentra parcialmente en $kb la cadena.
// Para ello se lee $kb+{longitud_de_la_cadena}+1
   
   if($more) // Si es el fin del archivo no hay prelectura y no debemos retroceder.
      fseek($fp, -strlen($bcad) , SEEK_CUR);
   $READSIZETOTAL = strlen($kb);
   
   debug_lec($kb, $more);// basicamente dice "Estamos leyendo [representacion hexadecimal de $kb y $more]
   
   if(($p = strpos($kb, $bcad)) !== FALSE) {
      $offset = ftell($fp) - $READSIZETOTAL + $p; // posicion de lectura ultima (ftell-$READSIZE) porque leimos $READSIZE + posicion relativa.
      if($exceso) $offset += strlen($bcad); // Exceso es una variable pasada a la funcion para saber si incluir la cadena en el offset (para el pie)
      $hexo = '0x'.dechex($offset);
      // Encontrada
      echo "Encontrada $acad en $offset ($hexo)".NL;
      usleep(5);
      
   } elseif(FALSE !== ($p = strpos($kb.$more, $bcad))) { // Puede ser una busqueda parcial. Buscamos un poco más.
      $offset = ftell($fp) - $READSIZETOTAL + $p;
      if($exceso) $offset += strlen($bcad); // Igual que en el if() anterior
      $hexo = '0x'.dechex($offset);
      // Encontrada
      echo "Encontrada con prelectura $acad en $offset ($hexo)".NL;
      usleep(5);
   } //else echo "Pero no hemos encontrado nada".NL.NL;
   if($PRIMERO) $PRIMERO = 0;
   
   return $offset;
}


Si os interesan los archivos (más que nada para probar; pues es más ligero el de codestation) avisadme y los cuelgo.
He estado desconectado unos días, me quedé en que tenia que aprenderme el tutorial.

Sobre lo que decían de que no vale la pena: Mentira, vale mucho la pena, con esto estamos practicando nuestras especialidades y aprendiendo nuevas. Recuerdo cuando traduje todas las misiones del naruto 3 de PS2, ahí mis conocimientos de japonés aumentaron un montón, y seguro que si me pongo con esto aprenderé mucho más, y si aprendo un poquito de programación mejor que mejor. Y sobre todo, el orgullo de haber hecho un gran trabajo, aunque luego salga en español.

Bueno siento realzar el tema pero no podía callarme, mañana mismo me pondré con el tuto, ánimo a todos, podemos hacerlo, me esforzaré en aprender rápido.

saludos.
Pack imágenes susceptibles de ser traducidas en formatos Targa y PNG.

En las imágenes, está, principalmente, elementos de batalla... por lo que habrá que seguir buscando en package.bin la parte de texto...
203 respuestas
1, 2, 3, 4, 5