Added 'combined guns' to allow for weapons to be fired together.
This commit is contained in:
parent
483768fe79
commit
f197d656c4
|
@ -18,11 +18,12 @@
|
||||||
"y" : -2
|
"y" : -2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type" : "BT_PARTICLE",
|
"type" : "BT_PLASMA",
|
||||||
"x" : 0,
|
"x" : 0,
|
||||||
"y" : -4
|
"y" : -4
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"combinedGuns" : 1,
|
||||||
"missiles" : {
|
"missiles" : {
|
||||||
"type" : "MISSILE_MISSILE",
|
"type" : "MISSILE_MISSILE",
|
||||||
"ammo" : 3
|
"ammo" : 3
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
{
|
||||||
|
"name" : "Patrol #2",
|
||||||
|
"description" : "Patrols so far have not uncovered anything unusual, and it seems as though the increase in military presense is reducing the amount of illegal activity in this sector, with reported incidents down 80%. Still, we cannot afford to become complacent, and must continue with our sweeps.",
|
||||||
|
"background" : "gfx/backgrounds/background03.jpg",
|
||||||
|
"planet" : "gfx/planets/torelli.png",
|
||||||
|
"music" : "music/heroism.ogg",
|
||||||
|
"requires" : "PREVIOUS",
|
||||||
|
"objectives" : [
|
||||||
|
{
|
||||||
|
"description" : "Check all Wayponts",
|
||||||
|
"targetName" : "Waypoint",
|
||||||
|
"targetValue" : 5,
|
||||||
|
"targetType" : "TT_WAYPOINT"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"player" : {
|
||||||
|
"type" : "Firefly",
|
||||||
|
"side" : "SIDE_ALLIES",
|
||||||
|
"pilot" : "Curtis Rice",
|
||||||
|
"squadron" : "Eightballers"
|
||||||
|
},
|
||||||
|
"fighterGroups" : [
|
||||||
|
{
|
||||||
|
"name" : "Ally",
|
||||||
|
"types" : "Firefly;Nymph",
|
||||||
|
"number" : 4,
|
||||||
|
"side" : "SIDE_ALLIES",
|
||||||
|
"x" : 640,
|
||||||
|
"y" : 1000,
|
||||||
|
"scatter" : 64
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name" : "Pandoran",
|
||||||
|
"types" : "Jackal",
|
||||||
|
"number" : 3,
|
||||||
|
"side" : "SIDE_PANDORAN",
|
||||||
|
"x" : 640,
|
||||||
|
"y" : 1000,
|
||||||
|
"scatter" : 64
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"entityGroups" : [
|
||||||
|
{
|
||||||
|
"type" : "ET_WAYPOINT",
|
||||||
|
"number" : 5,
|
||||||
|
"x" : 640,
|
||||||
|
"y" : 480,
|
||||||
|
"scatter" : 7500
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
|
@ -101,12 +101,7 @@ static void checkCollisions(Bullet *b)
|
||||||
|
|
||||||
for (f = battle.entityHead.next ; f != NULL ; f = f->next)
|
for (f = battle.entityHead.next ; f != NULL ; f = f->next)
|
||||||
{
|
{
|
||||||
if (!f->active)
|
if (f->active && f->type == ET_FIGHTER)
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (f->type == ET_FIGHTER)
|
|
||||||
{
|
{
|
||||||
SDL_QueryTexture(f->texture, NULL, NULL, &ew, &eh);
|
SDL_QueryTexture(f->texture, NULL, NULL, &ew, &eh);
|
||||||
|
|
||||||
|
@ -221,7 +216,7 @@ static void huntTarget(Bullet *b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Bullet *createBullet(int type, int x, int y, Entity *owner)
|
static Bullet *createBullet(int type, int x, int y, Entity *owner)
|
||||||
{
|
{
|
||||||
Bullet *b;
|
Bullet *b;
|
||||||
|
|
||||||
|
@ -255,7 +250,7 @@ void fireGuns(Entity *owner)
|
||||||
|
|
||||||
for (i = 0 ; i < MAX_FIGHTER_GUNS ; i++)
|
for (i = 0 ; i < MAX_FIGHTER_GUNS ; i++)
|
||||||
{
|
{
|
||||||
if (owner->guns[i].type == owner->selectedGunType)
|
if (owner->guns[i].type == owner->selectedGunType || (owner->guns[i].type != BT_NONE && owner->combinedGuns))
|
||||||
{
|
{
|
||||||
s = sin(TO_RAIDANS(owner->angle));
|
s = sin(TO_RAIDANS(owner->angle));
|
||||||
c = cos(TO_RAIDANS(owner->angle));
|
c = cos(TO_RAIDANS(owner->angle));
|
||||||
|
|
|
@ -21,7 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include "entities.h"
|
#include "entities.h"
|
||||||
|
|
||||||
static void drawEntity(Entity *e);
|
static void drawEntity(Entity *e);
|
||||||
static void doEntity(Entity *prev);
|
static void doEntity(void);
|
||||||
|
|
||||||
Entity *spawnEntity(void)
|
Entity *spawnEntity(void)
|
||||||
{
|
{
|
||||||
|
@ -46,69 +46,79 @@ void doEntities(void)
|
||||||
|
|
||||||
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
|
for (e = battle.entityHead.next ; e != NULL ; e = e->next)
|
||||||
{
|
{
|
||||||
|
self = e;
|
||||||
|
|
||||||
if (!e->active)
|
if (!e->active)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
self = e;
|
if (e->target != NULL && e->target->health <= 0)
|
||||||
|
|
||||||
if (self->target != NULL && self->target->health <= 0)
|
|
||||||
{
|
{
|
||||||
self->action = self->defaultAction;
|
e->action = e->defaultAction;
|
||||||
self->target = NULL;
|
e->target = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
self->x += self->dx;
|
e->x += e->dx;
|
||||||
self->y += self->dy;
|
e->y += e->dy;
|
||||||
|
|
||||||
if (self != player)
|
if (e != player)
|
||||||
{
|
{
|
||||||
self->x -= battle.ssx;
|
e->x -= battle.ssx;
|
||||||
self->y -= battle.ssy;
|
e->y -= battle.ssy;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self->action != NULL)
|
if (e->action != NULL)
|
||||||
{
|
{
|
||||||
if (--self->thinkTime <= 0)
|
if (--e->thinkTime <= 0)
|
||||||
{
|
{
|
||||||
self->thinkTime = 0;
|
e->thinkTime = 0;
|
||||||
self->action();
|
e->action();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (self->type)
|
switch (e->type)
|
||||||
{
|
{
|
||||||
case ET_FIGHTER:
|
case ET_FIGHTER:
|
||||||
doFighter(prev);
|
doFighter();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
doEntity(prev);
|
doEntity();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
prev = self;
|
if (e->alive == ALIVE_DEAD)
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void doEntity(Entity *prev)
|
|
||||||
{
|
{
|
||||||
if (self->health <= 0)
|
if (e == battle.entityTail)
|
||||||
{
|
|
||||||
if (self == battle.entityTail)
|
|
||||||
{
|
{
|
||||||
battle.entityTail = prev;
|
battle.entityTail = prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self == battle.missionTarget)
|
if (e == battle.missionTarget)
|
||||||
{
|
{
|
||||||
battle.missionTarget = NULL;
|
battle.missionTarget = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
prev->next = self->next;
|
if (e == player)
|
||||||
free(self);
|
{
|
||||||
self = prev;
|
player = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
prev->next = e->next;
|
||||||
|
free(e);
|
||||||
|
e = prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
prev = e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void doEntity(void)
|
||||||
|
{
|
||||||
|
if (self->health <= 0)
|
||||||
|
{
|
||||||
|
self->alive = ALIVE_DEAD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
extern void blitRotated(SDL_Texture *t, int x, int y, int angle);
|
extern void blitRotated(SDL_Texture *t, int x, int y, int angle);
|
||||||
extern void drawFighter(Entity *e);
|
extern void drawFighter(Entity *e);
|
||||||
extern void doFighter(Entity *prev);
|
extern void doFighter(void);
|
||||||
|
|
||||||
extern Battle battle;
|
extern Battle battle;
|
||||||
extern Entity *self;
|
extern Entity *self;
|
||||||
|
|
|
@ -106,6 +106,11 @@ static void loadFighterDef(char *filename)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cJSON_GetObjectItem(root, "combinedGuns"))
|
||||||
|
{
|
||||||
|
f->combinedGuns = cJSON_GetObjectItem(root, "combinedGuns")->valueint;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cJSON_GetObjectItem(root, "missiles"))
|
if (cJSON_GetObjectItem(root, "missiles"))
|
||||||
|
|
|
@ -150,7 +150,7 @@ static void randomizeDartGuns(Entity *dart)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void doFighter(Entity *prev)
|
void doFighter(void)
|
||||||
{
|
{
|
||||||
if (player != NULL)
|
if (player != NULL)
|
||||||
{
|
{
|
||||||
|
@ -251,20 +251,6 @@ void doFighter(Entity *prev)
|
||||||
|
|
||||||
checkTrigger(self->name, TRIGGER_KILLS);
|
checkTrigger(self->name, TRIGGER_KILLS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self == battle.entityTail)
|
|
||||||
{
|
|
||||||
battle.entityTail = prev;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (self == player)
|
|
||||||
{
|
|
||||||
player = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
prev->next = self->next;
|
|
||||||
free(self);
|
|
||||||
self = prev;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,8 @@ void initPlayer(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
STRNCPY(player->name, "Player", MAX_NAME_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
void doPlayer(void)
|
void doPlayer(void)
|
||||||
|
|
|
@ -56,7 +56,7 @@ static void think(void)
|
||||||
self->angle -= 360;
|
self->angle -= 360;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getDistance(player->x, player->y, self->x, self->y) <= 32 && teamMatesClose())
|
if (player != NULL && getDistance(player->x, player->y, self->x, self->y) <= 32 && teamMatesClose())
|
||||||
{
|
{
|
||||||
self->health = 0;
|
self->health = 0;
|
||||||
|
|
||||||
|
|
|
@ -89,6 +89,7 @@ struct Entity {
|
||||||
int reload;
|
int reload;
|
||||||
int reloadTime;
|
int reloadTime;
|
||||||
int selectedGunType;
|
int selectedGunType;
|
||||||
|
int combinedGuns;
|
||||||
int shieldRecharge;
|
int shieldRecharge;
|
||||||
int shieldRechargeRate;
|
int shieldRechargeRate;
|
||||||
int systemPower;
|
int systemPower;
|
||||||
|
|
Loading…
Reference in New Issue