Disposición del fichero KiSS .cnf , referencia de comandos FKiSS/FKiSS2, y notas diversas sobre PlayFKiSS.

* Escrito por Chad Randall crandall@msen.com

* Traducción castellana de F.J. Campos dominatrix@teleline.es

* Ultima actualización, 31 Diciembre 1997



Glosario



Acción

Véase Comando

Cel (*)

Una imagen gráfica en la que cualquier píxel que utilice el color 0 es transparente. El elemento mas pequeño para KiSS es el ‘Cel’, que se identifica por un nombre. Cuando se declaran eventos y comandos FKiSS, el nombre de cada Cel debe ser único e inequívoco. De no ser así, se producirán errores y resultados no deseados. (*) Nota del Traductor: CEL es el nombre que se le da a las láminas de celulosa transparente utilizadas para crear el movimiento en los dibujos animados. La comparación no puede ser mas adecuada, pero no existe en castellano una palabra exacta para designar este término, por lo que a lo largo de todo este documento hablaremos de “Cel” o "Cels" respetando esta nomenclatura.

Cherry Kiss (CKiSS)

Un formato de CEL muy reciente que permite profundidades de color de 24 y 32 bits. También incluye un canal alfa para transparencia variable. Este formato requiere mucha memoria y capacidad de proceso. Pero con la potencia de los ordenadores actuales acabará haciéndose popular. PlayKiSS para el Acorn, WKiSS 32 y KissLD son los únicos visores capaces de aceptar el CkiSS. Nota del Traductor: Chad Randall dotó de soporte directo para CKiSS a PlayFKiSS W9x a partir de la versión 0.81.

Comando

Una palabra clave que cambia o activa alguna otra cosa.

Fix (Adherencia)

Un valor numérico que va de 0 a 32000, aplicado a un objeto. El usuario no puede mover un objeto determinado a no ser que su valor de adherencia sea igual a cero. Cada vez que el usuario hace click en el objeto, el valor de adherencia del objeto se reduce en uno.

FKiSS

Ampliación del formato KiSS que permite mas interactividad al usuario. FKiSS incluye eventos, comandos y los recientes indicadores de estado. Muchas de las innovaciones del FKiSS vienen del lado japonés del Pacífico.

FKiSS2

Comandos y prestaciones adicionales desarrollados por Chad Randall y John Stiles. Incluyen la detección de colisión entre objetos y posiciones relativas.

FKiSS2.1

Nuevos comandos, incluyendo el “if” (si) condicional, temporizadores y movimento aleatorio.



Flags (Indicadores de Estado)

Una reciente adición al FKiSS que permite al autor del fichero especificar ciertos estados sin que estos sean declarados mediante comando. Un ejemplo de esto es el código ;%t128 en la declaración de un CEL, que especifica para éste una transparencia de valor 128.

Evento

Una palabra clave que especifica una serie de comandos, que serán ejecutados cuando se produzca una condición determinada.

Objeto

Un grupo de Cels. Esta es la manera conveniente de aplicar comandos y eventos a un determinado número de Cel, como puede ser una prenda de ropa. Este objeto puede contener un Cel para el frente, otro para el interior, otro para la manga, etc. La declaración de un objeto suele venir precedida del símbolo “#”.

Paleta

Tabla de colores que puede estar constituida por un mínimo de 16 colores y un máximo de 256. También se pueden establecer hasta 10 grupos de colores indexados por paleta. El máximo número de colores que pueden especificarse es por lo tanto de 256 x 10, ó 2560.

Set (Página)

Grupo de Cels que se muestran a la vez. Podemos disponer de hasta 10 páginas en un fichero KiSS.



Formato del fichero .cnf

A continuación, veremos un ejemplo de configuración de fichero .cnf :

;comentarios

%paleta1.kcf

%paleta2.kcf

(640,480) ; Tamaño del área de visualización

