diff --git a/src/defs.h b/src/defs.h
index a76c58b..e2416a7 100644
--- a/src/defs.h
+++ b/src/defs.h
@@ -26,6 +26,9 @@ along with this program. If not, see .
#define LIMIT_ADD(x, y, a, b) x = (((x) + (y)) < (b) ? \
(((x) + (y)) > (a) ? \
((x) + (y)) : (a)) : (b))
+#define WRAP_ADD(x, y, a, b) x = (((x) + (y)) + \
+ ((x) + (y) < (a) ? ((b) - (a)) : 0) + \
+ ((x) + (y) > (b) ? ((a) - (b)) : 0))
// ALL
#define NONE 0
diff --git a/src/game.cpp b/src/game.cpp
index d62b548..337650b 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -892,7 +892,7 @@ int mainGameLoop()
doExplosions();
doInfo();
- wrapChar(&(--engine.eventTimer), 0, 60);
+ WRAP_ADD(engine.eventTimer, -1, 0, 60);
if (engine.paused)
{
@@ -916,7 +916,7 @@ int mainGameLoop()
if (engine.addAliens > -1)
{
- wrapInt(&(--engine.addAliens), 0, currentMission.addAliens);
+ WRAP_ADD(engine.addAliens, -1, 0, currentMission.addAliens);
if ((engine.addAliens == 0) && (allowableAliens > 0))
{
allowableAliens -= alien_add();
diff --git a/src/graphics.cpp b/src/graphics.cpp
index afd57d1..5391e01 100644
--- a/src/graphics.cpp
+++ b/src/graphics.cpp
@@ -698,8 +698,7 @@ SDL_Surface *loadImage(const char *filename)
/*
Simply draws the stars in their positions on screen and moves
-them around. They are wrapped around using the wrapFloat()
-function, as defined above, and putpixel as defined in cpp
+them around.
*/
void doStarfield()
{
@@ -723,9 +722,9 @@ void doStarfield()
else if (star[i].speed == 1)
color = darkGrey;
- wrapFloat(&(star[i].x += ((engine.ssx + engine.smx) * star[i].speed)), 0,
+ WRAP_ADD(star[i].x, (engine.ssx + engine.smx) * star[i].speed, 0,
screen->w - 1);
- wrapFloat(&(star[i].y += ((engine.ssy + engine.smy) * star[i].speed)), 0,
+ WRAP_ADD(star[i].y, (engine.ssy + engine.smy) * star[i].speed, 0,
screen->h - 1);
putpixel(screen, (int)star[i].x, (int)star[i].y, color);
diff --git a/src/loadSave.cpp b/src/loadSave.cpp
index 033b05f..7fd4084 100644
--- a/src/loadSave.cpp
+++ b/src/loadSave.cpp
@@ -141,7 +141,7 @@ void saveGame(int slot)
sprintf(fileName, "%ssave%.2d.dat", engine.userHomeDirectory, slot);
fp = fopen(fileName, "wb");
- currentGame.saveFormat = 2;
+ currentGame.saveFormat = 3;
currentGame.playerWeapon = weapon[W_PLAYER_WEAPON];
currentGame.thePlayer = player;
for (int i = 0 ; i < 10 ; i++)
diff --git a/src/math.h b/src/math.h
index 14e4df1..f774378 100644
--- a/src/math.h
+++ b/src/math.h
@@ -20,30 +20,6 @@ along with this program. If not, see .
#ifndef MATH_H
#define MATH_H
-static inline void wrapChar(signed char *in, signed char low, signed char high)
-{
- if (*in < low)
- *in += high - low;
- if (*in > high)
- *in -= high - low;
-}
-
-static inline void wrapInt(int *in, int low, int high)
-{
- if (*in < low)
- *in += high - low;
- if (*in > high)
- *in -= high - low;
-}
-
-static inline void wrapFloat(float *in, float low, float high)
-{
- if (*in < low)
- *in += high - low;
- if (*in > high)
- *in -= high - low;
-}
-
static inline int rrand(int min, int max)
{
int r = min;
diff --git a/src/structs.h b/src/structs.h
index 82e0114..1e60842 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -23,22 +23,22 @@ along with this program. If not, see .
struct object {
bool active;
- signed char classDef; // Used by aliens to determine what they are
- signed char AIType; // Type of articifial intelligence
+ int classDef; // Used by aliens to determine what they are
+ int AIType; // Type of articifial intelligence
- signed char id; // The "job" of the object
+ int id; // The "job" of the object
object *target; // index target in aliens array
- signed char reload[2];
+ int reload[2];
int systemPower; // computer systems for craft
int shield; // current shield
int maxShield; // max shield (for recharging)
int deathCounter; // how long to explode for
- signed char speed;
+ int speed;
int damage; // Contact damage for bullets
- unsigned char ammo[2]; // Ammo for 2nd weapon.
+ int ammo[2]; // Ammo for 2nd weapon.
int face; // Either 0 or 1
@@ -47,18 +47,18 @@ struct object {
int chance[2]; // Chance of using the weapons (out of 1000)
SDL_Surface *image[2]; // For facing left and right
- unsigned char imageIndex[2]; // used for loading
- signed char hit; // used to make a craft "flash" if it is struck by a shot
+ int imageIndex[2]; // used for loading
+ int hit; // used to make a craft "flash" if it is struck by a shot
int engineX; // The place for the engine on the other side of the craft
int engineY; // The middle of the engine on the craft
int thinktime; // When the object will next react
- signed char weaponType[2]; // Weapon types
+ int weaponType[2]; // Weapon types
- signed char collectChance; // Chance of dropping the object
- signed char collectType; // What the object is carrying
- unsigned int collectValue; // What it is worth
+ int collectChance; // Chance of dropping the object
+ int collectType; // What the object is carrying
+ int collectValue; // What it is worth
int flags; // Various flags for an object
@@ -71,21 +71,21 @@ struct object {
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 aliens array
+ int primaryType[3]; // The type of mission this is
+ int 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 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 aliens array
+ int secondaryType[3]; // The type of mission this is
+ int 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 timeLimit2[3]; // In minutes
int completed2[3];
- signed char remainingObjectives1;
- signed char remainingObjectives2;
+ int remainingObjectives1;
+ int remainingObjectives2;
int addAliens; // How often to add new enemies
};
@@ -93,7 +93,7 @@ struct mission {
struct Star {
float x, y, dx, dy;
- signed char speed; // How fast the star moves
+ int speed; // How fast the star moves
};
@@ -102,8 +102,8 @@ struct collectables {
bool active;
float x, y, dx, dy;
SDL_Surface *image;
- signed char type; // What kind of collectable is it?
- unsigned char value; // How much is it worth?
+ int type; // What kind of collectable is it?
+ int value; // How much is it worth?
int life; // How long it will stay around for
collectables *next;
@@ -113,9 +113,9 @@ struct collectables {
struct textObject {
SDL_Surface *image;
- unsigned char life;
+ int life;
float x, y;
- signed char fontColor;
+ int fontColor;
char text[255];
};
@@ -124,70 +124,71 @@ struct Game {
object thePlayer;
object playerWeapon;
- unsigned char system;
- unsigned char area;
- unsigned char musicVolume;
- unsigned char sfxVolume;
+ int system;
+ int area;
+ int musicVolume;
+ int sfxVolume;
- signed char saveFormat;
- signed char difficulty;
+ int saveFormat;
+ int difficulty;
- unsigned int cash;
- unsigned int cashEarned;
- unsigned int shots;
- unsigned int hits;
- unsigned char accuracy;
- unsigned char hasWingMate1, hasWingMate2;
- unsigned int totalKills, wingMate1Kills, wingMate2Kills;
- unsigned char wingMate1Ejects, wingMate2Ejects;
- unsigned int totalOtherKills;
- unsigned char secondaryMissions, secondaryMissionsCompleted;
- unsigned int shieldPickups, rocketPickups, cellPickups, powerups, minesKilled, cargoPickups;
+ int cash;
+ int cashEarned;
+
+ int shots;
+ int hits;
+ int accuracy;
+ int hasWingMate1, hasWingMate2;
+ int totalKills, wingMate1Kills, wingMate2Kills;
+ int wingMate1Ejects, wingMate2Ejects;
+ int totalOtherKills;
+ int secondaryMissions, secondaryMissionsCompleted;
+ int shieldPickups, rocketPickups, cellPickups, powerups, minesKilled, cargoPickups;
// slaves for Eyananth
- unsigned int slavesRescued;
+ int slavesRescued;
// remaining shield for experimental fighter
- unsigned int experimentalShield;
+ int experimentalShield;
- unsigned int timeTaken; // In seconds
- unsigned char missionCompleted[10];
+ int timeTaken; // In seconds
+ int missionCompleted[10];
- signed char stationedPlanet;
- signed char destinationPlanet;
+ int stationedPlanet;
+ int destinationPlanet;
char stationedName[20];
char destinationName[20];
int distanceCovered;
- unsigned char minPlasmaRate;
- unsigned char minPlasmaDamage;
- unsigned char minPlasmaOutput;
- unsigned char maxPlasmaRate;
- unsigned char maxPlasmaDamage;
- unsigned char maxPlasmaOutput;
- unsigned char maxPlasmaAmmo;
- unsigned char maxRocketAmmo;
+ int minPlasmaRate;
+ int minPlasmaDamage;
+ int minPlasmaOutput;
+ int maxPlasmaRate;
+ int maxPlasmaDamage;
+ int maxPlasmaOutput;
+ int maxPlasmaAmmo;
+ int maxRocketAmmo;
// Limits on shop upgrades
- unsigned char minPlasmaRateLimit;
- unsigned char minPlasmaDamageLimit;
- unsigned char minPlasmaOutputLimit;
- unsigned char maxPlasmaRateLimit;
- unsigned char maxPlasmaDamageLimit;
- unsigned char maxPlasmaOutputLimit;
- unsigned char maxPlasmaAmmoLimit;
- unsigned char maxRocketAmmoLimit;
+ int minPlasmaRateLimit;
+ int minPlasmaDamageLimit;
+ int minPlasmaOutputLimit;
+ int maxPlasmaRateLimit;
+ int maxPlasmaDamageLimit;
+ int maxPlasmaOutputLimit;
+ int maxPlasmaAmmoLimit;
+ int maxRocketAmmoLimit;
};
struct ShopItem {
int x, y;
- unsigned int price;
+ int price;
char name[50];
char description[255];
- unsigned char image;
+ int image;
};
struct bRect {
@@ -203,12 +204,12 @@ struct Planet {
char name[50];
SDL_Surface *image;
- signed char missionNumber; // associated mission number
- signed char missionCompleted; // whether it has been completed
+ int missionNumber; // associated mission number
+ int missionCompleted; // whether it has been completed
- signed char messageMission;
- signed char messageSlot;
- signed char faceImage;
+ int messageMission;
+ int messageSlot;
+ int faceImage;
char from[50];
char subject[100];
};
@@ -231,13 +232,13 @@ enum keys {
struct globalEngineVariables {
SDL_Event event;
- signed char done;
+ int done;
SDL_RWops *sdlrw;
float musicVolume;
- signed char maxAliens;
+ int maxAliens;
float ssx;
float ssy;
@@ -255,35 +256,35 @@ struct globalEngineVariables {
int cursor_x, cursor_y;
- signed char commsSection;
+ int commsSection;
- signed char eventTimer;
+ int eventTimer;
- signed char lowShield;
- signed char averageShield;
+ int lowShield;
+ int averageShield;
float targetShield;
- signed char targetIndex;
+ int targetIndex;
// Mission completion timer (allows for 4 seconds before leaving sector)
- unsigned long missionCompleteTimer;
+ long missionCompleteTimer;
// Times the mission normally
unsigned int counter2;
int timeTaken; // In seconds
// For missions with a time limit
- signed char timeMission;
+ int timeMission;
unsigned int counter;
- signed char seconds;
- signed char minutes;
+ int seconds;
+ int minutes;
// Mission Related stuff
- signed char allAliensDead;
+ int allAliensDead;
int addAliens;
bool paused;
- signed char gameSection;
+ int gameSection;
bool useAudio;
bool useSound;
@@ -306,8 +307,8 @@ struct event {
int time;
char message[255];
- signed char face;
- signed char entity;
+ int face;
+ int entity;
int flag;
};
@@ -320,8 +321,8 @@ struct cutMsg {
struct devVariables {
- signed char moveAliens;
- signed char fireAliens;
+ int moveAliens;
+ int fireAliens;
};
diff --git a/src/title.cpp b/src/title.cpp
index 3c2eaa9..de2c566 100644
--- a/src/title.cpp
+++ b/src/title.cpp
@@ -337,7 +337,7 @@ int doTitle()
if (engine.keyState[KEY_UP])
{
engine.keyState[KEY_UP] = 0;
- wrapChar(&(--selectedOption), 1, listLength + 1);
+ WRAP_ADD(selectedOption, -1, 1, listLength + 1);
if (menuType == MENU_MAIN)
if ((selectedOption == 2) || (selectedOption == 3))
if (continueSaveSlot == -1)
@@ -346,7 +346,7 @@ int doTitle()
if (engine.keyState[KEY_DOWN])
{
engine.keyState[KEY_DOWN] = 0;
- wrapChar(&(++selectedOption), 0, listLength);
+ WRAP_ADD(selectedOption, 1, 0, listLength);
if (menuType == MENU_MAIN)
if ((selectedOption == 2) || (selectedOption == 3))
if (continueSaveSlot == -1)