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"); } }
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; } } } } }