Capture tes ennemis

pour Romain (Rosny-sous-bois)

Tu aimerais que ton joueur puisse collecter les ennemis plutôt que de les affronter ? Avec ce hack ton joueur pourra capturer ses ennemis et les transformer en objets.

Créer une animation

Nous allons avoir besoin d'une petite animation pour que ton joueur comprenne ce qu'il se passe quand il capture un ennemi. Dans le script enemy.js colle cette nouvelle fonction que je t'ai préparée.

function getAnimation(a,h){ // animation de rétrécissement view.scale(-sin(a/2)); }

Maintenant, déclenchons cette animation quand ton joueur capture un ennemi. Toujours dans le script ennemy.js trouve la fonction drawEnemy() et effectue cette petite modification.

function drawEnemy(img,x,y,w,h,a,f,i,an){
  
  view.push();

  view.texture(img);
  view.translate(x*h,y*h);
  view.rotateY(PI/2);
  view.rotateX(-(playerR[0]+1)*PI/2);
  view.rotateZ(-PI/2);
  view.translate(0,0,h/2);

  if (an==2) hitAnimation(a,1);
  if (an==1) hitAnimation(a,-1);
  
if (an==0) fallAnimation(a,h);
if (an==0) getAnimation(a,h);
if (f) flyAnimation(h); if (i) view.rotateY(PI); view.plane(w,h); view.pop(); }

Désormais, lorsque ton joueur achèvera un monstre, une animation de rétrécissement se déclenchera plutôt qu'une animation de chute.

Transformer l'ennemi en objet

Maintenant nous allons créer une foncion qui créée un nouvel objet et le place dans l'inventaire du joueur. Je t'en ai préparé une que tu peux coller dans le script enemy.js.

function getEnemy(thisEnemy){ // crée un nouvel objet let n ; let p = playerPos[0]; let type = thisEnemy.type; if ( type == 0 ) n = new item ( p , 1 ); if ( type == 1 ) n = new item ( p , 2 ); if (n) pickItem( n ); }

Change les valeurs dans la condition pour choisir le personnage.

if ( type == 0 ) n = new item ( p , 1 ); // pour le personage 0
if ( type == 1 ) n = new item ( p , 1 ); // pour le personage 1

Puis change la valeur dans l'objet pour choisir le type d'objet qui apparaîtra dans l'inventaire du joueur quand ce dernier sera capturé.

if ( type == 0 ) n = new item ( p , 1 ); // pour l'objet 1
if ( type == 0 ) n = new item ( p , 2 ); // pour l'objet 2

Enfin pour que ce hack prenne effet, dans le script enemys.js ajoute cette la ligne dans la fonction attack().

function attack(thisEnemy){

  // fait perdre un point de vie à l'adversaire

  let d = 1;
  let h = thisEnemy.health[1] ;
  
  if ( h ==3 ) fx[2].play();
  if ( h ==2 ) fx[3].play();
  if ( h <=1 ) fx[0].play();

  if ( h <= 1 ) getEnemy(thisEnemy);
  
  thisEnemy.health[1] -= d;
  
}

Il faudra quelques coups avant que ton joueur parvienne à attraper l'ennemi. Tu préférerais qu'il y arrive en un coup ? Alors effectue plutôt ces modifications.

function attack(thisEnemy){

  // fait perdre un point de vie à l'adversaire

let d = 1; let h = thisEnemy.health[1] ; if ( h ==3 ) fx[2].play(); if ( h ==2 ) fx[3].play(); if ( h <=1 ) fx[0].play(); thisEnemy.health[1] -= d;
getEnemy(thisEnemy); thisEnemy.health[1] = 0;
}