[0 ; color del marco

;mas comentarios

#3 fog.cel *1 :0 1 2 3 4 5 6 7 8 9 ;%t128 niebla transparente

#0.10 dress.cel *0 :0 1 2 3 4 5 6 7 8 9 ; vestido de la señorita

#1.32000 body.cel *0 :0 1 2 3 4 5 6 7 8 9 ; señorita

#0.10 dress_.cel *0 :0 1 2 3 4 5 6 7 8 9 ; parte trasera del vestido

;mas comentarios aún

;@EventHandler()

;@initalize()

;@unmap("fog.cel")

;algunos comentarios mas

$0 120,50 220,150 65,65

$1 120,50 220,150 65,65

;;fin de fichero



Ahora iremos línea por línea explicando qué significan estas notaciones.

%paleta1.kcf

Esto indica un fichero de paleta. Puede haber hasta 256 colores por archivo KiSS. Se pueden incluir un máximo de 16 paletas si éstas son de 16 colores. Todo color por encima del límite de 256 será ignorado. Además, cada paleta puede albergar hasta 10 grupos de colores, para un total de 2560. Esta línea debe ser incluida de manera obligatoria, ya que no existe en KiSS una paleta por defecto.

Esta línea podrá ser omitida en los ficheros Cherry KiSS. Puesto que los gráficos de 24/32 bits definen sus propias paletas, esto no es necesario. Pero si pretendes mezclar Cels de CKiSS y KiSS/gs, si que será preciso incluirla.

(640,480)

Indica el tamaño del área del KiSS. Si se omite esta línea, las medidas por defecto serán 448 x 320.

[0

Este es el color del marco, como número de paleta. Algunos programas ignoran este valor. Otros visores, como los basados en DOS, rellenarán el área que rodea el área de acción con este color. Por defecto será 0 si se omite.

#0 dress.cel *0 :0 1 2 3 4 5 6 7 8 9 ;%t128 ;comentario

Vamos a ver las distintas partes que forman esta línea de comando:

#0.10

El número de objeto con el que este Cel específico está agrupado. El número que viene después del punto es el valor de adherencia de dicho objeto. Este valor es opcional y por defecto será siempre 0.

dress.cel

El nombre del Cel. Este nombre puede ser cualquiera, pero existen una serie de convenciones si lo que pretendes es distribuir el fichero. Estos nombres deben cumplir la norma 8.3 para nombres de fichero del DOS. Usa también letras minúsculas para que no haya problemas en sistemas que distinguen entre éstas y las mayúsculas, como es el caso del UNIX.

*0

Esto indica el número de paleta dentro del grupo de paletas. Esto solo se aplica a aquellos Cel con 16 colores. Los de 256 usarán por defecto la paleta 0.

:0 1 2 3 4 5 6 7 8 9

Esta sección especifica en qué páginas del fichero KiSS aparecerán estos Cel. Si no se indica este parámetro, el Cel aparecerá en todas las páginas del fichero.

;%t128

Esto indica el valor de tranparencia del Cel. Se puede utilizar cualquier número de 0 a 255, teniendo en cuenta que 0 es opaco y 255 completamente invisible. Esta función no se utiliza en los visores de KiSS mas antiguos, así que ten en cuenta a tu posible audiencia. Véase también transparent().

* Mi intención es incluir en el futuro otras letras en próximas versiones de PlayFKiSS. Esto hará posible efectos como aclarar, oscurecer, adición, substracción, desplazamiento, XOR, AND, OR y otras operaciones gráficas. Esto permitirá emular muchas de las funciones de capas de PhotoShop.

Algo mas abajo vemos:



;@EventHandler

;@initalize()

;@unmap("fog.cel")

Esto es una sección de codigo FKiSS. Los símbolos ";@" siempre indican que lo que viene a continuación son comandos FKiSS. EventHandler es un indicador que hace distinción entre mayúsculas y minúsculas, por lo que debe ser siempre escrito de esta forma. Es el que indica al programa que a continuación se inicia la secuencia de comandos FKiSS. Asimismo, todos los comandos y eventos deben escribirse en minúsculas para que puedan ser reconocidos por el intérprete de comandos de FKiSS. Al final del documento se ofrece una lista completa de comandos FKiSS y FKiSSS 2.

$0 120,50 220,150 65,65

$1 120,50 220,150 65,65

Esta línea dice básicamente que, para la página 0, se use la paleta número 0 (la primera). Coloca el objeto 0 en la coordenada 220, 150 y el objeto 2, en la 65,65. Por lo tanto, la página 1 es idéntica a la página 0, excepto que aquí usamos la paleta número 1. No intentes editar estos valores por tu cuenta. Casi todos los visores KiSS calcularán estas coordenadas y las grabarán por ti. Puedes copiar y pegar esta información desde un fichero .cnf temporal a tu fichero .cnf principal si no quieres perder otra información, como son los comentarios.

Eventos Estándar FKiSS/FKiSS2

alarm(número)

(Alarma) - Se activa cuando el contador llega a cero. Nota: muchos visores solo aceptarán números de contador del 0 al 64. La nueva propuesta de FKiSS permitirá que este rango vaya de 0 a 511.

apart("nombrecel.cel", "nombrecel2.cel")

(Apartar) - Se activa cuando el Cel 1 ya no toca al Cel 2, pero solo si se estaban tocando antes de ser movidos. Por tocarse entendemos que una serie de píxels no transparentes se solapan. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores.

begin()

(Empezar) - Se acttiva en cuanto aparece la primera pantalla. Es el sitio ideal para colocar el inicio de las animaciones que usen el comando timer()

catch(#objeto) / catch("nombrecel.cel")

(Coger) - Se activa cuando un usuario “agarra” un objeto o Cel, y su valor de adherencia es cero (móvil).

col(número)

Similar a set(), pero se pone en marcha cuando se cambia el grupo de paletas. Nota: Col es posiblemente la abreviatura de color.

collide("nombrecel.cel", "nombrecel2.cel")

(Chocar) - Entra en acción cuando el Cel 1 entra en contacto con el Cel 2, pero solo si no se estaban tocando antes del desplazamiento. Por tocarse entendemos que una serie de píxels no transparentes se solapan. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores.

drop(#objeto) / catch(“nombrecel.cel")

(Dejar / Coger) - Activado cuando el usuario “suelta” un objeto o Cel, y la adherencia de éste es nula (móvil).

end()

(Fin) – Se activa cuando el usuario cierra el fichero KiSS. Es un lugar adecuado para colocar o mostrar cualquier mensaje de despedida.

fixcatch(#objeto) / fixcatch("nombrecel.cel")

Similar a catch(), pero solo se activa cuando el objeto es fijado en su sitio.

fixdrop(#objeto) / catch("nombrecel.cel")

Similar a drop(), pero solo se activa cuando el objeto es fijado en su sitio.

in(#objeto1,#objeto2)

(Dentro de) - Se activa cuando el contorno rectangular invisible de un objeto se solapa con el de otro. Este contorno se forma al añadir todos los Cel visibles y mapeados a una forma geométrica. No es del tamaño total del rectángulo, mas bien la combinación de los rectángulos individuales. Este evento solo tiene lugar cuando dos objetos están separados y luego son movidos hasta juntarlos. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores.

initialize()

(Inicializar) – Se activa antes de que se muestre cualquier información visual. Ideal por lo tanto para ocultar los Cel que deben ser invisibles cuando se carga el fichero KiSS.

never()

(Nunca) – Este comando no se activa nunca. Es un buen sitio para ocultar el código que no quieres que se ejecute. Nota: Puedes incluso colocarlo antes del código FKiSS 2 para que no sea ejecutado en visores KiSS mas antiguos.

out(#objeto1,#objeto2)

(Fuera de) - Similar a in(), pero se activa cuando se separan los dos objetos. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores.

press(#objeto) / fixcatch(“nombrecel.cel”)

(Pulsar) – Igual que catch(), pero se activa sin importar el valor de adherencia.

release(#objeto) / fixcatch(“nombrecel.cel”)

(Soltar) – Igual que drop(), pero se activa sin importar el valor de adherencia.

set(número)

Activado cuando el usuario o el comando changeset() cambian la página activa.

stillin(#objeto1,#objeto2)

(Aún Dentro) Se activa cuando el marco de un objeto se superpone a otro (ver descripción de in() y out() ). A diferencia de in(), este evento tiene lugar cuando el objeto es movido y “toca” el segundo objeto, sin importar cuales eran sus posiciones iniciales. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores.

stillout(#objeto1,#objeto2)

(Aún Fuera) - Similar a stillin(), solo que se activa cuando los dos objetos se separan. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores.

unfix(#objeto)

(Despegar) – Se activa cuando el valor de adherencia se pone a cero.

version(número de versión del archivo)

(Versión) - Se activa cuando la versión del visor que usamos es igual o superior al del número de versión del conjunto de comandos FKiSS. Esto puede usarse para informar al usuario de que el archivo KiSS utiliza comandos no soportados por su visor. Consulta las notas que hay al final del documento para saber como uasr este comando de manera efectiva. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores.



Comandos Estándar FKiSS/FKiSS2

altmap(#objeto) / altmap(“nombrecel.cel”)

(Mapeo Alternativo) - Hace visibles los Cel invisibles y viceversa.

changecol(paleta)

(Cambiar Color) - Obliga a una determinada paleta a que sea la activa.

changeset(set)

(Cambiar Página) - Obliga a que la página indicada sea la activa.

debug("mensaje")

(Depurar) - Muestra un mensaje. Cada visor tiene una forma diferente de mostrar la información colocada entre las comillas.

iffixed(#objeto, contador, valor)

(Si Está Fijo) - Establece un contador si el objeto especificado tiene adherencia (su valor de adherencia es mayor que cero). Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores.

ifmapped("cel", contador, valor)

(Si Está Mapeado) – Establece un contador si el Cel especificado es visible. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores

ifmoved(#objeto, contador, valor)

(Si Es Movido) - Establece el contador si el objeto especificado ha sido movido. Se puede decir que un objeto se ha movido si sus coordenadas no son iguales a las que se especifican en el fichero .CNF. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores

ifnotfixed(#objeto, contador, valor)

(Si No Está Fijo) – Establece un contador si el objeto especificado no está fijo (su valor de adherencia es igual a cero). Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores

ifnotmapped("cel", contador, valor)

(Si No Está Mapeado) - Establece un contador si el Cel especificado es invisible. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores

ifnotmoved(#objeto, contador, valor)

(Si No Se Ha Movido) - Establece el contador si el objeto especificado NO ha sido movido. Se puede decir que un objeto no se ha movido si sus coordenadas on iguales a las que se especifican en el fichero .CNF. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores.

map(#objeto) / map(“nombrecel.cel”)

(Mapear) - Hace visibles todos los objetos.

move(#objeto, coordenada x, coordenada y)

(Mover) - Mueve un objeto usando las coordenadas especificadas. Nota: PlayFKiSS nunca moverá un objeto fuera de la pantalla, incluso cuando la opción “Enforce Boundaries” (Respetar Límites) esté desactivada.



movebyx(#objeto1,#objeto2,offsetx)

(Mover Por X) – Mueve un objeto usando la coordenada X de inicio de otro. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores.

movebyy(#objeto1,#objeto2,offsetx)

(Mover Por Y) – Mueve un objeto usando la coordenada Y de inicio de otro. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores

moverandx(#objeto,min,max)

(Mover Aleatoriamente Por X) – Mueve un objeto usando valores aleatorios. La nueva coordenada es relativa, basada en los valores mínimo y máximo. Por ejemplo, si el mínimo es –1 y el máximo 1, la nueva posición puede ser un píxel mayor, un píxel menor o la misma. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores

moverandy(#objeto,min,max)

(Mover Aleatoriamente Por Y) – Mueve un objeto ussando valores aleatorios. La nueva coordenada es relativa, basada en los valores mínimo y máximo. Por ejemplo, si el mínimo es –1 y el máximo 1, la nueva posición puede ser un píxel mayor, un píxel menor o la misma. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores

moveto(#objeto,x,y)

(Mover A) – Mueve un objeto a las coordenadas absolutas especificadas. Nota: PlayFKiSS nunca moverá un objeto fuera de la pantalla, incluso cuando la opción “Enforce Boundaries” (Respetar Límites) esté desactivada. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores

movetorand(#objeto)

(Mover A Aleatorio) Mueve un objeto a unas coordenadas aleatorias. Nota: PlayFKiSS nunca moverá un objeto fuera de la pantalla, incluso cuando la opción “Enforce Boundaries” (Respetar Límites) esté desactivada. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores

music("nombrefichero.mid")

(Música) Reproduce un archivo de música MID. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores

nop()

No hace nada. NOP es la abreviatura de “No Operation” en lenguaje ensamblador.

notify("mensaje")

(Notificar) – En la práctica, un sinónimo de debug(). Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores.

quit()

(Salir) Obliga al visor a cerrarse. Nota: PlayFKiSS guardar el comando al salvar, pero no lo ejecuta en ese momento.

randomtimer(número,mínimo,máximo)

Establece un contador basado en un número aleatorio.

setfix(#objeto,fixval)

(Fijar Adherencia) – Establece manualmente la adherencia de un objeto. Si el valor es 0, cualquier evento unfix() relacionado con ese objeto será activado. Este es un comando propuesto para el FKiSS 2.1 y no es soportado por otros visores

sound("nombrefichero.wav") / sound("nombrefichero.au")

(Sonido) - Reproduce un sonido. No todo los visores soportan formato .AU (Mac) o .WAV (PC) y viceversa. Si es posible, incluye dos versiones de tu fichero .CNF y convierte todos los sonidos a ambos formatos.

timer(número,duración)

(Contador) - Inicia un contador, usando la duración en microsegundos para la cuenta atrás. Establecer un contador que ya está activo pondrá a cero el valor del contador. Poniendo un contador a 0 se desactivará. Un microsegundo es la milésima parte de un segundo. Un contador dispuesto para 1000 microsegundos activará la alarma 1 segundo después. Nota: PlayFKiSS tiene una escala de 10 microsegundos entre cada evento de alarma, y solo actualizará visualmente la pantalla cada 100 microsegundos.

transparent(#objeto, valor) / transparent(“nombrecel.cel”, valor)

(Transparente) Adjudica el nivel de transparencia de un objeto o Cel. El valor es el umbral que se añadirá al nivel de transparencia habitual. El nivel máximo va desde 0 (completamente opaco) a 255 (completamente transparente). Nota: Este comando es muy reciente y no está soportado por todos los visores de KiSS. Además, algunos visores muestran los Cel con difuminados y otros cambian a modo de Color Verdadero (16 Millones de Colores).

unmap(#objeto) / unmap(“nombrecel.cel”)

(No Mapear) - En el primer caso, hace desaparecer todos los Cel de un objeto. En el segundo, hace desaparecer un Cel concreto.

viewport(x,y)

(Punto de Vista) - Cambia el punto de vista de las coordenadas. Nota: PlayFKiSS ignora este comando, pero lo archiva al grabar.

windowsize(x,y)

(Tamaño de Ventana) - Cambia el tamaño de la ventana. Nota: PlayFKiSS ignora este comando, pero lo archiva al grabar.



Información Extendida sobre FKiSS2

Los comandos y eventos señalados como FKiSS y FKISS 2.1 están, en la actualidad, implementados tan solo en PlayFKiSS para Windows 95/98/NT4 y PlayKiSS para Acorn. French KiSS para Mac OS tiene soporte de FKiSS 2, excepto music() y lo relativo a transparencias. WKiSS3g soporta una secuencia menor de comandos incluyendo (pero no limitado a) music(), in(), out(), movebyx(), movebyy(), collide(), apart(), movetorand(), y moveto(). KissLD7x tambien soporta algunos comandos FKiSS2. Si te gustaría ver mas comandos o archivos FKiSS, haz correr la voz. Pídele a tu programador KiSS favorito que implemente los comandos. Pídele a tu artista preferido de KiSS que use comandos FKISS2, o que cree un fichero .CNF mejorado. Solo el apoyo de lo usuarios determinará el futuro de todo el proyecto KiSS.

Para usar el evento version(), usa el siguiente código:

;@EventHandler

;@nothing() ;Esto hace que los visores antiguos ignoren las siguientes dos líneas.

;@version(2) ; si el visor funciona con FKiSS2,

; ; revision 2, ejecuta los siguientes comandos.

;@ unmap("warning.cel")

; ; warning.cel es un gran cartel que dice

; ; "Es Preciso Un Visor FKiSS 2 Para Ejecutar Este Fichero."

;@begin()

;; Si esta alarma es solo una alarma (quizas el archivo funcione sin FKISS2), puedes permitir al usuario ;;que la elimine haciendo click en ella.

;@release("warning.cel")

;@unmap("warning.cel")