Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: JaViS on May 02, 2011, 12:36:30 AM

Title: Como crear paletas de 8 bits?
Post by: JaViS on May 02, 2011, 12:36:30 AM
Hola,

estaba por crear un FPG de 8 bits con Smart FPG Editor, y me pidio un archivo de paleta para usar.

y ahi me acorde como venia la mano :P

hay algun editor de paletas que uds usen? como se manejan con este tema?

muchas gracias
Title: Re: Como crear paletas de 8 bits?
Post by: DCelso on May 02, 2011, 03:44:20 AM
http://www.galeon.com/linaresmugen/utils/paletero107.zip
Title: Re: Como crear paletas de 8 bits?
Post by: darío on May 02, 2011, 04:17:11 AM
También puedes cargar la paleta de cualquier archivo gif, bmp, png que sea de 8bits. Si usas algún programa que te permita generar alguno de estos formatos en 8 bpp controlando la paleta (gimp, graphicsgale, photoshop, etc) podrías generar una imagen y usarla como tu archivo de paleta.

De todos modos, es algo que tengo que incluir, sí...
Title: Re: Como crear paletas de 8 bits?
Post by: Fede on May 02, 2011, 07:57:01 AM
Quote from: DCelso on May 02, 2011, 03:44:20 AM
http://www.galeon.com/linaresmugen/utils/paletero107.zip

A mi no me funciona directamente el enlace. He tenido que entrar por la página y darle.

http://linaresmugen.galeon.com/utils/utils.htm
Title: Re: Como crear paletas de 8 bits?
Post by: Drumpi on May 02, 2011, 04:56:18 PM
Yo me cree una función que me lee de un BMP de 24 bits los colores y me los guarda en un array de 256*3 bytes para poder crear mapas de durezas de forma más cómoda. Lo tengo en un programa más largo (me convierte de un TMF a un mapa de durezas, pero no me acuerdo exactamente ahora qué es lo que hacía exactamente), así que es posible que falte algo (por ejemplo, el array global de 256*3 bytes):

[code language="bennu"]function obtener_paleta (string op_bmp_file)
private
   int op_fileid;
   bmp_header op_head;
   
   byte op_read_color[2];
   int  op_last_color;
   
   int cont_pos;
   int cont1,cont2;
   int cont_aux;
   
   byte temp;
begin
   op_fileid=fopen(op_bmp_file,O_READ);
   if (op_fileid)
       //leemos la cabecera
       fread(op_fileid,op_head);
       //cont_pos=sizeof(bmp_header);
       
       //leemos los datos
       for (cont2=0;cont2<op_head.alto;cont2++)        //contador línea
           for (cont1=0;cont1<op_head.ancho;cont1++)   //contador columna
               //leemos 3 bytes de color
               fread(op_fileid,op_read_color);
               //say("Color ("+cont1+","+cont2+") : "+op_read_color[0]+" , "+op_read_color[1]+
               //    " , "+op_read_color[2]+". POSICIÓN: "+cont_pos);
               cont_pos+=3;
               
               //buscamos color en la paleta actual
               cont_aux=0;
               while ((cont_aux<=op_last_color) && (cont_aux<=255))
                   if ((op_read_color[2]==fpg_paleta[cont_aux*3])     &&
                       (op_read_color[1]==fpg_paleta[(cont_aux*3)+1]) &&
                       (op_read_color[0]==fpg_paleta[(cont_aux*3)+2])   )  //coincide
                       
                      break;
                   else                //no coincide, miramos siguiente
                       cont_aux++;
                   end
               end
                   //en este punto, cont_aux puede haber encontrado una coincidencia, por lo que
                   //valdrá igual o menor que el último color, si no, valdrá uno más y habrá que
                   //añadirlo (siempre que no se salga de la tabla)
               if ((cont_aux>op_last_color) && (cont_aux<256))
                   fpg_paleta[cont_aux*3]    =op_read_color[2];
                   fpg_paleta[(cont_aux*3)+1]=op_read_color[1];
                   fpg_paleta[(cont_aux*3)+2]=op_read_color[0];
                   op_last_color=cont_aux;         //incrementamos (en uno) el máximo de colores.
               end
           end
           
           //ahora hay que alinear el puntero de lectura a 4 bytes
           if ((cont_pos %4)!=0)
               cont_aux=4-(cont_pos % 4);
               //say("CONT AUX vale: "+cont_aux);
               op_read_color[0]=0;
               while (cont_aux>0)
                   fread(op_fileid,temp);
                   cont_pos++;
                   cont_aux--;
               end
           end
       end
       
       //y borramos los colores sobrantes
       for (cont_aux=op_last_color+1;cont_aux<256;cont_aux++)
           fpg_paleta[cont_aux*3]    =0;
           fpg_paleta[(cont_aux*3)+1]=0;
           fpg_paleta[(cont_aux*3)+2]=0;
       end
       //loop frame; end
       //while (!key(_z)) frame; end
       
       fclose(op_bmp_file);
   end
end[/code]

Después usando set_colors y save_pal o algo así, pues se guarda, si no creo que tengo una función que salva los datos de la paleta, pero creo que está en el formato de FPG.
Title: Re: Como crear paletas de 8 bits?
Post by: darío on May 02, 2011, 09:54:14 PM
O puedes hacer uso de la herramienta que te adjunto y que es un pequeño refrito de una pequeña herramienta que hice hace ya unos cuantos años. Básicamente le he cambiado el nombre y alguna cosa más, la he recompilado en un Jar y la he subido.

Permite abrir y crear PAL y FPL (un formato de paletas de Fenix que al final se quitó).

También permite abrir MAPs de 8 y 16bpp y editar sus puntos de control pero no es muy cómodo... También permite extraer la paleta de un MAP (espero que siga funcionando porque no lo he probado).

No es la mejor herramienta del mundo (mucho menos el editor de puntos de control), pero el editor de Paletas es bastante usable.

Ahh está hecha en Java. Yo la he probado en Linux y funcionaba.

Espero que te siva :)

Un saludo!
Title: Re: Como crear paletas de 8 bits?
Post by: JaViS on May 03, 2011, 03:01:26 AM
muchas gracias chicos!! me encanto el prg de Drumpi, muchas gracias a todos por tomarse la molestia. son unos grosos :D
Title: Re: Como crear paletas de 8 bits?
Post by: DCelso on May 04, 2011, 12:21:08 AM
Quote from: JaViS on May 03, 2011, 03:01:26 AM
muchas gracias chicos!! me encanto el prg de Drumpi, muchas gracias a todos por tomarse la molestia. son unos grosos :D
ehh, mas llamao gordo ? ;D, porque lo estoy que si no... :D

por cierto jue, a mi me encanta el paletero (vale que lo he hecho yo y se me adapta completamente a todas mis necesidades pero)  es que es tan intiutivo ... :D