Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.75 KB | None | 0 0
  1. /*
  2. =================
  3. =
  4. = T_Projectile
  5. =
  6. =================
  7. */
  8.  
  9. void T_Projectile (objtype *ob)
  10. {
  11.     int32_t deltax,deltay;
  12.     int     damage;
  13.     int32_t speed;
  14.  
  15.     speed = (int32_t)ob->speed*tics;
  16.  
  17.     deltax = FixedMul(speed,costable[ob->angle]);
  18.     deltay = -FixedMul(speed,sintable[ob->angle]);
  19.  
  20.     if (deltax>0x10000l)
  21.         deltax = 0x10000l;
  22.     if (deltay>0x10000l)
  23.         deltay = 0x10000l;
  24.  
  25.     ob->x += deltax;
  26.     ob->y += deltay;
  27.  
  28.     deltax = LABS(ob->x - player->x);
  29.     deltay = LABS(ob->y - player->y);
  30.  
  31.     if (!ProjectileTryMove (ob))
  32.     {
  33. #ifndef APOGEE_1_0          // actually the whole method is never reached in shareware 1.0
  34.         if (ob->obclass == rocketobj)
  35.         {
  36.             PlaySoundLocActor(MISSILEHITSND,ob);
  37.             ob->state = &s_boom1;
  38.         }
  39. #ifdef SPEAR
  40.         else if (ob->obclass == hrocketobj)
  41.         {
  42.             PlaySoundLocActor(MISSILEHITSND,ob);
  43.             ob->state = &s_hboom1;
  44.         }
  45. #endif
  46.         else
  47. #endif
  48.             ob->state = NULL;               // mark for removal
  49.  
  50.         return;
  51.     }
  52.  
  53.     if (deltax < PROJECTILESIZE && deltay < PROJECTILESIZE)
  54.     {       // hit the player
  55.         switch (ob->obclass)
  56.         {
  57.         case needleobj:
  58.             damage = (US_RndT() >>3) + 20;
  59.             break;
  60.         case rocketobj:
  61.         case hrocketobj:
  62.         case sparkobj:
  63.             damage = (US_RndT() >>3) + 30;
  64.             break;
  65.         case fireobj:
  66.             damage = (US_RndT() >>3);
  67.             break;
  68.         }
  69.  
  70.         TakeDamage (damage,ob);
  71.         ob->state = NULL;               // mark for removal
  72.         return;
  73.     }
  74.  
  75.     ob->tilex = (short)(ob->x >> TILESHIFT);
  76.     ob->tiley = (short)(ob->y >> TILESHIFT);
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement