Ejemplo n.º 1
0
static void doSplashDamage(void)
{
	Entity *e, **candidates;
	int i, dist, kills;
	float damage, percent;

	candidates = getAllEntsInRadius(self->x, self->y, DAMAGE_RANGE, self);
	
	kills = 0;

	for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
	{
		if (e->health > 0 && (e->type == ET_FIGHTER || e->type == ET_MINE) && !(e->flags & EF_IMMORTAL))
		{
			dist = getDistance(self->x, self->y, e->x, e->y);
			
			if (dist <= DAMAGE_RANGE)
			{
				percent = dist;
				percent /= DAMAGE_RANGE;
				percent = 1 - percent;
				
				damage = DAMAGE_RANGE;
				damage *= percent;
				
				if (e->type == ET_FIGHTER)
				{
					damageFighter(e, damage, 0);
					
					if (self->killedBy == player && e != player && e->health <= 0)
					{
						kills++;
					}
				}
				else if (e->type == ET_MINE)
				{
					e->dx = e->x - self->x;
					e->dy = e->y - self->y;
					
					e->dx *= 0.01;
					e->dy *= 0.01;
				}
			}
		}
	}
	
	if (kills >= 2)
	{
		awardTrophy("2_BIRDS");
	}
}
Ejemplo n.º 2
0
static void doSplashDamage(void)
{
	Entity *e, **candidates;
	int i, dist;
	float damage, percent;

	candidates = getAllEntsWithin(self->x - (self->w / 2), self->y - (self->h / 2), self->w, self->h, self);

	for (i = 0, e = candidates[i] ; e != NULL ; e = candidates[++i])
	{
		if (e->health > 0 && (e->type == ET_FIGHTER || e->type == ET_MINE) && !(e->flags & EF_IMMORTAL))
		{
			dist = getDistance(self->x, self->y, e->x, e->y);
			
			if (dist <= DAMAGE_RANGE)
			{
				percent = dist;
				percent /= DAMAGE_RANGE;
				percent = 1 - percent;
				
				damage = 255;
				damage *= percent;
				
				if (e->type == ET_FIGHTER)
				{
					damageFighter(e, damage, 0);
				}
				else if (e->type == ET_MINE)
				{
					e->dx = e->x - self->x;
					e->dy = e->y - self->y;
					
					e->dx *= 0.01;
					e->dy *= 0.01;
				}
			}
		}
	}
}