Substantially increased the cost of plasma upgrades.

I feel these were extremely underpriced. $1000 for triple bullets?
That's dirt-cheap! Even in hard mode, I have no trouble getting that.
This commit is contained in:
onpon4 2015-03-07 09:42:24 -05:00
parent 9974848ce8
commit a3efbc06cc
16 changed files with 1011 additions and 953 deletions

File diff suppressed because it is too large Load Diff

View File

@ -19,8 +19,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "Starfighter.h"
object defEnemy[MAX_DEFALIENS];
object enemy[MAX_ALIENS];
object alien_defs[CD_MAX];
object aliens[MAX_ALIENS];
/*
This simply pulls back an alien from the array that is
@ -31,7 +31,7 @@ static int alien_getFreeIndex()
{
for (int i = 0 ; i < engine.maxAliens ; i++)
{
if (!enemy[i].active)
if (!aliens[i].active)
{
return i;
}
@ -164,44 +164,44 @@ bool alien_add()
delete[] alienArray;
enemy[index] = defEnemy[randEnemy];
enemy[index].active = true;
enemy[index].face = rand() % 2;
enemy[index].owner = &enemy[index]; // Most enemies will own themselves
enemy[index].target = &enemy[index];
enemy[index].thinktime = (50 + rand() % 50);
enemy[index].systemPower = enemy[index].maxShield;
enemy[index].deathCounter = 0 - (enemy[index].maxShield * 3);
enemy[index].hit = 0;
aliens[index] = alien_defs[randEnemy];
aliens[index].active = true;
aliens[index].face = rand() % 2;
aliens[index].owner = &aliens[index]; // Most enemies will own themselves
aliens[index].target = &aliens[index];
aliens[index].thinktime = (50 + rand() % 50);
aliens[index].systemPower = aliens[index].maxShield;
aliens[index].deathCounter = 0 - (aliens[index].maxShield * 3);
aliens[index].hit = 0;
limitInt(&enemy[index].deathCounter, -250, 0);
limitInt(&aliens[index].deathCounter, -250, 0);
// Attempts to place an alien. If it fails, the alien is deactivated.
for (int i = 0 ; i < 100 ; i++)
{
if (alien_place(&enemy[index]))
if (alien_place(&aliens[index]))
break;
enemy[index].active = false;
aliens[index].active = false;
return false;
}
if (enemy[index].classDef == CD_CARGOSHIP)
addCargo(&enemy[index], P_CARGO);
if (aliens[index].classDef == CD_CARGOSHIP)
addCargo(&aliens[index], P_CARGO);
if (enemy[index].classDef == CD_MOBILE_RAY)
enemy[index].shield = 25;
if (aliens[index].classDef == CD_MOBILE_RAY)
aliens[index].shield = 25;
if (enemy[index].classDef == CD_ESCORT)
enemy[index].shield = 50;
if (aliens[index].classDef == CD_ESCORT)
aliens[index].shield = 50;
enemy[index].dx = rrand(-2, 2);
enemy[index].dy = rrand(-2, 2);
aliens[index].dx = rrand(-2, 2);
aliens[index].dy = rrand(-2, 2);
enemy[index].ammo[0] = 0;
aliens[index].ammo[0] = 0;
if (currentGame.area == 18)
enemy[index].flags |= FL_HASMINIMUMSPEED;
aliens[index].flags |= FL_HASMINIMUMSPEED;
return true;
}
@ -213,18 +213,18 @@ void alien_addDrone(object *hostAlien)
if (index == -1)
return;
enemy[index] = defEnemy[CD_DRONE];
enemy[index].active = true;
enemy[index].face = rand() % 2;
enemy[index].owner = &enemy[index]; // Most enemies will own themselves
enemy[index].target = &enemy[index];
enemy[index].thinktime = (50 + rand() % 50);
enemy[index].systemPower = enemy[index].maxShield;
enemy[index].deathCounter = 0 - (enemy[index].maxShield * 3);
enemy[index].hit = 0;
aliens[index] = alien_defs[CD_DRONE];
aliens[index].active = true;
aliens[index].face = rand() % 2;
aliens[index].owner = &aliens[index]; // Most enemies will own themselves
aliens[index].target = &aliens[index];
aliens[index].thinktime = (50 + rand() % 50);
aliens[index].systemPower = aliens[index].maxShield;
aliens[index].deathCounter = 0 - (aliens[index].maxShield * 3);
aliens[index].hit = 0;
enemy[index].x = hostAlien->x + rand() % 50;
enemy[index].y = hostAlien->y + rand() % 50;
aliens[index].x = hostAlien->x + rand() % 50;
aliens[index].y = hostAlien->y + rand() % 50;
}
void alien_addSmallAsteroid(object *hostAlien)
@ -239,7 +239,7 @@ void alien_addSmallAsteroid(object *hostAlien)
addBullet(&weapon[W_ROCKETS], hostAlien, 0, 0);
for (int i = 10 ; i < 20 ; i++)
if (!enemy[i].active)
if (!aliens[i].active)
index = i;
if (index == -1)
@ -247,58 +247,58 @@ void alien_addSmallAsteroid(object *hostAlien)
if ((rand() % 10) > 3)
{
enemy[index] = defEnemy[CD_ASTEROID2];
enemy[index].imageIndex[0] = enemy[index].imageIndex[1] = 39 + rand() % 2;
enemy[index].image[0] = shipShape[enemy[index].imageIndex[0]];
enemy[index].image[1] = shipShape[enemy[index].imageIndex[1]];
aliens[index] = alien_defs[CD_ASTEROID2];
aliens[index].imageIndex[0] = aliens[index].imageIndex[1] = 39 + rand() % 2;
aliens[index].image[0] = shipShape[aliens[index].imageIndex[0]];
aliens[index].image[1] = shipShape[aliens[index].imageIndex[1]];
}
else
{
enemy[index] = defEnemy[CD_DRONE];
aliens[index] = alien_defs[CD_DRONE];
}
enemy[index].owner = &enemy[index]; // Most enemies will own themselves
enemy[index].target = &enemy[index];
enemy[index].thinktime = 1;
enemy[index].systemPower = enemy[index].maxShield;
enemy[index].deathCounter = 0 - (enemy[index].maxShield * 3);
enemy[index].hit = 0;
aliens[index].owner = &aliens[index]; // Most enemies will own themselves
aliens[index].target = &aliens[index];
aliens[index].thinktime = 1;
aliens[index].systemPower = aliens[index].maxShield;
aliens[index].deathCounter = 0 - (aliens[index].maxShield * 3);
aliens[index].hit = 0;
enemy[index].x = hostAlien->x;
enemy[index].y = hostAlien->y;
enemy[index].active = true;
aliens[index].x = hostAlien->x;
aliens[index].y = hostAlien->y;
aliens[index].active = true;
}
void alien_addFriendly(int type)
{
if (type != FR_SID)
enemy[type] = defEnemy[CD_FRIEND];
aliens[type] = alien_defs[CD_FRIEND];
else
enemy[type] = defEnemy[CD_SID];
aliens[type] = alien_defs[CD_SID];
enemy[type].owner = &enemy[type];
enemy[type].target = &enemy[type];
enemy[type].active = true;
aliens[type].owner = &aliens[type];
aliens[type].target = &aliens[type];
aliens[type].active = true;
if (rand() % 2 == 0)
enemy[type].x = rrand((int)(screen->w / 2), (int)(screen->w / 2) + 150);
aliens[type].x = rrand((int)(screen->w / 2), (int)(screen->w / 2) + 150);
else
enemy[type].x = rrand((int)(screen->w / 2) - 150, (int)(screen->w / 2));
aliens[type].x = rrand((int)(screen->w / 2) - 150, (int)(screen->w / 2));
if (rand() % 2 == 0)
enemy[type].y = rrand((int)(screen->h / 2), (int)(screen->h / 2) + 150);
aliens[type].y = rrand((int)(screen->h / 2), (int)(screen->h / 2) + 150);
else
enemy[type].y = rrand((int)(screen->h / 2) - 150, (int)(screen->h / 2));
aliens[type].y = rrand((int)(screen->h / 2) - 150, (int)(screen->h / 2));
if (type == FR_PHOEBE)
enemy[type].classDef = CD_PHOEBE;
aliens[type].classDef = CD_PHOEBE;
if (type == FR_URSULA)
enemy[type].classDef = CD_URSULA;
aliens[type].classDef = CD_URSULA;
// For the sake of it being the final battle :)
if (currentGame.area == 25)
enemy[type].flags |= FL_IMMORTAL;
aliens[type].flags |= FL_IMMORTAL;
}
bool alien_place(object *alien)
@ -321,9 +321,11 @@ bool alien_place(object *alien)
for (int i = 0 ; i < MAX_ALIENS ; i++)
{
if ((enemy[i].owner != alien) && (enemy[i].shield > 0))
if ((aliens[i].owner != alien) && (aliens[i].shield > 0))
{
if (collision(alien->x, alien->y, alien->image[0]->w, alien->image[0]->h, enemy[i].x, enemy[i].y, enemy[i].image[0]->w, enemy[i].image[0]->h))
if (collision(alien->x, alien->y, alien->image[0]->w,
alien->image[0]->h, aliens[i].x, aliens[i].y,
aliens[i].image[0]->w, aliens[i].image[0]->h))
return false;
}
}
@ -334,7 +336,7 @@ bool alien_place(object *alien)
void alien_setAI(object *alien)
{
// Make friendly craft generally concentrate on smaller fighters
if ((alien->flags & FL_FRIEND) && (alien->target == &enemy[WC_BOSS]))
if ((alien->flags & FL_FRIEND) && (alien->target == &aliens[WC_BOSS]))
{
if ((rand() % 5) == 0)
{
@ -476,10 +478,13 @@ void alien_setKlineAI(object *alien)
switch(rand() % 10)
{
case 0:
if ((alien->weaponType[0] != W_DIRSHOCKMISSILE) && (alien->weaponType[1] != W_MICRO_HOMING_MISSILES))
if ((alien->weaponType[0] != W_DIRSHOCKMISSILE) &&
(alien->weaponType[1] != W_MICRO_HOMING_MISSILES))
alien->flags |= FL_CONTINUOUS_FIRE;
alien->dx = ((alien->x - alien->target->x) / ((300 / alien->speed) + rand() % 100));
alien->dy = ((alien->y - alien->target->y) / ((300 / alien->speed) + rand() % 100));
alien->dx = ((alien->x - alien->target->x) /
((300 / alien->speed) + rand() % 100));
alien->dy = ((alien->y - alien->target->y) /
((300 / alien->speed) + rand() % 100));
break;
case 1:
case 2:
@ -518,7 +523,7 @@ void alien_searchForTarget(object *alien)
i = rand() % MAX_ALIENS;
object *targetEnemy = &enemy[i];
object *targetEnemy = &aliens[i];
// Tell Sid not to attack craft that are already disabled or can
// return fire. This will save him from messing about (unless we're on the last mission)
@ -537,7 +542,8 @@ void alien_searchForTarget(object *alien)
if (targetEnemy->classDef == CD_BOSS)
return;
if ((targetEnemy->flags & FL_DISABLED) || (targetEnemy->flags & FL_NOFIRE))
if ((targetEnemy->flags & FL_DISABLED) ||
(targetEnemy->flags & FL_NOFIRE))
return;
}
}
@ -593,7 +599,8 @@ int alien_checkTarget(object *alien)
return 1;
// Not at the correct vertical height
if ((alien->y < alien->target->y - 15) || (alien->y > alien->target->y + alien->target->image[0]->h + 15))
if ((alien->y < alien->target->y - 15) ||
(alien->y > alien->target->y + alien->target->image[0]->h + 15))
return 0;
return 1;
@ -605,13 +612,15 @@ any enemy craft that enter their line of sight.
*/
int alien_enemiesInFront(object *alien)
{
object *anEnemy = enemy;
object *anEnemy = aliens;
for (int i = 0 ; i < MAX_ALIENS ; i++)
{
if ((alien != anEnemy) && (anEnemy->flags & FL_WEAPCO) && (anEnemy->shield > 0))
if ((alien != anEnemy) && (anEnemy->flags & FL_WEAPCO) &&
(anEnemy->shield > 0))
{
if ((alien->y > anEnemy->y - 15) && (alien->y < anEnemy->y + anEnemy->image[0]->h + 15))
if ((alien->y > anEnemy->y - 15) &&
(alien->y < anEnemy->y + anEnemy->image[0]->h + 15))
{
if ((alien->face == 1) && (anEnemy->x < alien->x))
return 1;
@ -660,13 +669,18 @@ void alien_move(object *alien)
}
}
object *anEnemy = enemy;
object *anEnemy = aliens;
if (checkCollisions)
{
for (int i = 0 ; i < MAX_ALIENS ; i++)
{
if ((alien->flags & FL_LEAVESECTOR) || (alien->classDef == CD_DRONE) || (alien->classDef == CD_ASTEROID2) || (alien->owner == anEnemy->owner) || (alien->owner->owner == anEnemy->owner) || (anEnemy->shield < 1))
if ((alien->flags & FL_LEAVESECTOR) ||
(alien->classDef == CD_DRONE) ||
(alien->classDef == CD_ASTEROID2) ||
(alien->owner == anEnemy->owner) ||
(alien->owner->owner == anEnemy->owner) ||
(anEnemy->shield < 1))
{
anEnemy++;
continue;
@ -674,7 +688,8 @@ void alien_move(object *alien)
if (collision(alien, anEnemy))
{
if ((anEnemy->classDef == CD_BARRIER) && (anEnemy->owner != alien))
if ((anEnemy->classDef == CD_BARRIER) &&
(anEnemy->owner != alien))
{
alien->shield--;
alien->hit = 3;

View File

@ -20,8 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef ALIEN_H
#define ALIEN_H
extern object defEnemy[MAX_DEFALIENS];
extern object enemy[MAX_ALIENS];
extern object alien_defs[CD_MAX];
extern object aliens[MAX_ALIENS];
bool alien_add();
void alien_addDrone(object *hostAlien);

View File

@ -204,7 +204,7 @@ void fireBullet(object *attacker, int weaponType)
// Reset the weapon reload time. Double it if it is not friendly or a boss or Kline
attacker->reload[weaponType] = theWeapon->reload[0];
if ((attacker->flags & FL_WEAPCO) && (attacker != &enemy[WC_BOSS]) && (attacker != &enemy[WC_KLINE]) && (theWeapon->id != W_LASER))
if ((attacker->flags & FL_WEAPCO) && (attacker != &aliens[WC_BOSS]) && (attacker != &aliens[WC_KLINE]) && (theWeapon->id != W_LASER))
attacker->reload[weaponType] *= 2;
if ((engine.cheatAmmo) || (theWeapon->id == WT_LASER))
@ -248,22 +248,22 @@ static object *getRandomEnemy(object *bullet)
i = rand() % MAX_ALIENS;
if ((enemy[i].shield < 1) || (!enemy[i].active))
if ((aliens[i].shield < 1) || (!aliens[i].active))
return NULL;
if ((bullet->owner->flags & FL_WEAPCO) && (enemy[i].flags & FL_WEAPCO))
if ((bullet->owner->flags & FL_WEAPCO) && (aliens[i].flags & FL_WEAPCO))
return NULL;
if ((bullet->owner->flags & FL_FRIEND) && (enemy[i].flags & FL_FRIEND))
if ((bullet->owner->flags & FL_FRIEND) && (aliens[i].flags & FL_FRIEND))
return NULL;
if (abs((int)bullet->x - (int)enemy[i].target->x) > 800)
if (abs((int)bullet->x - (int)aliens[i].target->x) > 800)
return NULL;
if (abs((int)bullet->y - (int)enemy[i].target->y) > 200)
if (abs((int)bullet->y - (int)aliens[i].target->y) > 200)
return NULL;
return &enemy[i];
return &aliens[i];
}
/*
@ -447,7 +447,7 @@ void fireRay(object *attacker)
}
}
object *anEnemy = enemy;
object *anEnemy = aliens;
for (int i = 0 ; i < MAX_ALIENS ; i++)
{
@ -567,7 +567,7 @@ void doBullets()
for (int i = 0 ; i < MAX_ALIENS ; i++)
{
alien = &enemy[i];
alien = &aliens[i];
if ((alien->shield < 1) || (!alien->active))
continue;

View File

@ -73,9 +73,9 @@ static void becomeCollectable(int i)
}
else
{
enemy[FR_PHOEBE].active = true;
enemy[FR_PHOEBE].x = cargo[i].x;
enemy[FR_PHOEBE].y = cargo[i].y;
aliens[FR_PHOEBE].active = true;
aliens[FR_PHOEBE].x = cargo[i].x;
aliens[FR_PHOEBE].y = cargo[i].y;
setRadioMessage(FACE_PHOEBE, "Thanks!! Watch out, WEAPCO! Phoebe's loose and she's ANGRY!!!", 1);
}

View File

@ -91,7 +91,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MAX_TEXTSHAPES 150
#define MAX_FONTSHAPES 6
#define MAX_SHOPSHAPES 6
#define MAX_DEFALIENS 40
#define MAX_MISSIONS 28
#define MAX_CARGO 20
@ -240,6 +239,7 @@ enum {
CD_URANUSBOSS,
CD_URANUSBOSSWING1,
CD_URANUSBOSSWING2,
CD_MAX,
// Some special ones
CD_ANY = 100,

View File

@ -143,9 +143,9 @@ int mainGameLoop()
// Init aliens
for (int i = 0 ; i < MAX_ALIENS ; i++)
{
enemy[i].active = false;
enemy[i].shield = -1;
enemy[i].flags = 0;
aliens[i].active = false;
aliens[i].shield = -1;
aliens[i].flags = 0;
}
engine.targetIndex = -1;
@ -162,11 +162,11 @@ int mainGameLoop()
{
placeAttempt = 0;
enemy[index] = defEnemy[alienType];
enemy[index].owner = &enemy[index];
enemy[index].target = &enemy[index];
enemy[index].face = rand() % 2;
enemy[index].active = true;
aliens[index] = alien_defs[alienType];
aliens[index].owner = &aliens[index];
aliens[index].target = &aliens[index];
aliens[index].face = rand() % 2;
aliens[index].active = true;
/*
we make 1000 attempts to place this enemy since it is required. If after
@ -178,7 +178,7 @@ int mainGameLoop()
{
placeAttempt++;
if (alien_place(&enemy[index]))
if (alien_place(&aliens[index]))
break;
if (placeAttempt > 1000)
@ -186,56 +186,56 @@ int mainGameLoop()
}
if (currentGame.area == 2)
addCargo(&enemy[index], P_CARGO);
addCargo(&aliens[index], P_CARGO);
else if (currentGame.area == 7)
addCargo(&enemy[index], P_PHOEBE);
addCargo(&aliens[index], P_PHOEBE);
if (index == WC_KLINE)
{
enemy[WC_KLINE].target = &player;
aliens[WC_KLINE].target = &player;
if (currentGame.area == 25)
enemy[WC_KLINE].shield = 500;
aliens[WC_KLINE].shield = 500;
}
if (enemy[index].classDef == CD_CLOAKFIGHTER)
if (aliens[index].classDef == CD_CLOAKFIGHTER)
{
enemy[index].active = false;
enemy[index].maxShield = enemy[index].shield = 400;
enemy[index].flags &= ~FL_RUNSAWAY;
enemy[index].speed = 3;
aliens[index].active = false;
aliens[index].maxShield = aliens[index].shield = 400;
aliens[index].flags &= ~FL_RUNSAWAY;
aliens[index].speed = 3;
}
if ((enemy[index].classDef == CD_MOBILE_RAY) && (index >= 11))
if ((aliens[index].classDef == CD_MOBILE_RAY) && (index >= 11))
{
enemy[index].active = false;
aliens[index].active = false;
}
if (enemy[index].classDef == CD_FIREFLY)
if (aliens[index].classDef == CD_FIREFLY)
{
enemy[index].active = false;
aliens[index].active = false;
}
if (enemy[index].classDef == CD_BARRIER)
if (aliens[index].classDef == CD_BARRIER)
{
enemy[index].owner = &enemy[WC_BOSS];
enemy[index].speed = barrierSpeed;
aliens[index].owner = &aliens[WC_BOSS];
aliens[index].speed = barrierSpeed;
barrierSpeed++;
}
if ((currentGame.area == 17) && (enemy[index].classDef == CD_BOSS))
if ((currentGame.area == 17) && (aliens[index].classDef == CD_BOSS))
{
enemy[index].imageIndex[1] = 29;
enemy[index].flags |= FL_IMMORTAL;
aliens[index].imageIndex[1] = 29;
aliens[index].flags |= FL_IMMORTAL;
}
if (currentGame.area == 18)
enemy[index].flags |= FL_HASMINIMUMSPEED;
aliens[index].flags |= FL_HASMINIMUMSPEED;
if (currentGame.area == 23)
{
enemy[index].flags = FL_WEAPCO;
aliens[index].flags = FL_WEAPCO;
if (index == WC_BOSS)
enemy[index].chance[1] = 5;
aliens[index].chance[1] = 5;
}
}
@ -243,71 +243,71 @@ int mainGameLoop()
if (currentGame.area == 5)
{
enemy[WC_BOSS].target = &player;
enemy[WC_BOSS].x = -screen->w / 2;
enemy[WC_BOSS].y = screen->h / 2;
aliens[WC_BOSS].target = &player;
aliens[WC_BOSS].x = -screen->w / 2;
aliens[WC_BOSS].y = screen->h / 2;
enemy[13].owner = &enemy[WC_BOSS];
enemy[13].target = &player;
enemy[13].dx = -25;
enemy[13].dy = -21;
aliens[13].owner = &aliens[WC_BOSS];
aliens[13].target = &player;
aliens[13].dx = -25;
aliens[13].dy = -21;
enemy[12].owner = &enemy[WC_BOSS];
enemy[12].target = &player;
enemy[12].dx = -20;
enemy[12].dy = 37;
aliens[12].owner = &aliens[WC_BOSS];
aliens[12].target = &player;
aliens[12].dx = -20;
aliens[12].dy = 37;
}
else if ((currentGame.area == 11) || (currentGame.area == 14))
{
enemy[WC_BOSS].target = &player;
enemy[WC_BOSS].x = -screen->w / 2;
enemy[WC_BOSS].y = screen->h / 2;
aliens[WC_BOSS].target = &player;
aliens[WC_BOSS].x = -screen->w / 2;
aliens[WC_BOSS].y = screen->h / 2;
enemy[13].owner = &enemy[WC_BOSS];
enemy[13].target = &player;
enemy[13].dx = 15;
enemy[13].dy = -22;
aliens[13].owner = &aliens[WC_BOSS];
aliens[13].target = &player;
aliens[13].dx = 15;
aliens[13].dy = -22;
enemy[12].owner = &enemy[WC_BOSS];
enemy[12].target = &player;
enemy[12].dx = 15;
enemy[12].dy = 22;
aliens[12].owner = &aliens[WC_BOSS];
aliens[12].target = &player;
aliens[12].dx = 15;
aliens[12].dy = 22;
enemy[11].owner = &enemy[13];
enemy[11].target = &player;
enemy[11].dx = -35;
enemy[11].dy = -12;
aliens[11].owner = &aliens[13];
aliens[11].target = &player;
aliens[11].dx = -35;
aliens[11].dy = -12;
enemy[10].owner = &enemy[12];
enemy[10].target = &player;
enemy[10].dx = -35;
enemy[10].dy = 20;
aliens[10].owner = &aliens[12];
aliens[10].target = &player;
aliens[10].dx = -35;
aliens[10].dy = 20;
if (currentGame.area == 14)
{
enemy[WC_BOSS].AIType = AI_EVASIVE;
aliens[WC_BOSS].AIType = AI_EVASIVE;
for (int i = 10 ; i < 15 ; i++)
{
enemy[i].imageIndex[0] += 15;
enemy[i].imageIndex[1] += 15;
aliens[i].imageIndex[0] += 15;
aliens[i].imageIndex[1] += 15;
enemy[i].image[0] = shipShape[enemy[i].imageIndex[0]];
enemy[i].image[1] = shipShape[enemy[i].imageIndex[1]];
aliens[i].image[0] = shipShape[aliens[i].imageIndex[0]];
aliens[i].image[1] = shipShape[aliens[i].imageIndex[1]];
}
}
}
else if (currentGame.area == 21)
{
enemy[WC_BOSS].target = &player;
enemy[WC_BOSS].x = -screen->w / 2;
enemy[WC_BOSS].y = screen->h / 2;
aliens[WC_BOSS].target = &player;
aliens[WC_BOSS].x = -screen->w / 2;
aliens[WC_BOSS].y = screen->h / 2;
enemy[13].owner = &enemy[WC_BOSS];
enemy[13].dy = 20;
aliens[13].owner = &aliens[WC_BOSS];
aliens[13].dy = 20;
enemy[12].owner = &enemy[WC_BOSS];
enemy[12].dy = -16;
aliens[12].owner = &aliens[WC_BOSS];
aliens[12].dy = -16;
}
}
@ -316,7 +316,7 @@ int mainGameLoop()
currentGame.hasWingMate1 = 1;
if (currentGame.area == 11)
enemy[WC_KLINE].active = false;
aliens[WC_KLINE].active = false;
for (int i = 0 ; i < engine.maxAliens ; i++)
alien_add();
@ -342,15 +342,15 @@ int mainGameLoop()
case 18:
case 24:
case 26:
enemy[FR_PHOEBE].active = false;
enemy[FR_URSULA].active = false;
aliens[FR_PHOEBE].active = false;
aliens[FR_URSULA].active = false;
break;
}
if (currentGame.area == 10)
{
enemy[0].collectChance = 100;
enemy[0].collectType = P_ESCAPEPOD;
aliens[0].collectChance = 100;
aliens[0].collectType = P_ESCAPEPOD;
}
// Some specifics for interception missions
@ -358,13 +358,13 @@ int mainGameLoop()
{
if ((currentGame.system > 1) && ((rand() % 5) == 0))
{
enemy[WC_KLINE] = defEnemy[CD_KLINE];
enemy[WC_KLINE].owner = &enemy[WC_KLINE];
enemy[WC_KLINE].target = &player;
enemy[WC_KLINE].shield = 100;
enemy[WC_KLINE].active = true;
enemy[WC_KLINE].x = player.x + 1000;
enemy[WC_KLINE].y = player.y;
aliens[WC_KLINE] = alien_defs[CD_KLINE];
aliens[WC_KLINE].owner = &aliens[WC_KLINE];
aliens[WC_KLINE].target = &player;
aliens[WC_KLINE].shield = 100;
aliens[WC_KLINE].active = true;
aliens[WC_KLINE].x = player.x + 1000;
aliens[WC_KLINE].y = player.y;
player_setTarget(WC_KLINE);
}
@ -372,36 +372,36 @@ int mainGameLoop()
{
if ((rand() % 2) == 0)
{
enemy[10] = defEnemy[CD_CLOAKFIGHTER];
enemy[10].owner = &enemy[10];
enemy[10].target = &enemy[10];
enemy[10].shield = 1000;
enemy[10].active = true;
enemy[10].x = player.x - 1000;
enemy[10].y = player.y;
aliens[10] = alien_defs[CD_CLOAKFIGHTER];
aliens[10].owner = &aliens[10];
aliens[10].target = &aliens[10];
aliens[10].shield = 1000;
aliens[10].active = true;
aliens[10].x = player.x - 1000;
aliens[10].y = player.y;
player_setTarget(10);
enemy[10].shield = currentGame.experimentalShield;
aliens[10].shield = currentGame.experimentalShield;
}
}
}
if (currentGame.area == 26)
{
enemy[WC_KLINE].flags |= FL_IMMORTAL | FL_NOFIRE | FL_NOMOVE;
aliens[WC_KLINE].flags |= FL_IMMORTAL | FL_NOFIRE | FL_NOMOVE;
enemy[WC_KLINE].x = screen->w * 2 / 3;
enemy[WC_KLINE].y = screen->h * 2 / 3;
aliens[WC_KLINE].x = screen->w * 2 / 3;
aliens[WC_KLINE].y = screen->h * 2 / 3;
enemy[WC_KLINE].deathCounter = -250;
enemy[WC_KLINE].maxShield = 1500;
enemy[WC_KLINE].shield = 500;
aliens[WC_KLINE].deathCounter = -250;
aliens[WC_KLINE].maxShield = 1500;
aliens[WC_KLINE].shield = 500;
}
for (int i = 0 ; i < MAX_ALIENS ; i++)
{
enemy[i].systemPower = enemy[i].maxShield;
enemy[i].deathCounter = 0 - (enemy[i].maxShield * 3);
limitInt(&enemy[i].deathCounter, -350, 0);
aliens[i].systemPower = aliens[i].maxShield;
aliens[i].deathCounter = 0 - (aliens[i].maxShield * 3);
limitInt(&aliens[i].deathCounter, -350, 0);
}
// Set target energy meter
@ -461,7 +461,8 @@ int mainGameLoop()
for (int i = 0 ; i < 3 ; i++)
{
if ((currentMission.primaryType[i] == M_DESTROY_TARGET_TYPE) && (currentMission.target1[i] == CD_ANY))
if ((currentMission.primaryType[i] == M_DESTROY_TARGET_TYPE) &&
(currentMission.target1[i] == CD_ANY))
allowableAliens = currentMission.targetValue1[i];
if (currentMission.primaryType[i] == M_DESTROY_ALL_TARGETS)
@ -470,7 +471,7 @@ int mainGameLoop()
for (int i = 0 ; i < MAX_ALIENS ; i++)
{
if ((enemy[i].active) && (enemy[i].flags & FL_WEAPCO))
if ((aliens[i].active) && (aliens[i].flags & FL_WEAPCO))
{
allowableAliens--;
}
@ -513,25 +514,25 @@ int mainGameLoop()
leaveSector();
if ((engine.done == 2) && (currentGame.area != 10) && (currentGame.area != 15))
{
if ((enemy[FR_PHOEBE].shield > 0) && (currentGame.area != 25))
if ((aliens[FR_PHOEBE].shield > 0) && (currentGame.area != 25))
{
enemy[FR_PHOEBE].x = player.x - 40;
enemy[FR_PHOEBE].y = player.y - 35;
enemy[FR_PHOEBE].face = 0;
aliens[FR_PHOEBE].x = player.x - 40;
aliens[FR_PHOEBE].y = player.y - 35;
aliens[FR_PHOEBE].face = 0;
}
if ((enemy[FR_URSULA].shield > 0) && (currentGame.area != 25))
if ((aliens[FR_URSULA].shield > 0) && (currentGame.area != 25))
{
enemy[FR_URSULA].x = player.x - 40;
enemy[FR_URSULA].y = player.y + 45;
enemy[FR_URSULA].face = 0;
aliens[FR_URSULA].x = player.x - 40;
aliens[FR_URSULA].y = player.y + 45;
aliens[FR_URSULA].face = 0;
}
if ((currentGame.area == 9) || (currentGame.area == 17))
{
enemy[FR_SID].x = player.x - 100;
enemy[FR_SID].y = player.y;
enemy[FR_SID].face = 0;
aliens[FR_SID].x = player.x - 100;
aliens[FR_SID].y = player.y;
aliens[FR_SID].face = 0;
}
}
}
@ -575,7 +576,7 @@ int mainGameLoop()
// A global variable for checking if all the aliens are dead
engine.allAliensDead = 1;
object *alien = enemy;
object *alien = aliens;
for (int i = 0 ; i < MAX_ALIENS ; i++)
{
@ -729,7 +730,7 @@ int mainGameLoop()
if (alien->classDef == CD_MOBILESHIELD)
{
limitInt(&(++enemy[WC_BOSS].shield), 0, enemy[WC_BOSS].maxShield);
limitInt(&(++aliens[WC_BOSS].shield), 0, aliens[WC_BOSS].maxShield);
}
limitCharAdd(&alien->reload[0], -1, 0, 999);
@ -805,7 +806,7 @@ int mainGameLoop()
600 + rand() % 2400);
// Kline drops mines a lot more often
if ((alien == &enemy[WC_KLINE]))
if ((alien == &aliens[WC_KLINE]))
{
if ((rand() % 10) == 0)
addCollectable(alien->x, alien->y, P_MINE, 25,
@ -855,7 +856,7 @@ int mainGameLoop()
{
alien->active = false;
if ((alien->classDef == CD_BOSS) ||
(alien->owner == &enemy[WC_BOSS]) ||
(alien->owner == &aliens[WC_BOSS]) ||
(alien->flags & FL_FRIEND) ||
(alien->classDef == CD_ASTEROID) ||
(alien->classDef == CD_KLINE))
@ -927,16 +928,16 @@ int mainGameLoop()
engine.missionCompleteTimer = SDL_GetTicks() + 7000;
// specific to Boss 1
if ((currentGame.area == 5) && (enemy[WC_BOSS].flags & FL_ESCAPED))
if ((currentGame.area == 5) && (aliens[WC_BOSS].flags & FL_ESCAPED))
{
playSound(SFX_DEATH, enemy[WC_BOSS].x);
playSound(SFX_DEATH, aliens[WC_BOSS].x);
clearScreen(white);
updateScreen();
for (int i = 0 ; i < 300 ; i++)
{
SDL_Delay(10);
if ((rand() % 25) == 0)
playSound(SFX_EXPLOSION, enemy[WC_BOSS].x);
playSound(SFX_EXPLOSION, aliens[WC_BOSS].x);
}
SDL_Delay(1000);
break;

View File

@ -64,12 +64,13 @@ void getKillMessage(object *ally)
bool firstPlace = false;
int faceToUse = FACE_PHOEBE;
if (ally == &enemy[FR_PHOEBE])
if (ally == &aliens[FR_PHOEBE])
{
strcpy(otherName, "Ursula");
kills = currentGame.wingMate1Kills;
difference = currentGame.wingMate1Kills - currentGame.wingMate2Kills;
if ((currentGame.wingMate1Kills > currentGame.wingMate2Kills) && (currentGame.wingMate1Kills > currentGame.totalKills))
if ((currentGame.wingMate1Kills > currentGame.wingMate2Kills) &&
(currentGame.wingMate1Kills > currentGame.totalKills))
firstPlace = true;
faceToUse = FACE_PHOEBE;
}
@ -78,7 +79,8 @@ void getKillMessage(object *ally)
strcpy(otherName, "Phoebe");
kills = currentGame.wingMate2Kills;
difference = currentGame.wingMate2Kills - currentGame.wingMate1Kills;
if ((currentGame.wingMate2Kills > currentGame.wingMate1Kills) && (currentGame.wingMate2Kills > currentGame.totalKills))
if ((currentGame.wingMate2Kills > currentGame.wingMate1Kills) &&
(currentGame.wingMate2Kills > currentGame.totalKills))
firstPlace = true;
faceToUse = FACE_URSULA;
}
@ -133,7 +135,8 @@ void getKillMessage(object *ally)
const char *getKlineInsult()
{
static const char *insult[] = {
"Pathetic", "How very disappointing...", "Heroic. And stupid", "Fool", "And now you're nothing but a DEAD hero"
"Pathetic", "How very disappointing...", "Heroic. And stupid", "Fool",
"And now you're nothing but a DEAD hero"
};
if (currentGame.area != 26)
@ -144,13 +147,13 @@ const char *getKlineInsult()
void getPlayerDeathMessage()
{
if (enemy[WC_KLINE].active)
if (aliens[WC_KLINE].active)
{
setRadioMessage(FACE_KLINE, getKlineInsult(), 1);
return;
}
if ((enemy[WC_BOSS].active) && (enemy[WC_BOSS].classDef == CD_KRASS))
if ((aliens[WC_BOSS].active) && (aliens[WC_BOSS].classDef == CD_KRASS))
{
setRadioMessage(FACE_KRASS, "That was the easiest $90,000,000 I've ever earned! Bwwah!! Ha!! Ha!! Ha!!", 1);
return;
@ -159,7 +162,9 @@ void getPlayerDeathMessage()
int faceToUse = FACE_PHOEBE;
if ((currentGame.area == 9) || (currentGame.area == 17) || (currentGame.area == 25)) {
if ((currentGame.area == 9) || (currentGame.area == 17) ||
(currentGame.area == 25))
{
faceToUse = FACE_SID;
}
else if (currentGame.hasWingMate2)
@ -175,7 +180,7 @@ void getMissFireMessage(object *ally)
{
int faceToUse = FACE_PHOEBE;
if (ally == &enemy[FR_PHOEBE])
if (ally == &aliens[FR_PHOEBE])
faceToUse = FACE_PHOEBE;
else
faceToUse = FACE_URSULA;
@ -187,7 +192,7 @@ void getPlayerHitMessage(object *ally)
{
int faceToUse = FACE_PHOEBE;
if (ally == &enemy[FR_PHOEBE])
if (ally == &aliens[FR_PHOEBE])
faceToUse = FACE_PHOEBE;
else
faceToUse = FACE_URSULA;

View File

@ -89,11 +89,11 @@ Draw an arrow at the edge of the screen for each enemy ship that is not visible.
*/
static void doArrow(int i)
{
if (i < 0 || !enemy[i].active || enemy[i].shield <= 0 || enemy[i].flags & FL_ISCLOAKED)
if (i < 0 || !aliens[i].active || aliens[i].shield <= 0 || aliens[i].flags & FL_ISCLOAKED)
return;
int x = enemy[i].x + enemy[i].image[0]->w / 2;
int y = enemy[i].y + enemy[i].image[0]->h / 2;
int x = aliens[i].x + aliens[i].image[0]->w / 2;
int y = aliens[i].y + aliens[i].image[0]->h / 2;
float sx = fabsf((x - (screen->w / 2)) / (screen->w / 2.0));
float sy = fabsf((y - (screen->h / 2)) / (screen->h / 2.0));
@ -302,7 +302,7 @@ void doInfo()
// Do the target's remaining shield (if required)
if (currentGame.area != 10)
{
if ((engine.targetIndex > -1) && (enemy[engine.targetIndex].shield > 0) && (engine.targetIndex > 9))
if ((engine.targetIndex > -1) && (aliens[engine.targetIndex].shield > 0) && (engine.targetIndex > 9))
{
blitText(7);
bar.w = 1;
@ -310,7 +310,7 @@ void doInfo()
bar.x = 620;
bar.y = 550;
for (float i = 0 ; i < (engine.targetShield * enemy[engine.targetIndex].shield) ; i++)
for (float i = 0 ; i < (engine.targetShield * aliens[engine.targetIndex].shield) ; i++)
{
if (i > 50)
shieldColor = green;

View File

@ -270,8 +270,8 @@ static void mission_killAllEnemies()
{
for (int i = 0 ; i < MAX_ALIENS ; i++)
{
if ((enemy[i].flags & FL_WEAPCO) && (enemy[i].active) && (enemy[i].shield > 0))
enemy[i].shield = 0;
if ((aliens[i].flags & FL_WEAPCO) && (aliens[i].active) && (aliens[i].shield > 0))
aliens[i].shield = 0;
}
}
@ -424,7 +424,9 @@ void updateMissionRequirements(int type, int id, int value)
{
if ((currentMission.completed1[i] == OB_INCOMPLETE) || (currentMission.completed1[i] == OB_CONDITION))
{
if ((currentMission.primaryType[i] == type) && ((currentMission.target1[i] == id) || (currentMission.target1[i] == CD_ANY)))
if ((currentMission.primaryType[i] == type) &&
((currentMission.target1[i] == id) ||
(currentMission.target1[i] == CD_ANY)))
{
matched = 1;
currentMission.targetValue1[i] -= value;
@ -441,7 +443,9 @@ void updateMissionRequirements(int type, int id, int value)
{
if ((currentMission.completed2[i] == OB_INCOMPLETE) || (currentMission.completed2[i] == OB_CONDITION))
{
if ((currentMission.secondaryType[i] == type) && ((currentMission.target2[i] == id) || (currentMission.target2[i] == CD_ANY)))
if ((currentMission.secondaryType[i] == type) &&
((currentMission.target2[i] == id) ||
(currentMission.target2[i] == CD_ANY)))
{
currentMission.targetValue2[i] -= value;
evaluateRequirement(type, id, &currentMission.completed2[i], &currentMission.targetValue2[i], FONT_YELLOW);
@ -507,10 +511,10 @@ static char revealHiddenObjectives()
{
mission_killAllEnemies();
syncScriptEvents();
enemy[WC_KLINE].active = true;
enemy[WC_KLINE].x = player.x + 1000;
enemy[WC_KLINE].y = player.y;
enemy[WC_KLINE].flags |= FL_IMMORTAL | FL_NOFIRE;
aliens[WC_KLINE].active = true;
aliens[WC_KLINE].x = player.x + 1000;
aliens[WC_KLINE].y = player.y;
aliens[WC_KLINE].flags |= FL_IMMORTAL | FL_NOFIRE;
player_setTarget(WC_KLINE);
loadMusic("music/last_cyber_dance.ogg");
if ((engine.useAudio) && (engine.useMusic))

View File

@ -68,7 +68,7 @@ void player_setTarget(int index)
{
engine.targetIndex = index;
engine.targetShield = 85;
engine.targetShield /= enemy[index].shield;
engine.targetShield /= aliens[index].shield;
}
void exitPlayer()
@ -117,7 +117,8 @@ void doPlayer()
if ((engine.keyState[KEY_ALTFIRE]) && (player.weaponType[1] != W_NONE))
{
if ((player.weaponType[1] != W_CHARGER) && (player.weaponType[1] != W_LASER) && (player.ammo[1] > 0))
if ((player.weaponType[1] != W_CHARGER) &&
(player.weaponType[1] != W_LASER) && (player.ammo[1] > 0))
{
fireBullet(&player, 1);
}
@ -231,7 +232,8 @@ void doPlayer()
engine.keyState[KEY_PAUSE] = 0;
}
if (((currentGame.area == 18) && (enemy[WC_BOSS].shield > 0)) || (currentGame.area == 24))
if (((currentGame.area == 18) && (aliens[WC_BOSS].shield > 0)) ||
(currentGame.area == 24))
{
player.face = 0;
xmoved = true;
@ -321,14 +323,14 @@ void doPlayer()
player.shield--;
if (player.shield == -1)
{
if ((currentGame.hasWingMate1) || (enemy[WC_KLINE].active))
if ((currentGame.hasWingMate1) || (aliens[WC_KLINE].active))
getPlayerDeathMessage();
// Make it look like the ships are all still moving...
if (currentGame.area == 18)
{
for (int i = 0 ; i < MAX_ALIENS ; i++)
enemy[i].flags |= FL_LEAVESECTOR;
aliens[i].flags |= FL_LEAVESECTOR;
}
playSound(SFX_DEATH, player.x);
@ -347,7 +349,8 @@ void doPlayer()
limitFloat(&engine.ssy, -cameraMaxSpeed, cameraMaxSpeed);
// Specific for the mission were you have to chase the Executive Transport
if ((currentGame.area == 18) && (enemy[WC_BOSS].shield > 0) && (player.shield > 0))
if ((currentGame.area == 18) && (aliens[WC_BOSS].shield > 0) &&
(player.shield > 0))
{
engine.ssx = -6;
engine.ssy = 0;

View File

@ -130,14 +130,14 @@ void loadGameGraphics()
loadBackground(systemBackground[currentGame.system]);
for (int i = 0 ; i < MAX_DEFALIENS ; i++)
for (int i = 0 ; i < CD_MAX ; i++)
{
if (shipShape[defEnemy[i].imageIndex[0]] != NULL)
if (shipShape[alien_defs[i].imageIndex[0]] != NULL)
{
defEnemy[i].image[0] = shipShape[defEnemy[i].imageIndex[0]];
defEnemy[i].image[1] = shipShape[defEnemy[i].imageIndex[1]];
defEnemy[i].engineX = defEnemy[i].image[0]->w;
defEnemy[i].engineY = (defEnemy[i].image[0]->h / 2);
alien_defs[i].image[0] = shipShape[alien_defs[i].imageIndex[0]];
alien_defs[i].image[1] = shipShape[alien_defs[i].imageIndex[1]];
alien_defs[i].engineX = alien_defs[i].image[0]->w;
alien_defs[i].engineY = (alien_defs[i].image[0]->h / 2);
}
}

View File

@ -48,7 +48,7 @@ void loadScriptEvents()
gameEvent[i].flag = 0;
}
if ((currentGame.area == 27) && (enemy[WC_KLINE].classDef == CD_KLINE))
if ((currentGame.area == 27) && (aliens[WC_KLINE].classDef == CD_KLINE))
setKlineGreeting();
char filename[255];
@ -96,13 +96,13 @@ void checkScriptEvents()
{
if (gameEvent[i].flag != -FL_ACTIVATE)
{
enemy[gameEvent[i].entity].flags += gameEvent[i].flag;
aliens[gameEvent[i].entity].flags += gameEvent[i].flag;
}
else
{
enemy[gameEvent[i].entity].active = true;
enemy[gameEvent[i].entity].x = rrand((int)player.x + 400, (int)player.x + 800);
enemy[gameEvent[i].entity].y = rrand((int)player.y - 400, (int)player.y + 800);
aliens[gameEvent[i].entity].active = true;
aliens[gameEvent[i].entity].x = rrand((int)player.x + 400, (int)player.x + 800);
aliens[gameEvent[i].entity].y = rrand((int)player.y - 400, (int)player.y + 800);
}
}
@ -156,11 +156,11 @@ static void setScene(int scene)
if (shape > -1)
{
enemy[index].image[0] = shipShape[shape];
enemy[index].x = x;
enemy[index].y = y;
enemy[index].dx = speed;
enemy[index].active = true;
aliens[index].image[0] = shipShape[shape];
aliens[index].x = x;
aliens[index].y = y;
aliens[index].dx = speed;
aliens[index].active = true;
}
}
@ -201,9 +201,9 @@ void doCutscene(int scene)
for (int i = 0 ; i < 15 ; i++)
{
enemy[i] = defEnemy[0];
enemy[i].face = 0;
enemy[i].active = false;
aliens[i] = alien_defs[0];
aliens[i].face = 0;
aliens[i].active = false;
}
for (int i = 0 ; i < 10 ; i++)
@ -220,8 +220,8 @@ void doCutscene(int scene)
*/
for (int i = 0 ; i < 15 ; i++)
{
enemy[i].engineX = enemy[i].image[0]->w;
enemy[i].engineY = (enemy[i].image[0]->h / 2);
aliens[i].engineX = aliens[i].image[0]->w;
aliens[i].engineY = (aliens[i].image[0]->h / 2);
}
bool showMessage = false;
@ -244,30 +244,30 @@ void doCutscene(int scene)
for (int i = 0 ; i < 15 ; i++)
{
if (enemy[i].active)
if (aliens[i].active)
{
addEngine(&enemy[i]);
addEngine(&aliens[i]);
if (scene == 0 && i > 0 && (timer % 15) == i) {
enemy[i].dx += (drand48() - 0.5) * 0.1;
enemy[i].dy += (drand48() - 0.5) * 0.1;
if (enemy[i].x > 500 - timer)
enemy[i].dx -= 0.2;
if (enemy[i].x < 0)
enemy[i].dx += 0.2;
aliens[i].dx += (drand48() - 0.5) * 0.1;
aliens[i].dy += (drand48() - 0.5) * 0.1;
if (aliens[i].x > 500 - timer)
aliens[i].dx -= 0.2;
if (aliens[i].x < 0)
aliens[i].dx += 0.2;
}
enemy[i].x += enemy[i].dx;
enemy[i].y += enemy[i].dy;
enemy[i].x += engine.ssx + engine.smx;
blit(enemy[i].image[0], (int)enemy[i].x, (int)enemy[i].y);
if (enemy[i].x > (screen->w + 50))
aliens[i].x += aliens[i].dx;
aliens[i].y += aliens[i].dy;
aliens[i].x += engine.ssx + engine.smx;
blit(aliens[i].image[0], (int)aliens[i].x, (int)aliens[i].y);
if (aliens[i].x > (screen->w + 50))
{
enemy[i].x = -50;
enemy[i].y = rand() % (screen->h - 40);
aliens[i].x = -50;
aliens[i].y = rand() % (screen->h - 40);
}
if (enemy[i].y < -50)
enemy[i].y = (screen->h + 50);
if (enemy[i].y > (screen->h + 50))
enemy[i].y = -50;
if (aliens[i].y < -50)
aliens[i].y = (screen->h + 50);
if (aliens[i].y > (screen->h + 50))
aliens[i].y = -50;
}
}

View File

@ -62,7 +62,8 @@ static void drawSecondaryWeaponSurface()
}
drawString(description, 10, 22, FONT_WHITE, shopSurface[2]);
if ((player.weaponType[1] != W_LASER) && (player.weaponType[1] != W_CHARGER) && (player.weaponType[1] != W_NONE))
if ((player.weaponType[1] != W_LASER) &&
(player.weaponType[1] != W_CHARGER) && (player.weaponType[1] != W_NONE))
{
sprintf(description, "Capacity : %d", currentGame.maxRocketAmmo);
drawString(description, 10, 37, FONT_WHITE, shopSurface[2]);
@ -71,13 +72,13 @@ static void drawSecondaryWeaponSurface()
static void adjustShopPrices()
{
shopItems[SHOP_PLASMA_MAX_OUTPUT].price = (500 * currentGame.maxPlasmaOutput);
shopItems[SHOP_PLASMA_MAX_DAMAGE].price = (500 * currentGame.maxPlasmaDamage);
shopItems[SHOP_PLASMA_MAX_RATE].price = (500 * currentGame.maxPlasmaRate);
shopItems[SHOP_PLASMA_MAX_OUTPUT].price = (1500 * currentGame.maxPlasmaOutput);
shopItems[SHOP_PLASMA_MAX_DAMAGE].price = (1500 * currentGame.maxPlasmaDamage);
shopItems[SHOP_PLASMA_MAX_RATE].price = (1500 * currentGame.maxPlasmaRate);
shopItems[SHOP_PLASMA_MIN_OUTPUT].price = (2000 * currentGame.minPlasmaOutput);
shopItems[SHOP_PLASMA_MIN_DAMAGE].price = (2000 * currentGame.minPlasmaDamage);
shopItems[SHOP_PLASMA_MIN_RATE].price = (2000 * currentGame.minPlasmaRate);
shopItems[SHOP_PLASMA_MIN_OUTPUT].price = (4000 * currentGame.minPlasmaOutput);
shopItems[SHOP_PLASMA_MIN_DAMAGE].price = (4000 * currentGame.minPlasmaDamage);
shopItems[SHOP_PLASMA_MIN_RATE].price = (4000 * currentGame.minPlasmaRate);
if (currentGame.maxPlasmaOutput <= currentGame.minPlasmaOutput)
shopItems[SHOP_PLASMA_MIN_OUTPUT].price += shopItems[SHOP_PLASMA_MAX_OUTPUT].price;
@ -170,17 +171,22 @@ static void drawShop()
drawString("Primary Weapon", 10, 3, FONT_WHITE, shopSurface[0]);
sprintf(description, "Plasma Cannons : %d", currentGame.minPlasmaOutput);
drawString(description, 10, 22, FONT_WHITE, shopSurface[0]);
sprintf(description, "Plasma Power : Stage %d", currentGame.minPlasmaDamage);
sprintf(description, "Plasma Power : Stage %d",
currentGame.minPlasmaDamage);
drawString(description, 10, 37, FONT_WHITE, shopSurface[0]);
sprintf(description, "Cooler : Stage %d", currentGame.minPlasmaRate);
sprintf(description, "Cooler : Stage %d",
currentGame.minPlasmaRate);
drawString(description, 10, 52, FONT_WHITE, shopSurface[0]);
drawString("Powerup Weapon", 10, 3, FONT_WHITE, shopSurface[1]);
sprintf(description, "Plasma Output : Stage %d", currentGame.maxPlasmaOutput);
sprintf(description, "Plasma Output : Stage %d",
currentGame.maxPlasmaOutput);
drawString(description, 10, 22, FONT_WHITE, shopSurface[1]);
sprintf(description, "Plasma Condensor : Stage %d", currentGame.maxPlasmaDamage);
sprintf(description, "Plasma Condensor : Stage %d",
currentGame.maxPlasmaDamage);
drawString(description, 10, 37, FONT_WHITE, shopSurface[1]);
sprintf(description, "Liquid Nitrogen : Stage %d", currentGame.maxPlasmaRate);
sprintf(description, "Liquid Nitrogen : Stage %d",
currentGame.maxPlasmaRate);
drawString(description, 10, 52, FONT_WHITE, shopSurface[1]);
sprintf(description, "Plasma Capacity : %d", currentGame.maxPlasmaAmmo);
drawString(description, 10, 67, FONT_WHITE, shopSurface[1]);
@ -232,40 +238,51 @@ static void drawShop()
case -1:
break;
case -2:
drawString("You don't have enough money", 20, 30, FONT_WHITE, shopSurface[5]);
drawString("You don't have enough money", 20, 30, FONT_WHITE,
shopSurface[5]);
break;
case -3:
drawString("Cannot upgrade ship", 5, 22, FONT_WHITE, shopSurface[5]);
drawString("Hardware capacity has been reached", 20, 38, FONT_CYAN, shopSurface[5]);
drawString("Hardware capacity has been reached", 20, 38, FONT_CYAN,
shopSurface[5]);
break;
case -4:
drawString("Ammunition limit reached", 20, 30, FONT_WHITE, shopSurface[5]);
drawString("Ammunition limit reached", 20, 30, FONT_WHITE,
shopSurface[5]);
break;
case -5:
drawString("You cannot sell that item", 20, 30, FONT_WHITE, shopSurface[5]);
drawString("You cannot sell that item", 20, 30, FONT_WHITE,
shopSurface[5]);
break;
case -6:
drawString("Nothing to sell", 20, 30, FONT_WHITE, shopSurface[5]);
break;
case -7:
drawString("Rockets cannot be bought for Laser or Charger Cannon", 5, 30, FONT_WHITE, shopSurface[5]);
drawString("Rockets cannot be bought for Laser or Charger Cannon",
5, 30, FONT_WHITE, shopSurface[5]);
break;
case -8:
drawString("You already have that weapon", 20, 30, FONT_WHITE, shopSurface[5]);
drawString("You already have that weapon", 20, 30, FONT_WHITE,
shopSurface[5]);
break;
case -9:
drawString("This weapon's ammo limit has been reached", 20, 30, FONT_WHITE, shopSurface[5]);
drawString("This weapon's ammo limit has been reached", 20, 30,
FONT_WHITE, shopSurface[5]);
break;
default:
if (shopItems[shopSelectedItem].price != 0)
{
sprintf(description, "%s ($%d)", shopItems[shopSelectedItem].description, shopItems[shopSelectedItem].price);
sprintf(description, "%s ($%d)",
shopItems[shopSelectedItem].description,
shopItems[shopSelectedItem].price);
}
else
{
sprintf(description, "%s (N/A)", shopItems[shopSelectedItem].description);
sprintf(description, "%s (N/A)",
shopItems[shopSelectedItem].description);
}
drawString(shopItems[shopSelectedItem].name, 5, 22, FONT_WHITE, shopSurface[5]);
drawString(shopItems[shopSelectedItem].name, 5, 22, FONT_WHITE,
shopSurface[5]);
drawString(description, 20, 38, FONT_CYAN, shopSurface[5]);
break;
}
@ -275,19 +292,22 @@ void initShop()
{
/* ----------- Temporary Items ----------- */
shopItems[SHOP_PLASMA_MAX_OUTPUT].price = 1000;
shopItems[SHOP_PLASMA_MAX_OUTPUT].price = 0; // Overwritten later
strcpy(shopItems[SHOP_PLASMA_MAX_OUTPUT].name, "Plasma channel splitter");
strcpy(shopItems[SHOP_PLASMA_MAX_OUTPUT].description, "Improves poweredup plasma output");
strcpy(shopItems[SHOP_PLASMA_MAX_OUTPUT].description,
"Improves poweredup plasma output");
shopItems[SHOP_PLASMA_MAX_OUTPUT].image = 9;
shopItems[SHOP_PLASMA_MAX_DAMAGE].price = 1000;
shopItems[SHOP_PLASMA_MAX_DAMAGE].price = 0; // Overwritten later
strcpy(shopItems[SHOP_PLASMA_MAX_DAMAGE].name, "Plasma capacity condensor");
strcpy(shopItems[SHOP_PLASMA_MAX_DAMAGE].description, "Increases poweredup plasma damage");
strcpy(shopItems[SHOP_PLASMA_MAX_DAMAGE].description,
"Increases poweredup plasma damage");
shopItems[SHOP_PLASMA_MAX_DAMAGE].image = 10;
shopItems[SHOP_PLASMA_MAX_RATE].price = 1000;
shopItems[SHOP_PLASMA_MAX_RATE].price = 0; // Overwritten later
strcpy(shopItems[SHOP_PLASMA_MAX_RATE].name, "Liquid nitrogen capsules");
strcpy(shopItems[SHOP_PLASMA_MAX_RATE].description, "Increases plasma firing rate");
strcpy(shopItems[SHOP_PLASMA_MAX_RATE].description,
"Increases plasma firing rate");
shopItems[SHOP_PLASMA_MAX_RATE].image = 11;
shopItems[SHOP_PLASMA_AMMO].price = 50;
@ -297,48 +317,56 @@ void initShop()
shopItems[SHOP_ROCKET_AMMO].price = 50;
strcpy(shopItems[SHOP_ROCKET_AMMO].name, "Rocket Ammo");
strcpy(shopItems[SHOP_ROCKET_AMMO].description, "High velocity dumb fire rocket");
strcpy(shopItems[SHOP_ROCKET_AMMO].description,
"High velocity dumb fire rocket");
shopItems[SHOP_ROCKET_AMMO].image = 13;
/* ----------- Permanent Items ----------- */
shopItems[SHOP_PLASMA_MIN_OUTPUT].price = 2000;
shopItems[SHOP_PLASMA_MIN_OUTPUT].price = 0; // Overwritten later
strcpy(shopItems[SHOP_PLASMA_MIN_OUTPUT].name, "Additional Plasma Cannon");
strcpy(shopItems[SHOP_PLASMA_MIN_OUTPUT].description, "Adds an extra plasma cannon to the Firefly");
strcpy(shopItems[SHOP_PLASMA_MIN_OUTPUT].description,
"Adds an extra plasma cannon to the Firefly");
shopItems[SHOP_PLASMA_MIN_OUTPUT].image = 14;
shopItems[SHOP_PLASMA_MIN_DAMAGE].price = 2000;
shopItems[SHOP_PLASMA_MIN_DAMAGE].price = 0; // Overwritten later
strcpy(shopItems[SHOP_PLASMA_MIN_DAMAGE].name, "Plasma Power Booster");
strcpy(shopItems[SHOP_PLASMA_MIN_DAMAGE].description, "Increases power of plasma shots");
strcpy(shopItems[SHOP_PLASMA_MIN_DAMAGE].description,
"Increases power of plasma shots");
shopItems[SHOP_PLASMA_MIN_DAMAGE].image = 15;
shopItems[SHOP_PLASMA_MIN_RATE].price = 2000;
shopItems[SHOP_PLASMA_MIN_RATE].price = 0; // Overwritten later
strcpy(shopItems[SHOP_PLASMA_MIN_RATE].name, "Plasma Cooling Booster");
strcpy(shopItems[SHOP_PLASMA_MIN_RATE].description, "Permanently increases firing rate");
strcpy(shopItems[SHOP_PLASMA_MIN_RATE].description,
"Permanently increases firing rate");
shopItems[SHOP_PLASMA_MIN_RATE].image = 16;
/* ----------- Ammo Items -------------- */
shopItems[SHOP_PLASMA_MAX_AMMO].price = 250;
shopItems[SHOP_PLASMA_MAX_AMMO].price = 0; // Overwritten later
strcpy(shopItems[SHOP_PLASMA_MAX_AMMO].name, "Plasma compressor");
strcpy(shopItems[SHOP_PLASMA_MAX_AMMO].description, "Increases plasma ammo capacity");
strcpy(shopItems[SHOP_PLASMA_MAX_AMMO].description,
"Increases plasma ammo capacity");
shopItems[SHOP_PLASMA_MAX_AMMO].image = 17;
shopItems[SHOP_ROCKET_MAX_AMMO].price = 250;
shopItems[SHOP_ROCKET_MAX_AMMO].price = 0; // Overwritten later
strcpy(shopItems[SHOP_ROCKET_MAX_AMMO].name, "Rocket Pod");
strcpy(shopItems[SHOP_ROCKET_MAX_AMMO].description, "Allows for an additional 5 rockets to be carried");
strcpy(shopItems[SHOP_ROCKET_MAX_AMMO].description,
"Allows for an additional 5 rockets to be carried");
shopItems[SHOP_ROCKET_MAX_AMMO].image = 18;
/* ---------- Weaponary --------------- */
shopItems[SHOP_DOUBLE_ROCKETS].price = 2000;
strcpy(shopItems[SHOP_DOUBLE_ROCKETS].name, "Dual Rocket Launcher");
strcpy(shopItems[SHOP_DOUBLE_ROCKETS].description, "Allows for two rockets to be fired at once");
strcpy(shopItems[SHOP_DOUBLE_ROCKETS].description,
"Allows for two rockets to be fired at once");
shopItems[SHOP_DOUBLE_ROCKETS].image = 19;
shopItems[SHOP_MICRO_ROCKETS].price = 2500;
strcpy(shopItems[SHOP_MICRO_ROCKETS].name, "Micro Rocket Launcher");
strcpy(shopItems[SHOP_MICRO_ROCKETS].description, "Launches several less powerful rockets at once");
strcpy(shopItems[SHOP_MICRO_ROCKETS].description,
"Launches several less powerful rockets at once");
shopItems[SHOP_MICRO_ROCKETS].image = 20;
shopItems[SHOP_LASER].price = 5000;
@ -348,8 +376,8 @@ void initShop()
shopItems[SHOP_HOMING_MISSILE].price = 7500;
strcpy(shopItems[SHOP_HOMING_MISSILE].name, "Homing Missile Launcher");
sprintf(shopItems[SHOP_HOMING_MISSILE].description, "Fires homing missile (max %i missiles)",
maxHoming);
sprintf(shopItems[SHOP_HOMING_MISSILE].description,
"Fires homing missile (max %i missiles)", maxHoming);
shopItems[SHOP_HOMING_MISSILE].image = 22;
shopItems[SHOP_CHARGER].price = 10000;
@ -358,13 +386,15 @@ void initShop()
shopItems[SHOP_CHARGER].image = 23;
shopItems[SHOP_DOUBLE_HOMING_MISSILES].price = 10000;
strcpy(shopItems[SHOP_DOUBLE_HOMING_MISSILES].name, "Dual Homing Missile Launcher");
strcpy(shopItems[SHOP_DOUBLE_HOMING_MISSILES].name,
"Dual Homing Missile Launcher");
sprintf(shopItems[SHOP_DOUBLE_HOMING_MISSILES].description,
"Fires two homing missiles (max %i missiles)", maxDoubleHoming);
shopItems[SHOP_DOUBLE_HOMING_MISSILES].image = 24;
shopItems[SHOP_MICRO_HOMING_MISSILES].price = 15000;
strcpy(shopItems[SHOP_MICRO_HOMING_MISSILES].name, "Homing Micro Missile Launcher");
strcpy(shopItems[SHOP_MICRO_HOMING_MISSILES].name,
"Homing Micro Missile Launcher");
sprintf(shopItems[SHOP_MICRO_HOMING_MISSILES].description,
"Fires several small homing missiles (max %i missiles)", maxMicroHoming);
shopItems[SHOP_MICRO_HOMING_MISSILES].image = 25;

View File

@ -27,7 +27,7 @@ struct object {
signed char AIType; // Type of articifial intelligence
signed char id; // The "job" of the object
object *target; // index target in enemy array
object *target; // index target in aliens array
signed char reload[2];
@ -73,14 +73,14 @@ struct mission {
char primaryObjective[3][50]; // Description
signed char primaryType[3]; // The type of mission this is
signed char target1[3]; // index of target in enemy array
signed char target1[3]; // index of target in aliens array
int targetValue1[3]; // Number of things to collect (slaves, cash, etc)
signed char timeLimit1[3]; // In minutes
int completed1[3];
char secondaryObjective[3][50]; // Description
signed char secondaryType[3]; // The type of mission this is
signed char target2[3]; // index of target in enemy array
signed char target2[3]; // index of target in aliens array
int targetValue2[3]; // Number of things to collect (slaves, cash, etc)
signed char timeLimit2[3]; // In minutes
int completed2[3];

View File

@ -229,15 +229,15 @@ int doTitle()
for (int i = 0 ; i < 15 ; i++)
{
enemy[i] = defEnemy[rand() % 3];
aliens[i] = alien_defs[rand() % 3];
if ((rand() % 5) == 0)
enemy[i] = defEnemy[CD_TRANSPORTSHIP];
aliens[i] = alien_defs[CD_TRANSPORTSHIP];
if ((rand() % 5) == 0)
enemy[i] = defEnemy[CD_MINER];
enemy[i].x = rand() % screen->w;
enemy[i].y = rand() % (screen->h - 40);
enemy[i].dx = 1 + rand() % 3;
enemy[i].face = 0;
aliens[i] = alien_defs[CD_MINER];
aliens[i].x = rand() % screen->w;
aliens[i].y = rand() % (screen->h - 40);
aliens[i].dx = 1 + rand() % 3;
aliens[i].face = 0;
}
int redGlow = 255;
@ -281,14 +281,14 @@ int doTitle()
for (int i = 0 ; i < 15 ; i++)
{
addEngine(&enemy[i]);
enemy[i].x += enemy[i].dx;
blit(enemy[i].image[0], (int)enemy[i].x, (int)enemy[i].y);
if (enemy[i].x > 830)
addEngine(&aliens[i]);
aliens[i].x += aliens[i].dx;
blit(aliens[i].image[0], (int)aliens[i].x, (int)aliens[i].y);
if (aliens[i].x > 830)
{
enemy[i].x = -40;
enemy[i].y = rand() % (screen->h - 20);
enemy[i].dx = 1 + rand() % 3;
aliens[i].x = -40;
aliens[i].y = rand() % (screen->h - 20);
aliens[i].dx = 1 + rand() % 3;
}
}