Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- =================
- =
- = T_Projectile
- =
- =================
- */
- void T_Projectile (objtype *ob)
- {
- int32_t deltax,deltay;
- int damage;
- int32_t speed;
- speed = (int32_t)ob->speed*tics;
- deltax = FixedMul(speed,costable[ob->angle]);
- deltay = -FixedMul(speed,sintable[ob->angle]);
- if (deltax>0x10000l)
- deltax = 0x10000l;
- if (deltay>0x10000l)
- deltay = 0x10000l;
- ob->x += deltax;
- ob->y += deltay;
- deltax = LABS(ob->x - player->x);
- deltay = LABS(ob->y - player->y);
- if (!ProjectileTryMove (ob))
- {
- #ifndef APOGEE_1_0 // actually the whole method is never reached in shareware 1.0
- if (ob->obclass == rocketobj)
- {
- PlaySoundLocActor(MISSILEHITSND,ob);
- ob->state = &s_boom1;
- }
- #ifdef SPEAR
- else if (ob->obclass == hrocketobj)
- {
- PlaySoundLocActor(MISSILEHITSND,ob);
- ob->state = &s_hboom1;
- }
- #endif
- else
- #endif
- ob->state = NULL; // mark for removal
- return;
- }
- if (deltax < PROJECTILESIZE && deltay < PROJECTILESIZE)
- { // hit the player
- switch (ob->obclass)
- {
- case needleobj:
- damage = (US_RndT() >>3) + 20;
- break;
- case rocketobj:
- case hrocketobj:
- case sparkobj:
- damage = (US_RndT() >>3) + 30;
- break;
- case fireobj:
- damage = (US_RndT() >>3);
- break;
- }
- TakeDamage (damage,ob);
- ob->state = NULL; // mark for removal
- return;
- }
- ob->tilex = (short)(ob->x >> TILESHIFT);
- ob->tiley = (short)(ob->y >> TILESHIFT);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement