~ubuntu-branches/ubuntu/raring/powermanga/raring

« back to all changes in this revision

Viewing changes to src/ennemis_execution.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Barry deFreese, Gonéri Le Bouder, Cyril Brulebois, Barry deFreese
  • Date: 2008-03-19 21:32:41 UTC
  • mfrom: (1.2.4 upstream) (3.1.2 lenny)
  • Revision ID: james.westby@ubuntu.com-20080319213241-sn6w3z75uppm22eq
Tags: 0.90-dfsg-1
[ Gonéri Le Bouder ]
* add desktop file, thanks Adrien Cunin (Closes: #402168)
 - powermanga.xpm moved in /usr/share/pixmaps
* call dh_desktop to run update-desktop-database

[ Cyril Brulebois ]
* Added XS-Vcs-Svn and XS-Vcs-Browser fields in the control file.

[ Barry deFreese ]
* Bump debhelper build-dep version to match compat
* Fix substvar source:Version
* Make distclean not ignore errors
* Add watch file
* Add Homepage field in control
* Remove XS- from VCS fields in control
* New Upstream Release (Closes: #447415)
  + Should now be dfsg free
  + Adds joystick support (Closes: #442322)
  + STILL NOT SURE ABOUT tlk.fnt
* Revert patches except fixing scoredir path and copyright for manpage
* Remove deprecated Encoding tag from desktop file
* Remove file extension from icon tag in desktop file
* Replace evil 'pwd' with $(CURDIR)
* Removing config.log config.status in clean target
* Convert copyright to UTF-8.
* Remove order/ dir from upstream tarball.
* Remove empty dirs from powermanga package.
* Bump Standards Version to 3.7.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
//*****************************************************************************
2
 
// copyright (c) 1998-2005 TLK Games all rights reserved
3
 
//-----------------------------------------------------------------------------
4
 
// file         : "ennemis_exection.cpp"
5
 
// created      : ?
6
 
// updates      : 2005-01-10
7
 
// id           : $Id: ennemis_execution.cpp,v 1.1.1.1 2005/01/25 05:52:39 gurumeditation Exp $
8
 
//-----------------------------------------------------------------------------
9
 
// functions    : void  ennemis_exection()
10
 
//                float Deplacement_Tir_X( float angle, float vitesse, float pos_x )
11
 
//                float Deplacement_Tir_Y( float angle, float vitesse, float pos_y )
12
 
//-----------------------------------------------------------------------------
13
 
// This program is free software; you can redistribute it and/or modify it under
14
 
// the terms of the GNU General Public License as published by the Free Software
15
 
// Foundation; either version 2 of the License, or (at your option) any later
16
 
// version.
17
 
// 
18
 
// This program is distributed in the hope that it will be useful, but WITHOUT
19
 
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
20
 
// FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
21
 
// details.
22
 
//
23
 
// You should have received a copy of the GNU General Public License along with
24
 
// this program; if not, write to the Free Software Foundation, Inc., 59 Temple
25
 
// Place - Suite 330, Boston, MA  02111-1307, USA.
26
 
//
27
 
//*****************************************************************************
28
 
#include "powermanga.hpp"
29
 
//..............................................................................
30
 
extern short            nbr_nmis;                              //nombre d'enemis actuellement geres
31
 
extern vaisseau_nmi     ve[MAX_NMI_ON_SCREEN];                 //structure des vaisseaux ennemis
32
 
extern int              liste_ve[MAX_NMI_ON_SCREEN];           //liste de tous les 've' geres actuellement
33
 
extern int              cmpt_nmis;                             //compteur nombre d'ennemis (dans les boucles)
34
 
extern curve            initial_curve[NBR_CURVE_MAX];          //structure des courbes de bezier
35
 
extern bool             aff_game_over;                         //1=affichage du game over en cours
36
 
extern short            nbr_boules;                            //nombre de boules actuellement geres
37
 
extern str_boule        bou[MAX_BOULES_ON_SCREEN];             // structure des boules
38
 
extern image            boule[MAX_TYP_OF_BOULES][NBR_IMAGES_BOULES];    //tableau des boules
39
 
extern int              cmpt_boules;                           //compteur du nombre de boules (dans les boucles)
40
 
extern bool             player_pause;                          //1=pause en cours
41
 
extern tir              tirs[NBR_TIRS_MAX];                    //tableau de tous les objets tirs
42
 
extern int              etat_menu;                             //MENU_OFF(false)=menu inactif ; MENU_ON(true)=menu actif
43
 
extern int              new_tir;                               //indice sur un nouvel objet 'tirs'
44
 
extern short            nbr_tirs;                              //nombre de tir actuellement geres
45
 
extern int              nbr_onde_choc;                         //nombre actuel d'onde de choc
46
 
extern int              num_level;                             //numero du niveau en cours
47
 
extern int              tmp_tsts_x;
48
 
extern int              tmp_tsts_y;
49
 
extern int              tmp_tstd_x;
50
 
extern int              tmp_tstd_y;
51
 
extern int              cmpt_exps;                             //compteur du nombre d'explosions (dans les boucles)
52
 
extern image            fire[MAX_TYP_OF_TIR][NBR_IMAGES_TIR];  //ableau des diff�rents tirs
53
 
extern int              bonusx;                                //multiplicateur de points x2 ou x4 (bonus)
54
 
extern int              player_score;                          //
55
 
extern int              cmpt_canons;                           // Utilis� dans les bcles pour compter le nombre de canons.
56
 
extern short            nbr_canons;                            // Indique le nombre de canons actuellement g�r�s.
57
 
extern int              liste_can[MAX_CANONS_ON_SCREEN];       // D�finit la liste de toutes les 'can' que l'on doit g�r�s � chaque VBLs.
58
 
extern str_boule        bou[MAX_BOULES_ON_SCREEN];             // D�claration de la structure des boules.
59
 
extern image            boule[MAX_TYP_OF_BOULES][NBR_IMAGES_BOULES];    // D�finit le tableau des diff�rents ennemis.
60
 
extern int              cmpt_boules;                           // Utilis� dans les bcles pour compter le nombre de boules.
61
 
extern short            nbr_exps;                              // Indique le nombre d'explosions actuellement g�r�es.
62
 
extern int              liste_bou[MAX_BOULES_ON_SCREEN];       // D�finit la liste de toutes les 'bou' que l'on doit g�r�s � chaque VBLs.
63
 
extern str_canon        can[MAX_CANONS_ON_SCREEN];             // D�claration de la structure des canons.
64
 
extern vaisseau         vj[NBR_MAX_J];                         // declaration de la structure des vaisseaux des joueurs.
65
 
extern bool             game_over_player_one;                  // true=le joueur vient de perdre son vaisseau.(game over)
66
 
extern grid             grille;
67
 
extern bool             bar_nrj_player;
68
 
extern int              new_ve;                                // Indique l'indice du tableau corespondant � un nouvel objet 've'.
69
 
extern int              gardian_activity;
70
 
extern bool             bar_nrj_guardian;
71
 
extern image            enemi[MAX_TYP_OF_ENEMI + MAX_TYP_OF_S_ENEMI + MAX_TYP_OF_NMI_SPE + MAX_TYP_OF_OBJ_SPE][NBR_IMAGES_MAX]; // D�finit le tableau des diff�rents ennemis.
72
 
extern short            first_value, second_value, compteur, compteur1;
73
 
extern int              iNumeroGardien;                        // numero du gardien en cours
74
 
 
75
 
//..............................................................................
76
 
void ennemis_execution()
77
 
{
78
 
  static int              i, k, j, l, m;
79
 
 
80
 
  for(i = 0; i < nbr_nmis; i++)
81
 
  {
82
 
    cmpt_nmis = liste_ve[i];                                   //cmpt_nmis=index sur le tableau "v.........
83
 
    switch (ve[cmpt_nmis].deplacement)
84
 
    {
85
 
      // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
86
 
      //  deplacement=0 : phase courbe
87
 
      // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
88
 
      case COURBE:
89
 
      {
90
 
        if(!player_pause && etat_menu == MENU_OFF
91
 
           && _score::getActionExecution() == 0)
92
 
        {
93
 
          ve[cmpt_nmis].pos_vaiss[POS_CURVE]++;                //change position du vaisseau dans la courbe
94
 
          if(ve[cmpt_nmis].pos_vaiss[POS_CURVE] >=
95
 
             initial_curve[ve[cmpt_nmis].num_courbe].nbr_pnt_curve)
96
 
          {
97
 
            Del_Element_Ve(cmpt_nmis, i);                      //supprimer un vaisseau ennemi du tableau des 've'
98
 
            i--;
99
 
            goto fin_dep_ve_courbe;
100
 
          }
101
 
          //nouvelles coordonees
102
 
          ve[cmpt_nmis].spr.coor_x += (float)initial_curve[ve[cmpt_nmis].num_courbe].delta_x[ve[cmpt_nmis].pos_vaiss[POS_CURVE]];       // Donne l'indice de progression du vaisseau soit sur la courbe, soit sur la grille.
103
 
          ve[cmpt_nmis].spr.coor_y += (float)initial_curve[ve[cmpt_nmis].num_courbe].delta_y[ve[cmpt_nmis].pos_vaiss[POS_CURVE]];       // Donne l'indice de progression du vaisseau soit sur la courbe, soit sur la grille.
104
 
        }
105
 
        //donne la valeur de l'image du vaisseau a afficher
106
 
        ve[cmpt_nmis].spr.img_act =
107
 
          initial_curve[ve[cmpt_nmis].num_courbe].angle[ve[cmpt_nmis].
108
 
                                                        pos_vaiss[POS_CURVE]];
109
 
        // Test si on doit ou non afficher le sprite.
110
 
        if(((short)ve[cmpt_nmis].spr.coor_x +
111
 
            ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->larg) <
112
 
           DEBUT_ECRAN_X
113
 
           || ((short)ve[cmpt_nmis].spr.coor_y +
114
 
               ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->haut) <
115
 
           DEBUT_ECRAN_Y
116
 
           || (short)ve[cmpt_nmis].spr.coor_y >= DEBUT_ECRAN_Y + HAUT_ECR_RAM
117
 
           || (short)ve[cmpt_nmis].spr.coor_x >= DEBUT_ECRAN_X + LARG_ECR_RAM)
118
 
        {                                                      // Indique que le sprite n'est pas visible, on n'a donc pas besoin de faire de tests de collision avec lui.
119
 
          ve[cmpt_nmis].visible = FALSE;
120
 
        }
121
 
        else                                                   // Sinon, on doit l'afficher.
122
 
        {
123
 
          if(ve[cmpt_nmis].dead)                               //ennemi est mort ?
124
 
          {
125
 
            if(Gere_Invincibilite_Ve(cmpt_nmis))               //vaisseau continue a clignoter ?
126
 
            {                                                  // RAZ de la variable de fin de vie du vaisseau ennemi.
127
 
              ve[cmpt_nmis].dead = FALSE;                      //enemy's really dead
128
 
              Del_Element_Ve(cmpt_nmis, i);                    // Routine utilis�e pour supprimer un vaisseau ennemi du tableau des 've'.
129
 
              // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
130
 
              i--;
131
 
              goto fin_dep_ve_courbe;                          // On sort de la bcle directement.
132
 
            }
133
 
          }
134
 
          else                                                 // Sinon, l'ennemi est encore en vie.
135
 
          {                                                    // Indique que le sprite est visible, on devra donc faire les tests de collision avec lui.
136
 
            ve[cmpt_nmis].visible = TRUE;
137
 
            // Affichage de l'ennemi.
138
 
            Aff_Ve(cmpt_nmis);
139
 
            // Test s'il y a des ondes de choc en activit�.
140
 
            if(nbr_onde_choc)
141
 
            {                                                  // Test si l'onde de choc est en collision avec l'ennemi actuel.
142
 
              if(Tst_Col_Onde_Choc(cmpt_nmis))
143
 
              {                                                // On fait clignoter l'ennemi actuel avant de le faire disparaitre.
144
 
                Clignote_Nmi_Avant_Disparition(cmpt_nmis);
145
 
                // On ajoute une explosion � la liste.
146
 
                if(nbr_exps < (MAX_NMI_ON_SCREEN - 1))
147
 
                  Add_Explosion(ve[cmpt_nmis].spr.coor_x,
148
 
                                ve[cmpt_nmis].spr.coor_y, 0.25,
149
 
                                ve[cmpt_nmis].type, 0);
150
 
                // On ajoute un eclat � la liste des explosions.
151
 
                Add_Eclats(ve[cmpt_nmis].spr.coor_x +
152
 
                           ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
153
 
                           x_cg - 8,
154
 
                           ve[cmpt_nmis].spr.coor_y +
155
 
                           ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
156
 
                           y_cg - 8, 1.0, 4, 0, 1);
157
 
                goto fin_dep_ve_courbe;                        // Sort de la gestion des vaisseau ennemis.
158
 
              }
159
 
            }
160
 
 
161
 
            // Test si la pause est activ�e ou pas.
162
 
            if(!player_pause && etat_menu == MENU_OFF
163
 
               && _score::getActionExecution() == 0)
164
 
            {                                                  // D�compte le temps s�parant deux tirs.
165
 
              ve[cmpt_nmis].cad_tir--;
166
 
 
167
 
              //test si l'ennemi doit ou non lancer un tir ----------------------
168
 
              if(ve[cmpt_nmis].cad_tir <= 0
169
 
                 && nbr_tirs <
170
 
                 ((NBR_TIRS_MAX - 1) -
171
 
                  ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
172
 
                  nbr_pts_tir))
173
 
              {                                                // Met la cadence du tir pour le vaisseau ennemi.
174
 
                ve[cmpt_nmis].cad_tir = ve[cmpt_nmis].cad_tir_initiale; // Corespond au temps qu'il faut au vaisseau avant de pouvoir tirer � nouveau.
175
 
                for(k = 0;
176
 
                    (k <
177
 
                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
178
 
                     nbr_pts_tir
179
 
                     && nbr_tirs <
180
 
                     ((NBR_TIRS_MAX - 1) -
181
 
                      ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
182
 
                      nbr_pts_tir)); k++)
183
 
                {
184
 
                  if(nbr_tirs < (NBR_TIRS_MAX - 1))            //reste tirs ?
185
 
                  {
186
 
                    new_tir = new_element_tir();               //demande un tir libre
187
 
                    tirs[new_tir].clignote = 1;                //1=tir clignote
188
 
                    tirs[new_tir].spr.genre = ENNEMI;          // Indique que c'est un sprite ennemi.
189
 
                    tirs[new_tir].spr.trajectoire = FALSE;     // Indique que la trajectoire du sprite est calcul�e une fois pour toute.
190
 
                    tirs[new_tir].spr.nbr_img = 32;            // Indique le nombre d'images composant le sprite.
191
 
                    // Test si le type d'ennemi afin d'attribuer la puissance du tir.
192
 
                    switch (ve[cmpt_nmis].type)
193
 
                    {                                          // Cas d'un ennemi de 16x16.
194
 
                      case 0:
195
 
                        tirs[new_tir].spr.pow_of_dest = 2;     // Indique la puissance de destruction du sprite.
196
 
                        // Donne l'adresse des images du sprite.
197
 
                        for(j = 0; j < tirs[new_tir].spr.nbr_img; j++)
198
 
                        {                                      //Donne l'adresse des images du projectile.
199
 
                          tirs[new_tir].spr.img[j] = (image *) & fire[TIR1P1E][j];      // Corespond au Tir 2 puissance 1.
200
 
                        }
201
 
                        break;
202
 
                        // Cas d'un ennemi de 32x32.
203
 
                      case 1:
204
 
                        tirs[new_tir].spr.pow_of_dest = 4;     // Indique la puissance de destruction du sprite.
205
 
                        // Donne l'adresse des images du sprite.
206
 
                        for(j = 0; j < tirs[new_tir].spr.nbr_img; j++)
207
 
                        {                                      //Donne l'adresse des images du projectile.
208
 
                          tirs[new_tir].spr.img[j] = (image *) & fire[TIR1P2E][j];      // Corespond au Tir 2 puissance 2.
209
 
                        }
210
 
                        break;
211
 
                    }
212
 
                    tirs[new_tir].spr.etat_dommages = tirs[new_tir].spr.pow_of_dest;    // Indique l'�tat de domages du sprite.
213
 
                    //tirs[new_tir].spr.pilote = 0;              // Indique par qui est dirig� le sprite.
214
 
                    //tirs[new_tir].spr.mode_commande = 0;       // Indique le moyen par lequel on fait d�placer le sprite.
215
 
                    tirs[new_tir].spr.img_act = 0;             // Indique l'image actuelle.
216
 
                    tirs[new_tir].spr.nbr_tot_vbl = 1;         // Indique le nombre de VBL qu'il faut pour passer � l'image suivante.
217
 
                    tirs[new_tir].spr.nbr_vbl_act = 0;         // Indique le nombre de VBL compt�es actuellement.
218
 
                    // Donne les coordonn�es d'affichage du sprite.
219
 
                    tirs[new_tir].img_angle =
220
 
                      ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
221
 
                      angle_tir[k];
222
 
                    tirs[new_tir].img_old_angle = tirs[new_tir].img_angle;
223
 
                    tirs[new_tir].spr.coor_x =
224
 
                      ve[cmpt_nmis].spr.coor_x +
225
 
                      ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
226
 
                      xy_pos_tir[k][X] -
227
 
                      tirs[new_tir].spr.img[tirs[new_tir].img_angle]->x_cg;
228
 
                    tirs[new_tir].spr.coor_y =
229
 
                      ve[cmpt_nmis].spr.coor_y +
230
 
                      ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
231
 
                      xy_pos_tir[k][Y] -
232
 
                      tirs[new_tir].spr.img[tirs[new_tir].img_angle]->y_cg;
233
 
                    tirs[new_tir].tmp_life_tir = 400;
234
 
                    // Donne un angle vertical pour le tir.
235
 
                    tirs[new_tir].angle_tir =
236
 
                      PI_SUR_16 * tirs[new_tir].img_angle;
237
 
                    tirs[new_tir].spr.vitesse = 1.0f + (float)num_level / 20.0f;        // Donne la vitesse de d�placement du sprite.
238
 
                  }
239
 
                }
240
 
              }
241
 
            }
242
 
            // Si le joueur n'est pas Game Over.
243
 
            if(!aff_game_over)
244
 
            {                                                  // Test les collisions entre les boules et le vaisseau ennemi.
245
 
              // Boucles sur toutes les boules du joueur.
246
 
              for(k = 0; k < nbr_boules; k++)
247
 
              {                                                // Retourne l'indice dans le tableau 'bou' du ni�me �l�ment de la liste.
248
 
                cmpt_boules = liste_bou[k];
249
 
                // Test si la boule est visible et si oui, on peux tester les collisions.
250
 
                if(bou[cmpt_boules].visible)
251
 
                {                                              // Boucle sur tous les points de collision de la boule.
252
 
                  for(l = 0;
253
 
                      l <
254
 
                      bou[cmpt_boules].img[bou[cmpt_boules].img_act]->
255
 
                      nbr_pts_col; l++)
256
 
                  {                                            // Donne les coordonn�e du point de collision actuel de la boule.
257
 
                    tmp_tsts_x =
258
 
                      bou[cmpt_boules].coor_x +
259
 
                      bou[cmpt_boules].img[bou[cmpt_boules].img_act]->
260
 
                      xy_pts_col[l][X];
261
 
                    tmp_tsts_y =
262
 
                      bou[cmpt_boules].coor_y +
263
 
                      bou[cmpt_boules].img[bou[cmpt_boules].img_act]->
264
 
                      xy_pts_col[l][Y];
265
 
                    // Boucle sur toutes les zones de collisions du vaisseau ennemi.
266
 
                    for(m = 0;
267
 
                        m <
268
 
                        ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
269
 
                        nbr_zon_col; m++)
270
 
                    {                                          // Test si le point de collision de la boule se trouve � l'int�rieur de la
271
 
                      // zone de collision du vaisseau ennemi.
272
 
                      tmp_tstd_x =
273
 
                        (int)ve[cmpt_nmis].spr.coor_x +
274
 
                        ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
275
 
                        xy_zon_col[m][X];
276
 
                      tmp_tstd_y =
277
 
                        (int)ve[cmpt_nmis].spr.coor_y +
278
 
                        ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
279
 
                        xy_zon_col[m][Y];
280
 
                      // Test s'il le point de collision de la boule se trouve � l'int�rieur de la zone de collision du vaisseau ennemi.
281
 
                      if(tmp_tsts_x >= tmp_tstd_x &&
282
 
                         tmp_tsts_y >= tmp_tstd_y &&
283
 
                         tmp_tsts_x <
284
 
                         (tmp_tstd_x +
285
 
                          ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
286
 
                          lh_zon_col[m][L])
287
 
                         && tmp_tsts_y <
288
 
                         (tmp_tstd_y +
289
 
                          ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
290
 
                          lh_zon_col[m][H]))
291
 
                      {                                        // On doit d�cr�menter l'�tat des dommages du vaisseau ennemi et de la boule.
292
 
                        // Donne le nouvel �tat des dommages du vaisseau ennemi.
293
 
                        ve[cmpt_nmis].spr.etat_dommages -=
294
 
                          bou[cmpt_boules].pow_of_dest;
295
 
                        // Donne le nouvel �tat des dommages de la boule du joueur.
296
 
                        bou[cmpt_boules].etat_dommages -=
297
 
                          ve[cmpt_nmis].spr.pow_of_dest;
298
 
                        // Test si la boule est d�truite.
299
 
                        if(bou[cmpt_boules].etat_dommages <= 0)
300
 
                        {                                      // On supprime la boule de la liste.
301
 
                          Del_Element_Bou(cmpt_boules, k);     // Routine utilis�e pour supprimer une boule du tableau 'bou'.
302
 
                          // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
303
 
                          k--;
304
 
                          // Positionnement des boules autour du vaisseau appartenant au joueur.
305
 
                          if(nbr_boules)
306
 
                          {
307
 
                            bou[liste_bou[0]].pos_pts_cercle = 0;       // Indique la position du pointeur sur le tableau des points du cercle.
308
 
                            switch (nbr_boules)
309
 
                            {
310
 
                              case 2:
311
 
                                bou[liste_bou[1]].pos_pts_cercle = 40;  // Indique la position du pointeur sur le tableau des points du cercle.
312
 
                                break;
313
 
                              case 3:
314
 
                                bou[liste_bou[1]].pos_pts_cercle = 26;  // Indique la position du pointeur sur le tableau des points du cercle.
315
 
                                bou[liste_bou[2]].pos_pts_cercle = 53;  // Indique la position du pointeur sur le tableau des points du cercle.
316
 
                                break;
317
 
                              case 4:
318
 
                                bou[liste_bou[1]].pos_pts_cercle = 20;  // Indique la position du pointeur sur le tableau des points du cercle.
319
 
                                bou[liste_bou[2]].pos_pts_cercle = 40;  // Indique la position du pointeur sur le tableau des points du cercle.
320
 
                                bou[liste_bou[3]].pos_pts_cercle = 60;  // Indique la position du pointeur sur le tableau des points du cercle.
321
 
                                break;
322
 
                              case 5:
323
 
                                bou[liste_bou[1]].pos_pts_cercle = 16;  // Indique la position du pointeur sur le tableau des points du cercle.
324
 
                                bou[liste_bou[2]].pos_pts_cercle = 32;  // Indique la position du pointeur sur le tableau des points du cercle.
325
 
                                bou[liste_bou[3]].pos_pts_cercle = 48;  // Indique la position du pointeur sur le tableau des points du cercle.
326
 
                                bou[liste_bou[4]].pos_pts_cercle = 64;  // Indique la position du pointeur sur le tableau des points du cercle.
327
 
                                break;
328
 
                            }
329
 
                          }
330
 
                          // La boule est en d�truite, on peux passer � la boule suivante.
331
 
                          goto fin_test_col_bou_nmi_courbe;
332
 
                        }
333
 
                        else
334
 
                        {                                      // Si la boule n'est pas d�truite, on indique qu'il faudra l'afficher la prochaine fois en blanc.
335
 
                          bou[cmpt_boules].affich_white = TRUE;
336
 
                        }
337
 
                        // On test si le vaisseau ennemi est d�truit.
338
 
                        if(ve[cmpt_nmis].spr.etat_dommages <= 0)
339
 
                        {                                      // Test si le vaisseau ennemi �tait une m�t�orite.
340
 
                          if(ve[cmpt_nmis].type >= BIGMETEOR
341
 
                             && ve[cmpt_nmis].type <= SMALLMETEOR)
342
 
                          {
343
 
                            //Gene_Bonus_Malus_Meteor(ve[cmpt_nmis].spr.coor_x, ve[cmpt_nmis].spr.coor_y); 
344
 
                            Gene_Bonus_Malus_Meteor(&ve[cmpt_nmis]);
345
 
                            Add_Eclats(ve[cmpt_nmis].spr.coor_x +
346
 
                                       ve[cmpt_nmis].spr.img[ve[cmpt_nmis].
347
 
                                                             spr.img_act]->
348
 
                                       x_cg - 8,
349
 
                                       ve[cmpt_nmis].spr.coor_y +
350
 
                                       ve[cmpt_nmis].spr.img[ve[cmpt_nmis].
351
 
                                                             spr.img_act]->
352
 
                                       y_cg - 8, 1.0, 4, 0, 2);
353
 
                          }
354
 
                          else                                 // Sinon, on appel la routine normale de g�n�ration de bonus, malus.
355
 
                          {                                    // Appel de la routine utilis�e pour g�n�rer soit un bonus soit un malus.
356
 
                            //Gene_Bonus_Malus(ve[cmpt_nmis].spr.coor_x, ve[cmpt_nmis].spr.coor_y);
357
 
                            Gene_Bonus_Malus(&ve[cmpt_nmis]);
358
 
                          }
359
 
                          // On ajoute une explosion � la liste.
360
 
                          if(nbr_exps < (MAX_NMI_ON_SCREEN - 1))
361
 
                            Add_Explosion(ve[cmpt_nmis].spr.coor_x,
362
 
                                          ve[cmpt_nmis].spr.coor_y, 0.25,
363
 
                                          ve[cmpt_nmis].type, 0);
364
 
                          // On ajoute un eclat � la liste des explosions.
365
 
                          Add_Eclats(ve[cmpt_nmis].spr.coor_x +
366
 
                                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
367
 
                                                           img_act]->x_cg - 8,
368
 
                                     ve[cmpt_nmis].spr.coor_y +
369
 
                                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
370
 
                                                           img_act]->y_cg - 8,
371
 
                                     1.0, 3, 0, 1);
372
 
                          // Mise � jour du score du joueur pour la destruction d'un ennemi.
373
 
                          player_score +=
374
 
                            ve[cmpt_nmis].spr.pow_of_dest << 2 << bonusx;
375
 
                          // Indique que le vaisseau ennemi doit clignoter avant de disparaitre.
376
 
                          Clignote_Nmi_Avant_Disparition(cmpt_nmis);
377
 
                          goto fin_dep_ve_courbe;
378
 
                        }
379
 
                        else
380
 
                        {                                      // Si le vaisseau n'est pas d�truit, on indique qu'il faudra l'afficher la prochaine fois en blanc.
381
 
                          ve[cmpt_nmis].affich_white = TRUE;
382
 
                        }
383
 
                        // On ajoute une mini explosion � la liste car une boule � eu une collision.
384
 
                        if(nbr_exps < (MAX_NMI_ON_SCREEN - 1))
385
 
                          Add_Explosion((float)tmp_tsts_x, (float)tmp_tsts_y,
386
 
                                        0.3f, MINI_EXPLOSION, 0);
387
 
                        // La boule est en collision avec l'ennemi, on peux passer � la boule suivante.
388
 
                        goto fin_test_col_bou_nmi_courbe;
389
 
                      }
390
 
                    }
391
 
                  }
392
 
                }
393
 
              fin_test_col_bou_nmi_courbe:;
394
 
              }
395
 
 
396
 
              // Test les collisions entre les canons et le vaisseau ennemi.
397
 
              // Bcles sur tous les canons du joueur.
398
 
              for(k = 0; k < nbr_canons; k++)
399
 
              {                                                // Retourne l'indice dans le tableau 'can' du ni�me �l�ment de la liste.
400
 
                cmpt_canons = liste_can[k];
401
 
                // Test si le canon est visible et si oui, on peux tester les collisions.
402
 
                if(can[cmpt_canons].visible)
403
 
                {                                              // Bcle sur tous les points de collision du canon.
404
 
                  for(l = 0;
405
 
                      l <
406
 
                      can[cmpt_canons].img[can[cmpt_canons].img_act]->
407
 
                      nbr_pts_col; l++)
408
 
                  {                                            // Donne les coordonn�e du point de collision actuel du canon.
409
 
                    tmp_tsts_x =
410
 
                      can[cmpt_canons].coor_x +
411
 
                      can[cmpt_canons].img[can[cmpt_canons].img_act]->
412
 
                      xy_pts_col[l][X];
413
 
                    tmp_tsts_y =
414
 
                      can[cmpt_canons].coor_y +
415
 
                      can[cmpt_canons].img[can[cmpt_canons].img_act]->
416
 
                      xy_pts_col[l][Y];
417
 
                    // Bcle sur toutes les zones de collisions du vaisseau ennemi.
418
 
                    for(m = 0;
419
 
                        m <
420
 
                        ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
421
 
                        nbr_zon_col; m++)
422
 
                    {                                          // Donne les coordon�es du point sup�rieur gauche de la
423
 
                      // zone de collision du vaisseau ennemi.
424
 
                      tmp_tstd_x =
425
 
                        (int)ve[cmpt_nmis].spr.coor_x +
426
 
                        ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
427
 
                        xy_zon_col[m][X];
428
 
                      tmp_tstd_y =
429
 
                        (int)ve[cmpt_nmis].spr.coor_y +
430
 
                        ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
431
 
                        xy_zon_col[m][Y];
432
 
                      // Test s'il le point de collision du canon se trouve � l'int�rieur de la zone de collision du vaisseau ennemi.
433
 
                      if(tmp_tsts_x >= tmp_tstd_x &&
434
 
                         tmp_tsts_y >= tmp_tstd_y &&
435
 
                         tmp_tsts_x <
436
 
                         (tmp_tstd_x +
437
 
                          ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
438
 
                          lh_zon_col[m][L])
439
 
                         && tmp_tsts_y <
440
 
                         (tmp_tstd_y +
441
 
                          ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
442
 
                          lh_zon_col[m][H]))
443
 
                      {                                        // On doit d�cr�menter l'�tat des dommages du vaisseau ennemi et du canon.
444
 
                        // Donne le nouvel �tat des dommages du vaisseau ennemi.
445
 
                        ve[cmpt_nmis].spr.etat_dommages -=
446
 
                          can[cmpt_canons].pow_of_dest;
447
 
                        // Donne le nouvel �tat des dommages du canon.
448
 
                        can[cmpt_canons].etat_dommages -=
449
 
                          ve[cmpt_nmis].spr.pow_of_dest;
450
 
                        // Test si le canon est d�truit.
451
 
                        if(can[cmpt_canons].etat_dommages <= 0)
452
 
                        {                                      // On supprime le canon de la liste.
453
 
                          Del_Element_Can(cmpt_canons, k);     // Routine utilis�e pour supprimer un canon du tableau 'can'.
454
 
                          // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
455
 
                          k--;
456
 
                          // Le canon est en d�truit, on peux passer au canon suivant.
457
 
                          goto fin_test_col_can_nmi_courbe;
458
 
                        }
459
 
                        else
460
 
                        {                                      // Si le canon n'est pas d�truit, on indique qu'il faudra l'afficher la prochaine fois en blanc.
461
 
                          can[cmpt_canons].affich_white = TRUE;
462
 
                        }
463
 
                        // On test si le vaisseau ennemi est d�truit.
464
 
                        if(ve[cmpt_nmis].spr.etat_dommages <= 0)
465
 
                        {                                      // Test si le vaisseau ennemi �tait une m�t�orite.
466
 
                          if(ve[cmpt_nmis].type >= BIGMETEOR
467
 
                             && ve[cmpt_nmis].type <= SMALLMETEOR)
468
 
                          {                                    // Appel de la routine utilis�e pour g�n�rer soit un bonus soit un malus.
469
 
                            //Gene_Bonus_Malus_Meteor(ve[cmpt_nmis].spr.coor_x, ve[cmpt_nmis].spr.coor_y);
470
 
                            Gene_Bonus_Malus_Meteor(&ve[cmpt_nmis]);
471
 
                            // On ajoute un eclat � la liste des explosions.
472
 
                            Add_Eclats(ve[cmpt_nmis].spr.coor_x +
473
 
                                       ve[cmpt_nmis].spr.img[ve[cmpt_nmis].
474
 
                                                             spr.img_act]->
475
 
                                       x_cg - 8,
476
 
                                       ve[cmpt_nmis].spr.coor_y +
477
 
                                       ve[cmpt_nmis].spr.img[ve[cmpt_nmis].
478
 
                                                             spr.img_act]->
479
 
                                       y_cg - 8, 1.0, 4, 0, 2);
480
 
                          }
481
 
                          else                                 // Sinon, on appel la routine normale de g�n�ration de bonus, malus.
482
 
                          {                                    // Appel de la routine utilis�e pour g�n�rer soit un bonus soit un malus.
483
 
                            //Gene_Bonus_Malus(ve[cmpt_nmis].spr.coor_x, ve[cmpt_nmis].spr.coor_y);
484
 
                            Gene_Bonus_Malus(&ve[cmpt_nmis]);
485
 
                          }
486
 
                          // On ajoute une explosion � la liste.
487
 
                          if(nbr_exps < (MAX_NMI_ON_SCREEN - 1))
488
 
                            Add_Explosion(ve[cmpt_nmis].spr.coor_x,
489
 
                                          ve[cmpt_nmis].spr.coor_y, 0.25,
490
 
                                          ve[cmpt_nmis].type, 0);
491
 
                          // On ajoute un eclat � la liste des explosions.
492
 
                          Add_Eclats(ve[cmpt_nmis].spr.coor_x +
493
 
                                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
494
 
                                                           img_act]->x_cg - 8,
495
 
                                     ve[cmpt_nmis].spr.coor_y +
496
 
                                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
497
 
                                                           img_act]->y_cg - 8,
498
 
                                     1.0, 3, 0, 1);
499
 
                          // Mise � jour du score du joueur pour la destruction d'un ennemi.
500
 
                          player_score +=
501
 
                            ve[cmpt_nmis].spr.pow_of_dest << 2 << bonusx;
502
 
                          // Indique que le vaisseau ennemi doit clignoter avant de disparaitre.
503
 
                          Clignote_Nmi_Avant_Disparition(cmpt_nmis);
504
 
                          goto fin_dep_ve_courbe;
505
 
                        }
506
 
                        else
507
 
                        {                                      // Si le vaisseau n'est pas d�truit, on indique qu'il faudra l'afficher la prochaine fois en blanc.
508
 
                          ve[cmpt_nmis].affich_white = TRUE;
509
 
                        }
510
 
                        // On ajoute une mini explosion � la liste car un canon � eu une collision.
511
 
                        if(nbr_exps < (MAX_NMI_ON_SCREEN - 1))
512
 
                          Add_Explosion((float)tmp_tsts_x, (float)tmp_tsts_y,
513
 
                                        0.3f, MINI_EXPLOSION, 0);
514
 
                        // Le canon est en collision avec l'ennemi, on peux passer au caono suivant.
515
 
                        goto fin_test_col_can_nmi_courbe;
516
 
                      }
517
 
                    }
518
 
                  }
519
 
                }
520
 
              fin_test_col_can_nmi_courbe:;
521
 
              }
522
 
 
523
 
              // Test si l'ennemi est en collision avec le joueur.
524
 
              // Bcle sur tous les points de collisions du vaisseau du joueur.
525
 
              for(k = 0; k < vj[J1].spr.img[vj[J1].spr.img_act]->nbr_pts_col;
526
 
                  k++)
527
 
              {                                                // Donne les coordon�es du point de collision du vaisseau appartenant au joueur.
528
 
                tmp_tsts_x =
529
 
                  (int)vj[J1].spr.coor_x +
530
 
                  vj[J1].spr.img[vj[J1].spr.img_act]->xy_pts_col[k][X];
531
 
                tmp_tsts_y =
532
 
                  (int)vj[J1].spr.coor_y +
533
 
                  vj[J1].spr.img[vj[J1].spr.img_act]->xy_pts_col[k][Y];
534
 
                // Bcle sur toutes les zones de collisions du vaisseau ennemi.
535
 
                for(l = 0;
536
 
                    l <
537
 
                    ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
538
 
                    nbr_zon_col; l++)
539
 
                {                                              // Donne les coordon�es de la zone de collision du vaisseau ennemi.
540
 
                  tmp_tstd_x =
541
 
                    (int)ve[cmpt_nmis].spr.coor_x +
542
 
                    ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
543
 
                    xy_zon_col[l][X];
544
 
                  tmp_tstd_y =
545
 
                    (int)ve[cmpt_nmis].spr.coor_y +
546
 
                    ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
547
 
                    xy_zon_col[l][Y];
548
 
                  // Test si le point de collision du vaisseau du joueur se trouve � l'int�rieur de la
549
 
                  // zone de collision du vaisseau ennemi.
550
 
                  if(tmp_tsts_x >= tmp_tstd_x &&
551
 
                     tmp_tsts_y >= tmp_tstd_y &&
552
 
                     tmp_tsts_x <
553
 
                     tmp_tstd_x +
554
 
                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
555
 
                     lh_zon_col[l][L]
556
 
                     && tmp_tsts_y <
557
 
                     tmp_tstd_y +
558
 
                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
559
 
                     lh_zon_col[l][H])
560
 
                  {                                            // On doit d�cr�menter l'�tat des dommages des deux vaisseaux.
561
 
                    // Donne le nouvel �tat des dommages du vaisseau ennemi.
562
 
                    ve[cmpt_nmis].spr.etat_dommages -=
563
 
                      (vj[J1].spr.pow_of_dest << 1);
564
 
                    // Test si le vaisseau du joueur est invincible dans le but de d�cendre son �nergie.
565
 
                    if(!vj[J1].invincible)
566
 
                    {                                          // Test si l'�nergie du joueur �tait au maximum.
567
 
                      if(vj[J1].spr.etat_dommages == vj[J1].spr.pow_of_dest)
568
 
                      {                                        // Indique que l'animation d'ouverture de l'option d'energie doit s'effectuer.
569
 
                        Init_Anim_Option(1, FALSE);
570
 
                      }
571
 
                      // Donne le nouvel �tat des dommages du vaisseau du joueur.
572
 
                      vj[J1].spr.etat_dommages -=
573
 
                        ve[cmpt_nmis].spr.pow_of_dest;
574
 
                    }
575
 
                    // Demande un r�affichage de la barre d'�nergie du joueur.
576
 
                    bar_nrj_player = TRUE;
577
 
                    // Test si le vaisseau du joueur est d�truit.
578
 
                    if(vj[J1].spr.etat_dommages <= 0)
579
 
                    {                                          // Indique que le joueur est Game Over.
580
 
                      game_over_player_one = TRUE;
581
 
                    }
582
 
                    else
583
 
                    {                                          // Si le vaisseau n'est pas d�truit, on indique qu'il faudra l'afficher la prochaine fois en blanc.
584
 
                      vj[J1].affich_white = TRUE;
585
 
                    }
586
 
                    // On ajoute la vitesse de d�placement du vaisseau ennemi � celle du vaisseau ami.
587
 
                    vj[J1].vitesse_x += (float)initial_curve[ve[cmpt_nmis].num_courbe].delta_x[ve[cmpt_nmis].pos_vaiss[POS_CURVE]];     // Donne l'indice de progression du vaisseau soit sur la courbe, soit sur la grille.
588
 
                    vj[J1].vitesse_y += (float)initial_curve[ve[cmpt_nmis].num_courbe].delta_y[ve[cmpt_nmis].pos_vaiss[POS_CURVE]];     // Donne l'indice de progression du vaisseau soit sur la courbe, soit sur la grille.
589
 
                    // On test si le vaisseau ennemi est d�truit.
590
 
                    if(ve[cmpt_nmis].spr.etat_dommages <= 0)
591
 
                    {                                          // On ajoute une explosion � la liste.
592
 
                      if(nbr_exps < (MAX_NMI_ON_SCREEN - 1))
593
 
                        Add_Explosion(ve[cmpt_nmis].spr.coor_x,
594
 
                                      ve[cmpt_nmis].spr.coor_y, 0.25,
595
 
                                      ve[cmpt_nmis].type, 0);
596
 
                      // On ajoute un eclat � la liste des explosions.
597
 
                      Add_Eclats(ve[cmpt_nmis].spr.coor_x +
598
 
                                 ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
599
 
                                                       img_act]->x_cg - 8,
600
 
                                 ve[cmpt_nmis].spr.coor_y +
601
 
                                 ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
602
 
                                                       img_act]->y_cg - 8,
603
 
                                 1.0, 4, 0, 2);
604
 
                      // Mise � jour du score du joueur pour la destruction d'un ennemi
605
 
                      player_score +=
606
 
                        ve[cmpt_nmis].spr.pow_of_dest << 2 << bonusx;
607
 
                      // Indique que le vaisseau ennemi doit clignoter avant de disparaitre.
608
 
                      Clignote_Nmi_Avant_Disparition(cmpt_nmis);
609
 
                      goto fin_dep_ve_courbe;
610
 
                    }
611
 
                    else
612
 
                    {                                          // Si le vaisseau n'est pas d�truit, on indique qu'il faudra l'afficher la prochaine fois en blanc.
613
 
                      ve[cmpt_nmis].affich_white = TRUE;
614
 
                    }
615
 
                    // Le vaisseau du joueur est entr� en collision avec le vaisseau ennemi, on peux sortir du test.
616
 
                    goto fin_tst_col_vnmi_dep_ve_courbe;
617
 
                  }
618
 
                }
619
 
              }                                                // Fin du test pour savoir si le joueur est en collision avec un vaisseau ennemi.
620
 
            fin_tst_col_vnmi_dep_ve_courbe:;
621
 
            }                                                  // Fin du test si le joueur est Game Over.
622
 
          }                                                    // Fin du test pour savoir si l'ennemi est mort et si on est en train de le faire clignoter.
623
 
        }                                                      // Fin du test si on doit afficher le vaisseau ennemi ou non.
624
 
      fin_dep_ve_courbe:;
625
 
      }
