edivc/dlls/src/graphics/paleta.c

127 lines
3.6 KiB
C

/*! \file paleta.c
* \brief Funciones relacionadas con el manejo de la paleta y los colores
*/
#include <SDL/SDL.h>
#include "export.h"
#include "graphics.h"
/*! \brief Cambia el color transparente (colorkey) actual
* @param a Color que desea usarse como transparente.
* @return El antiguo color transparente.
* @see color_transparente
*/
int eDIV_SET_TRANSPARENT_COLOR(FUNCTION_PARAMS)
{
int b , i;
int a = getparm() ;
b = color_transparente ;
color_transparente = a ;
for ( i = 1 ; i <= last_map[0] ; i++ )
{
if ( files[0].mapa[i].existe )
SDL_SetColorKey( files[0].mapa[i].Surface , SDL_SRCCOLORKEY | SDL_RLEACCEL , color_transparente ) ;
}
return b ;
}
/*! \brief Obtiene el color transparente actual
* @return El color transparente.
* @see color_transparente
*/
int eDIV_GET_TRANSPARENT_COLOR(FUNCTION_PARAMS)
{
return color_transparente ;
}
/*! \brief Crea un color a partir de las componentes RGB dadas.
*
* Esta función devuelve el color más próximo posible a las componentes RGB
* dadas. En modos de color paletizado (8 bits) puede devolver un color muy
* distinto al esperado si no se encuentra otro mejor en la paleta.
* Esta función difiere de \link eDIV_FIND_COLOR() find_color() \endlink en
* que recibe los parámetros en un rango de 0..255 en vez de 0..63.
* @param r Componente roja (red)
* @param g Componente verde (green)
* @param b Componente azul (blue)
* @return El color generado.
* @see eDIV_FIND_COLOR()
*/
int eDIV_RGB(FUNCTION_PARAMS)
{
int r,g,b ;
b = getparm() ;
g = getparm() ;
r = getparm() ;
return SDL_MapRGB(screen->format,r,g,b);
}
/*! \brief Crea un color a partir de las componentes RGB dadas.
*
* Esta función devuelve el color más próximo posible a las componentes RGB
* dadas. En modos de color paletizado (8 bits) puede devolver un color muy
* distinto al esperado si no se encuentra otro mejor en la paleta.
* Esta función difiere de \link eDIV_RGB() RGB() \endlink en que recibe los
* parámetros en un rango de 0..63 en vez de 0..255. Se ha incluido para
* mantener la compatibilidad con DIV2.
* @param r Componente roja (red)
* @param g Componente verde (green)
* @param b Componente azul (blue)
* @return El color generado.
* @see eDIV_RGB()
*/
int eDIV_FIND_COLOR(FUNCTION_PARAMS)
{
int r,g,b ;
b = getparm() ;
g = getparm() ;
r = getparm() ;
return SDL_MapRGB(screen->format,r*4,g*4,b*4);
}
/*! \brief Obtiene las componentes RGB de un color dado.
*
* Esta función recibe un color y almacena en las variables indicadas sus
* componentes RGB (siempre en un rango de 0..255). Si en lugar de un offset
* se recibe un 0, se ignorará esa componente.
* @param color Color del que se quiere obtener la información
* @param offset_r Offset de la variable donde se quiere guardar el valor de la componente roja (red)
* @param offset_g Offset de la variable donde se quiere guardar el valor de la componente verde (green)
* @param offset_b Offset de la variable donde se quiere guardar el valor de la componente azul (blue)
* @return 1
* @see eDIV_SET_COLOR()
*/
int eDIV_GET_RGB(FUNCTION_PARAMS)
{
unsigned int color,roff,goff,boff;
unsigned char r,g,b;
boff=getparm();
goff=getparm();
roff=getparm();
color=getparm();
SDL_GetRGB(color,screen->format,&r,&g,&b);
if(roff) fp->mem[roff]=(int)r;
if(goff) fp->mem[goff]=(int)g;
if(boff) fp->mem[boff]=(int)b;
return 1;
}
/*! \brief Hace un fundido de pantalla
*
* \todo ¡¡función sin acabar!!
*/
int eDIV_FADE(FUNCTION_PARAMS)
{
int r , g , b , v ;
v = getparm() ;
b = getparm() ;
g = getparm() ;
r = getparm() ;
return SDL_SetGamma( 1.0f , 1.0f , 1.0f ) ;
return 1 ;
}