Imported contents: kraptor_final_apr_03_2004.tar.gz
[kraptor.git] / include / jugador.h
blob02cfcedc194e98406a02ef78828f929207a40240
1 // --------------------------------------------------------
2 // jugador.h
3 // --------------------------------------------------------
4 // Copyright (c) Kronoman
5 // En memoria de mi querido padre
6 // --------------------------------------------------------
7 // Este modulo contiene todo lo relacionado con el jugador
8 // Tal como movimiento, disparos, etc...
9 // Exporta ademas unas globales utiles para verificar
10 // colisiones con disparos enemigos y enemigos en si.
11 // Tiene la estructura con las teclas de control del jugador
12 // --------------------------------------------------------
13 #ifndef JUGADOR_H
14 #define JUGADOR_H
16 #include <allegro.h>
17 #include "pmask.h"
19 /* Aceleracion X, Y del jugador */
20 #define VEL_X_J 2.5
21 #define VEL_Y_J 2.5
23 /* friccion X,Y jugador */
24 #define FRC_X_J 0.02
25 #define FRC_Y_J 0.02
27 /* velocidad maxima X, Y del jugador */
28 #define MAX_VEL_J_X 10.0
29 #define MAX_VEL_J_Y 10.0
31 /* Cantidad maxima de tipos de armas */
32 #define MAX_ARM_CLASS 15
34 /* Cantidad maxima de energia del jugador */
35 #define MAX_ENERGIA 200
37 /* Esta bandera indica cuando el jugador esta muerto
38 DEBE ser un valor NEGATIVO, ej: -300
39 Es para que agonize en llamas... :^P */
40 #define JUG_MUERTO -300
42 /* Tipo de datos que contiene la definicion de armas del jugador */
43 typedef struct ARMA_JUG {
44 /* Referente al modo 'shopping' donde se compra el arma */
46 BITMAP *arma; /* dibujo del arma en el shop */
47 char desc[2049]; /* descripcion del arma larga (texto ascii) */
48 char desc_short[21]; /* descripcion corta para el HUD */
49 int precio; /* precio del arma, si es <=0, indica que este tipo de arma NO existe */
50 int cant_ammo; /* cantidad de balas x compra */
51 int cant_ammo_max; /* cantidad maxima de balas */
53 /* Referente al disparo en si */
55 BITMAP *spr; /* sprite que representa el disparo */
56 PMASK *mask; /* mascara de choque */
57 SAMPLE *snd[2]; /* 0 = sonido al dispararlo, 1 = sonido al impactar */
59 fixed vx, vy; /* velocidad x, y */
60 int vida; /* duracion del disparo */
61 int punch; /* `golpe` del arma */
62 int firerate; /* ratio de disparo, referido a lastshoot */
64 int t; /* tipo de disparo: esto se cambia reprogramando la seccion correspondiente en jugador.c
65 0 = recto [sale del centro]
66 1 = direccion al azar
67 2 = abanico triple, vx especifica la apertura del abanico (default = 5)
68 3 = doble recto [salen del centro (+/-) 50% del ancho nave]
69 4 = 1 del centro, 1 al azar por disparo (very cool!)
70 5 = 1 del centro, 1 de la izq, 1 de la derecha (tipo misile pod, incluye una variacion del 10% al azar en la velocidad en y, para efecto misile pod)
71 6 = flak, 6 al azar (ca~on de flak!), y 2 rectos de las alas
74 /* Esto es referente a la estela de particulas que
75 el arma puede dejar, o no.
76 Cada parametro tiene 2 indices, el valor minimo y maximo que puede tomar
77 respectivamente (para variacion al azar)
78 Cabe aclarar que la dx, dy es un numero decimal multiplicado por 100 (100 = 0.01)
79 Si vida[0] <= 0, no deja ninguna estela */
80 int est_vida[2]; /* vida de la particula */
81 int est_cant[2]; /* cantidad de particulas x frame */
82 int est_color[3][2]; /* color, el primer indice indica RGB, y el 2ndo min-max */
83 int est_dx[2]; /* aceleracion x inicial */
84 int est_dy[2]; /* aceleracion y inicial */
85 int est_tipo[2]; /* tipo(s) de particula */
86 int est_rad[2]; /* radio */
87 int est_transp; /* transparencia */
88 } ARMA_JUG;
90 /* Tipo de datos que contiene el jugador */
91 typedef struct JUGADOR {
92 fixed x, y; /* posicion */
93 fixed dx, dy; /* direccion */
95 int vida; /* vida que le queda, energia */
97 int dinero; /* dinero (puntos) que tiene */
99 BITMAP *spr[6]; /* sprites que lo representan, 0 = izq, 1 = normal, 2 = der,
100 3,4,5 son las sombras de los sprites
101 (se generan al cargar los datos) */
103 PMASK *mask; /* mascara de colision, para spr[1] */
105 int arma[MAX_ARM_CLASS]; /* armamentos que tiene (<= 0 no tiene el arma, > 0 posee el arma, cantidad de balas que tiene) */
107 int arma_actual; /* arma seleccionada */
109 int lastshoot; /* contador para temporizar intervalo entre disparos */
111 int bombas; /* cantidad de bombas que le quedan */
113 /* Reparacion de la nave, para el shopping */
114 int reparar_cantidad; /* cantidad que repara cada unidad */
115 int reparar_precio; /* precio por unidad */
116 char reparar_desc[2048]; /* descripcion */
117 BITMAP *reparar_bmp; /* bitmap de reparacion */
119 /* Bombas de la nave, para el shopping */
120 int bomba_cantidad;
121 int bomba_precio;
122 char bomba_desc[2048];
123 BITMAP *bomba_bmp;
124 int max_bombas;
126 /* dinero y bombas iniciales */
127 int init_money;
128 int init_bombas;
130 } JUGADOR;
132 /* Nodo de disparo del jugador, en lista enlazada */
133 typedef struct DISP_JUG {
134 fixed x, y; /* posicion */
135 fixed dx, dy; /* direccion */
136 int vida; /* vida que le queda */
138 int arma; /* indice de la matriz ARMA_JUG que indica el tipo de disparo, etc */
140 /* puntero al siguiente */
141 struct DISP_JUG *next;
142 } DISP_JUG;
144 /* Teclas de juego, corresponden al tipo key[KEY_SPACE], etc */
145 typedef struct TECLADO_JUG {
146 /* arriba, abajo, derecha, izquierda, disparar, cambiar arma, bomba especial */
147 int arr, abj, der, izq, sht, wpn, bmb;
148 } TECLADO_JUG;
151 /* GLOBALES EXPORTADAS */
152 extern ARMA_JUG arma_tipo[MAX_ARM_CLASS]; /* tipos de armas */
153 extern JUGADOR jugador; /* jugador */
154 extern DISP_JUG *disp_jug_1; /* puntero al 1er disparo del jugador */
155 extern TECLADO_JUG teclado_jug; /* teclado del jugador */
157 /* Prototipos de funciones */
158 void dibujar_tablero(BITMAP *bmp);
159 void set_teclado_default();
160 void reset_total_jugador();
161 void reset_parcial_jugador();
162 void jugador_proxima_arma();
163 void interpreta_teclado();
164 void dibujar_nave_jugador(BITMAP *bmp, int x, int y);
165 void mover_jugador(int fy);
167 void agregar_disparo_jug();
168 void mover_disparos_jug(int fy);
169 void dibujar_disp_jug(BITMAP *bmp, int x, int y);
170 void liberar_lista_disparos_jug();
172 #endif