home *** CD-ROM | disk | FTP | other *** search
/ ISV Strong Games / ISV_STRONG_GAMES.iso / shootemup / hive / !Hive / c / main_hnd < prev    next >
Text File  |  2000-11-27  |  5KB  |  201 lines

  1. #include <stdlib.h>
  2.  
  3. #include "DeskLib:h.Kbd"
  4. #include "DeskLib:h.SWI"
  5.  
  6. #include "Popcorn:h.Popcorn"
  7.  
  8. #include "h.game"
  9. #include "h.sound"
  10. #include "h.useful"
  11.  
  12. #define random(n) (rand() % (n))
  13.  
  14. void explode_handler(struct game_object *obj, union object_flags reason, void *data)
  15. {
  16.   Popcorn_DeleteObject(obj);
  17. }
  18.  
  19. void token_handler(struct game_object *obj, union object_flags reason, void *data)
  20. {
  21.   if (reason.bits.collide)
  22.   {
  23.     Popcorn_DeleteObject(obj)
  24.     make_sound("<Hive$Dir>.Sounds.Token");
  25.     score = score + 200;
  26.     switch (random(4))
  27.     {
  28.       case 0 :
  29.         invulnerable = invulnerable + 500; break;
  30.       case 1 :
  31.         special = 1; break;
  32.       case 2 :
  33.         special = 2; break;
  34.       case 3 :
  35.         fire_freq = 20; break;
  36.     }
  37.   }
  38.  
  39.   if (reason.bits.attn_gameout)
  40.   {
  41.     if (obj->x > (319>>12) || obj->x < 0)
  42.       obj->xv = -obj->xv;
  43.   }
  44. }
  45.  
  46. void missile_handler(struct game_object *obj, union object_flags reason, void *data)
  47. {
  48.   struct game_object   *obj2;
  49.  
  50.   obj2 = (struct game_object*) data;
  51.  
  52.   if (reason.bits.collide && obj2->object_id != 0)
  53.   {
  54.     delete_alien(obj2);
  55.     return;
  56.   }
  57. }
  58.  
  59. void firework_handler(struct game_object *obj, union object_flags reason, void *data)
  60. {
  61.   struct game_object      *t_obj;
  62.   int               c;
  63.  
  64.   if (reason.bits.collide)
  65.   {
  66.     for(c=0; c!=10; c++)
  67.     {
  68.       t_obj = Popcorn_NewPrototype(missile_table, 'BMBR', obj->x, obj->y);
  69.       t_obj->xv = random(32768)-16384;
  70.       if ( (t_obj->xv & 1) == 1 )
  71.         t_obj->xv = -t_obj->xv;
  72.       t_obj->yv = random(32768)-16384;
  73.       if ( (t_obj->yv & 1) == 1 )
  74.         t_obj->yv = -t_obj->yv;
  75.       t_obj->timer.value = 300; t_obj->timer.decrement = 1;
  76.     }
  77.     make_lots_of_particles_everywhere(obj->x, obj->y, 100);
  78.     Popcorn_DeleteObject(obj);
  79.   }
  80. }
  81.  
  82. void bullet_handler(struct game_object *obj, union object_flags reason, void *data)
  83. {
  84.  struct game_object   *obj2;
  85.  
  86.   obj2 = (struct game_object*) data;
  87.  
  88.   if (reason.bits.collide && obj2->object_id != 0)
  89.   {
  90.     Popcorn_DeleteObject(obj);
  91.     delete_alien(obj2);
  92.     fired--;
  93.     return;
  94.   }
  95.   if (reason.bits.attn_gameout)
  96.   {
  97.     Popcorn_DeleteObject(obj);
  98.     fired--;
  99.   }
  100. }
  101.  
  102. void ship_handler(struct game_object *obj, union object_flags reason, void *data)
  103. {
  104.   struct game_object   *missile;
  105.   int                c;
  106.  
  107.   if (reason.bits.attn_every)
  108.   {
  109.     ship_x = obj->x;
  110.     if (Kbd_KeyDown(-98) && obj->x > 0)
  111.     {
  112.       ship_pos = ship_pos - 4; if (ship_pos < 0) ship_pos = 0;
  113.       obj->x = obj->x - 8192;
  114.     }
  115.  
  116.     if (Kbd_KeyDown(-67) && obj->x < 320<<12)
  117.     {
  118.       ship_pos = ship_pos + 4; if (ship_pos > 64) ship_pos = 64;
  119.       obj->x = obj->x + 8192;
  120.     }
  121.  
  122.     if (ship_pos > 28) ship_pos = ship_pos - 2;
  123.     if (ship_pos < 28) ship_pos = ship_pos + 2;
  124.     obj->plot_id.sprite_anchor = ship_sprite[ship_pos>>3];
  125.  
  126.     if (Kbd_KeyDown(-74) && fired != max_fired && fire_again == 0)
  127.     {
  128.       make_sound("<Hive$Dir>.Sounds.Shoot");
  129.       missile = Popcorn_NewPrototype(missile_table, 'TLLB', obj->x, obj->y);
  130.       missile->yv = -(4<<12);
  131.       fired++;
  132.       fire_again = fire_freq;
  133.     }
  134.  
  135.     if (Kbd_KeyDown(-99) && special != 0)
  136.     {
  137.       switch (special)
  138.       {
  139.         case 1 :
  140.           make_sound("<Hive$Dir>.Sounds.Missile");
  141.           missile = Popcorn_NewPrototype(missile_table, 'RIPS', obj->x, obj->y);
  142.           missile->yv = -(2<<12);
  143.           special = 0; break;
  144.         case 2 :
  145.           make_sound("<Hive$Dir>.Sounds.Missile");
  146.           missile = Popcorn_NewPrototype(missile_table, 'LSIM', obj->x, obj->y);
  147.           missile->yv = -(6<<12);
  148.           special = 0; break;
  149.       }
  150.     }
  151.  
  152.     if (invulnerable != 0)
  153.     {
  154.       invulnerable--;
  155.       if ( (invulnerable & 3) == 0)
  156.         obj->flags.bits.std_plot = TRUE;
  157.       else
  158.         obj->flags.bits.std_plot = FALSE;
  159.       if (invulnerable == 0)
  160.         obj->flags.bits.std_plot = TRUE;
  161.     }
  162.  
  163.     if (fire_again != 0) fire_again--;
  164.   }
  165.  
  166.  
  167.   if ( (reason.bits.collide && invulnerable == 0) || Kbd_KeyDown(-113) )
  168.   {
  169.     if (Kbd_KeyDown(-113))
  170.       lives = 1;
  171.     make_sound("<Hive$Dir>.Sounds.Explode");
  172.     make_explosion(obj->x, obj->y);
  173.     Popcorn_DeleteObject(obj);
  174.     lives--;
  175.     if (lives == 0)
  176.     {
  177.       SWI(0, 1, SWI_OS_ReadMonotonicTime, &last_killed_at);
  178.       for (c=0; c!=alien_table->max_objects; c++)
  179.         Popcorn_DeleteObject(&alien_table->object[c]);
  180.       for (c=0; c!=alien_swoop_table->max_objects; c++)
  181.         Popcorn_DeleteObject(&alien_swoop_table->object[c]);
  182.       for (c=0; c!=alien_missile_table->max_objects; c++)
  183.         Popcorn_DeleteObject(&alien_missile_table->object[c]);
  184.       game_finish();
  185.       aliens_left = 0;
  186.       wave = -1;
  187.     }
  188.     else
  189.     {
  190.       SWI(0, 1, SWI_OS_ReadMonotonicTime, &next_life_time);
  191.       invulnerable = 100;
  192.     }
  193.   }
  194. }
  195.  
  196. void bang_handler(struct game_object *obj, union object_flags reason, void *data)
  197. {
  198.     make_lots_of_particles_everywhere(obj->x, obj->y, 40);
  199.     Popcorn_DeleteObject(obj);
  200. }
  201.