1 /** 2 * @file enemies.h 3 * @brief handle enemies 4 * @created 2006-11-19 5 * @date 2009-01-11 6 * @author Jean-Michel Martin de Santero 7 * @author Bruno Ethvignot 8 */ 9 /* 10 * copyright (c) 1998-2015 TLK Games all rights reserved 11 * $Id: enemies.h,v 1.40 2012/06/03 17:06:15 gurumeditation Exp $ 12 * 13 * Powermanga is free software; you can redistribute it and/or modify 14 * it under the terms of the GNU General Public License as published by 15 * the Free Software Foundation; either version 3 of the License, or 16 * (at your option) any later version. 17 * 18 * Powermanga is distributed in the hope that it will be useful, but 19 * WITHOUT ANY WARRANTY; without even the implied warranty of 20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 21 * GNU General Public License for more details. 22 * 23 * You should have received a copy of the GNU General Public License 24 * along with this program; if not, write to the Free Software 25 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 26 * MA 02110-1301, USA. 27 */ 28 #ifndef __ENEMIES__ 29 #define __ENEMIES__ 30 31 #ifdef __cplusplus 32 extern "C" 33 { 34 #endif 35 36 /** Maximum of enemies active at any time */ 37 #define MAX_OF_ENEMIES 180 38 /** Maxinum number of types of small enemy */ 39 #define ENEMIES_MAX_SMALL_TYPES 21 40 /** Maxium number of types of bloodsucker enemy */ 41 #define ENEMIES_MAX_BLOODSUCKER_TYPES 21 42 /** Maximum number of types of lonely foes */ 43 #define LONELY_FOES_MAX_OF 40 44 /* Number of images of bloodsucker */ 45 #define ENEMIES_MAX_SPECIAL_TYPES 8 46 #define ENEMIES_MAX_OF_TYPES ENEMIES_MAX_SMALL_TYPES + ENEMIES_MAX_BLOODSUCKER_TYPES + LONELY_FOES_MAX_OF + ENEMIES_MAX_SPECIAL_TYPES 47 /* Number of images of bloodsucker */ 48 #define BLOODSUCKER_NUM_OF_IMAGES 8 49 /* Number of animation images of a lonely foe, guardian or special ennemy */ 50 #define ENEMIES_SPECIAL_NUM_OF_IMAGES 32 51 52 extern Sint32 num_of_enemies; 53 54 /** Defined the types of displacements that exist */ 55 typedef enum 56 { DISPLACEMENT_CURVE, 57 DISPLACEMENT_GRID, 58 DISPLACEMENT_LONELY_FOE, 59 DISPLACEMENT_GUARDIAN 60 } 61 DISPLACEMENTS; 62 63 /** Type of enemies vessels */ 64 enum TYPE_VAIS_E 65 { 66 /* standards */ 67 BOONIES, MOOARCKS, ACHEES, EVILIANS, RAGOONS, FLABBIES, BOWANS, 68 HIJACKERS, DISTASIANS, BRITTERS, SICKIES, ARIANS, STINCKIES, BZEURCKS, 69 WEAKIES, 70 MASKIES, SCRAPIES, SCROLLIANS, SHAMISTEES, FOOLINIANS, GLAMOOSH, 71 BIGBOONIES, BIGMOOARCKS, BIGACHEES, BIGEVILIANS, BIGRAGOONS, 72 BIGFLABBIES, BIGBOWANS, BIGHIJACKERS, BIGDISTASIANS, BIGBRITTERS, 73 BIGSICKIES, BIGARIANS, BIGSTINCKIES, BIGBZEURCKS, BIGWEAKIES, 74 BIGMASKIES, BIGSCRAPIES, BIGSCROLLIANS, BIGSHAMISTEES, BIGFOOLINIANS, 75 BIGGLAMOOSH, 76 /* lonely foe */ 77 SUBJUGANEERS, MILLOUZ, SWORDINIANS, TOUBOUG, DISGOOSTEES, EARTHINIANS, 78 BIRIANSTEES, BELCHOUTIES, VIONIEES, HOCKYS, TODHAIRIES, DEFECTINIANS, 79 BLAVIRTHE, SOONIEES, ANGOUFF, GAFFIES, BITTERIANS, BLEUERCKS, ARCHINIANS, 80 CLOWNIES, DEMONIANS, TOUTIES, FIDGETINIANS, EFFIES, DIMITINIANS, 81 PAINIANS, ENSLAVEERS, FEABILIANS, DIVERTIZERS, SAPOUCH, HORRIBIANS, 82 CARRYONIANS, DEVILIANS, ROUGHLEERS, ABASCUSIANS, ROTIES, STENCHIES, 83 PERTURBIANS, MADIRIANS, BAINIES, 84 /* special */ 85 SHURIKY, NAGGYS, GOZUKY, SOUKEE, QUIBOULY, TOURNADEE, SAAKEY, SAAKAMIN, 86 BIGMETEOR, NORMALMETEOR, SMALLMETEOR, 87 /* guards */ 88 THANIKEE, BARYBOOG, PIKKIOU, NEGDEIS, FLASHY, MEECKY, TYPYBOON, MATHYDEE, 89 OVYDOON, GATLEENY, NAUTEE, KAMEAMEA, SUPRALIS, GHOTTEN 90 }; 91 92 /** Data structure of the images's enemy */ 93 extern image enemi[ENEMIES_MAX_SMALL_TYPES + ENEMIES_MAX_BLOODSUCKER_TYPES + 94 LONELY_FOES_MAX_OF + 95 ENEMIES_MAX_SPECIAL_TYPES][IMAGES_MAXOF]; 96 typedef struct enemy 97 { 98 /** Sprite structure */ 99 sprite spr; 100 /** TRUE if ennemy is dead */ 101 bool dead; 102 /** TRUE if enemy is still visible but inactive */ 103 bool visible_dead; 104 /** Index of the mask color table (fade-out effect) */ 105 Sint16 dead_color_index; 106 /** TRUE if display ennemy's white mask */ 107 bool is_white_mask_displayed; 108 /** TRUE if display the sprite enemy */ 109 bool visible; 110 /** Time during which vessel's invincible */ 111 Sint16 invincible; 112 bool retournement; 113 /* TRUE if enemy change of direction */ 114 bool change_dir; 115 /** Delay value before next shot */ 116 Sint32 fire_rate_count; 117 /** Counter of delay between two shots */ 118 Sint32 fire_rate; 119 /** Type of displacement: 0 = curve, 1 = grid, 120 * 3 = lonely foe, 2 = guardian */ 121 Sint16 displacement; 122 /** Curve or grid index */ 123 Sint16 pos_vaiss[2]; 124 /** Curve number used */ 125 Sint16 num_courbe; 126 /** Type of enemy: 0 = 16x16 size, 1 = 32*32 size, 2 = lonely foes */ 127 Sint32 type; 128 /** Anim index offset (0 = increase, 1 = decreasing) */ 129 Sint32 sens_anim; 130 /** Horizontal speed */ 131 float x_speed; 132 /** Vertical speed */ 133 float y_speed; 134 /** Timelife of the metor, delay counter before destruction */ 135 Sint32 timelife; 136 /** Angle displacement (ex. SOUKEE into guardian phase) */ 137 float angle_tir; 138 Sint16 img_angle; 139 Sint16 img_old_angle; 140 /** Angle offset */ 141 float agilite; 142 struct enemy *previous; 143 struct enemy *next; 144 bool is_enabled; 145 Uint32 id; 146 } enemy; 147 148 bool enemies_once_init (void); 149 void enemies_init (void); 150 #ifdef PNG_EXPORT_ENABLE 151 bool enemies_extract (void); 152 #endif 153 void enemies_kill (void); 154 void enemies_free (void); 155 void enemies_handle (void); 156 void enemy_set_fadeout (enemy * foe); 157 enemy *enemy_get (void); 158 enemy *enemy_get_first (void); 159 void enemy_draw (enemy * foe); 160 void enemy_guns_collisions (enemy * foe); 161 void enemy_satellites_collisions (enemy * foe); 162 void enemy_spaceship_collision (enemy * foe); 163 #ifdef __cplusplus 164 } 165 #endif 166 #endif 167