Lo nuevo: Tool paletas NCLR

5 marzo, 2010 a las 7:36 PM | Escrito en PC, Programación | Deja un comentario

Bueno, realmnte estoy bastante aburrido, si que me he puesto a escribir un poquillo que estoy haciendo ahora mismo.

Una de las cosas que estoy haciendo ahora mismo, con las que llevo toda la semana indagando, es una tool para editar paletas nclr.

La misma cara que tienes tu puse yo cuando me propuso la idea nazareth. Es el formato de las paletas de las roms de nds (rollos de traducción y demas en los que está metido este hombre). Como me aburria acepté.

Empecé la broma en c++, usando winapi, y en una de esas, no se que coño hice que se borro el source. Me cagé en cierto símbolo religioso varias veces y decidí empezar de nuevo en vb.

Aqui la cosa cambiaba. Por mucho que me duela admitirlo, para cosas simples en las que necesites ventanas, vb lo borda si los recursos para ti no son un problema.

La cosa que en 4 dias o asi (a ojo de buen cubero) acabé la tool. Esta en la v1, pretendo añadirle alguna cosilla mas. Explico un poco lo que tiene la v1:

- Carga paletas nclr, permite editarlas en valores rgb y volver a guadarlas

- Tiene un limite de 10000 colores por archivo nclr(si metes un archivo con mas colores crasheará, aunque lo maximo que e visto son 4000 y pico colores)

Ahora mismo estoy haciendo lo siguiente:

- Que separe los archivos nclr con más de una paleta en varios archivos, y los separe en paletas de 16 o 256 colores según el tipo que sea

- Que lea archivos nclr sin cabecera y me los separe por paletas (esto me costo mas aquí, ahora contaré por que)

- Que me guarde el archivo nclr en paleta.pal (si el archivo contiene varias paletas, un archivo .pal por paleta)

- Arreglar algun pequeño bug (que por lo visto solo yo he notado)

Y solo me queda guardarlo en .pal (esperando a que nazareth me pase un archivo .pal par ver como funcionan)

Pues empezé por abrir el archivito desde vb y meterlo en una variable.

Concretamente, la funcion siguiente:

System.IO.File.ReadAllText(rutadelarchivo, formatodeencoding)

El segundo argumento fué opcional, pero tuve que poner Encoding.Default porque sino me pillaba mal el archivo.

Lo primero fué separar el texto cada dos carácteres, ya que cada color eran dos valores en hexadecimal (XX YY). Todo lo he ido guardando en un array de 10000 caracteres (de hay los 10000 colores que puede leer). El siguiente paso era pasar el color a hexadecimal, cada color, como ya he dicho, tiene un formato (XX YY) en hexadecimal (el formato de windows es XX YY ZZ).

Despues ese texto en hexadecimal pasarlo a decimal para desplazar bits y demas (concretamente mas info aqui: http://llref.emutalk.net/nds_formats.htm#NCLR), y obtener los valores en rgb. Antoniond programó una tool en c que pasaba de rgb a hex y de hex a rgb, asi que solo tuve que cambir alguna cosilla para que funcionase en vb.

Una vez tuve los valores rgb, lo demas era fcil, hacer el proceso inverso para guardar. Lo que hacia era, cada vez que cambiabas un valor en rgb, primero detectar que fuese válido (de 0 a 255). Después aer todo lo inverso asta obtener texto como el que conseguí al abrir el archivo. Despues, una funcion aparte se encargaba de cuando le daba a guardar meterme todo el contenido de la variable en el archivo nclr abierto.

Y con esto ya estaba la primera versión.

Ahora va lo nuevo, que he programado hoy.

Primero habia que detectar si tenia cabecera o no. La cabecera es de 40 carácteres, asi que cojí los cuatro primeros caracteres de la cabecera (RLCN) y compare con el archivo. Si coincidia, hacia que me guardase la cabecera en una variable y empezase a leer desde el final. Si no coincidia, no tenia cabecera, asi que leia desde el principio.

Funciona correctamente. Lo malo fué detectar si las paletas del archivo eran de 16 o 256 colores. En la cabecera,el caracter 25, en hex valía 04 si eran 256 colores, y 03 para 16 colores. Pero sin cabecera la cosa se complicaba. La solución me la dio nazareth. En cada paleta, el primer color es el transparente casi siempre (creo que no quiso afirmar un siempre cuando me lo comentó). Concretamente el transparente suele ser el magenta. Hay la cosa se simplificaba. Solo tenia que leer la variable que tenía todo el texto, y comparar el caracter numero 1 con el numero 33 (si, seria el 16, pero como leo por caracteres con la funcion Mid(), y cada color son dos carácteres, había que avanzar el doble)

Hecho esto comprobé que todo funcionaba perfecto. Por ultimo, para paletas de 16 colores que solo tubiesenuna sola paleta, obiamente mire el número de caracteres, si era 16, tenia una paleta de 16 colores, sino sería de 256.

Bueno, y despues de eso, hasta aquí he llegado, solo me falta que me permita exportar a .pal, que espero que lo haga en breves (de hoy al domingo como muy tarde).

Dejo una descarga y una captura de la V1, a alguno le será útil:

Captura

- Descarga: http://www.megaupload.com/?d=845ZFUZU

Nazareth tambien me dijo que lo bordaría si añadiese que abriese archivos que train imagen mas paleta (.ncgl), aunque de normal suelen traer la imagen solo. De momento no prometo nada, porque hay es mas dificil saber cuando empieza la paleta, esta claro que para la v2 no estara incluido. Para mas inrri, algunas traen compresion LZ77,aunque es un formato que e usado (de otra tool que le programé a nazareth, que quitaba la cabecera a ciertos archivos y los descomprimia, y viceversa, otro rollo de tradus), la funcion que tengo es para c, no para vb. Si lo hiciese intentaria portearla, creo que si se podria sin problemas. Pero que dudo bastante si pondré soporte a eso o no.

Y no queria revelar mucho tampoco, pero como es mi devblog, y hay que vender la moto, voy a dejar una capturita extra:

captura v2

Dentro de poco colgaré la V2 y explicare eso de los archivos .pal, mientras voy a recuperar post utiles de mi antiguo blog en sceners.

Salu2

Advertisement

Dejar un comentario »

RSS feed para los comentarios de esta entrada. URI para TrackBack.

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Blog de WordPress.com. | Theme: Pool by Borja Fernandez.
Entradas y comentarios: feeds.

Seguir

Get every new post delivered to your Inbox.