void map_put_gouraud( int fpg, gfx_destino, gfx_origen, x_destino, y_destino, uchar r, g, b, icolor_lt, icolor_rt, icolor_rd, icolor_ld  )


Descripción:

Pone un gráfico en otro tintando el gráfico de origen con diferentes zonas de intensidad. El gráfico que se va a copiar se denomina gráfico origen y el gráfico destino es en el que se copiará el origen, es decir, esta función permite copiar un gráfico (origen) a otro (destino) tintando el de origen.

fpg - Código del fichero con la librería de gráficos que contiene a ambos. Los gráficos cargados con las funciones load_map() o load_pcx() (o creados con new_map()) se utilizarán como si pertenecieran al primer fichero (el fichero con el código 0).

gfx_destino - Gráfico destino - código del gráfico en el que se va a poner el otro.

gfx_origen - Gráfico origen - código del gráfico que va a ser copiado en el destino.

x_destino, y_destino - Coordenadas dentro del gráfico destino donde se desea poner el gráfico origen. En estas coordenadas es donde se situará el centro (o punto de control número 0) del gráfico origen.

r, g, b - Color que se va a tintar en la componente RGB (Rojo, Verde y Azul).

icolor_lt - Intensidad de tintado del gráfico en la esquina izquierda arriba, con este parámetro podremos variar el tinte de esta zona.
icolor_rt - Intensidad de tintado del gráfico en la esquina derecha arriba, con este parámetro podremos variar el tinte de esta zona.
icolor_rd - Intensidad de tintado del gráfico en la esquina derecha abajo, con este parámetro podremos variar el tinte de esta zona.
icolor_ld - Intensidad de tintado del gráfico en la esquina izquierda abajo, con este parámetro podremos variar el tinte de esta zona.

Esta función modificará el gráfico indicado, pero sólo la copia del mismo que se ha cargado en la memoria del ordenador. El gráfico original, que está en el archivo FPG, MAP o PCX del disco, permanecerá inalterado. Por ello si se quiere en un momento del juego recuperar el estado original del gráfico se tiene que descargar de memoria (con unload_fpg(), unload_map() o unload_pcx()) y después volverlo a cargar.


MAIN_PROGRAM_CDIV
PRIVATE
 int fichero1, inc, incalpha, newgraph, newalpha;

BEGIN_PROGRAM

 set_gfx(GFX_AUTODETECT_WINDOWED);
 
 set_depth(16);
 
 set_mode(m320x200);

 fichero1 = load_fpg("../help.fpg");  // Se carga el fichero de gráficos

 x = 160;
 y = 100;
 
 fadeoff(16);
 put_screen(fichero1, 1); // Se pone el gráfico 1 como fondo.
 FRAME;
 
 newgraph = new_map( 320, 200, 160, 100, 0 );
 graph = new_map( 320, 200, 160, 100, 0 );
 
 map_get_screen( 0, newgraph, 0, 0, 320, 200 );
 clear_screen();
 fade_on(16);
 
 FRAME;
 
 inc = -1;
 incalpha = 1;
 newalpha = 0;

 LOOP
 {
  size += inc;
  
  if( size <= 25  ) inc =  1;
  if( size >= 100 ) inc = -1;
  
  newalpha += incalpha;
  
  if( newalpha == 0   ) incalpha =  1;
  if( newalpha == 255 ) incalpha = -1;
  
  map_put_gouraud( 0, graph, newgraph, 0, 0, 255, 0, 0, 
                   newalpha, newalpha, 
                   newalpha/2, newalpha/2 );
  
  FRAME;
 }

END_PROGRAM

En el ejemplo se captura la pantalla y se aplica un tinte de color rojo RGB(255, 0, 0) a la captura para poder crear el efecto de tintado.

En cada paso del bucle principal se varia la intensidad del tintado con el fin de ver las diferencias de un tintado con más o menos intensidad a la vez que se cambia el tamaño relativo del proceso con la variable "size".


Ver: map_xput() - map_put_pixel() - map_block_copy() - map_put_blender() - map_put_tint()