626
 
        break;
627
 
 
628
 
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
629
 
        // deplacement=1 : phase grille
630
 
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
631
 
      case GRILLE:
632
 
      {                                                        // Test si la pause est activ�e ou pas.
633
 
        if(!player_pause && etat_menu == MENU_OFF
634
 
           && _score::getActionExecution() == 0)
635
 
        {                                                      // Donne la nouvelle coordon�e X du sprite ennemi.
636
 
          ve[cmpt_nmis].spr.coor_x =
637
 
            grille.coor_x + (ve[cmpt_nmis].pos_vaiss[X] << 4);
638
 
          // Donne la nouvelle coordon�e Y du sprite ennemi.
639
 
          ve[cmpt_nmis].spr.coor_y =
640
 
            grille.coor_y + (ve[cmpt_nmis].pos_vaiss[Y] << 4);
641
 
        }
642
 
        // Test si on doit ou non afficher le sprite.
643
 
        if(((short)ve[cmpt_nmis].spr.coor_x +
644
 
            ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->larg) <
645
 
           DEBUT_ECRAN_X
646
 
           || ((short)ve[cmpt_nmis].spr.coor_y +
647
 
               ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->haut) <
648
 
           DEBUT_ECRAN_Y
649
 
           || (short)ve[cmpt_nmis].spr.coor_y >= DEBUT_ECRAN_Y + HAUT_ECR_RAM
650
 
           || (short)ve[cmpt_nmis].spr.coor_x >= DEBUT_ECRAN_X + LARG_ECR_RAM)
651
 
        {                                                      // Indique que le sprite n'est pas visible, on n'a donc pas besoin de faire de tests de collision avec lui.
652
 
          ve[cmpt_nmis].visible = FALSE;
653
 
          // Test si l'ennemi se trouve en dehors des coordon�es de l'�cran.
654
 
          if((short)ve[cmpt_nmis].spr.coor_y >= DEBUT_ECRAN_Y + HAUT_ECR_RAM)
655
 
          {                                                    // On enl�ve le vaisseau ennemi de la liste des vaisseaux ennemis.
656
 
            Del_Element_Ve(cmpt_nmis, i);                      // Routine utilis�e pour supprimer un vaisseau ennemi du tableau des 've'.
657
 
            // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
658
 
            i--;
659
 
          }
660
 
        }
661
 
        else                                                   // Sinon, on doit l'afficher.
662
 
        {                                                      // Test si le vaisseau ennemi est mort.
663
 
          if(ve[cmpt_nmis].dead)
664
 
          {                                                    // Gestion de l'invincibilit� d'un vaisseau ennemi.
665
 
            // Retourne Vrai si le vaisseau ennemi est d�truit, Faux si on continu � le faire clignoter.
666
 
            if(Gere_Invincibilite_Ve(cmpt_nmis))
667
 
            {                                                  // RAZ de la variable de fin de vie du vaisseau ennemi.
668
 
              ve[cmpt_nmis].dead = FALSE;
669
 
              // On enl�ve le vaisseau ennemi de la liste des vaisseaux ennemis.
670
 
              Del_Element_Ve(cmpt_nmis, i);                    // Routine utilis�e pour supprimer un vaisseau ennemi du tableau des 've'.
671
 
              // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
672
 
              i--;
673
 
              goto fin_dep_ve_grille;                          // On sort de la bcle directement.
674
 
            }
675
 
          }
676
 
          else                                                 // Sinon, l'ennemi est encore en vie.
677
 
          {                                                    // Indique que le sprite est visible, on devra donc faire les tests de collision avec lui.
678
 
            ve[cmpt_nmis].visible = TRUE;
679
 
            // Incr�mente le compteur de VBLs pour l'affichage de l'animation.
680
 
            ve[cmpt_nmis].spr.nbr_vbl_act++;
681
 
            // Test si l'on � atteint le nombre de VBLs n�cessaires pour le changement d'image.
682
 
            if(ve[cmpt_nmis].spr.nbr_vbl_act >= ve[cmpt_nmis].spr.nbr_tot_vbl)
683
 
            {                                                  // On initialise le compteur de VBLs.
684
 
              ve[cmpt_nmis].spr.nbr_vbl_act = 0;
685
 
              // On passe � l'image suivante.
686
 
              ve[cmpt_nmis].spr.img_act++;
687
 
              // Test si le num�ro de l'image actuelle n'est pas sup�rieur au nombre d'images totales.
688
 
              if(ve[cmpt_nmis].spr.img_act >= ve[cmpt_nmis].spr.nbr_img)
689
 
              {                                                // On repositionne l'image actuelle sur la premi�re image de l'animation.
690
 
                ve[cmpt_nmis].spr.img_act = 0;
691
 
              }
692
 
            }
693
 
            // Affichage de l'ennemi.
694
 
            Aff_Ve(cmpt_nmis);
695
 
            // Test s'il y a des ondes de choc en activit�.
696
 
            if(nbr_onde_choc)
697
 
            {                                                  // Test si l'onde de choc est en collision avec l'ennemi actuel.
698
 
              if(Tst_Col_Onde_Choc(cmpt_nmis))
699
 
              {                                                // On fait clignoter l'ennemi actuel avant de le faire disparaitre.
700
 
                Clignote_Nmi_Avant_Disparition(cmpt_nmis);
701
 
                // On ajoute une explosion � la liste.
702
 
                if(nbr_exps < (MAX_NMI_ON_SCREEN - 1))
703
 
                  Add_Explosion(ve[cmpt_nmis].spr.coor_x,
704
 
                                ve[cmpt_nmis].spr.coor_y, 0.25,
705
 
                                ve[cmpt_nmis].type, 0);
706
 
                // On ajoute un eclat � la liste des explosions.
707
 
                Add_Eclats(ve[cmpt_nmis].spr.coor_x +
708
 
                           ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
709
 
                           x_cg - 8,
710
 
                           ve[cmpt_nmis].spr.coor_y +
711
 
                           ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
712
 
                           y_cg - 8, 1.5, 5, 0, 1);
713
 
                goto fin_dep_ve_grille;                        // Sort de la gestion des vaisseau ennemis.
714
 
              }
715
 
            }
716
 
            // Test si la pause est activ�e ou pas.
717
 
            if(!player_pause && etat_menu == MENU_OFF
718
 
               && _score::getActionExecution() == 0)
719
 
            {                                                  // D�compte le temps s�parant deux tirs.
720
 
              ve[cmpt_nmis].cad_tir--;
721
 
              // Test si l'ennemi doit ou non lancer un tir.
722
 
              if(ve[cmpt_nmis].cad_tir <= 0 && nbr_tirs < (NBR_TIRS_MAX - 1))
723
 
              {                                                // Met la cadence du tir pour le vaisseau ennemi.
724
 
                ve[cmpt_nmis].cad_tir =
725
 
                  grille.freq_tir[ve[cmpt_nmis].pos_vaiss[X]][ve[cmpt_nmis].
726
 
                                                              pos_vaiss[Y]];
727
 
                // Bcle sur tous les points de tirs existants.
728
 
                for(k = 0;
729
 
                    k <
730
 
                    ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
731
 
                    nbr_pts_tir; k++)
732
 
                {                                              // Test s'il est possible d'ajouter un nouveau tir � la liste.
733
 
                  if(nbr_tirs < (NBR_TIRS_MAX - 1))
734
 
                  {                                            // Recherche d'un nouveau tir.
735
 
                    new_tir = new_element_tir();
736
 
                    // Remplissage de la structure sprite pour le tir du vaisseau ennemi.
737
 
                    tirs[new_tir].clignote = TRUE;             // Indique que l'on est en pr�sence d'un sprite ennemi qui doit clignoter.
738
 
                    tirs[new_tir].spr.genre = ENNEMI;          // Indique que c'est un sprite ennemi.
739
 
                    tirs[new_tir].spr.trajectoire = FALSE;     // Indique que la trajectoire du sprite est calcul�e une fois pour toute.
740
 
                    tirs[new_tir].spr.nbr_img = 32;            // Indique le nombre d'images composant le sprite.
741
 
                    // Test si le type d'ennemi afin d'attribuer la puissance du tir.
742
 
                    switch (ve[cmpt_nmis].type)
743
 
                    {                                          // Cas d'un ennemi de 16x16.
744
 
                      case 0:
745
 
                        tirs[new_tir].spr.pow_of_dest = 2;     // Indique la puissance de destruction du sprite.
746
 
                        // Donne l'adresse des images du sprite.
747
 
                        for(j = 0; j < tirs[new_tir].spr.nbr_img; j++)
748
 
                        {                                      //Donne l'adresse des images du projectile.
749
 
                          tirs[new_tir].spr.img[j] = (image *) & fire[TIR1P1E][j];      // Corespond au Tir 2 puissance 1.
750
 
                        }
751
 
                        break;
752
 
                        // Cas d'un ennemi de 32x32.
753
 
                      case 1:
754
 
                        tirs[new_tir].spr.pow_of_dest = 4;     // Indique la puissance de destruction du sprite.
755
 
                        // Donne l'adresse des images du sprite.
756
 
                        for(j = 0; j < tirs[new_tir].spr.nbr_img; j++)
757
 
                        {                                      //Donne l'adresse des images du projectile.
758
 
                          tirs[new_tir].spr.img[j] = (image *) & fire[TIR1P2E][j];      // Corespond au Tir 2 puissance 2.
759
 
                        }
760
 
                        break;
761
 
                    }
762
 
                    tirs[new_tir].spr.etat_dommages = tirs[new_tir].spr.pow_of_dest;    // Indique l'�tat de domages du sprite.
763
 
                    //tirs[new_tir].spr.pilote = 0;              // Indique par qui est dirig� le sprite.
764
 
                    //tirs[new_tir].spr.mode_commande = 0;       // Indique le moyen par lequel on fait d�placer le sprite.
765
 
                    tirs[new_tir].spr.img_act = 0;             // Indique l'image actuelle.
766
 
                    tirs[new_tir].spr.nbr_tot_vbl = 1;         // Indique le nombre de VBL qu'il faut pour passer � l'image suivante.
767
 
                    tirs[new_tir].spr.nbr_vbl_act = 0;         // Indique le nombre de VBL compt�es actuellement.
768
 
                    // Donne les coordonn�es d'affichage du sprite.
769
 
                    tirs[new_tir].img_angle =
770
 
                      ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
771
 
                      angle_tir[k];
772
 
                    tirs[new_tir].img_old_angle = tirs[new_tir].img_angle;
773
 
                    tirs[new_tir].spr.coor_x =
774
 
                      ve[cmpt_nmis].spr.coor_x +
775
 
                      ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
776
 
                      xy_pos_tir[k][X] -
777
 
                      tirs[new_tir].spr.img[tirs[new_tir].img_angle]->x_cg;
778
 
                    tirs[new_tir].spr.coor_y =
779
 
                      ve[cmpt_nmis].spr.coor_y +
780
 
                      ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
781
 
                      xy_pos_tir[k][Y] -
782
 
                      tirs[new_tir].spr.img[tirs[new_tir].img_angle]->y_cg;
783
 
                    tirs[new_tir].tmp_life_tir = 400;
784
 
                    // Donne un angle vertical pour le tir.
785
 
                    tirs[new_tir].angle_tir =
786
 
                      PI_SUR_16 * tirs[new_tir].img_angle;
787
 
                    tirs[new_tir].spr.vitesse = 1.0f + (float)num_level / 20.0f;        // Donne la vitesse de d�placement du sprite.
788
 
                  }
789
 
                }
790
 
              }
791
 
            }
792
 
            // Si le joueur n'est pas Game Over.
793
 
            if(!aff_game_over)
794
 
            {                                                  // Test les collisions entre les boules et le vaisseau ennemi.
795
 
              // Boucles sur toutes les boules du joueur.
796
 
              for(k = 0; k < nbr_boules; k++)
797
 
              {                                                // Retourne l'indice dans le tableau 'bou' du ni�me �l�ment de la liste.
798
 
                cmpt_boules = liste_bou[k];
799
 
                // Test si la boule est visible et si oui, on peux tester les collisions.
800
 
                if(bou[cmpt_boules].visible)
801
 
                {                                              // Boucle sur tous les points de collision de la boule.
802
 
                  for(l = 0;
803
 
                      l <
804
 
                      bou[cmpt_boules].img[bou[cmpt_boules].img_act]->
805
 
                      nbr_pts_col; l++)
806
 
                  {                                            // Donne les coordonn�e du point de collision actuel de la boule.
807
 
                    tmp_tsts_x =
808
 
                      bou[cmpt_boules].coor_x +
809
 
                      bou[cmpt_boules].img[bou[cmpt_boules].img_act]->
810
 
                      xy_pts_col[l][X];
811
 
                    tmp_tsts_y =
812
 
                      bou[cmpt_boules].coor_y +
813
 
                      bou[cmpt_boules].img[bou[cmpt_boules].img_act]->
814
 
                      xy_pts_col[l][Y];
815
 
                    // Boucle sur toutes les zones de collisions du vaisseau ennemi.
816
 
                    for(m = 0;
817
 
                        m <
818
 
                        ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
819
 
                        nbr_zon_col; m++)
820
 
                    {                                          // Test si le point de collision de la boule se trouve � l'int�rieur de la
821
 
                      // zone de collision du vaisseau ennemi.
822
 
                      tmp_tstd_x =
823
 
                        (int)ve[cmpt_nmis].spr.coor_x +
824
 
                        ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
825
 
                        xy_zon_col[m][X];
826
 
                      tmp_tstd_y =
827
 
                        (int)ve[cmpt_nmis].spr.coor_y +
828
 
                        ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
829
 
                        xy_zon_col[m][Y];
830
 
                      // Test s'il le point de collision de la boule se trouve � l'int�rieur de la zone de collision du vaisseau ennemi.
831
 
                      if(tmp_tsts_x >= tmp_tstd_x &&
832
 
                         tmp_tsts_y >= tmp_tstd_y &&
833
 
                         tmp_tsts_x <
834
 
                         (tmp_tstd_x +
835
 
                          ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
836
 
                          lh_zon_col[m][L])
837
 
                         && tmp_tsts_y <
838
 
                         (tmp_tstd_y +
839
 
                          ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
840
 
                          lh_zon_col[m][H]))
841
 
                      {                                        // On doit d�cr�menter l'�tat des dommages du vaisseau ennemi et de la boule.
842
 
                        // Donne le nouvel �tat des dommages du vaisseau ennemi.
843
 
                        ve[cmpt_nmis].spr.etat_dommages -=
844
 
                          bou[cmpt_boules].pow_of_dest;
845
 
                        // Donne le nouvel �tat des dommages de la boule du joueur.
846
 
                        bou[cmpt_boules].etat_dommages -=
847
 
                          ve[cmpt_nmis].spr.pow_of_dest;
848
 
                        // Test si la boule est d�truite.
849
 
                        if(bou[cmpt_boules].etat_dommages <= 0)
850
 
                        {                                      // On supprime la boule de la liste.
851
 
                          Del_Element_Bou(cmpt_boules, k);     // Routine utilis�e pour supprimer une boule du tableau 'bou'.
852
 
                          // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
853
 
                          k--;
854
 
                          // Positionnement des boules autour du vaisseau appartenant au joueur.
855
 
                          if(nbr_boules)
856
 
                          {
857
 
                            bou[liste_bou[0]].pos_pts_cercle = 0;       // Indique la position du pointeur sur le tableau des points du cercle.
858
 
                            switch (nbr_boules)
859
 
                            {
860
 
                              case 2:
861
 
                                bou[liste_bou[1]].pos_pts_cercle = 40;  // Indique la position du pointeur sur le tableau des points du cercle.
862
 
                                break;
863
 
                              case 3:
864
 
                                bou[liste_bou[1]].pos_pts_cercle = 26;  // Indique la position du pointeur sur le tableau des points du cercle.
865
 
                                bou[liste_bou[2]].pos_pts_cercle = 53;  // Indique la position du pointeur sur le tableau des points du cercle.
866
 
                                break;
867
 
                              case 4:
868
 
                                bou[liste_bou[1]].pos_pts_cercle = 20;  // Indique la position du pointeur sur le tableau des points du cercle.
869
 
                                bou[liste_bou[2]].pos_pts_cercle = 40;  // Indique la position du pointeur sur le tableau des points du cercle.
870
 
                                bou[liste_bou[3]].pos_pts_cercle = 60;  // Indique la position du pointeur sur le tableau des points du cercle.
871
 
                                break;
872
 
                              case 5:
873
 
                                bou[liste_bou[1]].pos_pts_cercle = 16;  // Indique la position du pointeur sur le tableau des points du cercle.
874
 
                                bou[liste_bou[2]].pos_pts_cercle = 32;  // Indique la position du pointeur sur le tableau des points du cercle.
875
 
                                bou[liste_bou[3]].pos_pts_cercle = 48;  // Indique la position du pointeur sur le tableau des points du cercle.
876
 
                                bou[liste_bou[4]].pos_pts_cercle = 64;  // Indique la position du pointeur sur le tableau des points du cercle.
877
 
                                break;
878
 
                            }
879
 
                          }
880
 
                          // La boule est en d�truite, on peux passer � la boule suivante.
881
 
                          goto fin_test_col_bou_nmi_grille;
882
 
                        }
883
 
                        else
884
 
                        {                                      // Si la boule n'est pas d�truite, on indique qu'il faudra l'afficher la prochaine fois en blanc.
885
 
                          bou[cmpt_boules].affich_white = TRUE;
886
 
                        }
887
 
                        // On test si le vaisseau ennemi est d�truit.
888
 
                        if(ve[cmpt_nmis].spr.etat_dommages <= 0)
889
 
                        {                                      // Test si le vaisseau ennemi �tait une m�t�orite.
890
 
                          if(ve[cmpt_nmis].type >= BIGMETEOR
891
 
                             && ve[cmpt_nmis].type <= SMALLMETEOR)
892
 
                          {                                    // Appel de la routine utilis�e pour g�n�rer soit un bonus soit un malus.
893
 
                            //Gene_Bonus_Malus_Meteor(ve[cmpt_nmis].spr.coor_x, ve[cmpt_nmis].spr.coor_y);
894
 
                            Gene_Bonus_Malus_Meteor(&ve[cmpt_nmis]);
895
 
                            // On ajoute un eclat � la liste des explosions.
896
 
                            Add_Eclats(ve[cmpt_nmis].spr.coor_x +
897
 
                                       ve[cmpt_nmis].spr.img[ve[cmpt_nmis].
898
 
                                                             spr.img_act]->
899
 
                                       x_cg - 8,
900
 
                                       ve[cmpt_nmis].spr.coor_y +
901
 
                                       ve[cmpt_nmis].spr.img[ve[cmpt_nmis].
902
 
                                                             spr.img_act]->
903
 
                                       y_cg - 8, 1.0, 2, 0, 2);
904
 
                          }
905
 
                          else                                 // Sinon, on appel la routine normale de g�n�ration de bonus, malus.
906
 
                          {                                    // Appel de la routine utilis�e pour g�n�rer soit un bonus soit un malus.
907
 
                            //Gene_Bonus_Malus(ve[cmpt_nmis].spr.coor_x, ve[cmpt_nmis].spr.coor_y);
908
 
                            Gene_Bonus_Malus(&ve[cmpt_nmis]);
909
 
                          }
910
 
                          // On ajoute une explosion � la liste.
911
 
                          if(nbr_exps < (MAX_NMI_ON_SCREEN - 1))
912
 
                            Add_Explosion(ve[cmpt_nmis].spr.coor_x,
913
 
                                          ve[cmpt_nmis].spr.coor_y, 0.25,
914
 
                                          ve[cmpt_nmis].type, 0);
915
 
                          // On ajoute un eclat � la liste des explosions.
916
 
                          Add_Eclats(ve[cmpt_nmis].spr.coor_x +
917
 
                                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
918
 
                                                           img_act]->x_cg - 8,
919
 
                                     ve[cmpt_nmis].spr.coor_y +
920
 
                                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
921
 
                                                           img_act]->y_cg - 8,
922
 
                                     1.0, 3, 0, 1);
923
 
                          // Mise � jour du score du joueur pour la destruction d'un ennemi
924
 
                          player_score +=
925
 
                            ve[cmpt_nmis].spr.pow_of_dest << 2 << bonusx;
926
 
                          // Indique que le vaisseau ennemi doit clignoter avant de disparaitre.
927
 
                          Clignote_Nmi_Avant_Disparition(cmpt_nmis);
928
 
                          goto fin_dep_ve_grille;
929
 
                        }
930
 
                        else
931
 
                        {                                      // Si le vaisseau n'est pas d�truit, on indique qu'il faudra l'afficher la prochaine fois en blanc.
932
 
                          ve[cmpt_nmis].affich_white = TRUE;
933
 
                        }
934
 
                        // On ajoute une mini explosion � la liste car une boule � eu une collision.
935
 
                        if(nbr_exps < (MAX_NMI_ON_SCREEN - 1))
936
 
                          Add_Explosion((float)tmp_tsts_x, (float)tmp_tsts_y,
937
 
                                        0.3f, MINI_EXPLOSION, 0);
938
 
                        // La boule est en collision avec l'ennemi, on peux passer � la boule suivante.
939
 
                        goto fin_test_col_bou_nmi_grille;
940
 
                      }
941
 
                    }
942
 
                  }
943
 
                }
944
 
              fin_test_col_bou_nmi_grille:;
945
 
              }
946
 
              // Test les collisions entre les canons et le vaisseau ennemi.
947
 
              // Bcles sur toutes les canons du joueur.
948
 
              for(k = 0; k < nbr_canons; k++)
949
 
              {                                                // Retourne l'indice dans le tableau 'can' du ni�me �l�ment de la liste.
950
 
                cmpt_canons = liste_can[k];
951
 
                // Test si le canon est visible et si oui, on peux tester les collisions.
952
 
                if(can[cmpt_canons].visible)
953
 
                {                                              // Bcle sur tous les points de collision du canon.
954
 
                  for(l = 0;
955
 
                      l <
956
 
                      can[cmpt_canons].img[can[cmpt_canons].img_act]->
957
 
                      nbr_pts_col; l++)
958
 
                  {                                            // Donne les coordonn�e du point de collision actuel du canon.
959
 
                    tmp_tsts_x =
960
 
                      can[cmpt_canons].coor_x +
961
 
                      can[cmpt_canons].img[can[cmpt_canons].img_act]->
962
 
                      xy_pts_col[l][X];
963
 
                    tmp_tsts_y =
964
 
                      can[cmpt_canons].coor_y +
965
 
                      can[cmpt_canons].img[can[cmpt_canons].img_act]->
966
 
                      xy_pts_col[l][Y];
967
 
                    // Bcle sur toutes les zones de collisions du vaisseau ennemi.
968
 
                    for(m = 0;
969
 
                        m <
970
 
                        ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
971
 
                        nbr_zon_col; m++)
972
 
                    {                                          // Donne les coordon�es du coin sup�rieur gauche de la
973
 
                      // zone de collision du vaisseau ennemi.
974
 
                      tmp_tstd_x =
975
 
                        (int)ve[cmpt_nmis].spr.coor_x +
976
 
                        ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
977
 
                        xy_zon_col[m][X];
978
 
                      tmp_tstd_y =
979
 
                        (int)ve[cmpt_nmis].spr.coor_y +
980
 
                        ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
981
 
                        xy_zon_col[m][Y];
982
 
                      // Test s'il le point de collision du canon se trouve � l'int�rieur de la zone de collision du vaisseau ennemi.
983
 
                      if(tmp_tsts_x >= tmp_tstd_x &&
984
 
                         tmp_tsts_y >= tmp_tstd_y &&
985
 
                         tmp_tsts_x <
986
 
                         (tmp_tstd_x +
987
 
                          ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
988
 
                          lh_zon_col[m][L])
989
 
                         && tmp_tsts_y <
990
 
                         (tmp_tstd_y +
991
 
                          ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
992
 
                          lh_zon_col[m][H]))
993
 
                      {                                        // On doit d�cr�menter l'�tat des dommages du vaisseau ennemi et du canon.
994
 
                        // Donne le nouvel �tat des dommages du vaisseau ennemi.
995
 
                        ve[cmpt_nmis].spr.etat_dommages -=
996
 
                          can[cmpt_canons].pow_of_dest;
997
 
                        // Donne le nouvel �tat des dommages du canon du joueur.
998
 
                        can[cmpt_canons].etat_dommages -=
999
 
                          ve[cmpt_nmis].spr.pow_of_dest;
1000
 
                        // Test si le canon est d�truite.
1001
 
                        if(can[cmpt_canons].etat_dommages <= 0)
1002
 
                        {                                      // On supprime le canon de la liste.
1003
 
                          Del_Element_Can(cmpt_canons, k);     // Routine utilis�e pour supprimer un canon du tableau 'can'.
1004
 
                          // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
1005
 
                          k--;
1006
 
                          // Le canon est en d�truit, on peux passer au canon suivant.
1007
 
                          goto fin_test_col_can_nmi_grille;
1008
 
                        }
1009
 
                        else
1010
 
                        {                                      // Si le canon n'est pas d�truit, on indique qu'il faudra l'afficher la prochaine fois en blanc.
1011
 
                          can[cmpt_canons].affich_white = TRUE;
1012
 
                        }
1013
 
                        // On test si le vaisseau ennemi est d�truit.
1014
 
                        if(ve[cmpt_nmis].spr.etat_dommages <= 0)
1015
 
                        {                                      // Test si le vaisseau ennemi �tait une m�t�orite.
1016
 
                          if(ve[cmpt_nmis].type >= BIGMETEOR
1017
 
                             && ve[cmpt_nmis].type <= SMALLMETEOR)
1018
 
                          {                                    // Appel de la routine utilis�e pour g�n�rer soit un bonus soit un malus.
1019
 
                            //Gene_Bonus_Malus_Meteor(ve[cmpt_nmis].spr.coor_x, ve[cmpt_nmis].spr.coor_y);
1020
 
                            Gene_Bonus_Malus_Meteor(&ve[cmpt_nmis]);
1021
 
                            //printf("725\n") ;
1022
 
                            // On ajoute un eclat � la liste des explosions.
1023
 
                            Add_Eclats(ve[cmpt_nmis].spr.coor_x +
1024
 
                                       ve[cmpt_nmis].spr.img[ve[cmpt_nmis].
1025
 
                                                             spr.img_act]->
1026
 
                                       x_cg - 8,
1027
 
                                       ve[cmpt_nmis].spr.coor_y +
1028
 
                                       ve[cmpt_nmis].spr.img[ve[cmpt_nmis].
1029
 
                                                             spr.img_act]->
1030
 
                                       y_cg - 8, 1.0, 2, 0, 2);
1031
 
                          }
1032
 
                          else                                 // Sinon, on appel la routine normale de g�n�ration de bonus, malus.
1033
 
                          {                                    // Appel de la routine utilis�e pour g�n�rer soit un bonus soit un malus.
1034
 
                            //Gene_Bonus_Malus(ve[cmpt_nmis].spr.coor_x, ve[cmpt_nmis].spr.coor_y);
1035
 
                            Gene_Bonus_Malus(&ve[cmpt_nmis]);
1036
 
                            //printf("732\n") ;
1037
 
                          }
1038
 
                          // On ajoute une explosion � la liste.
1039
 
                          if(nbr_exps < (MAX_NMI_ON_SCREEN - 1))
1040
 
                            Add_Explosion(ve[cmpt_nmis].spr.coor_x,
1041
 
                                          ve[cmpt_nmis].spr.coor_y, 0.25,
1042
 
                                          ve[cmpt_nmis].type, 0);
1043
 
                          // On ajoute un eclat � la liste des explosions.
1044
 
                          Add_Eclats(ve[cmpt_nmis].spr.coor_x +
1045
 
                                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
1046
 
                                                           img_act]->x_cg - 8,
1047
 
                                     ve[cmpt_nmis].spr.coor_y +
1048
 
                                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
1049
 
                                                           img_act]->y_cg - 8,
1050
 
                                     1.0, 3, 0, 1);
1051
 
                          // Mise � jour du score du joueur pour la destruction d'un ennemi
1052
 
                          player_score +=
1053
 
                            ve[cmpt_nmis].spr.pow_of_dest << 2 << bonusx;
1054
 
                          // Indique que le vaisseau ennemi doit clignoter avant de disparaitre.
1055
 
                          Clignote_Nmi_Avant_Disparition(cmpt_nmis);
1056
 
                          goto fin_dep_ve_grille;
1057
 
                        }
1058
 
                        else
1059
 
                        {                                      // Si le vaisseau n'est pas d�truit, on indique qu'il faudra l'afficher la prochaine fois en blanc.
1060
 
                          ve[cmpt_nmis].affich_white = TRUE;
1061
 
                        }
1062
 
                        // On ajoute une mini explosion � la liste car un canon � eu une collision.
1063
 
                        if(nbr_exps < (MAX_NMI_ON_SCREEN - 1))
1064
 
                          Add_Explosion((float)tmp_tsts_x, (float)tmp_tsts_y,
1065
 
                                        0.3f, MINI_EXPLOSION, 0);
1066
 
                        // Le canon est en collision avec l'ennemi, on peux passer au canon suivant.
1067
 
                        goto fin_test_col_can_nmi_grille;
1068
 
                      }
1069
 
                    }
1070
 
                  }
1071
 
                }
1072
 
              fin_test_col_can_nmi_grille:;
1073
 
              }
