Added ability to specify death type of fighters (e.g. supply ships shouldn't spin).
This commit is contained in:
parent
5075adc0b4
commit
e2ffe9ba84
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -463,23 +463,28 @@ void damageFighter(Entity *e, int amount, long flags)
|
|||
static void die(void)
|
||||
{
|
||||
int n = rand() % 3;
|
||||
if (self == player)
|
||||
{
|
||||
n = rand() % 2;
|
||||
}
|
||||
else if (self->aiFlags & AIF_INSTANT_DIE)
|
||||
|
||||
switch (self->deathType)
|
||||
{
|
||||
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;
|
||||
self->action = spinDie;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
self->action = spinDie;
|
||||
self->action = straightDie;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
|
@ -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;
|
||||
|
||||
|
|
14
src/defs.h
14
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,
|
||||
|
|
|
@ -125,6 +125,7 @@ struct Entity {
|
|||
int aiDamageTimer;
|
||||
int aiEvadeTimer;
|
||||
int separationRadius;
|
||||
int deathType;
|
||||
Weapon guns[MAX_FIGHTER_GUNS];
|
||||
int missiles;
|
||||
long flags;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue