diff --git a/data/fighters/rocketTurret.json b/data/fighters/rocketTurret.json index fc8329d..0745b34 100644 --- a/data/fighters/rocketTurret.json +++ b/data/fighters/rocketTurret.json @@ -6,6 +6,7 @@ "reloadTime" : 8, "shieldRechargeRate" : 30, "textureName" : "gfx/cannons/rocketTurret.png", + "deathType" : "DT_NO_SPIN", "guns" : [ { "type" : "BT_ROCKET", @@ -14,5 +15,5 @@ } ], "flags" : "EF_TAKES_DAMAGE", - "aiFlags" : "AIF_MISSILE_BOAT+AIF_AGGRESSIVE+AIF_INSTANT_DIE+AIF_LONG_RANGE_FIRE" + "aiFlags" : "AIF_MISSILE_BOAT+AIF_AGGRESSIVE+AIF_LONG_RANGE_FIRE" } diff --git a/data/fighters/supplyShip.json b/data/fighters/supplyShip.json index 713c4a0..3e2cb60 100644 --- a/data/fighters/supplyShip.json +++ b/data/fighters/supplyShip.json @@ -6,6 +6,7 @@ "reloadTime" : 10, "shieldRechargeRate" : 0, "textureName" : "gfx/craft/supplyShip.png", + "deathType" : "DT_NO_SPIN", "flags" : "EF_TAKES_DAMAGE", "aiFlags" : "AIF_AVOIDS_COMBAT" } diff --git a/src/battle/fighters.c b/src/battle/fighters.c index 4de7123..f292634 100644 --- a/src/battle/fighters.c +++ b/src/battle/fighters.c @@ -463,24 +463,29 @@ void damageFighter(Entity *e, int amount, long flags) static void die(void) { int n = rand() % 3; - if (self == player) + + switch (self->deathType) { - n = rand() % 2; - } - else if (self->aiFlags & AIF_INSTANT_DIE) - { - n = 2; + case DT_ANY: + n = rand() % 3; + break; + case DT_NO_SPIN: + n = 1 + rand() % 2; + break; + case DT_INSTANT: + n = 2; + break; } switch (n) { case 0: - self->action = straightDie; - break; - - case 1: self->action = spinDie; break; + + case 1: + self->action = straightDie; + break; case 2: self->action = immediateDie; @@ -684,6 +689,11 @@ static void loadFighterDef(char *filename) e->aiFlags = flagsToLong(cJSON_GetObjectItem(root, "aiFlags")->valuestring, NULL); } + if (cJSON_GetObjectItem(root, "deathType")) + { + e->deathType = lookup(cJSON_GetObjectItem(root, "deathType")->valuestring); + } + e->separationRadius = MAX(e->w, e->h); e->separationRadius *= 3; diff --git a/src/defs.h b/src/defs.h index 3fed5da..d162986 100644 --- a/src/defs.h +++ b/src/defs.h @@ -101,10 +101,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define AIF_DEFENSIVE (2 << 8) #define AIF_MISSILE_BOAT (2 << 9) #define AIF_AGGRESSIVE (2 << 10) -#define AIF_INSTANT_DIE (2 << 11) -#define AIF_LONG_RANGE_FIRE (2 << 12) -#define AIF_MOVES_TO_LEADER (2 << 13) -#define AIF_EVADE (2 << 14) +#define AIF_LONG_RANGE_FIRE (2 << 11) +#define AIF_MOVES_TO_LEADER (2 << 12) +#define AIF_EVADE (2 << 13) /* player abilities */ #define BOOST_RECHARGE_TIME (FPS * 7) @@ -163,6 +162,13 @@ enum BT_MAX }; +enum +{ + DT_ANY, + DT_NO_SPIN, + DT_INSTANT +}; + enum { EFFECT_LINE, diff --git a/src/structs.h b/src/structs.h index 798177a..1fa3ed6 100644 --- a/src/structs.h +++ b/src/structs.h @@ -125,6 +125,7 @@ struct Entity { int aiDamageTimer; int aiEvadeTimer; int separationRadius; + int deathType; Weapon guns[MAX_FIGHTER_GUNS]; int missiles; long flags; diff --git a/src/system/lookup.c b/src/system/lookup.c index 8a319d1..43c97a9 100644 --- a/src/system/lookup.c +++ b/src/system/lookup.c @@ -61,10 +61,13 @@ void initLookups(void) addLookup("AIF_DEFENSIVE", AIF_DEFENSIVE); addLookup("AIF_MISSILE_BOAT", AIF_MISSILE_BOAT); addLookup("AIF_AGGRESSIVE", AIF_AGGRESSIVE); - addLookup("AIF_INSTANT_DIE", AIF_INSTANT_DIE); addLookup("AIF_LONG_RANGE_FIRE", AIF_LONG_RANGE_FIRE); addLookup("AIF_MOVES_TO_LEADER", AIF_MOVES_TO_LEADER); + addLookup("DT_ANY", DT_ANY); + addLookup("DT_NO_SPIN", DT_NO_SPIN); + addLookup("DT_INSTANT", DT_INSTANT); + addLookup("TT_DESTROY", TT_DESTROY); addLookup("TT_DISABLE", TT_DISABLE); addLookup("TT_WAYPOINT", TT_WAYPOINT);