Especificación del formato PAL

Esta sección describe el contenido de un fichero PAL. No es necesario conocer
estos detalles simplemente para programar juegos, pero serán de utilidad a
quien quiera realizar utilidades en lenguajes externos que lean o escriban
ficheros PAL.

Un fichero PAL no incluye compresión. Fenix soporta de forma transparente el
uso de compresión GZIP en los ficheros, sin necesidad de marcarlos
especialmente con extensión .gz. Normalmente un fichero PAL se guarda en disco
comprimido de esta manera, pero en el resto del fichero asumiremos que el
fichero PAL no está comprimido.

Cabecera

Un fichero PAL comienza con la siguiente cabecera:
 ____________________________________________________________________________
|Nombre____________|Tamaño_|Descripción______________________________________|
|                  |       |Cadena de caracteres de identificación del       |
|MAGIC             |3 bytes|fichero. Debe contener exactamente "pal", en     |
|__________________|_______|minusculas.______________________________________|
|                  |       |A continuación, los cuatro bytes 1Ah, 0Dh, 0Ah y |
|                  |       |00h. Esta terminación indica, en un fichero MS-  |
|TERMINACIÓN MS-DOS|4 bytes|DOS, final de fichero. Gracias a ella un comando |
|                  |       |TYPE en MS-DOS no mostraría los datos binarios   |
|__________________|_______|del_fichero._____________________________________|
|                  |       |Código de versión. Debido a que no se han        |
|VERSION           |1 byte |introducido cambios en el formato, este valor es |
|__________________|_______|siempre_00h._____________________________________|

Paleta de colores

A continuación, aparecen 768 bytes con la paleta de colores. Cada color ocupa
tres bytes en orden RGB (rojo, verde y azul) y con un rango para cada
componente de color de 0 a 63. Tambien puede verse como un array de estructuras
RGB, o lo que es lo mismo, 256 veces lo siguiente:
 ____________________________________________________________________________
|Nombre_______|Tamaño|Descripción____________________________________________|
|RED_(Rojo)___|1_byte_|Valor_de_la_componente_roja_de_este_color_(de_0_a_63)_|
|GREEN_(Verde)|1_byte_|Valor_de_la_componente_verde_de_este_color_(de_0_a_63)|
|BLUE_(Azul)__|1_byte_|Valor_de_la_componente_azul_de_este_color_(de_0_a_63)_|

El hecho de que el valor de cada componente oscile entre 0 y 63, en vez de 0 a
255, es un poco inusual. Podemos convertir cada valor facilmente a RGB estándar
con la siguiente operación:

red256 = red64 * 255 / 63
green256 = green64 * 255 / 63
blue256 = blue64 * 255 / 63

Esto conlleva una pérdida de color, o mejor dicho, que no se puedan usar todos
los colores.

Gammas de Color

Este apartado está poco documentado. Originalmente las gammas solo eran utiles
en el editor de mapas de DIV / DIV2. En Fenix son totalmente ignoradas, con lo
que la lectura del fichero termina con la lectura de la paleta. Usualmente
estos datos ocuparán 576 bytes.

De todas formas, por si a alguien le puede interesar, a continuación se
especifica la estructura de los datos correspondientes a las gammas. Realmente
se trata de un array o colección de 16 elementos de estructuras de tipo gamma.
Cada una de estas estructuras sigue el siguiente patrón:
 ____________________________________________________________________________
|Nombre____________|Tamaño_______|Descripción________________________________|
|                  |             |Este dato indica el numero de colores que  |
|Número de colores |1 byte       |componen esta gamma. Pueden ser 8, 16 o 32 |
|                  |             |colores por gamma. Estos son los únicos    |
|__________________|_____________|valores_soportados.________________________|
|                  |             |Aquí se refiere al modo de edición de la   |
|                  |             |gamma. Puede tomar los siguientes valores: |
|                  |             |    * 0 : Directa de paleta. Indica que la |
|                  |             |      gamma tomará los colores tal cual se |
|                  |             |      encuentran en la paleta.             |
|                  |             |    * 1 : Editable cada color. Indica que  |
|                  |             |      se pueden editar todos los colores de|
|                  |             |      la gamma.                            |
|                  |             |    * 2 : Editable cada 2 colores. La gamma|
|Modo              |1 byte       |      se puede editar cada 2 colores,      |
|                  |             |      siendo los intermedios seleccionados |
|                  |             |      automáticamente.                     |
|                  |             |    * 4 : Editable cada 4 colores. La gamma|
|                  |             |      se puede editar cada 4 colores,      |
|                  |             |      siendo los intermedios seleccionados |
|                  |             |      automáticamente.                     |
|                  |             |    * 8 : Editable cada 8 colores. La gamma|
|                  |             |      se puede editar cada 8 colores,      |
|                  |             |      siendo los intermedios seleccionados |
|__________________|_____________|______automáticamente._____________________|
|Fija / Editable   |1 byte       |Valor que indica si la gamma es editable   |
|__________________|_____________|(0)_o_fija_(1).____________________________|
|                  |             |Array que contiene los índices de los      |
|Colores           |8/16/32 bytes|colores de la gamma en la paleta. Su tamaño|
|                  |             |dependerá del número de colores            |
|__________________|_____________|especificados_para_cada_gamma_(8/16/32).___|

Como se ha dicho, este apartado siempre ocupará 576 bytes en el fichero,
independientemente de si se usan todos o no. De forma estandar se pueden setear
todas las gammas de la siguiente forma:

    * Número de colores = 16
    * Modo = 0
    * Fija = 0
    * Colores[16] = los colores correspondientes en la paleta, dependiendo de
      la gamma que estemos grabando. Ej: en la primera gamma se graban los
      colores del 0 al 15; en la segunda, del 16 al 31; etc...

NOTA: Dado que las gammas solo son útiles en el editor de mapas de DIV / DIV2,
se recomienda el uso del mismo para una mejor comprensión de este apartado.

Obtenido de http://fenixworld.se32.com/fenixwiki/
Disponible bajo los términos de la GNU Free Documentation License 1.2