1074
 
 
1075
 
              // Test si l'ennemi est en collision avec le joueur.
1076
 
              // Bcle sur tous les points de collisions du vaisseau du joueur.
1077
 
              for(k = 0; k < vj[J1].spr.img[vj[J1].spr.img_act]->nbr_pts_col;
1078
 
                  k++)
1079
 
              {                                                // Donne les coordon�es du point de collision du vaisseau appartenant au joueur.
1080
 
                tmp_tsts_x =
1081
 
                  (int)vj[J1].spr.coor_x +
1082
 
                  vj[J1].spr.img[vj[J1].spr.img_act]->xy_pts_col[k][X];
1083
 
                tmp_tsts_y =
1084
 
                  (int)vj[J1].spr.coor_y +
1085
 
                  vj[J1].spr.img[vj[J1].spr.img_act]->xy_pts_col[k][Y];
1086
 
                // Bcle sur toutes les zones de collisions du vaisseau ennemi.
1087
 
                for(l = 0;
1088
 
                    l <
1089
 
                    ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
1090
 
                    nbr_zon_col; l++)
1091
 
                {                                              // Donne les coordon�es de la zone de collision du vaisseau ennemi.
1092
 
                  tmp_tstd_x =
1093
 
                    (int)ve[cmpt_nmis].spr.coor_x +
1094
 
                    ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
1095
 
                    xy_zon_col[l][X];
1096
 
                  tmp_tstd_y =
1097
 
                    (int)ve[cmpt_nmis].spr.coor_y +
1098
 
                    ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
1099
 
                    xy_zon_col[l][Y];
1100
 
                  // Test si le point de collision du vaisseau du joueur se trouve � l'int�rieur de la
1101
 
                  // zone de collision du vaisseau ennemi.
1102
 
                  if(tmp_tsts_x >= tmp_tstd_x &&
1103
 
                     tmp_tsts_y >= tmp_tstd_y &&
1104
 
                     tmp_tsts_x <
1105
 
                     tmp_tstd_x +
1106
 
                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
1107
 
                     lh_zon_col[l][L]
1108
 
                     && tmp_tsts_y <
1109
 
                     tmp_tstd_y +
1110
 
                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
1111
 
                     lh_zon_col[l][H])
1112
 
                  {                                            // On doit d�cr�menter l'�tat des dommages des deux vaisseaux.
1113
 
                    // Donne le nouvel �tat des dommages du vaisseau ennemi.
1114
 
                    ve[cmpt_nmis].spr.etat_dommages -=
1115
 
                      (vj[J1].spr.pow_of_dest << 1);
1116
 
                    // Test si le vaisseau du joueur est invincible dans le but de d�cendre son �nergie.
1117
 
                    if(!vj[J1].invincible)
1118
 
                    {                                          // Test si l'�nergie du joueur �tait au maximum.
1119
 
                      if(vj[J1].spr.etat_dommages == vj[J1].spr.pow_of_dest)
1120
 
                      {                                        // Indique que l'animation d'ouverture de l'option d'energie doit s'effectuer.
1121
 
                        Init_Anim_Option(1, FALSE);
1122
 
                      }
1123
 
                      // Donne le nouvel �tat des dommages du vaisseau du joueur.
1124
 
                      vj[J1].spr.etat_dommages -=
1125
 
                        ve[cmpt_nmis].spr.pow_of_dest;
1126
 
                    }
1127
 
                    // Demande un r�affichage de la barre d'�nergie du joueur.
1128
 
                    bar_nrj_player = TRUE;
1129
 
                    // Test si le vaisseau du joueur est d�truit.
1130
 
                    if(vj[J1].spr.etat_dommages <= 0)
1131
 
                    {                                          // Indique que le joueur est Game Over.
1132
 
                      game_over_player_one = TRUE;
1133
 
                    }
1134
 
                    else
1135
 
                    {                                          // Si le vaisseau n'est pas d�truit, on indique qu'il faudra l'afficher la prochaine fois en blanc.
1136
 
                      vj[J1].affich_white = TRUE;
1137
 
                    }
1138
 
                    // On ajoute la vitesse de d�placement du vaisseau ennemi � celle du vaisseau ami.
1139
 
                    // Test le sens de d�placement de la grille.
1140
 
                    if(grille.sens_dep == GAUCHE)
1141
 
                    {                                          // Nouvelle vitesse du joueur apr�s la collision avec un des vaisseaux de la grille.
1142
 
                      vj[J1].vitesse_x -= grille.vit_dep_x;
1143
 
                      vj[J1].vitesse_y += grille.vit_dep_y;
1144
 
                    }
1145
 
                    else                                       // Sinon, la grille se d�place vers la droite.
1146
 
                    {                                          // Nouvelle vitesse du joueur apr�s la collision avec un des vaisseaux de la grille.
1147
 
                      vj[J1].vitesse_x += grille.vit_dep_x;
1148
 
                      vj[J1].vitesse_y += grille.vit_dep_y;
1149
 
                    }
1150
 
                    // On test si le vaisseau ennemi est d�truit du fait d'une collision avec le joueur.
1151
 
                    if(ve[cmpt_nmis].spr.etat_dommages <= 0)
1152
 
                    {                                          // On ajoute une explosion � la liste.
1153
 
                      if(nbr_exps < (MAX_NMI_ON_SCREEN - 1))
1154
 
                        Add_Explosion(ve[cmpt_nmis].spr.coor_x,
1155
 
                                      ve[cmpt_nmis].spr.coor_y, 0.25,
1156
 
                                      ve[cmpt_nmis].type, 0);
1157
 
                      // On ajoute un eclat � la liste des explosions.
1158
 
                      Add_Eclats(ve[cmpt_nmis].spr.coor_x +
1159
 
                                 ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
1160
 
                                                       img_act]->x_cg - 8,
1161
 
                                 ve[cmpt_nmis].spr.coor_y +
1162
 
                                 ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
1163
 
                                                       img_act]->y_cg - 8,
1164
 
                                 1.0, 3, 0, 1);
1165
 
                      // Mise � jour du score du joueur pour la destruction d'un ennemi
1166
 
                      player_score +=
1167
 
                        ve[cmpt_nmis].spr.pow_of_dest << 2 << bonusx;
1168
 
                      // Indique que le vaisseau ennemi doit clignoter avant de disparaitre.
1169
 
                      Clignote_Nmi_Avant_Disparition(cmpt_nmis);
1170
 
                      goto fin_dep_ve_grille;
1171
 
                    }
1172
 
                    else
1173
 
                    {                                          // Si le vaisseau n'est pas d�truit, on indique qu'il faudra l'afficher la prochaine fois en blanc.
1174
 
                      ve[cmpt_nmis].affich_white = TRUE;
1175
 
                    }
1176
 
                    // Le vaisseau du joueur est entr� en collision avec le vaisseau ennemi, on peux sortir du test.
1177
 
                    goto fin_tst_col_vnmi_dep_ve_grille;
1178
 
                  }
