Flatten objects which only contain static functions.

There is no reason to have objects which contain only static functions
and no variables. These functions have been moved to the global
namespace and are now defined in .cpp files. The math functions are very
small and have been put in math.h and made static inline.
This commit is contained in:
Guus Sliepen 2011-08-26 23:27:16 +02:00
parent 931d110692
commit 878e559b6a
20 changed files with 290 additions and 287 deletions

View File

@ -53,6 +53,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "init.h" #include "init.h"
#include "intermission.h" #include "intermission.h"
#include "loadSave.h" #include "loadSave.h"
#include "math.h"
#include "messages.h" #include "messages.h"
#include "misc.h" #include "misc.h"
#include "missions.h" #include "missions.h"

View File

@ -26,26 +26,26 @@ object enemy[MAX_ALIENS];
static bool placeAlien(object *theEnemy) static bool placeAlien(object *theEnemy)
{ {
if (rand() % 2 == 0) if (rand() % 2 == 0)
theEnemy->x = Math::rrand(800, 1600); theEnemy->x = rrand(800, 1600);
else else
theEnemy->x = Math::rrand(-800, 0); theEnemy->x = rrand(-800, 0);
if (rand() % 2 == 0) if (rand() % 2 == 0)
theEnemy->y = Math::rrand(600, 1200); theEnemy->y = rrand(600, 1200);
else else
theEnemy->y = Math::rrand(-600, 0); theEnemy->y = rrand(-600, 0);
if (currentGame.area == 24) if (currentGame.area == 24)
{ {
theEnemy->x = 800; theEnemy->x = 800;
theEnemy->y = Math::rrand(200, 400); theEnemy->y = rrand(200, 400);
} }
for (int i = 0 ; i < MAX_ALIENS ; i++) for (int i = 0 ; i < MAX_ALIENS ; i++)
{ {
if ((enemy[i].owner != theEnemy) && (enemy[i].shield > 0)) if ((enemy[i].owner != theEnemy) && (enemy[i].shield > 0))
{ {
if (Collision::collision(theEnemy->x, theEnemy->y, theEnemy->image[0]->w, theEnemy->image[0]->h, enemy[i].x, enemy[i].y, enemy[i].image[0]->w, enemy[i].image[0]->h)) if (collision(theEnemy->x, theEnemy->y, theEnemy->image[0]->w, theEnemy->image[0]->h, enemy[i].x, enemy[i].y, enemy[i].image[0]->w, enemy[i].image[0]->h))
return false; return false;
} }
} }
@ -251,7 +251,7 @@ bool addAlien()
enemy[index].deathCounter = 0 - (enemy[index].maxShield * 3); enemy[index].deathCounter = 0 - (enemy[index].maxShield * 3);
enemy[index].hit = 0; enemy[index].hit = 0;
Math::limitInt(&enemy[index].deathCounter, -250, 0); limitInt(&enemy[index].deathCounter, -250, 0);
// Attempts to place an alien. If it fails, the alien is deactivated. // Attempts to place an alien. If it fails, the alien is deactivated.
for (int i = 0 ; i < 100 ; i++) for (int i = 0 ; i < 100 ; i++)
@ -272,8 +272,8 @@ bool addAlien()
if (enemy[index].classDef == CD_ESCORT) if (enemy[index].classDef == CD_ESCORT)
enemy[index].shield = 50; enemy[index].shield = 50;
enemy[index].dx = Math::rrand(-2, 2); enemy[index].dx = rrand(-2, 2);
enemy[index].dy = Math::rrand(-2, 2); enemy[index].dy = rrand(-2, 2);
enemy[index].ammo[0] = 0; enemy[index].ammo[0] = 0;
@ -475,14 +475,14 @@ static void addFriendly(int type)
enemy[type].active = true; enemy[type].active = true;
if (rand() % 2 == 0) if (rand() % 2 == 0)
enemy[type].x = Math::rrand(400, 550); enemy[type].x = rrand(400, 550);
else else
enemy[type].x = Math::rrand(250, 400); enemy[type].x = rrand(250, 400);
if (rand() % 2 == 0) if (rand() % 2 == 0)
enemy[type].y = Math::rrand(300, 450); enemy[type].y = rrand(300, 450);
else else
enemy[type].y = Math::rrand(150, 300); enemy[type].y = rrand(150, 300);
if (type == FR_PHOEBE) if (type == FR_PHOEBE)
enemy[type].classDef = CD_PHOEBE; enemy[type].classDef = CD_PHOEBE;
@ -610,7 +610,7 @@ void initAliens()
{ {
enemy[i].systemPower = enemy[i].maxShield; enemy[i].systemPower = enemy[i].maxShield;
enemy[i].deathCounter = 0 - (enemy[i].maxShield * 3); enemy[i].deathCounter = 0 - (enemy[i].maxShield * 3);
Math::limitInt(&enemy[i].deathCounter, -350, 0); limitInt(&enemy[i].deathCounter, -350, 0);
} }
// Set target energy meter // Set target energy meter
@ -826,7 +826,7 @@ static void moveAndSeparate(object *theEnemy)
continue; continue;
} }
if (Collision::collision(theEnemy, anEnemy)) if (collision(theEnemy, anEnemy))
{ {
if ((anEnemy->classDef == CD_BARRIER) && (anEnemy->owner != theEnemy)) if ((anEnemy->classDef == CD_BARRIER) && (anEnemy->owner != theEnemy))
{ {
@ -848,7 +848,7 @@ static void moveAndSeparate(object *theEnemy)
// Handle a collision with the player // Handle a collision with the player
if ((player.shield > 0) && (theEnemy->shield > 0) && (checkCollisions)) if ((player.shield > 0) && (theEnemy->shield > 0) && (checkCollisions))
{ {
if (Collision::collision(theEnemy, &player)) if (collision(theEnemy, &player))
{ {
hasCollided = true; hasCollided = true;
@ -918,7 +918,7 @@ static void moveAndSeparate(object *theEnemy)
theEnemy->dx *= 0.2; theEnemy->dx *= 0.2;
theEnemy->dy *= 0.2; theEnemy->dy *= 0.2;
Math::limitInt(&theEnemy->thinktime, 0, 15); limitInt(&theEnemy->thinktime, 0, 15);
} }
} }
} }
@ -989,7 +989,7 @@ void doAliens()
canFire = true; // The alien is allowed to fire canFire = true; // The alien is allowed to fire
Math::limitInt(&--theEnemy->thinktime, 0, 250); limitInt(&--theEnemy->thinktime, 0, 250);
if (theEnemy->target->shield < 1) if (theEnemy->target->shield < 1)
theEnemy->target = theEnemy; theEnemy->target = theEnemy;
@ -1031,8 +1031,8 @@ void doAliens()
if (theEnemy->dx > 0) theEnemy->face = 1; if (theEnemy->dx > 0) theEnemy->face = 1;
} }
Math::limitFloat(&theEnemy->dx, 0 - theEnemy->speed, theEnemy->speed); limitFloat(&theEnemy->dx, 0 - theEnemy->speed, theEnemy->speed);
Math::limitFloat(&theEnemy->dy, 0 - theEnemy->speed, theEnemy->speed); limitFloat(&theEnemy->dy, 0 - theEnemy->speed, theEnemy->speed);
} }
@ -1050,7 +1050,7 @@ void doAliens()
if (theEnemy->flags & FL_LEAVESECTOR) if (theEnemy->flags & FL_LEAVESECTOR)
{ {
Math::limitFloat(&(theEnemy->dx -= 0.5), 0, -15); limitFloat(&(theEnemy->dx -= 0.5), 0, -15);
theEnemy->dy = 0; theEnemy->dy = 0;
theEnemy->thinktime = 999; theEnemy->thinktime = 999;
theEnemy->face = 0; theEnemy->face = 0;
@ -1103,13 +1103,13 @@ void doAliens()
if (theEnemy->classDef == CD_MOBILESHIELD) if (theEnemy->classDef == CD_MOBILESHIELD)
{ {
Math::limitInt(&(++enemy[WC_BOSS].shield), 0, enemy[WC_BOSS].maxShield); limitInt(&(++enemy[WC_BOSS].shield), 0, enemy[WC_BOSS].maxShield);
} }
// ---------------------------------------- // ----------------------------------------
Math::limitCharAdd(&theEnemy->reload[0], -1, 0, 999); limitCharAdd(&theEnemy->reload[0], -1, 0, 999);
Math::limitCharAdd(&theEnemy->reload[1], -1, 0, 999); limitCharAdd(&theEnemy->reload[1], -1, 0, 999);
if ((!(theEnemy->flags & FL_DISABLED)) && (!(theEnemy->flags & FL_NOFIRE))) if ((!(theEnemy->flags & FL_DISABLED)) && (!(theEnemy->flags & FL_NOFIRE)))
{ {
@ -1157,7 +1157,7 @@ void doAliens()
} }
else else
{ {
Math::limitCharAdd(&theEnemy->ammo[0], 1, 0, 250); limitCharAdd(&theEnemy->ammo[0], 1, 0, 250);
} }
// ------------------------------------------------------- // -------------------------------------------------------
@ -1188,7 +1188,7 @@ void doAliens()
if (theEnemy->hit) if (theEnemy->hit)
shapeToUse += SHIP_HIT_INDEX; shapeToUse += SHIP_HIT_INDEX;
Math::limitCharAdd(&theEnemy->hit, -1, 0, 100); limitCharAdd(&theEnemy->hit, -1, 0, 100);
if ((theEnemy->x + theEnemy->image[0]->w > 0) && (theEnemy->x < 800) && (theEnemy->y + theEnemy->image[0]->h > 0) && (theEnemy->y < 600)) if ((theEnemy->x + theEnemy->image[0]->w > 0) && (theEnemy->x < 800) && (theEnemy->y + theEnemy->image[0]->h > 0) && (theEnemy->y < 600))
{ {

View File

@ -55,7 +55,7 @@ void addBullet(object *theWeapon, object *attacker, int y, int dy)
if (bullet->flags & WF_VARIABLE_SPEED) if (bullet->flags & WF_VARIABLE_SPEED)
{ {
bullet->dx = Math::rrand(100, 200); bullet->dx = rrand(100, 200);
bullet->dx /= 10; bullet->dx /= 10;
if (attacker->face == 1) if (attacker->face == 1)
bullet->dx = 0 - bullet->dx; bullet->dx = 0 - bullet->dx;
@ -65,7 +65,7 @@ void addBullet(object *theWeapon, object *attacker, int y, int dy)
if (bullet->flags & WF_SCATTER) if (bullet->flags & WF_SCATTER)
{ {
bullet->dy = Math::rrand(-200, 200); bullet->dy = rrand(-200, 200);
if (bullet->dy != 0) if (bullet->dy != 0)
bullet->dy /= 200; bullet->dy /= 200;
} }
@ -127,8 +127,8 @@ void addBullet(object *theWeapon, object *attacker, int y, int dy)
if (attacker->classDef == CD_ASTEROID) if (attacker->classDef == CD_ASTEROID)
{ {
bullet->dx = Math::rrand(-20, 20); bullet->dx = rrand(-20, 20);
bullet->dy = Math::rrand(-20, 20); bullet->dy = rrand(-20, 20);
bullet->image[0] = graphics.shape[4]; bullet->image[0] = graphics.shape[4];
} }
@ -405,7 +405,7 @@ char checkPlayerShockDamage(float x, float y)
player.shield -= (int)(10 - distX); player.shield -= (int)(10 - distX);
player.shield -= (int)(10 - distY); player.shield -= (int)(10 - distY);
Math::limitInt(&player.shield, 0, player.maxShield); limitInt(&player.shield, 0, player.maxShield);
player.hit = 10; player.hit = 10;
return 1; return 1;
@ -441,7 +441,7 @@ void fireRay(object *attacker)
{ {
if (player.shield > 0) if (player.shield > 0)
{ {
if (Collision::collision(player.x, player.y, player.image[0]->w, player.image[0]->h, ray.x, ray.y, ray.w, ray.h) && (!engine.cheatShield)) if (collision(player.x, player.y, player.image[0]->w, player.image[0]->h, ray.x, ray.y, ray.w, ray.h) && (!engine.cheatShield))
{ {
if (player.shield > engine.lowShield) if (player.shield > engine.lowShield)
{ {
@ -472,7 +472,7 @@ void fireRay(object *attacker)
if ((anEnemy->shield > 0) && (attacker != anEnemy) && (attacker->classDef != anEnemy->classDef)) if ((anEnemy->shield > 0) && (attacker != anEnemy) && (attacker->classDef != anEnemy->classDef))
{ {
if (Collision::collision(anEnemy->x, anEnemy->y, anEnemy->image[0]->w, anEnemy->image[0]->h, ray.x, ray.y, ray.w, ray.h)) if (collision(anEnemy->x, anEnemy->y, anEnemy->image[0]->w, anEnemy->image[0]->h, ray.x, ray.y, ray.w, ray.h))
{ {
anEnemy->shield--; anEnemy->shield--;
addExplosion(anEnemy->x, anEnemy->y, E_SMALL_EXPLOSION); addExplosion(anEnemy->x, anEnemy->y, E_SMALL_EXPLOSION);
@ -547,7 +547,7 @@ void doBullets()
if (bullet->id == WT_CHARGER) if (bullet->id == WT_CHARGER)
{ {
for (int i = 0 ; i < bullet->damage ; i++) for (int i = 0 ; i < bullet->damage ; i++)
graphics.blit(bullet->image[0], (int)(bullet->x - Math::rrand(-(bullet->damage / 3), 0)), (int)(bullet->y + Math::rrand(-3, 3))); graphics.blit(bullet->image[0], (int)(bullet->x - rrand(-(bullet->damage / 3), 0)), (int)(bullet->y + rrand(-3, 3)));
} }
graphics.blit(bullet->image[0], (int)bullet->x, (int)bullet->y); graphics.blit(bullet->image[0], (int)bullet->x, (int)bullet->y);
@ -557,18 +557,18 @@ void doBullets()
if (bullet->target != NULL) if (bullet->target != NULL)
{ {
if (bullet->x < bullet->target->x) if (bullet->x < bullet->target->x)
Math::limitFloat(&(bullet->dx += homingMissileSpeed), -15, 15); limitFloat(&(bullet->dx += homingMissileSpeed), -15, 15);
if (bullet->x > bullet->target->x) if (bullet->x > bullet->target->x)
Math::limitFloat(&(bullet->dx -= homingMissileSpeed), -15, 15); limitFloat(&(bullet->dx -= homingMissileSpeed), -15, 15);
//Rocket is (more or less) inline with target. Fly straight //Rocket is (more or less) inline with target. Fly straight
if ((bullet->x > bullet->target->x - 1) && (bullet->x < bullet->target->x + 5)) if ((bullet->x > bullet->target->x - 1) && (bullet->x < bullet->target->x + 5))
bullet->dx = 0; bullet->dx = 0;
if (bullet->y < bullet->target->y) if (bullet->y < bullet->target->y)
Math::limitFloat(&(bullet->dy += homingMissileSpeed), -15, 15); limitFloat(&(bullet->dy += homingMissileSpeed), -15, 15);
if (bullet->y > bullet->target->y) if (bullet->y > bullet->target->y)
Math::limitFloat(&(bullet->dy -= homingMissileSpeed), -15, 15); limitFloat(&(bullet->dy -= homingMissileSpeed), -15, 15);
//Rocket is (more or less) inline with target. Fly straight //Rocket is (more or less) inline with target. Fly straight
if ((bullet->y > bullet->target->y - 1) && (bullet->y < bullet->target->y + 5)) if ((bullet->y > bullet->target->y - 1) && (bullet->y < bullet->target->y + 5))
@ -602,7 +602,7 @@ void doBullets()
if (okayToHit) if (okayToHit)
{ {
if ((bullet->active) && (Collision::collision(bullet, theEnemy))) if ((bullet->active) && (collision(bullet, theEnemy)))
{ {
if (bullet->owner == &player) if (bullet->owner == &player)
{ {
@ -623,7 +623,7 @@ void doBullets()
if (theEnemy->flags & FL_CANNOTDIE) if (theEnemy->flags & FL_CANNOTDIE)
{ {
Math::limitInt(&theEnemy->shield, 1, theEnemy->maxShield); limitInt(&theEnemy->shield, 1, theEnemy->maxShield);
if (theEnemy->shield == 1) if (theEnemy->shield == 1)
{ {
if (currentGame.area != 26) if (currentGame.area != 26)
@ -695,7 +695,7 @@ void doBullets()
// Check for bullets hitting player // Check for bullets hitting player
if ((bullet->flags & WF_WEAPCO) || (bullet->id == WT_ROCKET) || (bullet->id == WT_LASER) || (bullet->id == WT_CHARGER)) if ((bullet->flags & WF_WEAPCO) || (bullet->id == WT_ROCKET) || (bullet->id == WT_LASER) || (bullet->id == WT_CHARGER))
{ {
if ((bullet->active) && (player.shield > 0) && (Collision::collision(bullet, &player)) && (bullet->owner != &player)) if ((bullet->active) && (player.shield > 0) && (collision(bullet, &player)) && (bullet->owner != &player))
{ {
if ((!engine.cheatShield) || (engine.missionCompleteTimer != 0)) if ((!engine.cheatShield) || (engine.missionCompleteTimer != 0))
{ {
@ -707,7 +707,7 @@ void doBullets()
} }
} }
player.shield -= bullet->damage; player.shield -= bullet->damage;
Math::limitInt(&player.shield, 0, player.maxShield); limitInt(&player.shield, 0, player.maxShield);
player.hit = 5; player.hit = 5;
} }
@ -743,7 +743,7 @@ void doBullets()
theCargo = &cargo[j]; theCargo = &cargo[j];
if (theCargo->active) if (theCargo->active)
{ {
if (Collision::collision(bullet, theCargo)) if (collision(bullet, theCargo))
{ {
bullet->active = false; bullet->active = false;
addExplosion(bullet->x, bullet->y, E_SMALL_EXPLOSION); addExplosion(bullet->x, bullet->y, E_SMALL_EXPLOSION);
@ -753,7 +753,7 @@ void doBullets()
theCargo->active = false; theCargo->active = false;
playSound(SFX_EXPLOSION); playSound(SFX_EXPLOSION);
for (int i = 0 ; i < 10 ; i++) for (int i = 0 ; i < 10 ; i++)
addExplosion(theCargo->x + Math::rrand(-15, 15), theCargo->y + Math::rrand(-15, 15), E_BIG_EXPLOSION); addExplosion(theCargo->x + rrand(-15, 15), theCargo->y + rrand(-15, 15), E_BIG_EXPLOSION);
updateMissionRequirements(M_PROTECT_PICKUP, P_CARGO, 1); updateMissionRequirements(M_PROTECT_PICKUP, P_CARGO, 1);
} }
} }
@ -772,7 +772,7 @@ void doBullets()
{ {
playSound(SFX_EXPLOSION); playSound(SFX_EXPLOSION);
for (int i = 0 ; i < 10 ; i++) for (int i = 0 ; i < 10 ; i++)
addExplosion(bullet->x + Math::rrand(-35, 35), bullet->y + Math::rrand(-35, 35), E_BIG_EXPLOSION); addExplosion(bullet->x + rrand(-35, 35), bullet->y + rrand(-35, 35), E_BIG_EXPLOSION);
if (bullet->flags & WF_TIMEDEXPLOSION) if (bullet->flags & WF_TIMEDEXPLOSION)
if (checkPlayerShockDamage(bullet->x, bullet->y)) if (checkPlayerShockDamage(bullet->x, bullet->y))

View File

@ -102,8 +102,8 @@ void doCargo()
cargo[i].x += engine.ssx; cargo[i].x += engine.ssx;
cargo[i].y += engine.ssy; cargo[i].y += engine.ssy;
Math::limitFloat(&cargo[i].x, cargo[i].owner->x - 50, cargo[i].owner->x + 50); limitFloat(&cargo[i].x, cargo[i].owner->x - 50, cargo[i].owner->x + 50);
Math::limitFloat(&cargo[i].y, cargo[i].owner->y - 50, cargo[i].owner->y + 50); limitFloat(&cargo[i].y, cargo[i].owner->y - 50, cargo[i].owner->y + 50);
dx = (cargo[i].x - cargo[i].owner->x) / 10; dx = (cargo[i].x - cargo[i].owner->x) / 10;
dy = (cargo[i].y - cargo[i].owner->y) / 10; dy = (cargo[i].y - cargo[i].owner->y) / 10;

View File

@ -20,170 +20,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
extern void showErrorAndExit(int errorId, const char *name); extern void showErrorAndExit(int errorId, const char *name);
class Collision {
private:
Collision(){}
public:
static signed char collision(float x0, float y0, int w0, int h0, float x2, float y2, int w1, int h1)
{
float x1 = x0 + w0;
float y1 = y0 + h0;
float x3 = x2 + w1;
float y3 = y2 + h1;
return !(x1<x2 || x3<x0 || y1<y2 || y3<y0);
}
static signed char collision(object *object1, object *object2)
{
float x0 = object1->x;
float y0 = object1->y;
float w0 = object1->image[0]->w;
float h0 = object1->image[0]->h;
float x2 = object2->x;
float y2 = object2->y;
float w1 = object2->image[0]->w;
float h1 = object2->image[0]->h;
float x1 = x0 + w0;
float y1 = y0 + h0;
float x3 = x2 + w1;
float y3 = y2 + h1;
return !(x1<x2 || x3<x0 || y1<y2 || y3<y0);
}
static signed char collision(collectables *object1, object *object2)
{
float x0 = object1->x;
float y0 = object1->y;
float w0 = object1->image->w;
float h0 = object1->image->h;
float x2 = object2->x;
float y2 = object2->y;
float w1 = object2->image[0]->w;
float h1 = object2->image[0]->h;
float x1 = x0 + w0;
float y1 = y0 + h0;
float x3 = x2 + w1;
float y3 = y2 + h1;
return !(x1<x2 || x3<x0 || y1<y2 || y3<y0);
}
};
class Math {
private:
Math(){}
public:
static void limitChar(signed char *in, int low, int high)
{
if (*in < low)
*in = low;
if (*in > high)
*in = high;
}
static void limitChar(unsigned char *in, int low, int high)
{
if (*in < low)
*in = low;
if (*in > high)
*in = high;
}
static void limitCharAdd(signed char *in, int add, int low, int high)
{
int tmp = (int)*in + add;
if (tmp < low)
tmp = low;
if (tmp > high)
tmp = high;
*in = tmp;
}
static void limitCharAdd(unsigned char *in, int add, int low, int high)
{
int tmp = (int)*in + add;
if (tmp < low)
tmp = low;
if (tmp > high)
tmp = high;
*in = tmp;
}
static void limitInt(int *in, int low, int high)
{
if (*in < low)
*in = low;
if (*in > high)
*in = high;
}
static void limitFloat(float *in, float low, float high)
{
if (*in < low)
*in = low;
if (*in > high)
*in = high;
}
static void wrapChar(signed char *in, signed char low, signed char high)
{
if (*in < low)
*in = high;
if (*in > high)
*in = low;
}
static void wrapInt(int *in, int low, int high)
{
if (*in < low)
*in = high;
if (*in > high)
*in = low;
}
static void wrapFloat(float *in, float low, float high)
{
if (*in < low)
*in = high;
if (*in > high)
*in = low;
}
static int rrand(int min, int max)
{
int r = min;
max++;
if ((max - min) == 0)
return min;
r += rand() % (max - min);
return r;
}
};
class Graphics { class Graphics {
unsigned long frameLimit; unsigned long frameLimit;
int thirds; int thirds;

View File

@ -93,11 +93,11 @@ void addCollectable(float x, float y, int type, int value, int life)
collectable->x = x; collectable->x = x;
collectable->y = y; collectable->y = y;
collectable->dx = Math::rrand(-100, 100); collectable->dx = rrand(-100, 100);
if (collectable->dx != 0) if (collectable->dx != 0)
collectable->dx /= 100; collectable->dx /= 100;
collectable->dy = Math::rrand(-100, 100); collectable->dy = rrand(-100, 100);
if (collectable->dy != 0) if (collectable->dy != 0)
collectable->dy /= 100; collectable->dy /= 100;
@ -185,7 +185,7 @@ void checkMineBulletCollisions(object *bullet)
if (collectable->type == P_MINE) if (collectable->type == P_MINE)
{ {
if (Collision::collision(collectable, bullet)) if (collision(collectable, bullet))
{ {
collectable->active = false; collectable->active = false;
@ -252,7 +252,7 @@ void doCollectables()
collectable->life--; collectable->life--;
if ((player.shield > 0) && (Collision::collision(collectable, &player))) if ((player.shield > 0) && (collision(collectable, &player)))
{ {
char temp[40]; char temp[40];
switch(collectable->type) switch(collectable->type)
@ -264,7 +264,7 @@ void doCollectables()
break; break;
case P_ROCKET: case P_ROCKET:
Math::limitCharAdd(&player.ammo[1], collectable->value, 0, currentGame.maxRocketAmmo); limitCharAdd(&player.ammo[1], collectable->value, 0, currentGame.maxRocketAmmo);
if (player.ammo[1] == currentGame.maxRocketAmmo) if (player.ammo[1] == currentGame.maxRocketAmmo)
sprintf(temp, "Rocket Ammo at Maximum"); sprintf(temp, "Rocket Ammo at Maximum");
else else
@ -278,17 +278,17 @@ void doCollectables()
break; break;
case P_SHIELD: case P_SHIELD:
Math::limitInt(&(player.shield += 10), 0, player.maxShield); limitInt(&(player.shield += 10), 0, player.maxShield);
currentGame.shieldPickups ++; currentGame.shieldPickups ++;
sprintf(temp, "Restored 10 shield points"); sprintf(temp, "Restored 10 shield points");
break; break;
case P_PLASMA_RATE: case P_PLASMA_RATE:
Math::limitCharAdd(&weapon[1].reload[0], -2, currentGame.maxPlasmaRate, 15); limitCharAdd(&weapon[1].reload[0], -2, currentGame.maxPlasmaRate, 15);
player.weaponType[0] = 1; player.weaponType[0] = 1;
if (player.ammo[0] < 50) if (player.ammo[0] < 50)
player.ammo[0] = 50; player.ammo[0] = 50;
Math::limitChar(&(player.ammo[0]), 0, currentGame.maxPlasmaAmmo); limitChar(&(player.ammo[0]), 0, currentGame.maxPlasmaAmmo);
if (weapon[1].reload[0] == currentGame.maxPlasmaRate) if (weapon[1].reload[0] == currentGame.maxPlasmaRate)
sprintf(temp, "Firing Rate at Maximum"); sprintf(temp, "Firing Rate at Maximum");
else else
@ -297,10 +297,10 @@ void doCollectables()
break; break;
case P_PLASMA_SHOT: case P_PLASMA_SHOT:
Math::limitCharAdd(&weapon[1].ammo[0], 1, 1, currentGame.maxPlasmaOutput); limitCharAdd(&weapon[1].ammo[0], 1, 1, currentGame.maxPlasmaOutput);
if (player.ammo[0] < 50) if (player.ammo[0] < 50)
player.ammo[0] = 50; player.ammo[0] = 50;
Math::limitChar(&(player.ammo[0]), 0, currentGame.maxPlasmaAmmo); limitChar(&(player.ammo[0]), 0, currentGame.maxPlasmaAmmo);
if (weapon[1].ammo[0] == currentGame.maxPlasmaOutput) if (weapon[1].ammo[0] == currentGame.maxPlasmaOutput)
sprintf(temp, "Plasma output at Maximum"); sprintf(temp, "Plasma output at Maximum");
else else
@ -310,10 +310,10 @@ void doCollectables()
break; break;
case P_PLASMA_DAMAGE: case P_PLASMA_DAMAGE:
Math::limitCharAdd(&weapon[1].damage, 1, 1, currentGame.maxPlasmaDamage); limitCharAdd(&weapon[1].damage, 1, 1, currentGame.maxPlasmaDamage);
if (player.ammo[0] < 50) if (player.ammo[0] < 50)
player.ammo[0] = 50; player.ammo[0] = 50;
Math::limitChar(&(player.ammo[0]), 0, currentGame.maxPlasmaAmmo); limitChar(&(player.ammo[0]), 0, currentGame.maxPlasmaAmmo);
if (weapon[1].damage == currentGame.maxPlasmaDamage) if (weapon[1].damage == currentGame.maxPlasmaDamage)
sprintf(temp, "Plasma damage at Maximum"); sprintf(temp, "Plasma damage at Maximum");
else else
@ -345,7 +345,7 @@ void doCollectables()
break; break;
case P_PLASMA_AMMO: case P_PLASMA_AMMO:
Math::limitCharAdd(&player.ammo[0], collectable->value, 0, currentGame.maxPlasmaAmmo); limitCharAdd(&player.ammo[0], collectable->value, 0, currentGame.maxPlasmaAmmo);
if (player.ammo[0] == currentGame.maxPlasmaAmmo) if (player.ammo[0] == currentGame.maxPlasmaAmmo)
sprintf(temp, "Plasma cells at Maximum"); sprintf(temp, "Plasma cells at Maximum");
else else

View File

@ -136,7 +136,7 @@ void doComms(SDL_Surface *comms)
{ {
for (int i = 0 ; i < 4 ; i++) for (int i = 0 ; i < 4 ; i++)
{ {
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 170, 180 + (i * 60), 430, 50)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 170, 180 + (i * 60), 430, 50))
{ {
createMissionDetailSurface(comms, i); createMissionDetailSurface(comms, i);
engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0;
@ -145,7 +145,7 @@ void doComms(SDL_Surface *comms)
} }
else else
{ {
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 170, 440, 160, 20)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 170, 440, 160, 20))
{ {
createCommsSurface(comms); createCommsSurface(comms);
engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0;

View File

@ -29,8 +29,8 @@ void addDebris(int x, int y, int amount)
object *debris; object *debris;
amount = Math::rrand(3, rand() % amount); amount = rrand(3, rand() % amount);
Math::limitInt(&amount, 3, 8); limitInt(&amount, 3, 8);
for (int i = 0 ; i < amount ; i++) for (int i = 0 ; i < amount ; i++)
{ {
@ -40,10 +40,10 @@ void addDebris(int x, int y, int amount)
debris->x = x; debris->x = x;
debris->y = y; debris->y = y;
debris->thinktime = Math::rrand(60, 180); debris->thinktime = rrand(60, 180);
debris->dx = Math::rrand(-500, 500); debris->dx = rrand(-500, 500);
debris->dy = Math::rrand(-500, 500); debris->dy = rrand(-500, 500);
if (debris->dx != 0) if (debris->dx != 0)
debris->dx /= 100; debris->dx /= 100;
@ -75,7 +75,7 @@ void doDebris()
debris->x += debris->dx; debris->x += debris->dx;
debris->y += debris->dy; debris->y += debris->dy;
addExplosion(debris->x + Math::rrand(-10, 10), debris->y + Math::rrand(-10, 10), E_BIG_EXPLOSION); addExplosion(debris->x + rrand(-10, 10), debris->y + rrand(-10, 10), E_BIG_EXPLOSION);
} }
if (debris->thinktime < 1) if (debris->thinktime < 1)

View File

@ -54,7 +54,7 @@ void addEngine(object *craft)
float x = craft->x + (craft->engineX * craft->face); float x = craft->x + (craft->engineX * craft->face);
float y = craft->y + craft->engineY; float y = craft->y + craft->engineY;
y += Math::rrand(-3, 3); y += rrand(-3, 3);
addExplosion(x, y, E_TINY_EXPLOSION); addExplosion(x, y, E_TINY_EXPLOSION);
} }

View File

@ -187,7 +187,7 @@ int mainGameLoop()
} }
else if ((currentGame.area == 26) && (engine.musicVolume > 0)) else if ((currentGame.area == 26) && (engine.musicVolume > 0))
{ {
Math::limitFloat(&(engine.musicVolume -= 0.2), 0, 100); limitFloat(&(engine.musicVolume -= 0.2), 0, 100);
Mix_VolumeMusic((int)engine.musicVolume); Mix_VolumeMusic((int)engine.musicVolume);
} }
else else
@ -202,7 +202,7 @@ int mainGameLoop()
} }
else else
{ {
Math::limitFloat(&(engine.musicVolume -= 0.2), 0, 100); limitFloat(&(engine.musicVolume -= 0.2), 0, 100);
Mix_VolumeMusic((int)engine.musicVolume); Mix_VolumeMusic((int)engine.musicVolume);
if (SDL_GetTicks() >= engine.missionCompleteTimer) if (SDL_GetTicks() >= engine.missionCompleteTimer)
{ {
@ -226,7 +226,7 @@ int mainGameLoop()
doExplosions(); doExplosions();
doInfo(); doInfo();
Math::wrapChar(&(--engine.eventTimer), 0, 60); wrapChar(&(--engine.eventTimer), 0, 60);
while (engine.paused) while (engine.paused)
{ {
@ -237,12 +237,12 @@ int mainGameLoop()
if ((currentGame.area == 24) && (engine.addAliens > -1)) if ((currentGame.area == 24) && (engine.addAliens > -1))
{ {
if ((rand() % 10) == 0) if ((rand() % 10) == 0)
addCollectable(Math::rrand(800, 100), player.y, P_MINE, 25, 180 + rand() % 60); addCollectable(rrand(800, 100), player.y, P_MINE, 25, 180 + rand() % 60);
} }
if (engine.addAliens > -1) if (engine.addAliens > -1)
{ {
Math::wrapInt(&(--engine.addAliens), 0, currentMission.addAliens); wrapInt(&(--engine.addAliens), 0, currentMission.addAliens);
if ((engine.addAliens == 0) && (allowableAliens > 0)) if ((engine.addAliens == 0) && (allowableAliens > 0))
{ {
allowableAliens -= addAlien(); allowableAliens -= addAlien();

View File

@ -23,6 +23,59 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Graphics graphics; Graphics graphics;
Star star[200]; Star star[200];
bool collision(float x0, float y0, int w0, int h0, float x2, float y2, int w1, int h1)
{
float x1 = x0 + w0;
float y1 = y0 + h0;
float x3 = x2 + w1;
float y3 = y2 + h1;
return !(x1<x2 || x3<x0 || y1<y2 || y3<y0);
}
bool collision(object *object1, object *object2)
{
float x0 = object1->x;
float y0 = object1->y;
float w0 = object1->image[0]->w;
float h0 = object1->image[0]->h;
float x2 = object2->x;
float y2 = object2->y;
float w1 = object2->image[0]->w;
float h1 = object2->image[0]->h;
float x1 = x0 + w0;
float y1 = y0 + h0;
float x3 = x2 + w1;
float y3 = y2 + h1;
return !(x1<x2 || x3<x0 || y1<y2 || y3<y0);
}
bool collision(collectables *object1, object *object2)
{
float x0 = object1->x;
float y0 = object1->y;
float w0 = object1->image->w;
float h0 = object1->image->h;
float x2 = object2->x;
float y2 = object2->y;
float w1 = object2->image[0]->w;
float h1 = object2->image[0]->h;
float x1 = x0 + w0;
float y1 = y0 + h0;
float x3 = x2 + w1;
float y3 = y2 + h1;
return !(x1<x2 || x3<x0 || y1<y2 || y3<y0);
}
SDL_Surface *loadImage(const char *filename) SDL_Surface *loadImage(const char *filename)
{ {
SDL_Surface *image, *newImage; SDL_Surface *image, *newImage;
@ -79,8 +132,8 @@ void doStarfield()
else if (star[i].speed == 1) else if (star[i].speed == 1)
color = graphics.darkGrey; color = graphics.darkGrey;
Math::wrapFloat(&(star[i].x += (engine.ssx * star[i].speed)), 0, 799); wrapFloat(&(star[i].x += (engine.ssx * star[i].speed)), 0, 799);
Math::wrapFloat(&(star[i].y += (engine.ssy * star[i].speed)), 0, 599); wrapFloat(&(star[i].y += (engine.ssy * star[i].speed)), 0, 599);
graphics.putpixel(graphics.screen, (int)star[i].x, (int)star[i].y, color); graphics.putpixel(graphics.screen, (int)star[i].x, (int)star[i].y, color);
r.x = (int)star[i].x; r.x = (int)star[i].x;

View File

@ -21,6 +21,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
extern Graphics graphics; extern Graphics graphics;
extern Star star[200]; extern Star star[200];
extern bool collision(float x0, float y0, int w0, int h0, float x2, float y2, int w1, int h1);
extern bool collision(object *object1, object *object2);
extern bool collision(collectables *object1, object *object2);
extern SDL_Surface *loadImage(const char *filename); extern SDL_Surface *loadImage(const char *filename);
extern void doStarfield(); extern void doStarfield();
extern int isOnScreen(int x, int y, int w, int h); extern int isOnScreen(int x, int y, int w, int h);

View File

@ -27,8 +27,8 @@ static void doCursor()
{ {
getPlayerInput(); getPlayerInput();
Math::limitInt(&engine.cursor_x, 10, 790); limitInt(&engine.cursor_x, 10, 790);
Math::limitInt(&engine.cursor_y, 10, 590); limitInt(&engine.cursor_y, 10, 590);
graphics.blit(graphics.shape[0], engine.cursor_x, engine.cursor_y); graphics.blit(graphics.shape[0], engine.cursor_x, engine.cursor_y);
} }
@ -265,7 +265,7 @@ static bool showSystem(float x, float y)
r.y -= (systemPlanet[planet].image->h / 2); r.y -= (systemPlanet[planet].image->h / 2);
graphics.blit(systemPlanet[planet].image, r.x, r.y); graphics.blit(systemPlanet[planet].image, r.x, r.y);
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, r.x, r.y, systemPlanet[planet].image->w, systemPlanet[planet].image->h)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, r.x, r.y, systemPlanet[planet].image->w, systemPlanet[planet].image->h))
{ {
graphics.drawString(systemPlanet[planet].name, -1, 545, FONT_WHITE); graphics.drawString(systemPlanet[planet].name, -1, 545, FONT_WHITE);
if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL])) if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL]))
@ -395,14 +395,14 @@ static void showOptions(SDL_Surface *optionsSurface)
{ {
if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL])) if ((engine.keyState[SDLK_LCTRL]) || (engine.keyState[SDLK_RCTRL]))
{ {
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 417, 172, 45, 22)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 417, 172, 45, 22))
engine.useSound = true; engine.useSound = true;
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 478, 172, 45, 22)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 478, 172, 45, 22))
engine.useSound = false; engine.useSound = false;
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 417, 222, 45, 22)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 417, 222, 45, 22))
{ {
engine.useMusic = true; engine.useMusic = true;
if (engine.useAudio) if (engine.useAudio)
@ -414,14 +414,14 @@ static void showOptions(SDL_Surface *optionsSurface)
} }
} }
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 478, 222, 45, 22)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 478, 222, 45, 22))
{ {
engine.useMusic = false; engine.useMusic = false;
if (engine.useAudio) if (engine.useAudio)
Mix_PauseMusic(); Mix_PauseMusic();
} }
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 417, 272, 45, 22)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 417, 272, 45, 22))
{ {
if (!engine.fullScreen) if (!engine.fullScreen)
{ {
@ -436,7 +436,7 @@ static void showOptions(SDL_Surface *optionsSurface)
} }
} }
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 478, 272, 45, 22)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 478, 272, 45, 22))
{ {
if (engine.fullScreen) if (engine.fullScreen)
{ {
@ -451,9 +451,9 @@ static void showOptions(SDL_Surface *optionsSurface)
} }
} }
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 417, 322, 100, 22)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 417, 322, 100, 22))
{ {
Math::wrapChar(&(++currentGame.autoSaveSlot), -1, 4); wrapChar(&(++currentGame.autoSaveSlot), -1, 4);
engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0;
} }
@ -637,8 +637,8 @@ int galaxyMap()
if (rand() % 1000 < 2) if (rand() % 1000 < 2)
{ {
engine.ssx = Math::rrand(100, 100); engine.ssx = rrand(100, 100);
engine.ssy = Math::rrand(100, 100); engine.ssy = rrand(100, 100);
engine.ssx /= 100; engine.ssx /= 100;
engine.ssy /= 100; engine.ssy /= 100;
} }
@ -801,7 +801,7 @@ int galaxyMap()
graphics.blit(graphics.shape[i + 1], 80 + (i * 90), 500); graphics.blit(graphics.shape[i + 1], 80 + (i * 90), 500);
} }
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 80 + (i * 90), 500, 32, 32)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 80 + (i * 90), 500, 32, 32))
{ {
if (i != 0) if (i != 0)
{ {

View File

@ -221,7 +221,7 @@ int showSaveSlots(SDL_Surface *savesSurface, signed char saveSlot)
{ {
for (int i = 0 ; i < 5 ; i++) for (int i = 0 ; i < 5 ; i++)
{ {
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, r.x, r.y, r.w, r.h)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, r.x, r.y, r.w, r.h))
{ {
clickedSlot = i; clickedSlot = i;
createSavesSurface(savesSurface, i); createSavesSurface(savesSurface, i);
@ -229,16 +229,16 @@ int showSaveSlots(SDL_Surface *savesSurface, signed char saveSlot)
r.y += 30; r.y += 30;
} }
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 215, 365, 100, 25)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 215, 365, 100, 25))
{ {
saveGame(saveSlot + 1); saveGame(saveSlot + 1);
createSavesSurface(savesSurface, -10); createSavesSurface(savesSurface, -10);
} }
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 335, 365, 100, 25)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 335, 365, 100, 25))
createSavesSurface(savesSurface, -1); createSavesSurface(savesSurface, -1);
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 453, 365, 100, 25)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 453, 365, 100, 25))
{ {
char filename[PATH_MAX]; char filename[PATH_MAX];
sprintf(filename, "%ssave%.2d.dat", engine.userHomeDirectory, (saveSlot + 1)); sprintf(filename, "%ssave%.2d.dat", engine.userHomeDirectory, (saveSlot + 1));

109
code/math.h Normal file
View File

@ -0,0 +1,109 @@
/*
Copyright (C) 2003 Parallel Realities
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
static inline void limitChar(signed char *in, int low, int high)
{
if (*in < low)
*in = low;
if (*in > high)
*in = high;
}
static inline void limitChar(unsigned char *in, int low, int high)
{
if (*in < low)
*in = low;
if (*in > high)
*in = high;
}
static inline void limitCharAdd(signed char *in, int add, int low, int high)
{
int tmp = (int)*in + add;
if (tmp < low)
tmp = low;
if (tmp > high)
tmp = high;
*in = tmp;
}
static inline void limitCharAdd(unsigned char *in, int add, int low, int high)
{
int tmp = (int)*in + add;
if (tmp < low)
tmp = low;
if (tmp > high)
tmp = high;
*in = tmp;
}
static inline void limitInt(int *in, int low, int high)
{
if (*in < low)
*in = low;
if (*in > high)
*in = high;
}
static inline void limitFloat(float *in, float low, float high)
{
if (*in < low)
*in = low;
if (*in > high)
*in = high;
}
static inline void wrapChar(signed char *in, signed char low, signed char high)
{
if (*in < low)
*in = high;
if (*in > high)
*in = low;
}
static inline void wrapInt(int *in, int low, int high)
{
if (*in < low)
*in = high;
if (*in > high)
*in = low;
}
static inline void wrapFloat(float *in, float low, float high)
{
if (*in < low)
*in = high;
if (*in > high)
*in = low;
}
static inline int rrand(int min, int max)
{
int r = min;
max++;
if ((max - min) == 0)
return min;
r += rand() % (max - min);
return r;
}

View File

@ -378,7 +378,7 @@ void doInfo()
return; return;
if ((!engine.keyState[SDLK_SPACE]) && (player.weaponType[1] == W_LASER) && (engine.eventTimer % 8 == 1)) if ((!engine.keyState[SDLK_SPACE]) && (player.weaponType[1] == W_LASER) && (engine.eventTimer % 8 == 1))
Math::limitCharAdd(&player.ammo[1], -1, 1, 255); limitCharAdd(&player.ammo[1], -1, 1, 255);
if ((engine.eventTimer < 30) && (player.shield <= engine.lowShield)) if ((engine.eventTimer < 30) && (player.shield <= engine.lowShield))
return; return;

View File

@ -109,7 +109,7 @@ void doPlayer()
{ {
if (engine.keyState[SDLK_SPACE]) if (engine.keyState[SDLK_SPACE])
{ {
Math::limitCharAdd(&player.ammo[1], 1, 0, 200); limitCharAdd(&player.ammo[1], 1, 0, 200);
} }
else else
{ {
@ -195,8 +195,8 @@ void doPlayer()
engine.keyState[SDLK_LSHIFT] = engine.keyState[SDLK_RSHIFT] = 0; engine.keyState[SDLK_LSHIFT] = engine.keyState[SDLK_RSHIFT] = 0;
} }
Math::limitCharAdd(&player.reload[0], -1, 0, 999); limitCharAdd(&player.reload[0], -1, 0, 999);
Math::limitCharAdd(&player.reload[1], -1, 0, 999); limitCharAdd(&player.reload[1], -1, 0, 999);
if (engine.keyState[SDLK_UP]) if (engine.keyState[SDLK_UP])
{ {
@ -268,8 +268,8 @@ void doPlayer()
if (engine.done == 0) if (engine.done == 0)
{ {
Math::limitFloat(&player.x, 100, 700); limitFloat(&player.x, 100, 700);
Math::limitFloat(&player.y, 100, 500); limitFloat(&player.y, 100, 500);
} }
if (player.shield > engine.lowShield) if (player.shield > engine.lowShield)
@ -280,11 +280,11 @@ void doPlayer()
if (player.hit) if (player.hit)
shapeToUse += SHIP_HIT_INDEX; shapeToUse += SHIP_HIT_INDEX;
Math::limitCharAdd(&player.hit, -1, 0, 100); limitCharAdd(&player.hit, -1, 0, 100);
graphics.blit(graphics.shipShape[shapeToUse], (int)player.x, (int)player.y); graphics.blit(graphics.shipShape[shapeToUse], (int)player.x, (int)player.y);
if ((player.shield <= engine.lowShield) && (rand() % 5 < 1)) if ((player.shield <= engine.lowShield) && (rand() % 5 < 1))
addExplosion(player.x + Math::rrand(-10, 10), player.y + Math::rrand(-10, 20), E_SMOKE); addExplosion(player.x + rrand(-10, 10), player.y + rrand(-10, 20), E_SMOKE);
} }
else else
{ {
@ -308,14 +308,14 @@ void doPlayer()
engine.keyState[SDLK_UP] = engine.keyState[SDLK_DOWN] = engine.keyState[SDLK_LEFT] = engine.keyState[SDLK_RIGHT] = 0; engine.keyState[SDLK_UP] = engine.keyState[SDLK_DOWN] = engine.keyState[SDLK_LEFT] = engine.keyState[SDLK_RIGHT] = 0;
if ((rand() % 3) == 0) if ((rand() % 3) == 0)
addExplosion(player.x + Math::rrand(-10, 10), player.y + Math::rrand(-10, 10), E_BIG_EXPLOSION); addExplosion(player.x + rrand(-10, 10), player.y + rrand(-10, 10), E_BIG_EXPLOSION);
if (player.shield == -99) if (player.shield == -99)
addDebris((int)player.x, (int)player.y, player.maxShield); addDebris((int)player.x, (int)player.y, player.maxShield);
} }
} }
Math::limitFloat(&engine.ssx, -3, 3); limitFloat(&engine.ssx, -3, 3);
Math::limitFloat(&engine.ssy, -3, 3); limitFloat(&engine.ssy, -3, 3);
// Specific for the mission were you have to chase the Executive Transport // 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) && (enemy[WC_BOSS].shield > 0) && (player.shield > 0))

View File

@ -115,8 +115,8 @@ void checkScriptEvents()
else else
{ {
enemy[gameEvent[i].entity].active = true; enemy[gameEvent[i].entity].active = true;
enemy[gameEvent[i].entity].x = Math::rrand((int)player.x + 400, (int)player.x + 800); enemy[gameEvent[i].entity].x = rrand((int)player.x + 400, (int)player.x + 800);
enemy[gameEvent[i].entity].y = Math::rrand((int)player.y - 400, (int)player.y + 800); enemy[gameEvent[i].entity].y = rrand((int)player.y - 400, (int)player.y + 800);
} }
} }

View File

@ -507,7 +507,7 @@ static void buy(int i)
case 3: case 3:
if (player.ammo[0] == currentGame.maxPlasmaAmmo) if (player.ammo[0] == currentGame.maxPlasmaAmmo)
{shopSelectedItem = -4; return;} {shopSelectedItem = -4; return;}
Math::limitCharAdd(&player.ammo[0], 10, 0, currentGame.maxPlasmaAmmo); limitCharAdd(&player.ammo[0], 10, 0, currentGame.maxPlasmaAmmo);
break; break;
case 4: case 4:
if ((player.weaponType[1] == W_CHARGER) || (player.weaponType[1] == W_LASER)) if ((player.weaponType[1] == W_CHARGER) || (player.weaponType[1] == W_LASER))
@ -546,7 +546,7 @@ static void buy(int i)
case 8: case 8:
if (currentGame.maxPlasmaAmmo == 250) if (currentGame.maxPlasmaAmmo == 250)
{shopSelectedItem = -3; return;} {shopSelectedItem = -3; return;}
Math::limitCharAdd(&currentGame.maxPlasmaAmmo, 10, 0, 250); limitCharAdd(&currentGame.maxPlasmaAmmo, 10, 0, 250);
break; break;
case 9: case 9:
if ((player.weaponType[1] == W_CHARGER) || (player.weaponType[1] == W_LASER)) if ((player.weaponType[1] == W_CHARGER) || (player.weaponType[1] == W_LASER))
@ -578,7 +578,7 @@ static void buy(int i)
if (player.weaponType[1] == W_HOMING_MISSILE) if (player.weaponType[1] == W_HOMING_MISSILE)
{shopSelectedItem = -8; return;} {shopSelectedItem = -8; return;}
player.weaponType[1] = W_HOMING_MISSILE; player.weaponType[1] = W_HOMING_MISSILE;
Math::limitChar(&player.ammo[1], 0, 20); limitChar(&player.ammo[1], 0, 20);
shopSelectedItem = -1; shopSelectedItem = -1;
break; break;
case 14: case 14:
@ -592,14 +592,14 @@ static void buy(int i)
if (player.weaponType[1] == W_DOUBLE_HOMING_MISSILES) if (player.weaponType[1] == W_DOUBLE_HOMING_MISSILES)
{shopSelectedItem = -8; return;} {shopSelectedItem = -8; return;}
player.weaponType[1] = W_DOUBLE_HOMING_MISSILES; player.weaponType[1] = W_DOUBLE_HOMING_MISSILES;
Math::limitChar(&player.ammo[1], 0, 10); limitChar(&player.ammo[1], 0, 10);
shopSelectedItem = -1; shopSelectedItem = -1;
break; break;
case 16: case 16:
if (player.weaponType[1] == W_MICRO_HOMING_MISSILES) if (player.weaponType[1] == W_MICRO_HOMING_MISSILES)
{shopSelectedItem = -8; return;} {shopSelectedItem = -8; return;}
player.weaponType[1] = W_MICRO_HOMING_MISSILES; player.weaponType[1] = W_MICRO_HOMING_MISSILES;
Math::limitChar(&player.ammo[1], 0, 10); limitChar(&player.ammo[1], 0, 10);
shopSelectedItem = -1; shopSelectedItem = -1;
break; break;
} }
@ -631,7 +631,7 @@ static void sell(int i)
if (player.ammo[0] == 0) if (player.ammo[0] == 0)
{shopSelectedItem = -6; return;} {shopSelectedItem = -6; return;}
if (player.ammo[0] > 9) if (player.ammo[0] > 9)
Math::limitCharAdd(&player.ammo[0], -10, 0, currentGame.maxPlasmaAmmo); limitCharAdd(&player.ammo[0], -10, 0, currentGame.maxPlasmaAmmo);
else else
player.ammo[0] = 0; player.ammo[0] = 0;
break; break;
@ -659,13 +659,13 @@ static void sell(int i)
if (currentGame.maxPlasmaAmmo == 100) if (currentGame.maxPlasmaAmmo == 100)
{shopSelectedItem = -1; return;} {shopSelectedItem = -1; return;}
currentGame.maxPlasmaAmmo -= 10; currentGame.maxPlasmaAmmo -= 10;
Math::limitChar(&player.ammo[0], 0, currentGame.maxPlasmaAmmo); limitChar(&player.ammo[0], 0, currentGame.maxPlasmaAmmo);
break; break;
case 9: case 9:
if (currentGame.maxRocketAmmo == 0) if (currentGame.maxRocketAmmo == 0)
{shopSelectedItem = -1; return;} {shopSelectedItem = -1; return;}
currentGame.maxRocketAmmo -= 5; currentGame.maxRocketAmmo -= 5;
Math::limitChar(&player.ammo[1], 0, currentGame.maxRocketAmmo); limitChar(&player.ammo[1], 0, currentGame.maxRocketAmmo);
break; break;
case 10: case 10:
if (player.weaponType[1] != W_DOUBLE_ROCKETS) if (player.weaponType[1] != W_DOUBLE_ROCKETS)
@ -747,7 +747,7 @@ void showShop()
{ {
for (int i = 0 ; i < icons ; i++) for (int i = 0 ; i < icons ; i++)
{ {
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, shopItems[i].x, shopItems[i].y, 32, 25)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, shopItems[i].x, shopItems[i].y, 32, 25))
{ {
shopSelectedItem = i; shopSelectedItem = i;
engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0;
@ -757,14 +757,14 @@ void showShop()
if (shopSelectedItem > -1) if (shopSelectedItem > -1)
{ {
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 60, 350, 24, 16)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 60, 350, 24, 16))
{ {
buy(shopSelectedItem); buy(shopSelectedItem);
engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0;
drawShop(); drawShop();
} }
if (Collision::collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 700, 350, 24, 16)) if (collision(engine.cursor_x + 13, engine.cursor_y + 13, 6, 6, 700, 350, 24, 16))
{ {
sell(shopSelectedItem); sell(shopSelectedItem);
engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0; engine.keyState[SDLK_LCTRL] = engine.keyState[SDLK_RCTRL] = 0;

View File

@ -308,7 +308,7 @@ int doTitle()
if (engine.keyState[SDLK_UP]) if (engine.keyState[SDLK_UP])
{ {
engine.keyState[SDLK_UP] = 0; engine.keyState[SDLK_UP] = 0;
Math::wrapChar(&(--selectedOption), 1, listLength); wrapChar(&(--selectedOption), 1, listLength);
if (menuType == 0) if (menuType == 0)
if ((selectedOption == 2) || (selectedOption == 3)) if ((selectedOption == 2) || (selectedOption == 3))
if (continueSaveSlot == 0) if (continueSaveSlot == 0)
@ -317,7 +317,7 @@ int doTitle()
if (engine.keyState[SDLK_DOWN]) if (engine.keyState[SDLK_DOWN])
{ {
engine.keyState[SDLK_DOWN] = 0; engine.keyState[SDLK_DOWN] = 0;
Math::wrapChar(&(++selectedOption), 1, listLength); wrapChar(&(++selectedOption), 1, listLength);
if (menuType == 0) if (menuType == 0)
if ((selectedOption == 2) || (selectedOption == 3)) if ((selectedOption == 2) || (selectedOption == 3))
if (continueSaveSlot == 0) if (continueSaveSlot == 0)
@ -421,7 +421,7 @@ int doTitle()
#endif #endif
} }
else if (selectedOption == 4) else if (selectedOption == 4)
Math::wrapChar(&(++currentGame.autoSaveSlot), -1, 4); wrapChar(&(++currentGame.autoSaveSlot), -1, 4);
else if (selectedOption == listLength) else if (selectedOption == listLength)
{menuType = 0; selectedOption = 1;} {menuType = 0; selectedOption = 1;}
createOptionsMenu(); createOptionsMenu();
@ -601,8 +601,8 @@ void gameover()
graphics.updateScreen(); graphics.updateScreen();
graphics.unBuffer(); graphics.unBuffer();
x = ((800 - gameover->w) / 2) - Math::rrand(-2, 2); x = ((800 - gameover->w) / 2) - rrand(-2, 2);
y = ((600 - gameover->h) / 2) - Math::rrand(-2, 2); y = ((600 - gameover->h) / 2) - rrand(-2, 2);
graphics.blit(gameover, x, y); graphics.blit(gameover, x, y);
graphics.delayFrame(); graphics.delayFrame();