1
//*****************************************************************************
2
// copyright (c) 1998-2005 TLK Games all rights reserved
3
//-----------------------------------------------------------------------------
4
// file : "powermanga.cpp"
6
// updates : 2005-01-08
7
// id : $Id: powermanga.cpp,v 1.1.1.1 2005/01/25 05:53:49 gurumeditation Exp $
8
//-----------------------------------------------------------------------------
9
// This program is free software; you can redistribute it and/or modify it under
10
// the terms of the GNU General Public License as published by the Free Software
11
// Foundation; either version 2 of the License, or (at your option) any later
14
// This program is distributed in the hope that it will be useful, but WITHOUT
15
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
19
// You should have received a copy of the GNU General Public License along with
20
// this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21
// Place - Suite 330, Boston, MA 02111-1307, USA.
23
//*****************************************************************************
24
//..............................................................................
25
#include "powermanga.hpp"
26
extern configfile* power_conf;
27
//..............................................................................
28
unsigned int iJoueIntro = 1; //1=start anim / 2= end anom
29
unsigned int iCodeTouche = 0; //code key pressed / code touche pressee
30
unsigned int iBoutonFeu = 0; //1=bouton de la manette de jeu enfonce
31
unsigned int iBoutonOption = 0; //1=bouton option de la manette de jeu enfonce
32
unsigned int iManetteGauche = 0;
33
unsigned int iManetteDroite = 0;
34
unsigned int iManetteHaut = 0;
35
unsigned int iManetteBas = 0;
36
unsigned int iManettePosX = 0;
37
unsigned int iManettePosY = 0;
38
unsigned int iCompteurGlobal; //(ETB)compteur global a tout faire
39
unsigned int iCongratulation = 0; //(ETB)1=congratulations sont en cours
41
void _execute_congra(int);
42
int iErreurInitialisation; //1=erreur a l'initialisation
43
extern unsigned int iOctetsParPixel; //nombre d'octets par pixels (1=256 couleurs / 2=65536 couleurs)
44
extern _etbfonte1 *pEtbfonte1; //(ETB)objet cpp geran affichage caracteres 8x8
46
//..............................................................................
47
// Variables utilisees pour la gestion generale du jeu *************************
48
int etat_menu; //MENU_OFF(0)=menu inactif ; MENU_ON(1)=menu actif
49
bool player_pause; //1=pause en cours
50
bool aff_pause; //1=le texte "pause" est affiche
51
bool game_over_player_one; //1=le joueur vient de perdre son vaisseau.(game over)
52
bool aff_game_over = 1; //1=affichage du game over en cours
54
//..............................................................................
55
unsigned int bActive; //1=application activee
58
unsigned int g_bErrorOccured = 0;
59
short touch[500]; //tableau flags des touches du clavier
60
short mouse_b; //1=bouton gauche souris presse
62
// donnees utiles pour PowerManga ----------------------------------------------
64
bool eclair_actif; //1=joueur peut utiliser l'eclair
66
int pos_y_menu = BANDE_DE_CLIP + HAUT_ECR_RAM; //ordonnee affichage du menu
67
int taille_mem_glob; //taille memoire maximum utilisee
69
//..............................................................................
74
bool curv_editor = 0; // Flag indiquant si l'on se trouve dans l'�diteur de courbe ou non.
76
//..............................................................................
77
char *ecran_ram; //adresse ecran logique
78
char *chaine; //conversion des chaines de caracteres
81
//..............................................................................
82
int touche_ctrl; //1=touche ctrl ou bouton option de la manette de jeu a ete enfoncee
83
int num_image_logo; //logotlk :
84
bool bool_logo; //logotlk :
85
int posx_logo; //logotlk : abscisse
86
int posy_logo; //logotlk : ordonnee
87
bool move_logo; //logotlk : 1=deplacement du logo
89
// defilement de texte en bas de l'ecran du menu ..............................
90
fonte fnt_scroll[NBR_FONTES_SCROLL]; //tableau de variables utilise pour l'affichage
91
int liste_fnt_scroll[NBR_FNT_SCROLL_MAX]; //liste de toutes les fontes gerees
92
int cmpt_fnt_scroll; //compteur des fontes
93
short nbr_fnt_scroll; //nombre de fontes gerees actuellement
94
int new_fnt_scroll; //indice du tableau sur la prochaine objet fonte
95
fntscroll fnt_scr[NBR_FNT_SCROLL_MAX]; //tableau de tous les objets fontes
97
//..............................................................................
98
int cmpt_vbls_x2, cmpt_vbls_x4, aff_x2_rj, aff_x4_rj; //variables utilisees pour la gestion des multiplicateurs.
99
short first_value, second_value, compteur, compteur1;
100
int old_option; // Ancien num�ro d'option, utilis� pour l'effacement dans le panneau d'options.
101
image fire[MAX_TYP_OF_TIR][NBR_IMAGES_TIR]; // D�finit le tableau des diff�rents tirs.
102
fonte menu_spr[NBR_OPTION_MENU][NBR_IMAGES_MENU];
103
fonte logotlk[NBR_IMAGES_LOGOTLK];
104
vaisseau vj[NBR_MAX_J]; //structure des vaisseaux des joueurs.
105
short ge_act_pos_x = 0, ge_act_pos_y = 0; // Variables indiquant la position du carr� actuellement s�lectionn� dans la grille.
106
short t_l, t_s; // Variables utilis�es lors du chargement ou de la sauvegarde d'un fichier dans les �diteurs.
107
grid grille; // D�claration de la structure de grille des vaisseaux ennemis.
108
image meteo[MAX_TYP_OF_METEOR][NBR_IMAGES_METEOR]; // D�finit le tableau des diff�rentes m�t�orite.
109
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.
110
image explo[MAX_TYP_OF_EXPLOS][NBR_IMAGES_EXP]; // D�fini le tableau des diff�rentes images utilis�es pour les explosions.
111
image eclat[MAX_TYP_OF_ECLATS][NBR_IMAGES_ECLATS]; // D�fini le tableau des diff�rentes images utilis�es pour les explosions.
112
image boule[MAX_TYP_OF_BOULES][NBR_IMAGES_BOULES]; // D�finit le tableau des diff�rents ennemis.
113
image canon[MAX_TYP_OF_CANONS][NBR_IMAGES_CANONS]; // D�finit le tableau des diff�rents ennemis.
114
curve initial_curve[NBR_CURVE_MAX]; // structure des courbes de bezier
115
curve_level courbe; // D�claration de la structure de niveaux courbe.
116
unsigned char coulor[12]; // Tableau contenant les couleurs choisies par l'utilisateur.
117
unsigned char color_dead[NBR_COLOR_DEAD + 1]; // Tableau contenant les couleurs utilis�es lors de la disparition d'un vaisseau.
118
unsigned char color_eclair[2 + 1]; // tableau des couleurs utilisees lors de la disparition d'un vaisseau
119
tir tirs[NBR_TIRS_MAX]; //tableau de tous les objets tirs
120
int liste_tirs[NBR_TIRS_MAX]; //liste des 'tirs' geres
121
int cmpt_tirs; //compteur nombre de tirs.
122
short nbr_tirs; //nombre de tirs actuellement geres
123
int new_tir; // Indique l'indice du tableau corespondant � un nouvel objet 'tirs'.
124
star stars[NBR_OF_STARS]; //tableau du fond etoiles defilant verticalement
125
image star_field[TYPE_OF_STARS][NBR_ETOILES]; //tableau des images des etoiles
126
bool aff_star_field = 1; //1=affiche le champ d'etoile
127
float vit_star_field = 2.0; //vitesse du champs d'etoiles
128
vaisseau_nmi ve[MAX_NMI_ON_SCREEN]; // D�claration de la structure des vaisseaux ennemis.
129
int liste_ve[MAX_NMI_ON_SCREEN]; // liste de tous les vaisseaux ennemis a gerer
130
int cmpt_nmis; //compteur nombre d'ennemis
131
short nbr_nmis = 0; // Indique le nombre d'enemis actuellement g�r�s.
132
int new_ve; // Indique l'indice du tableau corespondant � un nouvel objet 've'.
133
explosion xpl[MAX_NMI_ON_SCREEN]; //structure utilisee par les explosions
134
int liste_xpl[MAX_NMI_ON_SCREEN]; //liste de tous les 'xpl' geres
135
int cmpt_exps; //compteur du nombre d'explosions
136
short nbr_exps = 0; //nombre d'explosions actuellement gerees
137
char str_file[50]; // D�claration d'une chaine pour le chargement de fichiers.
138
char str_tmp[40]; // Chaine temporaire utilis�e pour le chargement de fichiers.
140
//..............................................................................
141
char *nom_vaisso[MAX_TYP_OF_ENEMI+MAX_TYP_OF_S_ENEMI+4][20]={ //les differents vaisseaux ennemis
142
{"BOONIES"},{"MOOARCKS"},{"ACHEES"},{"EVILIANS"},
143
{"RAGOONS"},{"FLABBIES"},{"BOWANS"},{"HIJACKERS"},
144
{"DISTASIANS"},{"BRITTERS"},{"SICKIES"},{"ARIANS"},
145
{"STINCKIES"},{"BZEURCKS"},{"WEAKIES"},{"MASKIES"},
146
{"SCRAPIES"},{"SCROLLIANS"},{"SHAMISTEES"},{"FOOLINIANS"},
148
{"BIGBOONIES"},{"BIGMOOARCKS"},{"BIGACHEES"},{"BIGEVILIANS"},
149
{"BIGRAGOONS"},{"BIGFLABBIES"},{"BIGBOWANS"},{"BIGHIJACKERS"},
150
{"BIGDISTASIANS"},{"BIGBRITTERS"},{"BIGSICKIES"},{"BIGARIANS"},
151
{"BIGSTINCKIES"},{"BIGBZEURCKS"},{"BIGWEAKIES"},{"BIGSUPER MASKIES"},
152
{"BIGSCRAPIES"},{"BIGSCROLLIANS"},{"BIGSHAMISTEES"},{"BIGFOOLINIANS"},
155
//..............................................................................
156
short nbr_boules = 0; //nombre de boules actuellement gerees
157
int liste_bou[MAX_BOULES_ON_SCREEN]; //liste de toutes les 'bou' gerees
158
str_boule bou[MAX_BOULES_ON_SCREEN]; //structure des boules.
159
int new_bou; //pointeur sur un nouvel element 'bou'
160
int cmpt_boules; //compteur du nombre de boules
161
short nbr_canons = 0; //nombre de canons actuellement geres
162
int liste_can[MAX_CANONS_ON_SCREEN]; //liste de tous les 'can' geres
163
str_canon can[MAX_CANONS_ON_SCREEN]; //structure des canons.
164
int new_can; //pointeur sur un nouvel element 'can'.
165
int cmpt_canons; //compteur du nombre de canons
166
option aff_option[MAX_TYP_OF_OPTIONS]; //tableau pour afficher options
167
int nbr_ve_spe_generes; //nombre de vaisseaux sp�ciaux d�j� utilis�s dans le jeu.
168
short nbr_bonus = 0; //nombre de bonus actuellement g�r�s.
169
image bonus[MAX_TYP_OF_BONUS][NBR_IMAGES_BONUS]; //tableau des diff�rentes images des bonus.
170
fonte options[MAX_TYP_OF_OPTIONS][NBR_IMAGES_OPTIONS]; //tableau des diff�rentes images des options.
171
str_bonus bon[MAX_BONUS_ON_SCREEN]; //structure des bonus.
172
image vj1[NBR_MAX_VAIS_J][NBR_MAX_IMG_VAIS_J]; //structure des images des vaisseaux du joueur 1.
173
bool bar_nrj_player = 1;
174
bool bar_nrj_guardian = 1;
175
int tmp_apparition_vj; //vaisseau joueur : compteur temps apparition
176
bool disparition_vj; //vaisseau joueur : 1=disparition
177
int cmpt_vbl_nrj_player; //compteur augmentation automatique de l'energie du vaisseau appartenant au joueur.
178
int bonusx; //multiplicateur de points (*1, *2, *4)
179
fonte doublex[5]; //tableau des differentes images des multiplicateurs
181
//guardians ....................................................................
182
bool apparition_gardian; //1=apparition d'un gardien.
183
int gardian_activity; //1=guardian running
184
image gardi[NBR_ANIM_GARDIAN][NBR_IMAGES_NMI_S]; //images des differents gardiens
186
// meteors .....................................................................
187
bool meteor_activity;
188
int nbr_meteor_generer;
189
int cmpt_vbl_app_meteor;
191
int numero_du_meteor;
193
//..............................................................................
194
bool option_change; //Indique si un changement d'option � lieu ou pas.
195
float depix[13][32]; //tableau de deplacement en x des tirs a trajectoire fixe
196
float depiy[13][32]; //tableau de deplacement en y des tirs a trajectoire fixe
197
struct poly polyg; //defini un polygone pour la routine d'affichage d'Etienne.
198
float pre_sin[] = { 0.0f, 0.19509032202f, 0.38268343237f, 0.55557023302f, 0.70710678119f, 0.83146961230f, 0.92387953251f, 0.98078528040f, 1.0f, 0.98078528040f, 0.92387953251f, 0.83146961230f, 0.70710678119f, 0.55557023302f, 0.38268343237f, 0.19509032202f, 0.0f, -0.19509032202f, -0.38268343237f, -0.55557023302f, -0.70710678119f, -0.83146961230f, -0.92387953251f, -0.98078528040f, -1.0f, -0.98078528040f, -0.92387953251f, -0.83146961230f, -0.70710678119f, -0.55557023302f, -0.38268343237f, -0.19509032202f }; // Tableau de sinus pr�calcul�s.
199
float pre_cos[] = { 1.0f, 0.98078528040f, 0.92387953251f, 0.83146961230f, 0.70710678119f, 0.55557023302f, 0.38268343236f, 0.19509032201f, 0.0f, -0.19509032201f, -0.38268343236f, -0.55557023302f, -0.70710678119f, -0.83146961230f, -0.92387953251f, -0.98078528040f, -1.0f, -0.98078528040f, -0.92387953251f, -0.83146961230f, -0.70710678119f, -0.55557023302f, -0.38268343236f, -0.19509032201f, 0.0f, 0.19509032201f, 0.38268343236f, 0.55557023302f, 0.70710678119f, 0.83146961230f, 0.92387953251f, 0.98078528040f }; // Tableau de cosinus pr�calcul�s.
200
short curv_number; //numero de courbe actuelle.
201
bool all_nmi_killed; //1=tous les ennemis sont morts
206
short ce_vais_act = 0; // Variable utilis�e pour indiquer le vaisseau actuellement s�lectionn� dans l'�diteur de courbe.
207
short cercle_px[] = {30,29,29,29,28,27,26,25,24,22,21,19,17,15,13,11,9,7,4,2,0,-2,-4,-7,-9,-11,-13,-15,-17,-19,-21,-22,-24,-25,-26,-27,-28,-29,-29,-29,-30,-29,-29,-29,-28,-27,-26,-25,-24,-22,-21,-19,-17,-15,-13,-11,-9,-7,-4,-2,0,2,4,7,9,11,13,15,17,19,21,22,24,25,26,27,28,29,29,29};
208
short cercle_py[] = {0,2,4,7,9,11,13,15,17,19,21,22,24,25,26,27,28,29,29,29,30,29,29,29,28,27,26,25,24,22,21,19,17,15,13,11,9,7,4,2,0,-2,-4,-7,-9,-11,-13,-15,-17,-19,-21,-22,-24,-25,-26,-27,-28,-29,-29,-29,-30,-29,-29,-29,-28,-27,-26,-25,-24,-22,-21,-19,-17,-15,-13,-11,-9,-7,-4,-2};
215
//******************************************************************************
216
// "upDateFrame" : the main loop of game / boucle principale du jeu
217
//******************************************************************************
219
{ //static int i, j, k, l, m, n, o ; // variables utilisees pour les boucles
222
//..............................................................................
224
static bool grid_editor = 0; //1=editeur de grille en cours
226
//..............................................................................
227
iCompteurGlobal++; // global counter / compteur global
230
//joue les animations d'etienne ----------------------------------------------
234
{ afficheErreur("joueAnimation() failed !",
235
"powermanaga.cpp/UpdateFrame()");
242
//efface l'ecran logique -----------------------------------------------------
243
raz_ecran(ecran_ram + (BANDE_DE_CLIP * LARG_ECR_RAM_TOT * iOctetsParPixel) +
244
(BANDE_DE_CLIP * iOctetsParPixel),
245
(LARG_ECR_RAM * iOctetsParPixel) >> 2, HAUT_ECR_RAM,
246
(LARG_ECR_RAM_TOT - LARG_ECR_RAM) * iOctetsParPixel);
248
//restauration de l'energie du vaisseau du joueur ----------------------------
251
//editeurs de "grilles" et de "courbes" --------------------------------------
253
if(grid_editor || curv_editor)
263
//routines du jeu ************************************************************
265
//pause inactive et menu inactif ?
266
if(!player_pause && etat_menu == MENU_OFF &&
267
_score::getActionExecution() == 0)
268
{ grille_execution(); //phase 2 : execution des "grilles" de vaisseaux
269
courbe_execution(); //phase 1 : execution des "courbes" de vaisseaux
270
meteor_execution(); //phase 3 : execution des vagues de meteores
274
//affiche le fond d'etoile defilant verticalemenent --------------------------
277
//gestion des bonus ----------------------------------------------------------
280
//gestion des canons & des boules autour du vaisseau du joueur ---------------
281
if(!aff_game_over && _score::getActionExecution() == 0)
287
//gestion des ennemis --------------------------------------------------------
288
if(iCongratulation == 0)
289
ennemis_execution(); //gestion de tous les ennemis existants
291
_execute_congra(iNumeroGardien); //routine special "congratulations"
293
//gestion de l'invincibilite du vaisseau -------------------------------------
294
vaisseau_invincibilite();
296
//gestion de l'eclair (arme du vaisseau joueur) ------------------------------
299
//affichage du vaisseau du joueur --------------------------------------------
300
if(!aff_game_over && vj[J1].visible)
302
if(((short)vj[J1].spr.coor_y +
303
vj[J1].spr.img[vj[J1].spr.img_act]->haut) >= BANDE_DE_CLIP)
305
if(vj[J1].affich_white) // affichage en blanc ?
307
putsprcolor(coulor[BLANC], vj[J1].spr.img[vj[J1].spr.img_act],
308
(int)(vj[J1].spr.coor_x), (int)(vj[J1].spr.coor_y));
309
vj[J1].affich_white = 0;
311
else //sinon affichage normal
313
putsprite3(vj[J1].spr.img[vj[J1].spr.img_act], (unsigned int)vj[J1].spr.coor_x,
314
(unsigned int)vj[J1].spr.coor_y);
319
//gestion des explosions ------------------------------------------------------
320
explosionExecution();
322
//gestion des tirs ------------------------------------------------------------
325
//si plus d'ennemi a l'ecran, on passe a la phase suivante --------------------
326
if(!nbr_nmis && !player_pause && etat_menu == MENU_OFF
327
&& _score::getActionExecution() == 0)
329
if(!gardien_testFin()) // on etait dans une phase "gardien" ?
331
afficheErreur("gardien_testFin failed", "powermanga.cpp/UpdateFrame()");
334
courbe_testFin(); // on etait dans une phase "courbe" ?
335
grille_testFin(); // on etait dans une phase "grille" ?
336
if(!meteor_initialise()) // on etait dans une phase "meteor" ?
338
afficheErreur("meteor_initialise failed !",
339
"powermanga.cpp/UpdateFrame()");
344
//deplace un pixel a l'ecran, en guise de cuseur souris ----------------------
347
putpixel(ecran_ram, mouse_x, mouse_y, 5);
350
//affichage des ondes de choc -------------------------------------------------
353
// test si l'etat des options a change, animation des options ------------------
356
//affichage scores, "game over", "about" & order (ETB) -------------------------
357
//if (aff_game_over)//"game over" en cours ?
359
if(etat_menu == MENU_OFF)
360
_score::execution(0); // gestion menu desactive
362
_score::execution(1); // gestion menu active
365
//affiche le mot "pause" a l'ecran, si la pause est active ---------------------
367
Aff_Game_Pause_Player_One();
369
//apparition du vaisseau du joueur ---------------------------------------------
370
if(tmp_apparition_vj > 0)
372
tmp_apparition_vj--; //decrementation du compteur
373
vit_star_field += 0.028f; //augmentation de la vitesse du champ d'etoile
374
if(vit_star_field > 2.0)
375
vit_star_field = 2.0; //bloque a la vitesse maximum
376
vj[J1].invincible = TEMPS_INVINCIBLE / 3; //temps d'invinsiblite du vaisseau
379
//disapparition du vaisseau du joueur ------------------------------------------
380
if(disparition_vj && iCongratulation == 0)
382
vit_star_field -= 0.02f; //diminue la vitesse du champ d'etoile
383
if(vit_star_field <= 0.0) //bloque la vitesse a zero
385
vit_star_field = 0.0;
386
vj[J1].vitesse_y = 0.0;
389
vj[J1].vitesse_y += -0.15f; //augmente vitesse vaisseau, pour qu'il sorte de l'ecran
392
//deplacement des caracteres affichant le numero du niveau----------------------
393
Aff_Level_Player_One();
395
//gestion du defilemenet de texte en bas de l'ecran du menu --------------------
396
Gestion_Fontes_Ki_Scrollent();
398
//gestion du menu principal de powermanga --------------------------------------
399
if(etat_menu != MENU_OFF)
401
if(!Gestion_Menu()) //routine gerant le menu
406
if(touch[0]) //touche [ESC] pressee ?
408
etat_menu = APPARITION_MENU; //met le flag apparition du menu a 1
409
Init_Scroll_Present(); //initialise le defilement du texte en bas
413
//[f1]=apparition du vaisseau ; [f2]=disparition du vaisseau -------------------
417
if(touch[1] && vit_star_field == 0.0)
418
Apparition_Vaisseau();
421
//gestion du "logotlk"----------------------------------------------------------
422
if(move_logo) //on gere le logo ?
424
putsprite3(&logotlk[num_image_logo], posx_logo, posy_logo);
425
if(bool_logo) //on passe a l'animation suivante ?
428
if(num_image_logo >= NBR_IMAGES_LOGOTLK)
431
posy_logo--; //deplacement du logo vers le haut
436
move_logo = 0; //logo sort en haut, on stop la gestion
439
//(ETB) gestion affichage caractere 8x8 (about, parametres, variables) -------
440
pEtbfonte1->execution();
442
//test si le joueur perd son vaisseau, et si la partie est terminee ------------
443
if(game_over_player_one && !aff_game_over
444
&& _score::getActionExecution() == 0)
447
if(vj[J1].type_vaisseau != V1J) //le vaisseau n'est pas le premier vaisseau ?
449
vj[J1].type_vaisseau--; //non, on regresse au vaisseau inferieur
451
seal_joue(VCHANGE2); //joue un son avec seal
453
vj[J1].metamorphose = 1; //indique une metamorphose du vaisseau
454
vj[J1].cad_tir = 50 - (vj[J1].type_vaisseau * 5 + 5); //nombre de vbls necessaires avant que le vaisseau puisse a nouveau tirer
455
vj[J1].spr.pow_of_dest = (short)(vj[J1].type_vaisseau * 20 + 20); //indique la puissance de destruction du sprite
456
vj[J1].spr.etat_dommages = vj[J1].spr.pow_of_dest; //indique l'atat de dommages du sprite
457
bonusx = 0; //raz le multiplicateur de points
458
if(!aff_option[1].close_option)
459
Init_Anim_Option(1, 1); //ferme l'option ernergie
460
if(aff_option[10].close_option)
461
Init_Anim_Option(10, 0); //ouverture option transformation
462
vj[J1].invincible = TEMPS_INVINCIBLE; //temps d'invincibilite
463
bar_nrj_player = 1; //demande reaffichage barre d'energie du joueur
464
game_over_player_one = 0;
465
for(i = 0; i < NBR_MAX_IMG_VAIS_J; i++)
466
vj[J1].spr.img[i] = (image *) & vj1[vj[J1].type_vaisseau][i]; //donne adresse des images du vaisseau du joueur
468
for(i = 0; i < MAX_BOULES_ON_SCREEN; i++)
469
liste_bou[i] = 0; //initialise tableau 'bou'
471
for(i = 0; i < MAX_CANONS_ON_SCREEN; i++)
472
liste_can[i] = 0; //initialise tableau "can'
476
_initialiseGameOver(); //sinon, c'etait le vaisseau 1, la partie est terminee
481
//gestion de la barre d'energie du joueur --------------------------------------
482
update_bar_nrj_player();
484
//gestion de la barre d'energie du gardien -------------------------------------
487
//gestion du score du joueur ---------------------------------------------------
488
Aff_Score_Player_One(); //oui, saut a la routine d'affichage du score
490
//gestion du score du joueur ----------------------------------------------------
492
if(touch[40] && touch[63])
493
grid_editor = 1; //[e]+[g] active editeur de grille
494
if(touch[40] && touch[78])
495
curv_editor = 1; //[e]+[c] active editeur de courbes
496
if(touch[47] && touch[63]) //[p]+[g] ?
500
} //oui, retourne dans le jeu
503
//deplacement du vaisseau du joueur ---------------------------------------------
504
if(!player_pause && !aff_game_over && etat_menu == MENU_OFF
505
&& _score::getActionExecution() == 0)
507
if(tmp_apparition_vj <= 0 && !disparition_vj) // phase de d'apparition ou disparition ?
509
if(vj[J1].vitesse_x >= 0.5f)
510
vj[J1].vitesse_x -= 0.2f; // non, decremente vitesse de deplacement
511
if(vj[J1].vitesse_x <= -0.5f)
512
vj[J1].vitesse_x += 0.2f;
513
if(vj[J1].vitesse_y >= 0.5f)
514
vj[J1].vitesse_y -= 0.2f;
515
if(vj[J1].vitesse_y <= -0.5f)
516
vj[J1].vitesse_y += 0.2f;
517
if(!game_over_player_one) //le joueur est mort ?
519
if(touch[71] || iManetteGauche == 1)
520
vj[J1].vitesse_x -= 0.5f; //test touches deplacement
521
if(touch[73] || iManetteDroite == 1)
522
vj[J1].vitesse_x += 0.5f;
523
if(touch[55] || iManetteHaut == 1)
524
vj[J1].vitesse_y -= 0.5f;
525
if(touch[87] || iManetteBas == 1)
526
vj[J1].vitesse_y += 0.5f;
527
if(touch[88] && touch[58])
528
_initialiseGameOver(); //(ETB)[ctrl]+[q] force "game over"
531
else //oui, phase d'apparition ou de disparition du vaisseau du joueur
533
if(vj[J1].vitesse_x >= 0.5f)
534
vj[J1].vitesse_x -= 0.4f; //decremente vitesse
535
if(vj[J1].vitesse_x <= -0.5f)
536
vj[J1].vitesse_x += 0.4f;
537
if(vj[J1].vitesse_y >= 0.5f)
538
vj[J1].vitesse_y -= 0.01f;
539
if(vj[J1].vitesse_y <= -0.5f)
540
vj[J1].vitesse_y += 0.01f;
544
//touche [p] ou [pause] pressee : active / desactive la pause -------------------
545
if((touch[47] || touch[150]) && !game_over_player_one
546
&& tmp_apparition_vj <= 0 && !disparition_vj && etat_menu == MENU_OFF
547
&& _score::getActionExecution() == 0)
559
touch[150] = 0; //raz les touches de pause
563
//if ((touch[39]) && (touche_ctrl))
564
if((touch[39]) && !_score::isInputName())
565
{ if(power_conf->fullscreen)
566
power_conf->fullscreen = 0;
568
power_conf->fullscreen = 1;
575
//clip la vitesse de deplacement du vaisseau du joueur -------------------------
576
if(vj[J1].vitesse_x >= (float)vj[J1].vit_dep_vaisseau) //depasse vitesse droite ?
578
vj[J1].vitesse_x = (float)vj[J1].vit_dep_vaisseau; //oui, bloque la vitesse du vaisseau
579
vj[J1].spr.img_act = 4; //image la plus a droite du vaisseau
583
if(vj[J1].vitesse_x > 0)
584
vj[J1].spr.img_act = 3; //image de droite
586
if(vj[J1].vitesse_x <= (float)(-vj[J1].vit_dep_vaisseau)) //depasse vitesse gauche ?
588
vj[J1].vitesse_x = (float)(-vj[J1].vit_dep_vaisseau); //oui; bloque la vitesse
589
vj[J1].spr.img_act = 0; //image la plus a gauche du vaisseau.
593
if(vj[J1].vitesse_x < 0)
594
vj[J1].spr.img_act = 1; //image de gauche
596
if(tmp_apparition_vj <= 0 && !disparition_vj) //phase d'apparition ou disparition ?
598
if(vj[J1].vitesse_y > vj[J1].vit_dep_vaisseau)
599
vj[J1].vitesse_y = (float)vj[J1].vit_dep_vaisseau; //non clip la vitesse verticale
600
if(vj[J1].vitesse_y < (-vj[J1].vit_dep_vaisseau))
601
vj[J1].vitesse_y = (float)(-vj[J1].vit_dep_vaisseau);
603
if(!player_pause && etat_menu == MENU_OFF
604
&& _score::getActionExecution() == 0)
606
vj[J1].spr.coor_x += vj[J1].vitesse_x; //calcul nouvelle abscisse
607
vj[J1].spr.coor_y += vj[J1].vitesse_y; //calcul nouvelle ordonnee
608
if(vj[J1].spr.coor_y < (float)(DEBUT_ECRAN_Y - 100))
609
vj[J1].spr.coor_y = (float)(DEBUT_ECRAN_Y - 100); //test si le vaisseau du joueur ne va pas trop loin dans le haut de l'ecran
611
if(fabs(vj[J1].vitesse_x) < 0.5) //met la vitesse horizontal du vaisseau a zero
613
vj[J1].vitesse_x = 0.0;
614
vj[J1].spr.img_act = 2; //image centrale du vaisseau.
617
//fait descendre le vaisseau tout seul & test limite ecran --------------------
618
if(tmp_apparition_vj <= 0 && !disparition_vj) //on est pas dans une phase d'apparition ou disparition du vaisseau du joueur?
620
if(!player_pause && etat_menu == MENU_OFF && _score::getActionExecution() == 0) //pause & menu non actifs
622
{ //incrementation automatique de la vitesse y du vaisseau afin qu'il descende automatiquement
623
if(!touch[87] && !touch[55] && !iManetteHaut && !iManetteBas)
624
if(vj[J1].vitesse_y <= 0.2f)
625
vj[J1].vitesse_y += 0.025f;
628
//empeche les vaisseaux des joueurs de sortir des limites de l'ecran.
629
if((short)vj[J1].spr.coor_x < 128)
631
vj[J1].spr.coor_x = 128.0;
632
vj[J1].vitesse_x = 0.0;
634
if(((short)vj[J1].spr.coor_x +
635
(short)vj[J1].spr.img[vj[J1].spr.img_act]->larg) > 128 + LARG_ECR_RAM)
638
(float)(LARG_ECR_RAM + 128.0f -
639
vj[J1].spr.img[vj[J1].spr.img_act]->larg);
640
vj[J1].vitesse_x = 0.0f;
642
if((short)vj[J1].spr.coor_y < 128)
644
vj[J1].spr.coor_y = 128.0;
645
vj[J1].vitesse_y = 0.0;
647
if(((short)vj[J1].spr.coor_y +
648
(short)vj[J1].spr.img[vj[J1].spr.img_act]->haut) > 128 + HAUT_ECR_RAM)
651
(float)(HAUT_ECR_RAM + 128.0f -
652
vj[J1].spr.img[vj[J1].spr.img_act]->haut);
653
vj[J1].vitesse_y = 0.0f;
657
//Test codes touches triches (JMM) --------------------------------------------
662
//handle weapon's player ship
664
if(!grid_editor && !curv_editor && !game_over_player_one && !player_pause
665
&& etat_menu == MENU_OFF && _score::getActionExecution() == 0)
667
if(!game_over_player_one && !player_pause && etat_menu == MENU_OFF
668
&& _score::getActionExecution() == 0)