1179
 
                }
1180
 
              }                                                // Fin du test pour savoir si le joueur est en collision avec un vaisseau ennemi.
1181
 
            fin_tst_col_vnmi_dep_ve_grille:;
1182
 
            }                                                  // Fin du test si le joueur est Game Over.
1183
 
          }                                                    // Fin du test pour savoir si l'ennemi est mort et si on est en train de le faire clignoter.
1184
 
        }                                                      // Fin du test si on doit afficher le vaisseau ennemi ou non.
1185
 
      fin_dep_ve_grille:;
1186
 
      }
1187
 
        break;
1188
 
 
1189
 
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1190
 
        // deplacement=2 : ennemis speciaux
1191
 
        // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
1192
 
        // Cas des ennemis sp�ciaux qui traversent l'�cran de part en part.
1193
 
      case SPECIAUX:
1194
 
      {                                                        // Test le type de vaisseau sp�ciaux.
1195
 
        switch (ve[cmpt_nmis].type)
1196
 
        {                                                      // Vaisseaux se d�placant comme un missile.
1197
 
          case SOUKEE:
1198
 
          {                                                    // Test si la pause est activ�e ou pas.
1199
 
            if(!player_pause && etat_menu == MENU_OFF
1200
 
               && _score::getActionExecution() == 0)
1201
 
            {                                                  // Calcul du nouvel angle en fonction de l'ancien.
1202
 
              ve[cmpt_nmis].angle_tir =
1203
 
                Calcul_New_Angle(ve[cmpt_nmis].angle_tir,
1204
 
                                 Calc_Angle_Tir((short)
1205
 
                                                (ve[cmpt_nmis].spr.coor_x +
1206
 
                                                 ve[cmpt_nmis].spr.
1207
 
                                                 img[ve[cmpt_nmis].spr.
1208
 
                                                     img_act]->x_cg),
1209
 
                                                (short)(ve[cmpt_nmis].spr.
1210
 
                                                        coor_y +
1211
 
                                                        ve[cmpt_nmis].spr.
1212
 
                                                        img[ve[cmpt_nmis].spr.
1213
 
                                                            img_act]->y_cg),
1214
 
                                                (short)(vj[J1].spr.coor_x +
1215
 
                                                        vj[J1].spr.img[vj[J1].
1216
 
                                                                       spr.
1217
 
                                                                       img_act]->
1218
 
                                                        x_cg),
1219
 
                                                (short)(vj[J1].spr.coor_y +
1220
 
                                                        vj[J1].spr.img[vj[J1].
1221
 
                                                                       spr.
1222
 
                                                                       img_act]->
1223
 
                                                        y_cg)),
1224
 
                                 ve[cmpt_nmis].agilite);
1225
 
 
1226
 
              // On donne les nouvelles coordon�es du vaisseau ennemi.
1227
 
              ve[cmpt_nmis].spr.coor_x =
1228
 
                Deplacement_Tir_X(ve[cmpt_nmis].angle_tir,
1229
 
                                  ve[cmpt_nmis].spr.vitesse,
1230
 
                                  ve[cmpt_nmis].spr.coor_x -
1231
 
                                  ve[cmpt_nmis].spr.img[ve[cmpt_nmis].
1232
 
                                                        img_old_angle]->x_cg);
1233
 
              ve[cmpt_nmis].spr.coor_y =
1234
 
                Deplacement_Tir_Y(ve[cmpt_nmis].angle_tir,
1235
 
                                  ve[cmpt_nmis].spr.vitesse,
1236
 
                                  ve[cmpt_nmis].spr.coor_y -
1237
 
                                  ve[cmpt_nmis].spr.img[ve[cmpt_nmis].
1238
 
                                                        img_old_angle]->y_cg);
1239
 
 
1240
 
              // Recherche de l'image � afficher en fonction de l'angle.
1241
 
              if(sign(ve[cmpt_nmis].angle_tir) < 0)
1242
 
                ve[cmpt_nmis].img_angle =
1243
 
                  (short)((ve[cmpt_nmis].angle_tir + DEUX_PI) / PI_SUR_16);
1244
 
              else
1245
 
                ve[cmpt_nmis].img_angle =
1246
 
                  (short)(ve[cmpt_nmis].angle_tir / PI_SUR_16);
1247
 
              // Sauvegarde l'angle pour le calcul du prochain angle.
1248
 
              ve[cmpt_nmis].img_old_angle = ve[cmpt_nmis].img_angle;
1249
 
              // Pour �viter un indice de tableau n�gatif.
1250
 
              ve[cmpt_nmis].img_angle = (short)abs(ve[cmpt_nmis].img_angle);
1251
 
              // Pour �viter un angle de tir sup�rieur au nombre d'images du sprite.
1252
 
              if(ve[cmpt_nmis].img_angle >= ve[cmpt_nmis].spr.nbr_img)
1253
 
                ve[cmpt_nmis].img_angle =
1254
 
                  (short)(ve[cmpt_nmis].spr.nbr_img - 1);
1255
 
 
1256
 
              // Donne la nouvelle coordon�e X du tir.
1257
 
              ve[cmpt_nmis].spr.coor_x +=
1258
 
                ve[cmpt_nmis].spr.img[ve[cmpt_nmis].img_old_angle]->x_cg;
1259
 
              // Donne la nouvelle coordon�e Y du tir.
1260
 
              ve[cmpt_nmis].spr.coor_y +=
1261
 
                ve[cmpt_nmis].spr.img[ve[cmpt_nmis].img_old_angle]->y_cg;
1262
 
              //Donne la valeur de l'image a afficher.
1263
 
              ve[cmpt_nmis].spr.img_act = ve[cmpt_nmis].img_angle;
1264
 
 
1265
 
            }
1266
 
 
1267
 
            // Test si on doit ou non afficher le sprite.
1268
 
            if(((short)ve[cmpt_nmis].spr.coor_y +
1269
 
                ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->haut) <
1270
 
               DEBUT_ECRAN_Y
1271
 
               || ((short)ve[cmpt_nmis].spr.coor_x +
1272
 
                   ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->larg) <
1273
 
               DEBUT_ECRAN_X
1274
 
               || (short)ve[cmpt_nmis].spr.coor_y >=
1275
 
               DEBUT_ECRAN_Y + HAUT_ECR_RAM
1276
 
               || (short)ve[cmpt_nmis].spr.coor_x >=
1277
 
               DEBUT_ECRAN_X + LARG_ECR_RAM)
1278
 
            {                                                  // Indique que le sprite n'est pas visible, on n'a donc pas besoin de faire de tests de collision avec lui.
1279
 
              ve[cmpt_nmis].visible = FALSE;
1280
 
              // Test si l'ennemi se trouve en dehors des coordon�es de l'�cran.
1281
 
              if((short)ve[cmpt_nmis].spr.coor_x < (BANDE_DE_CLIP - 64) ||
1282
 
                 (short)ve[cmpt_nmis].spr.coor_y < (BANDE_DE_CLIP - 64) ||
1283
 
                 (short)ve[cmpt_nmis].spr.coor_y >
1284
 
                 (BANDE_DE_CLIP + HAUT_ECR_RAM + 64)
1285
 
                 || (short)ve[cmpt_nmis].spr.coor_x >
1286
 
                 (BANDE_DE_CLIP + LARG_ECR_RAM + 64))
1287
 
              {                                                // On enl�ve le vaisseau ennemi de la liste des vaisseaux ennemis.
1288
 
                Del_Element_Ve(cmpt_nmis, i);                  // Routine utilis�e pour supprimer un vaisseau ennemi du tableau des 've'.
1289
 
                // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
1290
 
                i--;
1291
 
                // Le vaisseau est d�truit, on peux sortir de la bcle.
1292
 
                goto fin_dep_ve_speciaux;
1293
 
              }
1294
 
            }
1295
 
            else                                               // Sinon, on doit l'afficher.
1296
 
            {                                                  // Indique que le sprite est visible, on devra donc faire les tests de collision avec lui.
1297
 
              ve[cmpt_nmis].visible = TRUE;
1298
 
            }
1299
 
          }
1300
 
            break;
1301
 
 
1302
 
 
1303
 
            // Vaisseaux se d�placant du haut de l'�cran vers le bas et qui remontent.
1304
 
          case VIONIEES:
1305
 
          case ANGOUFF:
1306
 
          case CLOWNIES:
1307
 
          case EFFIES:
1308
 
          case SAPOUCH:
1309
 
          {                                                    // Test si la pause est activ�e ou pas.
1310
 
            if(!player_pause && etat_menu == MENU_OFF
1311
 
               && _score::getActionExecution() == 0)
1312
 
            {                                                  // Test si le vaisseau ennemi est dans sa phase de retournement.
1313
 
              if(ve[cmpt_nmis].retournement)
1314
 
              {                                                // Incr�mente le compteur de VBLs pour l'affichage de l'animation.
1315
 
                ve[cmpt_nmis].spr.nbr_vbl_act++;
1316
 
                // Test si l'on � atteint le nombre de VBLs n�cessaires pour le changement d'image.
1317
 
                if(ve[cmpt_nmis].spr.nbr_vbl_act >=
1318
 
                   ve[cmpt_nmis].spr.nbr_tot_vbl)
1319
 
                {                                              // On initialise le compteur de VBLs.
1320
 
                  ve[cmpt_nmis].spr.nbr_vbl_act = 0;
1321
 
                  // On passe � l'image suivante.
1322
 
                  ve[cmpt_nmis].spr.img_act++;
1323
 
                  // Test si le num�ro de l'image actuelle n'est pas sup�rieur au nombre d'images totales.
1324
 
                  if(ve[cmpt_nmis].spr.img_act >=
1325
 
                     (ve[cmpt_nmis].spr.nbr_img - 1))
1326
 
                  {                                            // On clip l'image de l'animation � afficher.
1327
 
                    ve[cmpt_nmis].spr.img_act =
1328
 
                      (short)(ve[cmpt_nmis].spr.nbr_img - 1);
1329
 
                    // On indique que la phase de retournement du vaiseau ennemi est termin�e.
1330
 
                    ve[cmpt_nmis].retournement = FALSE;
1331
 
                    // On indique que le vaisseau ennemi vient de changer de direction.
1332
 
                    ve[cmpt_nmis].change_dir = TRUE;
1333
 
                  }
1334
 
                }
1335
 
              }
1336
 
              else                                             // Sinon, le vaisseau ennemi n'est pas dans sa phase de retournement.
1337
 
              {                                                // Test si le vaisseau ennemi n'a pas encore chang� de direction.
1338
 
                if(!ve[cmpt_nmis].change_dir)
1339
 
                {                                              // Test si la vitesse de d�placement est � z�ro.
1340
 
                  if(ve[cmpt_nmis].spr.vitesse >= -0.1
1341
 
                     && ve[cmpt_nmis].spr.vitesse <= 0.1)
1342
 
                  {                                            // On indique qu'il faut effectuer le retournement du vaisseau ennemi.
1343
 
                    ve[cmpt_nmis].retournement = TRUE;
1344
 
                  }
1345
 
                }
1346
 
              }
1347
 
              // On d�cr�mente la vitesse de d�placement du vaisseau.
1348
 
              ve[cmpt_nmis].spr.vitesse -= 0.02f;
1349
 
              // On donne les nouvelles coordon�es du vaisseau ennemi.
1350
 
              ve[cmpt_nmis].spr.coor_y += ve[cmpt_nmis].spr.vitesse;
1351
 
            }
1352
 
            // Test si on doit ou non afficher le sprite.
1353
 
            if(((short)ve[cmpt_nmis].spr.coor_y +
1354
 
                ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->haut) <
1355
 
               DEBUT_ECRAN_Y
1356
 
               || (short)ve[cmpt_nmis].spr.coor_y >=
1357
 
               DEBUT_ECRAN_Y + HAUT_ECR_RAM)
1358
 
            {                                                  // Indique que le sprite n'est pas visible, on n'a donc pas besoin de faire de tests de collision avec lui.
1359
 
              ve[cmpt_nmis].visible = FALSE;
1360
 
              // Test si l'ennemi se trouve en dehors des coordon�es de l'�cran.
1361
 
              if((short)ve[cmpt_nmis].spr.coor_y < DEBUT_ECRAN_Y
1362
 
                 && ve[cmpt_nmis].change_dir)
1363
 
              {                                                // On enl�ve le vaisseau ennemi de la liste des vaisseaux ennemis.
1364
 
                Del_Element_Ve(cmpt_nmis, i);                  // Routine utilis�e pour supprimer un vaisseau ennemi du tableau des 've'.
1365
 
                // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
1366
 
                i--;
1367
 
                // Le vaisseau est d�truit, on peux sortir de la bcle.
1368
 
                goto fin_dep_ve_speciaux;
1369
 
              }
1370
 
            }
1371
 
            else                                               // Sinon, on doit l'afficher.
1372
 
            {                                                  // Indique que le sprite est visible, on devra donc faire les tests de collision avec lui.
1373
 
              ve[cmpt_nmis].visible = TRUE;
1374
 
            }
1375
 
          }
1376
 
            break;
1377
 
 
1378
 
          case ETB_SHURIKY:                                   //(ETB) Ennemi geree au gardien 12 (gardien12.cpp)
1379
 
            // le gardien est mort ???
1380
 
            if(ve[iNumeroGardien].type != KAMEAMEA
1381
 
               || ve[iNumeroGardien].prev_object == MAX_NMI_ON_SCREEN)
1382
 
            {
1383
 
              ve[cmpt_nmis].type = SHURIKY;
1384
 
            }
1385
 
            break;
1386
 
          case SAAKEY:                                        // (ETB) ennemi geree au gardien 14 (gardien14.cpp)
1387
 
            //le gardien est mort ???
1388
 
            if(ve[iNumeroGardien].type != GHOTTEN
1389
 
               || ve[iNumeroGardien].prev_object == MAX_NMI_ON_SCREEN)
1390
 
            {
1391
 
              if(ve[cmpt_nmis].spr.img_act >= 31)
1392
 
              {
1393
 
                for(int _iImage = 0; _iImage < ve[cmpt_nmis].spr.nbr_img;
1394
 
                    _iImage++)
1395
 
                  ve[cmpt_nmis].spr.img[_iImage] =
1396
 
                    (image *) & enemi[SAAKAMIN][_iImage];
1397
 
                ve[cmpt_nmis].spr.img_act = 0;
1398
 
                ve[cmpt_nmis].spr.nbr_tot_vbl = 3;
1399
 
                ve[cmpt_nmis].type = SAAKAMIN;
1400
 
              }
1401
 
            }
1402
 
            break;
1403
 
          case SAAKAMIN:                                      // (ETB) ennemi geree au gardien 14 (gardien14.cpp)
1404
 
            //le gardien est mort ???
1405
 
            if(ve[iNumeroGardien].type != GHOTTEN
1406
 
               || ve[iNumeroGardien].prev_object == MAX_NMI_ON_SCREEN)
1407
 
            {
1408
 
              ve[cmpt_nmis].type = SHURIKY;
1409
 
            }
1410
 
            break;
1411
 
 
1412
 
            // Vaisseaux se d�placant du haut de l'�cran vers le bas.
1413
 
          case MILLOUZ:
1414
 
          case TOUBOUG:
1415
 
          case BELCHOUTIES:
1416
 
          case DEMONIANS:
1417
 
          case FIDGETINIANS:
1418
 
          case DIMITINIANS:
1419
 
          case ENSLAVEERS:
1420
 
          case DIVERTIZERS:
1421
 
          case HORRIBIANS:
1422
 
          case DEVILIANS:
1423
 
          case ROUGHLEERS:
1424
 
          case ABASCUSIANS:
1425
 
          case PERTURBIANS:
1426
 
          case EARTHINIANS:
1427
 
          case DISGOOSTEES:
1428
 
          case BIRIANSTEES:
1429
 
          case TODHAIRIES:
1430
 
          case DEFECTINIANS:
1431
 
          case SOONIEES:
1432
 
          case GAFFIES:
1433
 
          case SHURIKY:
1434
 
          case GOZUKY:
1435
 
          case QUIBOULY:
1436
 
          {                                                    // Test si la pause est activ�e ou pas.
1437
 
            if(!player_pause && etat_menu == MENU_OFF
1438
 
               && _score::getActionExecution() == 0)
1439
 
            {                                                  // On donne les nouvelles coordon�es du vaisseau ennemi.
1440
 
              ve[cmpt_nmis].spr.coor_y += ve[cmpt_nmis].spr.vitesse;
1441
 
            }
1442
 
            // Test si on doit ou non afficher le sprite.
1443
 
            if(((short)ve[cmpt_nmis].spr.coor_y +
1444
 
                ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->haut) <
1445
 
               DEBUT_ECRAN_Y
1446
 
               || (short)ve[cmpt_nmis].spr.coor_y >=
1447
 
               DEBUT_ECRAN_Y + HAUT_ECR_RAM)
1448
 
            {                                                  // Indique que le sprite n'est pas visible, on n'a donc pas besoin de faire de tests de collision avec lui.
1449
 
              ve[cmpt_nmis].visible = FALSE;
1450
 
              // Test si l'ennemi se trouve en dehors des coordon�es de l'�cran.
1451
 
              if((short)ve[cmpt_nmis].spr.coor_y >=
1452
 
                 DEBUT_ECRAN_Y + HAUT_ECR_RAM)
1453
 
              {                                                // On enl�ve le vaisseau ennemi de la liste des vaisseaux ennemis.
1454
 
                Del_Element_Ve(cmpt_nmis, i);                  // Routine utilis�e pour supprimer un vaisseau ennemi du tableau des 've'.
1455
 
                // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
1456
 
                i--;
1457
 
                // Le vaisseau est d�truit, on peux sortir de la bcle.
1458
 
                goto fin_dep_ve_speciaux;
1459
 
              }
1460
 
            }
1461
 
            else                                               // Sinon, on doit l'afficher.
1462
 
            {                                                  // Indique que le sprite est visible, on devra donc faire les tests de collision avec lui.
1463
 
              ve[cmpt_nmis].visible = TRUE;
1464
 
            }
1465
 
          }
1466
 
            break;
1467
 
            // Vaisseaux se d�placant du bas de l'�cran vers le haut.
1468
 
          case SWORDINIANS:
1469
 
          case HOCKYS:
1470
 
          case CARRYONIANS:
1471
 
          case ARCHINIANS:
1472
 
          case TOURNADEE:
1473
 
          {                                                    // Test si la pause est activ�e ou pas.
1474
 
            if(!player_pause && etat_menu == MENU_OFF
1475
 
               && _score::getActionExecution() == 0)
1476
 
            {                                                  // On donne les nouvelles coordon�es du vaisseau ennemi.
1477
 
              ve[cmpt_nmis].spr.coor_y += ve[cmpt_nmis].spr.vitesse;
1478
 
            }
1479
 
            // Test si on doit ou non afficher le sprite.
1480
 
            if(((short)ve[cmpt_nmis].spr.coor_y +
1481
 
                ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->haut) <
1482
 
               DEBUT_ECRAN_Y
1483
 
               || (short)ve[cmpt_nmis].spr.coor_y >=
1484
 
               DEBUT_ECRAN_Y + HAUT_ECR_RAM)
1485
 
            {                                                  // Indique que le sprite n'est pas visible, on n'a donc pas besoin de faire de tests de collision avec lui.
1486
 
              ve[cmpt_nmis].visible = FALSE;
1487
 
              // Test si l'ennemi se trouve en dehors des coordon�es de l'�cran.
1488
 
              if((short)ve[cmpt_nmis].spr.coor_y < DEBUT_ECRAN_Y)
1489
 
              {                                                // On enl�ve le vaisseau ennemi de la liste des vaisseaux ennemis.
1490
 
                Del_Element_Ve(cmpt_nmis, i);                  // Routine utilis�e pour supprimer un vaisseau ennemi du tableau des 've'.
1491
 
                // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
1492
 
                i--;
1493
 
                // Le vaisseau est d�truit, on peux sortir de la bcle.
1494
 
                goto fin_dep_ve_speciaux;
1495
 
              }
1496
 
            }
1497
 
            else                                               // Sinon, on doit l'afficher.
1498
 
            {                                                  // Indique que le sprite est visible, on devra donc faire les tests de collision avec lui.
1499
 
              ve[cmpt_nmis].visible = TRUE;
1500
 
            }
1501
 
          }
1502
 
            break;
1503
 
            // Vaisseaux se d�placant horizontalement de la droite vers la gauche.
1504
 
          case FEABILIANS:
1505
 
          case BITTERIANS:
1506
 
          case TOUTIES:
1507
 
          case SUBJUGANEERS:
1508
 
          {                                                    // Test si la pause est activ�e ou pas.
1509
 
            if(!player_pause && etat_menu == MENU_OFF
1510
 
               && _score::getActionExecution() == 0)
1511
 
            {                                                  // On donne les nouvelles coordon�es du vaisseau ennemi.
1512
 
              ve[cmpt_nmis].spr.coor_x += ve[cmpt_nmis].spr.vitesse;
1513
 
            }
1514
 
            // Test si on doit ou non afficher le sprite.
1515
 
            if(((short)ve[cmpt_nmis].spr.coor_x +
1516
 
                ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->larg) <
1517
 
               DEBUT_ECRAN_X
1518
 
               || (short)ve[cmpt_nmis].spr.coor_x >=
1519
 
               DEBUT_ECRAN_X + LARG_ECR_RAM)
1520
 
            {                                                  // Indique que le sprite n'est pas visible, on n'a donc pas besoin de faire de tests de collision avec lui.
1521
 
              ve[cmpt_nmis].visible = FALSE;
1522
 
              // Test si l'ennemi se trouve en dehors des coordon�es de l'�cran.
1523
 
              if(((short)ve[cmpt_nmis].spr.coor_x +
1524
 
                  ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->larg) <
1525
 
                 DEBUT_ECRAN_X)
1526
 
              {                                                // On enl�ve le vaisseau ennemi de la liste des vaisseaux ennemis.
1527
 
                Del_Element_Ve(cmpt_nmis, i);                  // Routine utilis�e pour supprimer un vaisseau ennemi du tableau des 've'.
1528
 
                // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
1529
 
                i--;
1530
 
                // Le vaisseau est d�truit, on peux sortir de la bcle.
1531
 
                goto fin_dep_ve_speciaux;
1532
 
              }
1533
 
            }
1534
 
            else                                               // Sinon, on doit l'afficher.
1535
 
            {                                                  // Indique que le sprite est visible, on devra donc faire les tests de collision avec lui.
1536
 
              ve[cmpt_nmis].visible = TRUE;
1537
 
            }
1538
 
          }
1539
 
            break;
1540
 
            // Vaisseaux se d�placant horizontalement de la gauche vers la droite.
1541
 
          case PAINIANS:
1542
 
          case BAINIES:
1543
 
          case NAGGYS:
1544
 
          {                                                    // Test si la pause est activ�e ou pas.
1545
 
            if(!player_pause && etat_menu == MENU_OFF
1546
 
               && _score::getActionExecution() == 0)
1547
 
            {                                                  // On donne les nouvelles coordon�es du vaisseau ennemi.
1548
 
              ve[cmpt_nmis].spr.coor_x += ve[cmpt_nmis].spr.vitesse;
1549
 
            }
1550
 
            // Test si on doit ou non afficher le sprite.
1551
 
            if(((short)ve[cmpt_nmis].spr.coor_x +
1552
 
                ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->larg) <
1553
 
               DEBUT_ECRAN_X
1554
 
               || (short)ve[cmpt_nmis].spr.coor_x >=
1555
 
               DEBUT_ECRAN_X + LARG_ECR_RAM)
1556
 
            {                                                  // Indique que le sprite n'est pas visible, on n'a donc pas besoin de faire de tests de collision avec lui.
1557
 
              ve[cmpt_nmis].visible = FALSE;
1558
 
              // Test si l'ennemi se trouve en dehors des coordon�es de l'�cran.
1559
 
              if((short)ve[cmpt_nmis].spr.coor_x >=
1560
 
                 DEBUT_ECRAN_X + LARG_ECR_RAM)
1561
 
              {                                                // On enl�ve le vaisseau ennemi de la liste des vaisseaux ennemis.
1562
 
                Del_Element_Ve(cmpt_nmis, i);                  // Routine utilis�e pour supprimer un vaisseau ennemi du tableau des 've'.
1563
 
                // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
1564
 
                i--;
1565
 
                // Le vaisseau est d�truit, on peux sortir de la bcle.
1566
 
                goto fin_dep_ve_speciaux;
1567
 
              }
1568
 
            }
1569
 
            else                                               // Sinon, on doit l'afficher.
1570
 
            {                                                  // Indique que le sprite est visible, on devra donc faire les tests de collision avec lui.
1571
 
              ve[cmpt_nmis].visible = TRUE;
1572
 
            }
1573
 
          }
1574
 
            break;
1575
 
            // Vaisseaux sp�ciaux se d�placant suivant une courbe.
1576
 
          case ROTIES:
1577
 
          case STENCHIES:
1578
 
          case MADIRIANS:
1579
 
          case BLAVIRTHE:
1580
 
          case BLEUERCKS:
1581
 
          {                                                    // Test si la pause est activ�e ou pas.
1582
 
            if(!player_pause && etat_menu == MENU_OFF
1583
 
               && _score::getActionExecution() == 0)
1584
 
            {                                                  // On change la position du vaisseau dans la courbe.
1585
 
              ve[cmpt_nmis].pos_vaiss[POS_CURVE]++;
1586
 
              // Test si on doit ou non supprimer le sprite parce qu'il est sorti de la courbe.
1587
 
              if(ve[cmpt_nmis].pos_vaiss[POS_CURVE] >=
1588
 
                 initial_curve[ve[cmpt_nmis].num_courbe].nbr_pnt_curve)
1589
 
              {                                                // On enl�ve le vaisseau ennemi de la liste des vaisseaux ennemis.
1590
 
                Del_Element_Ve(cmpt_nmis, i);                  // Routine utilis�e pour supprimer un vaisseau ennemi du tableau des 've'.
1591
 
                // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
1592
 
                i--;
1593
 
                // Le vaisseau est d�truit, on peux sortir de la bcle.
1594
 
                goto fin_dep_ve_speciaux;
1595
 
              }
1596
 
              // On donne les nouvelles coordon�es du vaisseau ennemi.
1597
 
              ve[cmpt_nmis].spr.coor_x += (float)initial_curve[ve[cmpt_nmis].num_courbe].delta_x[ve[cmpt_nmis].pos_vaiss[POS_CURVE]];   // Donne l'indice de progression du vaisseau soit sur la courbe, soit sur la grille.
1598
 
              ve[cmpt_nmis].spr.coor_y += (float)initial_curve[ve[cmpt_nmis].num_courbe].delta_y[ve[cmpt_nmis].pos_vaiss[POS_CURVE]];   // Donne l'indice de progression du vaisseau soit sur la courbe, soit sur la grille.
1599
 
            }
1600
 
            // On donne la valeur de l'image du vaisseau � afficher.
1601
 
            ve[cmpt_nmis].spr.img_act =
1602
 
              initial_curve[ve[cmpt_nmis].num_courbe].angle[ve[cmpt_nmis].
1603
 
                                                            pos_vaiss
1604
 
                                                            [POS_CURVE]];
1605
 
            // Test si on doit ou non afficher le sprite.
1606
 
            if(((short)ve[cmpt_nmis].spr.coor_x +
1607
 
                ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->larg) <
1608
 
               DEBUT_ECRAN_X
1609
 
               || (short)ve[cmpt_nmis].spr.coor_x >=
1610
 
               DEBUT_ECRAN_X + LARG_ECR_RAM
1611
 
               || ((short)ve[cmpt_nmis].spr.coor_y +
1612
 
                   ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->haut) <
1613
 
               DEBUT_ECRAN_Y
1614
 
               || (short)ve[cmpt_nmis].spr.coor_y >=
1615
 
               DEBUT_ECRAN_Y + HAUT_ECR_RAM)
1616
 
            {                                                  // Indique que le sprite n'est pas visible, on n'a donc pas besoin de faire de tests de collision avec lui.
1617
 
              ve[cmpt_nmis].visible = FALSE;
1618
 
            }
1619
 
            else                                               // Sinon, on doit l'afficher.
1620
 
            {                                                  // Indique que le sprite est visible, on devra donc faire les tests de collision avec lui.
1621
 
              ve[cmpt_nmis].visible = TRUE;
1622
 
            }
1623
 
          }
1624
 
            break;
1625
 
          case BIGMETEOR:
1626
 
          case NORMALMETEOR:
1627
 
          case SMALLMETEOR:
1628
 
          {                                                    //printf("BIGMETEOR START : %i", ve[cmpt_nmis].type) ;
1629
 
            // Test si la pause est activ�e ou pas.
1630
 
            if(!player_pause && etat_menu == MENU_OFF
1631
 
               && _score::getActionExecution() == 0)
1632
 
            {                                                  // On donne les nouvelles coordon�es du vaisseau ennemi.
1633
 
              ve[cmpt_nmis].spr.coor_x += ve[cmpt_nmis].vitesse_x;
1634
 
              ve[cmpt_nmis].spr.coor_y += ve[cmpt_nmis].vitesse_y;
1635
 
              // On d�compte le temps d'apparition du m�t�or.
1636
 
              ve[cmpt_nmis].temps_apparition--;
1637
 
            }
1638
 
            // Test si on doit ou non afficher le sprite.
1639
 
            if(((short)ve[cmpt_nmis].spr.coor_y +
1640
 
                ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->haut) <
1641
 
               DEBUT_ECRAN_Y
1642
 
               || (short)ve[cmpt_nmis].spr.coor_y >=
1643
 
               DEBUT_ECRAN_Y + HAUT_ECR_RAM
1644
 
               || ((short)ve[cmpt_nmis].spr.coor_x +
1645
 
                   ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->larg) <
1646
 
               DEBUT_ECRAN_X
1647
 
               || (short)ve[cmpt_nmis].spr.coor_x >=
1648
 
               DEBUT_ECRAN_X + LARG_ECR_RAM)
1649
 
            {                                                  // Indique que le sprite n'est pas visible, on n'a donc pas besoin de faire de tests de collision avec lui.
1650
 
              ve[cmpt_nmis].visible = FALSE;
1651
 
              // Test si le temps d'apparition de la m�t�orite est �coul� et si oui, elle peut-etre d�truite.
1652
 
              if(ve[cmpt_nmis].temps_apparition < 0)
1653
 
              {                                                // On enl�ve la m�t�orite de la liste des vaisseaux ennemis.
1654
 
                Del_Element_Ve(cmpt_nmis, i);                  // Routine utilis�e pour supprimer un vaisseau ennemi du tableau des 've'.
1655
 
                // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
1656
 
                i--;
1657
 
                // Le vaisseau est d�truit, on peux sortir de la bcle.
1658
 
                goto fin_dep_ve_speciaux;
1659
 
              }
1660
 
            }
1661
 
            else                                               // Sinon, on doit l'afficher.
1662
 
            {                                                  // Indique que le sprite est visible, on devra donc faire les tests de collision avec lui.
1663
 
              ve[cmpt_nmis].visible = TRUE;
1664
 
              // Incr�mente le compteur de VBLs pour l'affichage de l'animation.
1665
 
              ve[cmpt_nmis].spr.nbr_vbl_act++;
1666
 
              // Test si l'on � atteint le nombre de VBLs n�cessaires pour le changement d'image.
1667
 
              if(ve[cmpt_nmis].spr.nbr_vbl_act >=
1668
 
                 ve[cmpt_nmis].spr.nbr_tot_vbl)
1669
 
              {                                                // On initialise le compteur de VBLs.
1670
 
                ve[cmpt_nmis].spr.nbr_vbl_act = 0;
1671
 
                // On passe � l'image suivante.
1672
 
                ve[cmpt_nmis].spr.img_act += ve[cmpt_nmis].sens_anim;
1673
 
                // Test si le num�ro de l'image actuelle n'est pas sup�rieur au nombre d'images totales.
1674
 
                if(ve[cmpt_nmis].spr.img_act >= ve[cmpt_nmis].spr.nbr_img)
1675
 
                {                                              // On repositionne l'image actuelle sur la premi�re image de l'animation.
1676
 
                  ve[cmpt_nmis].spr.img_act = 0;
1677
 
                }
1678
 
                // Test si on doit mettre a jour l'image actuelle
1679
 
                if(ve[cmpt_nmis].spr.img_act < 0)
1680
 
                {                                              // On repositionne l'image actuelle sur la premi�re image de l'animation.
1681
 
                  ve[cmpt_nmis].spr.img_act = NBR_IMAGES_METEOR - 1;
1682
 
                }
1683
 
              }
1684
 
            }
1685
 
          }
1686
 
            break;
1687
 
        }
1688
 
        // Test si le vaisseau ennemi sp�cial est visible.
1689
 
        if(ve[cmpt_nmis].visible == TRUE)
1690
 
        {                                                      // Test si on est en pr�sence de vaisseaux sp�ciaux ayant une animation cyclique sur 32 images.
1691
 
          // Si oui, on met � jour la prochaine image du sprite � afficher.
1692
 
          // Pour cela, on test tous ceux qui n'ont pas une animation cyclique car il y en a moins que les autres.
1693
 
          if(ve[cmpt_nmis].type != BIGMETEOR
1694
 
             && ve[cmpt_nmis].type != NORMALMETEOR
1695
 
             && ve[cmpt_nmis].type != SMALLMETEOR
1696
 
             && ve[cmpt_nmis].type != BLAVIRTHE
1697
 
             && ve[cmpt_nmis].type != BLEUERCKS
1698
 
             && ve[cmpt_nmis].type != ROTIES
1699
 
             && ve[cmpt_nmis].type != STENCHIES
1700
 
             && ve[cmpt_nmis].type != MADIRIANS
1701
 
             && ve[cmpt_nmis].type != PERTURBIANS
1702
 
             && ve[cmpt_nmis].type != HOCKYS && ve[cmpt_nmis].type != BAINIES
1703
 
             && ve[cmpt_nmis].type != TOUTIES
1704
 
             && ve[cmpt_nmis].type != VIONIEES
1705
 
             && ve[cmpt_nmis].type != ANGOUFF
1706
 
             && ve[cmpt_nmis].type != CLOWNIES && ve[cmpt_nmis].type != EFFIES
1707
 
             && ve[cmpt_nmis].type != SAPOUCH
1708
 
             && ve[cmpt_nmis].type != DIMITINIANS
1709
 
             && ve[cmpt_nmis].type != GAFFIES
1710
 
             && ve[cmpt_nmis].type != ARCHINIANS
1711
 
             && ve[cmpt_nmis].type != TODHAIRIES
1712
 
             && ve[cmpt_nmis].type != DEFECTINIANS
1713
 
             && ve[cmpt_nmis].type != SOONIEES
1714
 
             && ve[cmpt_nmis].type != SOUKEE)
1715
 
          {                                                    // Incr�mente le compteur de VBLs pour l'affichage de l'animation.
1716
 
            ve[cmpt_nmis].spr.nbr_vbl_act++;
1717
 
            // Test si l'on � atteint le nombre de VBLs n�cessaires pour le changement d'image.
1718
 
            if(ve[cmpt_nmis].spr.nbr_vbl_act >= ve[cmpt_nmis].spr.nbr_tot_vbl)
1719
 
            {                                                  // On initialise le compteur de VBLs.
1720
 
              ve[cmpt_nmis].spr.nbr_vbl_act = 0;
1721
 
              // On passe � l'image suivante.
1722
 
              ve[cmpt_nmis].spr.img_act++;
1723
 
              // Test si le num�ro de l'image actuelle n'est pas sup�rieur au nombre d'images totales.
1724
 
              if(ve[cmpt_nmis].spr.img_act >= ve[cmpt_nmis].spr.nbr_img)
1725
 
              {                                                // On repositionne l'image actuelle sur la premi�re image de l'animation.
1726
 
                ve[cmpt_nmis].spr.img_act = 0;
1727
 
              }
1728
 
            }
1729
 
          }
1730
 
          // Test si le vaisseau ennemi va de droite vers la gauche et vice-versa.
1731
 
          // Si oui, on met � jour la prochaine image du sprite � afficher.
1732
 
          if(ve[cmpt_nmis].type == DIMITINIANS
1733
 
             || ve[cmpt_nmis].type == TODHAIRIES
1734
 
             || ve[cmpt_nmis].type == DEFECTINIANS
1735
 
             || ve[cmpt_nmis].type == SOONIEES)
1736
 
          {                                                    // Test si le sens de comptage de l'animation est d�croissant.
1737
 
            if(ve[cmpt_nmis].sens_anim)
1738
 
            {                                                  // Incr�mente le compteur de VBLs pour l'affichage de l'animation.
1739
 
              ve[cmpt_nmis].spr.nbr_vbl_act++;
1740
 
              // Test si l'on � atteint le nombre de VBLs n�cessaires pour le changement d'image.
1741
 
              if(ve[cmpt_nmis].spr.nbr_vbl_act >=
1742
 
                 ve[cmpt_nmis].spr.nbr_tot_vbl)
1743
 
              {                                                // On initialise le compteur de VBLs.
1744
 
                ve[cmpt_nmis].spr.nbr_vbl_act = 0;
1745
 
                // On passe � l'image suivante.
1746
 
                ve[cmpt_nmis].spr.img_act--;
1747
 
                // Test si le num�ro de l'image actuelle n'est pas inf�rieur � z�ro.
1748
 
                if(ve[cmpt_nmis].spr.img_act < 0)
1749
 
                {                                              // On repositionne l'image actuelle sur la premi�re image de l'animation.
1750
 
                  ve[cmpt_nmis].spr.img_act = 0;
1751
 
                  ve[cmpt_nmis].sens_anim = 0;                 // Donne un sens croissant pour le comptage des images.
1752
 
                }
1753
 
              }
1754
 
            }
1755
 
            else                                               // Le sens de comptage des images de l'animation est croissant.
1756
 
            {                                                  // Incr�mente le compteur de VBLs pour l'affichage de l'animation.
1757
 
              ve[cmpt_nmis].spr.nbr_vbl_act++;
1758
 
              // Test si l'on � atteint le nombre de VBLs n�cessaires pour le changement d'image.
1759
 
              if(ve[cmpt_nmis].spr.nbr_vbl_act >=
1760
 
                 ve[cmpt_nmis].spr.nbr_tot_vbl)
1761
 
              {                                                // On initialise le compteur de VBLs.
1762
 
                ve[cmpt_nmis].spr.nbr_vbl_act = 0;
1763
 
                // On passe � l'image suivante.
1764
 
                ve[cmpt_nmis].spr.img_act++;
1765
 
                // Test si le num�ro de l'image actuelle n'est pas sup�rieur au nombre d'images totales.
1766
 
                if(ve[cmpt_nmis].spr.img_act >= ve[cmpt_nmis].spr.nbr_img)
1767
 
                {                                              // On repositionne l'image actuelle sur la premi�re image de l'animation.
1768
 
                  ve[cmpt_nmis].spr.img_act =
1769
 
                    (short)(ve[cmpt_nmis].spr.nbr_img - 1);
1770
 
                  ve[cmpt_nmis].sens_anim = 1;                 // Donne un sens d�croissant pour le comptage des images.
1771
 
                }
1772
 
              }
1773
 
            }
1774
 
          }
1775
 
          // Test si on est en pr�sence d'un vaisseau dont le cannon suit le joueur.
1776
 
          // Si oui, on met � jour la prochaine image du sprite � afficher.
1777
 
          if(ve[cmpt_nmis].type == PERTURBIANS ||
1778
 
             ve[cmpt_nmis].type == GAFFIES ||
1779
 
             ve[cmpt_nmis].type == HOCKYS ||
1780
 
             ve[cmpt_nmis].type == BAINIES ||
1781
 
             ve[cmpt_nmis].type == TOUTIES ||
1782
 
             ve[cmpt_nmis].type == ARCHINIANS)
1783
 
          {                                                    // Test si l'ancienne position corespond toujours � la bonne direction de tir.
1784
 
            if(ve[cmpt_nmis].img_angle != ve[cmpt_nmis].spr.img_act)
1785
 
            {                                                  // Test si le sens de comptage de l'animation est d�croissant.
1786
 
              if(ve[cmpt_nmis].sens_anim)
1787
 
              {                                                // Incr�mente le compteur de VBLs pour l'affichage de l'animation.
1788
 
                ve[cmpt_nmis].spr.nbr_vbl_act++;
1789
 
                // Test si l'on � atteint le nombre de VBLs n�cessaires pour le changement d'image.
1790
 
                if(ve[cmpt_nmis].spr.nbr_vbl_act >=
1791
 
                   ve[cmpt_nmis].spr.nbr_tot_vbl)
1792
 
                {                                              // On initialise le compteur de VBLs.
1793
 
                  ve[cmpt_nmis].spr.nbr_vbl_act = 0;
1794
 
                  // On passe � l'image suivante.
1795
 
                  ve[cmpt_nmis].spr.img_act--;
1796
 
                  // Test si le num�ro de l'image actuelle n'est pas inf�rieur � z�ro.
1797
 
                  if(ve[cmpt_nmis].spr.img_act < 0)
1798
 
                  {                                            // On repositionne l'image actuelle sur la premi�re image de l'animation.
1799
 
                    ve[cmpt_nmis].spr.img_act =
1800
 
                      (short)(ve[cmpt_nmis].spr.nbr_img - 1);
1801
 
                  }
1802
 
                }
1803
 
              }
1804
 
              else                                             // Le sens de comptage des images de l'animation est croissant.
1805
 
              {                                                // Incr�mente le compteur de VBLs pour l'affichage de l'animation.
1806
 
                ve[cmpt_nmis].spr.nbr_vbl_act++;
1807
 
                // Test si l'on � atteint le nombre de VBLs n�cessaires pour le changement d'image.
1808
 
                if(ve[cmpt_nmis].spr.nbr_vbl_act >=
1809
 
                   ve[cmpt_nmis].spr.nbr_tot_vbl)
1810
 
                {                                              // On initialise le compteur de VBLs.
1811
 
                  ve[cmpt_nmis].spr.nbr_vbl_act = 0;
1812
 
                  // On passe � l'image suivante.
1813
 
                  ve[cmpt_nmis].spr.img_act++;
1814
 
                  // Test si le num�ro de l'image actuelle n'est pas sup�rieur au nombre d'images totales.
1815
 
                  if(ve[cmpt_nmis].spr.img_act >= ve[cmpt_nmis].spr.nbr_img)
1816
 
                  {                                            // On repositionne l'image actuelle sur la premi�re image de l'animation.
1817
 
                    ve[cmpt_nmis].spr.img_act = 0;
1818
 
                  }
1819
 
                }
1820
 
              }
1821
 
              // On cherche le sens dans lequel doit tourner le cannon.
1822
 
              // Initialisation du compteur pour la recherche dans le sens croissant.
1823
 
              compteur = ve[cmpt_nmis].spr.img_act;
1824
 
              first_value = 0;
1825
 
              // Bcle sur toutes les positions d'angle possibles.
1826
 
              for(compteur1 = 0; compteur1 < 32; compteur1++)
1827
 
              {                                                // Incr�mentation de la premi�re valeur.
1828
 
                first_value++;
1829
 
                compteur++;
1830
 
                if(compteur > 31)
1831
 
                  compteur = 0;
1832
 
                // Si le compteur � atteint la bonne valeur, on sort de la bcle.
1833
 
                if(ve[cmpt_nmis].img_angle == compteur)
1834
 
                  compteur1 = 32;
1835
 
              }
1836
 
              // Initialisation du compteur pour la recherche dans le sens d�croissant.
1837
 
              compteur = ve[cmpt_nmis].spr.img_act;
1838
 
              second_value = 0;
1839
 
              // Bcle sur toutes les positions d'angle possibles.
1840
 
              for(compteur1 = 0; compteur1 < 32; compteur1++)
1841
 
              {                                                // Incr�mentation de la premi�re valeur.
1842
 
                second_value++;
1843
 
                compteur--;
1844
 
                if(compteur < 0)
1845
 
                  compteur = 31;
1846
 
                // Si le compteur � atteint la bonne valeur, on sort de la bcle.
1847
 
                if(ve[cmpt_nmis].img_angle == compteur)
1848
 
                  compteur1 = 32;
1849
 
              }
1850
 
              // Si la premi�re valeur est plus petite que la seconde, on part dans le sens croissant.
1851
 
              if(first_value < second_value)
1852
 
                ve[cmpt_nmis].sens_anim = 0;
1853
 
              else                                             // Sinon, le sens de comptage des animations du canon sera d�croissant.
1854
 
                ve[cmpt_nmis].sens_anim = 1;
1855
 
            }
1856
 
            // Recherche du sens dans lequel doit tourner le canon.
1857
 
            // Recherche de la position du canon par rapport � la direction du joueur humain.
1858
 
            float                   angl_canon_vj =
1859
 
              Calc_Angle_Tir((short)
1860
 
                             (ve[cmpt_nmis].spr.coor_x +
1861
 
                              ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
1862
 
                                                    img_act]->x_cg),
1863
 
                             (short)(ve[cmpt_nmis].spr.coor_y +
1864
 
                                     ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
1865
 
                                                           img_act]->y_cg),
1866
 
                             (short)(vj[J1].spr.coor_x +
1867
 
                                     vj[J1].spr.img[vj[J1].spr.img_act]->
1868
 
                                     x_cg),
1869
 
                             (short)(vj[J1].spr.coor_y +
1870
 
                                     vj[J1].spr.img[vj[J1].spr.img_act]->
1871
 
                                     y_cg));
1872
 
            // Recherche de l'image � afficher en fonction de l'angle.
1873
 
            if(sign(angl_canon_vj < 0))
1874
 
              ve[cmpt_nmis].img_angle =
1875
 
                (short)((angl_canon_vj + DEUX_PI) / PI_SUR_16);
1876
 
            else
1877
 
              ve[cmpt_nmis].img_angle = (short)(angl_canon_vj / PI_SUR_16);
1878
 
            // Pour �viter un indice de tableau n�gatif.
1879
 
            ve[cmpt_nmis].img_angle = (short)abs(ve[cmpt_nmis].img_angle);
1880
 
            // Pour �viter un angle de tir sup�rieur au nombre d'images du sprite.
1881
 
            if(ve[cmpt_nmis].img_angle >= ve[cmpt_nmis].spr.nbr_img)
1882
 
              ve[cmpt_nmis].img_angle =
1883
 
                (short)(ve[cmpt_nmis].spr.nbr_img - 1);
1884
 
          }
