208 lines
5.9 KiB
C
208 lines
5.9 KiB
C
/* Fenix - Compilador/intérprete de videojuegos
|
|
* Copyright (C) 1999 José Luis Cebrián Pagüe
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef __GRLIB_H
|
|
#define __GRLIB_H
|
|
|
|
/* -------------------------------------------------------------------- */
|
|
/* Librería gráfica */
|
|
/* -------------------------------------------------------------------- */
|
|
|
|
/* Tipos y datos globales */
|
|
|
|
typedef struct _cpoint
|
|
{
|
|
short int x ;
|
|
short int y ;
|
|
}
|
|
CPOINT ;
|
|
|
|
typedef struct _animation
|
|
{
|
|
int frames ;
|
|
int length ;
|
|
int pos ;
|
|
int speed ;
|
|
int remaining ;
|
|
int last_frame ;
|
|
Sint16 * order ;
|
|
}
|
|
ANIMATION ;
|
|
|
|
typedef struct _bitmap
|
|
{
|
|
int width ;
|
|
int pitch ;
|
|
int height ;
|
|
int code ;
|
|
int depth ;
|
|
char name[32] ;
|
|
void * data ;
|
|
CPOINT * cpoints ;
|
|
int flags ;
|
|
Uint32 offset ;
|
|
|
|
ANIMATION * animation ;
|
|
Sint16 * blend_table ;
|
|
|
|
int modified ;
|
|
int info_flags ;
|
|
|
|
//Hasta q no esten los entrypoints
|
|
int x;
|
|
int y;
|
|
int z;
|
|
}
|
|
GRAPH ;
|
|
|
|
#define F_NCPOINTS 0x0FFF
|
|
#define F_ANIMATION 0x1000
|
|
|
|
#define GI_NOCOLORKEY 1
|
|
|
|
typedef struct _font
|
|
{
|
|
GRAPH * chars[256] ;
|
|
int voffset[256] ;
|
|
int width [256] ;
|
|
}
|
|
FONT ;
|
|
|
|
typedef struct _grlib
|
|
{
|
|
GRAPH * * maps ;
|
|
int map_count ;
|
|
int map_reserved ;
|
|
}
|
|
GRLIB ;
|
|
|
|
typedef struct _clipregion
|
|
{
|
|
int x ;
|
|
int y ;
|
|
int x2 ; /* Inclusive */
|
|
int y2 ;
|
|
}
|
|
REGION ;
|
|
|
|
extern int scr_initialized ;
|
|
extern REGION regions[32] ;
|
|
extern GRAPH * background ;
|
|
extern GRAPH * scrbitmap ;
|
|
extern GRLIB * syslib ;
|
|
extern int keytable[] ;
|
|
extern int last_frame_ms ;
|
|
extern int joy_x[], joy_y[], joy_b[] ;
|
|
|
|
#define region_get(n) ( ((n)>=0 && (n)<=31) ? ®ions[n] : ®ions[0] )
|
|
|
|
/* Inicialización y control de tiempo */
|
|
/* ---------------------------------- */
|
|
|
|
extern void gr_init (int w, int h) ;
|
|
extern void gr_set_fps (int fps, int max_jump) ;
|
|
extern void gr_wait_frame () ;
|
|
extern void gr_advance_timers () ;
|
|
extern void gr_draw_frame () ;
|
|
|
|
/* Paleta de colores */
|
|
/* ----------------- */
|
|
|
|
extern SDL_Color vpalette[256] ;
|
|
extern SDL_Color palette[256] ;
|
|
|
|
extern Uint16 colorequiv[256] ; /* Equivalencia paleta -> pantalla */
|
|
extern Uint16 colorghost[65536] ; /* Deja un color a 50% de intensidad */
|
|
|
|
extern GRAPH * background_8bits ;
|
|
extern int background_8bits_used ;
|
|
extern int background_is_black ;
|
|
|
|
extern Uint8 trans_table[256][256] ; /* Tabla de transparencias 8 bits */
|
|
extern int trans_table_updated ; /* 1 = La tabla es utilizable */
|
|
|
|
extern void gr_make_trans_table() ;
|
|
|
|
extern int palette_loaded ; /* ¿Se ha cargado ya la paleta inicial ? */
|
|
extern int palette_changed ; /* Poner a 1 cuando se cambien colores */
|
|
extern int fade_on ; /* ¿Hay un fade activo? */
|
|
extern int fade_step ; /* Si lo hay, posición (0=off) */
|
|
|
|
extern int gr_read_pal (file * file) ;
|
|
extern void gr_refresh_palette () ;
|
|
extern void gr_fade_init (int r, int g, int b, int speed, int dir) ;
|
|
extern void gr_fade_step () ;
|
|
extern void gr_roll_palette (int color0, int num, int inc) ;
|
|
extern int gr_find_nearest_color (int r, int g, int b) ;
|
|
extern void gr_set_rgb (int c, int r, int g, int b) ;
|
|
extern int gr_rgb (int r, int g, int b) ;
|
|
extern void gr_get_rgb (int color, int *r, int *g, int *b) ;
|
|
extern void gr_set_colors (int color, int num, Uint8 * pal) ;
|
|
|
|
/* Gestión de bitmaps y librerías de gráficos */
|
|
/* ------------------------------------------ */
|
|
|
|
extern int gr_load_map (const char * filename) ;
|
|
extern int gr_load_png (const char * filename) ;
|
|
extern int gr_load_pcx (const char * filename) ;
|
|
extern int gr_load_fpg (const char * filename) ;
|
|
extern int gr_load_pal (const char * filename) ;
|
|
|
|
extern int grlib_new () ;
|
|
extern GRLIB * grlib_get (int libid) ;
|
|
extern void grlib_destroy (int libid) ;
|
|
extern int grlib_add_map (GRLIB * lib, GRAPH * map) ;
|
|
extern int grlib_unload_map (GRLIB * lib, int mapcode) ;
|
|
|
|
extern GRAPH * bitmap_new (int code, int w, int h, int depth) ;
|
|
extern GRAPH * bitmap_clone (GRAPH * this) ;
|
|
extern GRAPH * bitmap_new_syslib (int w, int h, int depth) ;
|
|
extern GRAPH * bitmap_get (int libid, int mapcode) ;
|
|
extern void bitmap_destroy (GRAPH * map) ;
|
|
extern void bitmap_add_cpoint (GRAPH *map, int x, int y) ;
|
|
extern void bitmap_analize (GRAPH * bitmap) ;
|
|
extern void bitmap_animate (GRAPH * bitmap) ;
|
|
extern void bitmap_animate_to (GRAPH * bitmap, int pos, int speed) ;
|
|
|
|
|
|
/* Bajo nivel */
|
|
/* ---------- */
|
|
|
|
/* Flags para gr_blit */
|
|
#define B_HMIRROR 0x01
|
|
#define B_VMIRROR 0x02
|
|
#define B_TRANSLUCENT 0x04
|
|
#define B_NOCOLORKEY 0x80
|
|
|
|
/* Las funciones gráficas admiten dest=0 para referirse a la pantalla.
|
|
* Para poder usar esta funcionalidad, debe estar bloqueada antes */
|
|
|
|
extern int gr_lock_screen () ;
|
|
extern void gr_unlock_screen () ;
|
|
|
|
/* Primitivas gráficas */
|
|
|
|
extern void gr_clear (GRAPH * dest) ;
|
|
extern void gr_clear_as (GRAPH * dest, int color) ;
|
|
extern void gr_put_pixel (GRAPH * dest, int x, int y, int color) ;
|
|
extern int gr_get_pixel (GRAPH * dest, int x, int y) ;
|
|
|
|
extern void gr_setcolor (int c) ;
|
|
extern void gr_vline (GRAPH * dest, REGION * clip, int x, int y, int h) ;
|
|
#endif
|