diff --git a/src/battle/mine.c b/src/battle/mine.c index 4f673f7..0100c23 100644 --- a/src/battle/mine.c +++ b/src/battle/mine.c @@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "mine.h" static void think(void); +static void die(void); static void lookForFighters(void); Entity *spawnMine(void) @@ -31,6 +32,8 @@ Entity *spawnMine(void) mine->health = mine->maxHealth = 1; mine->texture = getTexture("gfx/entities/mine.png"); mine->action = think; + mine->die = die; + mine->flags = EF_TAKES_DAMAGE+EF_SHORT_RADAR_RANGE; return mine; } @@ -47,6 +50,13 @@ static void think(void) lookForFighters(); } +static void die(void) +{ + addMineExplosion(); + + self->alive = ALIVE_DEAD; +} + static void lookForFighters(void) { Entity *e, **candidates; @@ -59,8 +69,6 @@ static void lookForFighters(void) if (e->health > 0 && e->type == ET_FIGHTER && getDistance(self->x, self->y, e->x, e->y) <= 128) { self->health = 0; - - addMineExplosion(); } } } diff --git a/src/battle/radar.c b/src/battle/radar.c index cbe7fbf..2468f80 100644 --- a/src/battle/radar.c +++ b/src/battle/radar.c @@ -34,6 +34,7 @@ void drawRadar(void) { SDL_Rect r; Entity *e; + int dist, inRange; blit(radarTexture, SCREEN_WIDTH - 85, SCREEN_HEIGHT - 85, 1); @@ -43,45 +44,52 @@ void drawRadar(void) for (e = battle.entityHead.next ; e != NULL ; e = e->next) { - if (e->active && getDistance(e->x, e->y, player->x, player->y) / radarRanges[battle.radarRange] < 70) + dist = getDistance(e->x, e->y, player->x, player->y); + + if (e->active) { - r.x = SCREEN_WIDTH - 85; - r.y = SCREEN_HEIGHT - 85; + inRange = (!(e->flags & EF_SHORT_RADAR_RANGE)) ? (dist / radarRanges[battle.radarRange]) < 70 : dist < 500; - r.x -= (player->x - e->x) / radarRanges[battle.radarRange]; - r.y -= (player->y - e->y) / radarRanges[battle.radarRange]; - - r.x--; - r.y--; - - switch (e->side) + if (inRange) { - case SIDE_ALLIES: - SDL_SetRenderDrawColor(app.renderer, 0, 255, 0, 255); - break; - - case SIDE_PIRATE: - case SIDE_PANDORAN: - case SIDE_REBEL: - SDL_SetRenderDrawColor(app.renderer, 255, 0, 0, 255); - break; - - case SIDE_NONE: + r.x = SCREEN_WIDTH - 85; + r.y = SCREEN_HEIGHT - 85; + + r.x -= (player->x - e->x) / radarRanges[battle.radarRange]; + r.y -= (player->y - e->y) / radarRanges[battle.radarRange]; + + r.x--; + r.y--; + + switch (e->side) + { + case SIDE_ALLIES: + SDL_SetRenderDrawColor(app.renderer, 0, 255, 0, 255); + break; + + case SIDE_PIRATE: + case SIDE_PANDORAN: + case SIDE_REBEL: + SDL_SetRenderDrawColor(app.renderer, 255, 0, 0, 255); + break; + + case SIDE_NONE: + SDL_SetRenderDrawColor(app.renderer, 255, 255, 255, 255); + break; + } + + if (e == player->target) + { + SDL_SetRenderDrawColor(app.renderer, 255, 255, 0, 255); + } + + if (e == battle.missionTarget) + { SDL_SetRenderDrawColor(app.renderer, 255, 255, 255, 255); - break; + } + + SDL_RenderFillRect(app.renderer, &r); } - - if (e == player->target) - { - SDL_SetRenderDrawColor(app.renderer, 255, 255, 0, 255); - } - - if (e == battle.missionTarget) - { - SDL_SetRenderDrawColor(app.renderer, 255, 255, 255, 255); - } - - SDL_RenderFillRect(app.renderer, &r); } } } diff --git a/src/defs.h b/src/defs.h index 7470e83..a9bad27 100644 --- a/src/defs.h +++ b/src/defs.h @@ -79,24 +79,25 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define BF_SHIELD_DAMAGE (2 << 2) #define BF_EXPLODES (2 << 3) -#define EF_NONE 0 -#define EF_NO_KILL (2 << 0) -#define EF_DISABLED (2 << 1) -#define EF_IMMORTAL (2 << 2) -#define EF_MISSION_TARGET (2 << 3) -#define EF_NO_MT_BOX (2 << 4) -#define EF_HAS_ROPE (2 << 5) -#define EF_COLLECTS_ITEMS (2 << 6) -#define EF_MUST_DISABLE (2 << 7) -#define EF_RETREATING (2 << 8) -#define EF_NO_EPIC (2 << 9) -#define EF_STATIC (2 << 10) -#define EF_TAKES_DAMAGE (2 << 11) -#define EF_SECONDARY_TARGET (2 << 12) -#define EF_AI_TARGET (2 << 13) -#define EF_AI_LEADER (2 << 14) -#define EF_ROPED_ATTACHED (2 << 15) -#define EF_NO_KILL_INC (2 << 16) +#define EF_NONE 0 +#define EF_NO_KILL (2 << 0) +#define EF_DISABLED (2 << 1) +#define EF_IMMORTAL (2 << 2) +#define EF_MISSION_TARGET (2 << 3) +#define EF_NO_MT_BOX (2 << 4) +#define EF_HAS_ROPE (2 << 5) +#define EF_COLLECTS_ITEMS (2 << 6) +#define EF_MUST_DISABLE (2 << 7) +#define EF_RETREATING (2 << 8) +#define EF_NO_EPIC (2 << 9) +#define EF_STATIC (2 << 10) +#define EF_TAKES_DAMAGE (2 << 11) +#define EF_SECONDARY_TARGET (2 << 12) +#define EF_AI_TARGET (2 << 13) +#define EF_AI_LEADER (2 << 14) +#define EF_ROPED_ATTACHED (2 << 15) +#define EF_NO_KILL_INC (2 << 16) +#define EF_SHORT_RADAR_RANGE (2 << 17) #define AIF_NONE 0 #define AIF_FOLLOWS_PLAYER (2 << 0)