1885
 
          // Test si le vaisseau ennemi est mort.
1886
 
          if(ve[cmpt_nmis].dead)
1887
 
          {                                                    // Gestion de l'invincibilit� d'un vaisseau ennemi.
1888
 
            // Retourne Vrai si le vaisseau ennemi est d�truit, Faux si on continu � le faire clignoter.
1889
 
            if(Gere_Invincibilite_Ve(cmpt_nmis))
1890
 
            {                                                  // RAZ de la variable de fin de vie du vaisseau ennemi.
1891
 
              ve[cmpt_nmis].dead = FALSE;
1892
 
              // On enl�ve le vaisseau ennemi de la liste des vaisseaux ennemis.
1893
 
              Del_Element_Ve(cmpt_nmis, i);                    // Routine utilis�e pour supprimer un vaisseau ennemi du tableau des 've'.
1894
 
              // On se positionne sur le vaisseau ennemi que l'on vient de d�caler.
1895
 
              i--;
1896
 
              goto fin_dep_ve_speciaux;                        // On sort de la bcle directement.
1897
 
            }
1898
 
          }
1899
 
          else                                                 // Sinon, l'ennemi est encore en vie et visible.
1900
 
          {                                                    // Affichage de l'ennemi.
1901
 
            Aff_Ve(cmpt_nmis);
1902
 
            // Test s'il y a des ondes de choc en activit�.
1903
 
            if(nbr_onde_choc)
1904
 
            {                                                  // Test si l'onde de choc est en collision avec l'ennemi actuel.
1905
 
              if(Tst_Col_Onde_Choc(cmpt_nmis))
1906
 
              {                                                // On fait clignoter l'ennemi actuel avant de le faire disparaitre.
1907
 
                Clignote_Nmi_Avant_Disparition(cmpt_nmis);
1908
 
                // Routine utilis�e pour ajouter une s�rie d'explosion � un gros vaisseau.
1909
 
                Add_Serie_Of_Explosion(cmpt_nmis);
1910
 
                // On ajoute un eclat � la liste des explosions.
1911
 
                Add_Eclats(ve[cmpt_nmis].spr.coor_x +
1912
 
                           ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
1913
 
                           x_cg - 8,
1914
 
                           ve[cmpt_nmis].spr.coor_y +
1915
 
                           ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
1916
 
                           y_cg - 8, 1.0, 4, 0, 1);
1917
 
                goto fin_dep_ve_speciaux;                      // Sort de la gestion des vaisseau ennemis.
1918
 
              }
1919
 
            }
1920
 
            // Test si la pause est activ�e ou pas.
1921
 
            if(!player_pause && etat_menu == MENU_OFF
1922
 
               && _score::getActionExecution() == 0)
1923
 
            {                                                  // D�compte le temps s�parant deux tirs.
1924
 
              ve[cmpt_nmis].cad_tir--;
1925
 
              // Test si l'ennemi doit ou non lancer un tir.
1926
 
              if(ve[cmpt_nmis].cad_tir <= 0 && nbr_tirs < (NBR_TIRS_MAX - 1))
1927
 
              {                                                // Test si on est en pr�sence d'un vaisseau dont le cannon suit le joueur.
1928
 
                if(ve[cmpt_nmis].type == PERTURBIANS ||
1929
 
                   ve[cmpt_nmis].type == GAFFIES ||
1930
 
                   ve[cmpt_nmis].type == HOCKYS ||
1931
 
                   ve[cmpt_nmis].type == BAINIES ||
1932
 
                   ve[cmpt_nmis].type == TOUTIES ||
1933
 
                   ve[cmpt_nmis].type == ARCHINIANS)
1934
 
                {                                              // Test si la position du canon est dans la direction du joueur humain.
1935
 
                  if(ve[cmpt_nmis].img_angle == ve[cmpt_nmis].spr.img_act)
1936
 
                    goto Fait_Tirer_Le_Vaiso_Spe;
1937
 
                }
1938
 
                else                                           // Sinon, on est en pr�sence d'un vaisseau sp�cial tout � fait normal.
1939
 
                {
1940
 
                Fait_Tirer_Le_Vaiso_Spe:;
1941
 
                  // Met la cadence du tir pour le vaisseau ennemi.
1942
 
                  ve[cmpt_nmis].cad_tir = ve[cmpt_nmis].cad_tir_initiale;
1943
 
                  // Bcle sur tous les points de tirs existants.
1944
 
                  for(k = 0;
1945
 
                      k <
1946
 
                      ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
1947
 
                      nbr_pts_tir; k++)
1948
 
                  {                                            //Test si on est en presence d'un vaisseau qui envoi d'autres vaisseaux.
1949
 
                    if(ve[cmpt_nmis].type == NAGGYS)
1950
 
                    {
1951
 
                      int                     tmp_pos_tst_x =
1952
 
                        (int)(ve[cmpt_nmis].spr.coor_x +
1953
 
                              ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
1954
 
                                                    img_act]->
1955
 
                              xy_pos_tir[k][X]);
1956
 
                      int                     tmp_pos_tst_y =
1957
 
                        (int)(ve[cmpt_nmis].spr.coor_y +
1958
 
                              ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.
1959
 
                                                    img_act]->
1960
 
                              xy_pos_tir[k][Y]);
1961
 
                      // Test si le vaisseau que l'on doit creer se trouve a l'interieur de l'ecran visible.
1962
 
                      if(tmp_pos_tst_x > DEBUT_ECRAN_X &&
1963
 
                         tmp_pos_tst_x < (DEBUT_ECRAN_X + LARG_ECR_RAM - 1)
1964
 
                         && (nbr_nmis < (MAX_NMI_ON_SCREEN - 2)))
1965
 
                      {                                        // On rajoute un Vaisseau sp�cial GOZUKY dans la liste.
1966
 
                        new_ve = New_Element_Ve();             // Retourne l'indice dans le tableau 've' d'un nouvel �l�ment de la liste.
1967
 
                        // Remplissage de la structure sprite appartenant au vaisseau ennemi.
1968
 
                        ve[new_ve].spr.pow_of_dest = (short)((vj[J1].type_vaisseau << 1) + 10); // Indique la puissance de destruction du sprite.
1969
 
                        ve[new_ve].spr.etat_dommages = ve[new_ve].spr.pow_of_dest;      // Indique l'�tat de domages du sprite.
1970
 
                        ve[new_ve].spr.nbr_img = 32;           // Indique le nombre d'images composant le sprite.
1971
 
                        ve[new_ve].spr.img_act = (short)(((long)rand() % NBR_IMAGES_NMI_S));    // Indique l'image actuelle.
1972
 
                        ve[new_ve].spr.nbr_vbl_act = 0;        // RAZ du compteur de VBL pour le passage � l'image suivante.
1973
 
                        ve[new_ve].spr.nbr_tot_vbl = 1;        //2; // Indique le nombre de VBL qu'il faut pour passer � l'image suivante.
1974
 
                        // Donne l'adresse des images du sprite.
1975
 
                        for(k = 0; k < ve[new_ve].spr.nbr_img; k++)
1976
 
                        {
1977
 
                          ve[new_ve].spr.img[k] =
1978
 
                            (image *) & enemi[GOZUKY][k];
1979
 
                        }
1980
 
                        ve[new_ve].cad_tir_initiale = 6000;    // Corespond au temps qu'il faut au vaisseau avant de pouvoir tirer � nouveau.
1981
 
                        ve[new_ve].cad_tir = ve[new_ve].cad_tir_initiale;       // Initialise la variable utilis�e pour compter le temps qu'il faut au vaisseau avant de pouvoir tirer � nouveau.
1982
 
                        ve[new_ve].deplacement = SPECIAUX;     // 0 indique une courbe, 1 indique une grille, 2 indique un special, 3 indique un gardien.
1983
 
                        // Donne les coordon�es x et y de d�part du vaisseau.
1984
 
                        ve[new_ve].spr.coor_x =
1985
 
                          (float)(tmp_pos_tst_x -
1986
 
                                  ve[new_ve].spr.img[0]->x_cg);
1987
 
                        ve[new_ve].spr.coor_y =
1988
 
                          (float)(tmp_pos_tst_y -
1989
 
                                  ve[new_ve].spr.img[0]->y_cg);
1990
 
                        ve[new_ve].spr.vitesse = 0.2f;         // Donne la vitesse de d�placement du vaisseau ennemi sp�cial.
1991
 
                        ve[new_ve].type = GOZUKY;              // Indique le type de vaisseau sp�cial.
1992
 
                        ve[new_ve].dead = FALSE;               // Indique que l'ennemi est bien vivant.
1993
 
                        ve[new_ve].visible = TRUE;             // Indique que l'ennemi est visible, on devra donc l'afficher.
1994
 
                      }
1995
 
                    }
1996
 
                    else                                       //Sinon, on est en presence d'un vaisseau qui tire normalement.
1997
 
                    {                                          // Test s'il est possible d'ajouter un nouveau tir � la liste.
1998
 
                      if(nbr_tirs < (NBR_TIRS_MAX - 1))
1999
 
                      {                                        // Recherche d'un nouveau tir.
2000
 
                        new_tir = new_element_tir();
2001
 
                        // Remplissage de la structure sprite pour le tir du vaisseau ennemi.
2002
 
                        tirs[new_tir].clignote = TRUE;         // Indique que l'on est en pr�sence d'un sprite ennemi qui doit clignoter.
2003
 
                        tirs[new_tir].spr.genre = ENNEMI;      // Indique que c'est un sprite ennemi.
2004
 
                        tirs[new_tir].spr.trajectoire = FALSE; // Indique que la trajectoire du sprite est calcul�e une fois pour toute.
2005
 
                        tirs[new_tir].spr.nbr_img = 32;        // Indique le nombre d'images composant le sprite.
2006
 
                        // Indique la puissance de destruction du sprite.
2007
 
                        tirs[new_tir].spr.pow_of_dest = 4;
2008
 
                        // Donne l'adresse des images du sprite.
2009
 
                        for(j = 0; j < tirs[new_tir].spr.nbr_img; j++)
2010
 
                        {                                      //Donne l'adresse des images du projectile.
2011
 
                          if(ve[cmpt_nmis].type == QUIBOULY)   //Si c'est un QUIBOULY, on met des projectiles plus petits.
2012
 
                          {
2013
 
                            tirs[new_tir].spr.img[j] = (image *) & fire[TIR1P1E][j];    // Corespond au Tir 2 puissance 2.
2014
 
                            tirs[new_tir].spr.pow_of_dest = 2; // On change aussi la puissance du tir.
2015
 
                          }
2016
 
                          else                                 //Sinon, on met des projectiles de taille moyenne.
2017
 
                            tirs[new_tir].spr.img[j] = (image *) & fire[TIR1P2E][j];    // Corespond au Tir 2 puissance 2.
2018
 
                        }
2019
 
                        tirs[new_tir].spr.etat_dommages = tirs[new_tir].spr.pow_of_dest;        // Indique l'�tat de domages du sprite.
2020
 
                        //tirs[new_tir].spr.pilote = 0;          // Indique par qui est dirig� le sprite.
2021
 
                        //tirs[new_tir].spr.mode_commande = 0;   // Indique le moyen par lequel on fait d�placer le sprite.
2022
 
                        tirs[new_tir].spr.img_act = 0;         // Indique l'image actuelle.
2023
 
                        tirs[new_tir].spr.nbr_tot_vbl = 1;     // Indique le nombre de VBL qu'il faut pour passer � l'image suivante.
2024
 
                        tirs[new_tir].spr.nbr_vbl_act = 0;     // Indique le nombre de VBL compt�es actuellement.
2025
 
                        // Donne les coordonn�es d'affichage du sprite.
2026
 
                        tirs[new_tir].img_angle =
2027
 
                          ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
2028
 
                          angle_tir[k];
2029
 
                        tirs[new_tir].img_old_angle = tirs[new_tir].img_angle;
2030
 
                        tirs[new_tir].spr.coor_x =
2031
 
                          ve[cmpt_nmis].spr.coor_x +
2032
 
                          ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
2033
 
                          xy_pos_tir[k][X] -
2034
 
                          tirs[new_tir].spr.img[tirs[new_tir].img_angle]->
2035
 
                          x_cg;
2036
 
                        tirs[new_tir].spr.coor_y =
2037
 
                          ve[cmpt_nmis].spr.coor_y +
2038
 
                          ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
2039
 
                          xy_pos_tir[k][Y] -
2040
 
                          tirs[new_tir].spr.img[tirs[new_tir].img_angle]->
2041
 
                          y_cg;
2042
 
                        tirs[new_tir].tmp_life_tir = 400;
2043
 
                        // Donne un angle vertical pour le tir.
2044
 
                        tirs[new_tir].angle_tir =
2045
 
                          PI_SUR_16 * tirs[new_tir].img_angle;
2046
 
                        tirs[new_tir].spr.vitesse = 1.0f + (float)num_level / 20.0f;    // Donne la vitesse de d�placement du sprite.
2047
 
                      }
2048
 
                    }
2049
 
                  }
2050
 
                }
2051
 
              }
