Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. #include "wizard.h"
  2. #include "../enemy.h"
  3. #include "../game.h"
  4. #include "../hero.h"
  5. #include <stdlib.h>
  6.  
  7. void createWizard(int x, int y)
  8. {
  9.         int i;
  10.         for (i = 0; i < MAX_ENEMIES; i++) {
  11.                 if (enemies[i] == NULL) {
  12.                         Enemy* e = malloc(sizeof *e);
  13.                         Wizard* w = malloc(sizeof *w);
  14.                         w->id = i;
  15.                        
  16.                         w->x = x;
  17.                         w->y = y;
  18.                        
  19.                         w->imageIndex = 0;
  20.                        
  21.                         w->state = 0;
  22.                         w->timer = 50;
  23.                         w->visible = 1;
  24.                        
  25.                         w->mask.circle = w->mask.unused = 0;
  26.                         w->mask.w = 24;
  27.                         w->mask.h = 38;
  28.                         w->mask.x = w->x + 8;
  29.                         w->mask.y = w->y + 2;
  30.                        
  31.                         e->data = w;
  32.                         e->enemyStep = wizardStep;
  33.                         e->enemyDraw = wizardDraw;
  34.                         e->type = 21;
  35.                        
  36.                         enemies[i] = e;
  37.                         i = MAX_ENEMIES;
  38.                 }
  39.         }
  40. }
  41.  
  42. void wizardStep(Wizard* w)
  43. {
  44.         w->imageIndex += 0.3;
  45.         if (w->imageIndex >= 3) {
  46.                 w->imageIndex -= 3;
  47.         }
  48.        
  49.         //Stand still
  50.         if (w->state == 0) {
  51.                 w->timer -= 1;
  52.                
  53.                 if (w->timer <= 0) {
  54.                         PHL_PlaySound(sounds[sndPi10], CHN_ENEMIES);
  55.                         w->state = 1;
  56.                         w->timer = 15;
  57.                 }              
  58.         }
  59.         //Flash
  60.         else if (w->state == 1 || w->state == 3) {
  61.                 if (w->visible == 0) {
  62.                         w->visible = 1;
  63.                 }else{
  64.                         w->visible = 0;
  65.                 }
  66.                
  67.                 w->timer -= 1;
  68.                 if (w->timer <= 0) {
  69.                         if (w->state == 1) {
  70.                                 w->state = 2;
  71.                                 w->timer = 60;
  72.                         }
  73.                         else if (w->state == 3) {
  74.                                 w->visible = 1;
  75.                                 w->state = 0;
  76.                                 w->timer = 50;
  77.                         }
  78.                 }
  79.         }
  80.         //Invisible
  81.         else if (w->state == 2) {
  82.                 w->visible = 0;
  83.                
  84.                 w->timer -= 1;
  85.                 if (w->timer <= 0) {
  86.                         PHL_PlaySound(sounds[sndPi03], CHN_ENEMIES);
  87.                         w->state = 3;
  88.                         w->timer = 15;
  89.                        
  90.                         //Horizontal Jump
  91.                         int gridX = w->x / 40,
  92.                                 gridY = w->y / 40,
  93.                                 lastGridX = gridX;
  94.                                
  95.                         do {
  96.                                 gridX = (rand() % 16) + 1;
  97.                         } while (collisionTiles[gridX][gridY] != 0 ||
  98.                                          collisionTiles[gridX][gridY+1] != 1 ||
  99.                                          gridX == lastGridX);
  100.                                          
  101.                         w->x = gridX * 40;
  102.                         w->mask.x = w->x + 8;
  103.                 }
  104.         }
  105.        
  106.         if (w->state == 0 || w->state == 3) {
  107.                 //Hit Player
  108.                 if (checkCollision(w->mask, getHeroMask())) {
  109.                         heroHit(15, w->x + 20);
  110.                 }
  111.                
  112.                 //Weapon Collision
  113.                 int i;
  114.                 for (i = 0; i < MAX_WEAPONS; i++) {
  115.                         if (weapons[i] != NULL) {
  116.                                 if (checkCollision(w->mask, weapons[i]->weaponMask)) {
  117.                                         weaponHit(weapons[i]);                                 
  118.                                         createEffect(2, w->x - 12, w->y - 6);
  119.                                         spawnCollectable(w->x + 20, w->y);
  120.                                         enemyDestroy(w->id);
  121.                                         i = MAX_WEAPONS;
  122.                                 }
  123.                         }      
  124.                 }
  125.         }
  126. }
  127.  
  128. void wizardDraw(Wizard* w)
  129. {
  130.         if (w->visible == 1) {                 
  131.                 PHL_DrawSurfacePart(w->x, w->y, 520 + (((int)w->imageIndex) * 40), 480, 40, 40, images[imgEnemies]);
  132.         }
  133. }