2052
 
            }                                                  // Fin du test pour savoir si la pause est ou non activ�e.
2053
 
 
2054
 
            // Si le joueur n'est pas Game Over.
2055
 
            if(!aff_game_over)
2056
 
            {                                                  // Test les collisions entre les boules du joueur et le vaisseau ennemi.
2057
 
              Test_Col_Bou_With_Nmi(cmpt_nmis);
2058
 
              // Test les collisions entre les canons du joueur et le vaisseau ennemi.
2059
 
              Test_Col_Can_With_Nmi(cmpt_nmis);
2060
 
              // Test des collisions entre le joueur et l'ennemi sp�cial.
2061
 
              Test_Col_Player_With_Spec_Nmi(cmpt_nmis);
2062
 
            }                                                  // Fin du test si le joueur est Game Over.
2063
 
          }                                                    // Fin du test pour savoir si l'ennemi est mort et si on est en train de le faire clignoter.
2064
 
        }                                                      // Fin du test si on doit afficher le vaisseau ennemi ou non.
2065
 
      fin_dep_ve_speciaux:
2066
 
        //printf("fin_dep_ve_speciaux\n") ;
2067
 
        ;
2068
 
      }
2069
 
        break;
2070
 
 
2071
 
      // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
2072
 
      // deplacement 3 : phase gardiens
2073
 
      // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
2074
 
      case GARDIEN:
2075
 
      { if(gardian_activity)                                   //gestion du gardien ?
2076
 
        {
2077
 
          if(ve[cmpt_nmis].dead)                               //oui, gardien est mort ?
2078
 
          {
2079
 
            if(Gere_Invincibilite_Ve(cmpt_nmis))               //oui, il clignote ?
2080
 
            {
2081
 
              ve[cmpt_nmis].dead = 0;                          //non, il est vraiment mort
2082
 
              Del_Element_Ve(cmpt_nmis, i);                    //supprime le gardien de la liste "ve"
2083
 
              i--;
2084
 
              bar_nrj_guardian = 1;                            //1=reaffichage
2085
 
              goto fin_dep_ve_gardien;                         //on sort de la bcle directement.
2086
 
            }
2087
 
          }
2088
 
          else                                                 //le gardien est toujours vivant
2089
 
          {
2090
 
            if(nbr_onde_choc)                                  //il y a des onde(s) de choc ?
2091
 
            {
2092
 
              if(Tst_Col_Onde_Choc(cmpt_nmis))                 //oui, collision gardien/onde(s) de choc
2093
 
              {
2094
 
                Clignote_Nmi_Avant_Disparition(cmpt_nmis);
2095
 
                Add_Serie_Of_Explosion(cmpt_nmis);             //on ajoute des explosions
2096
 
                Add_Eclats(ve[cmpt_nmis].spr.coor_x +
2097
 
                           ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
2098
 
                           x_cg - 8,
2099
 
                           ve[cmpt_nmis].spr.coor_y +
2100
 
                           ve[cmpt_nmis].spr.img[ve[cmpt_nmis].spr.img_act]->
2101
 
                           y_cg - 8, 1.0, 4, 0, 1);
2102
 
              }
2103
 
            }
2104
 
            Gere_gardien(cmpt_nmis);                           //gestion du gardien "gardien.cpp"
2105
 
          }
2106
 
        }
2107
 
      fin_dep_ve_gardien:;
2108
 
      }
2109
 
        break;
2110
 
    }
2111
 
  }
2112
 
}
2113
 
 
2114
 
 
2115
 
float Deplacement_Tir_X(float angle, float vitesse, float pos_x)
2116
 
{
2117
 
  pos_x += (float)(cos(angle)) * vitesse;
2118
 
  return (pos_x);
2119
 
}
2120
 
float Deplacement_Tir_Y(float angle, float vitesse, float pos_y)
2121
 
{
2122
 
  pos_y += (float)(sin(angle)) * vitesse;
2123
 
  return (pos_y);
2124
 
}