diff --git a/src/Starfighter.cpp b/src/Starfighter.cpp index 9316351..cb2691f 100644 --- a/src/Starfighter.cpp +++ b/src/Starfighter.cpp @@ -20,15 +20,19 @@ along with this program. If not, see . #include "Starfighter.h" -int main(int argc, char *argv[]) +int main(int argc, char **argv) { + bool cheatAttempt; + int cheatCount; + int section; + if (chdir(DATADIR) == -1) printf("Warning: failed to change directory to \"%s\"\n", DATADIR); defineGlobals(); // Must do this first! - bool cheatAttempt = false; - int cheatCount = 0; + cheatAttempt = false; + cheatCount = 0; if (argc > 1) { @@ -49,15 +53,27 @@ int main(int argc, char *argv[]) for (int i = 1 ; i < argc ; i++) { if (strcmp(argv[i], "-nomove") == 0) - {printf("Enemy movement disabled\n"); dev.moveAliens = 0;} + { + printf("Enemy movement disabled\n"); + dev.moveAliens = 0; + } if (strcmp(argv[i], "-nofire") == 0) - {printf("Enemy firing disabled\n"); dev.fireAliens = 0;} + { + printf("Enemy firing disabled\n"); + dev.fireAliens = 0; + } if (strcmp(argv[i], "-cheat") == 0) cheatAttempt = true; if (strcmp(argv[i], "-noaudio") == 0) - {printf("No Audio\n"); engine.useAudio = false;} + { + printf("No Audio\n"); + engine.useAudio = false; + } if (strcmp(argv[i], "-mono") == 0) - {printf("Mono sound output\n"); engine.useAudio = true;} + { + printf("Mono sound output\n"); + engine.useAudio = true; + } if ((strcmp(argv[i], "humans") == 0) && (cheatCount == 0)) cheatCount = 1; if ((strcmp(argv[i], "do") == 0) && (cheatCount == 1)) @@ -65,8 +81,11 @@ int main(int argc, char *argv[]) if ((strcmp(argv[i], "it") == 0) && (cheatCount == 2)) cheatCount = 3; if (((strcmp(argv[i], "better") == 0) && (cheatCount == 3)) || - (strcmp(argv[i], "humansdoitbetter") == 0)) - {printf("Humans do it better! Cheats enabled.\n"); engine.cheat = true;} + (strcmp(argv[i], "humansdoitbetter") == 0)) + { + printf("Humans do it better! Cheats enabled.\n"); + engine.cheat = true; + } } atexit(cleanUp); @@ -100,14 +119,14 @@ int main(int argc, char *argv[]) showStory(); // Determine which part of the game we will go to... - int section = 0; + section = 0; currentGame.difficulty = DIFFICULTY_NORMAL; newGame(); while (true) { - switch(section) + switch (section) { case 0: section = doTitle(); @@ -118,7 +137,8 @@ int main(int argc, char *argv[]) break; case 2: - if (currentGame.stationedPlanet == -1) {doCutscene(0);} + if (currentGame.stationedPlanet == -1) + doCutscene(0); section = mainGameLoop(); break; } diff --git a/src/ai.cpp b/src/ai.cpp index 10ee94f..efa0e8d 100644 --- a/src/ai.cpp +++ b/src/ai.cpp @@ -25,7 +25,7 @@ Aliens are assigned various AI types and this routine makes use of them. Levels of aggression, defence and evasion are all here. */ -void setEnemyAI(object *theEnemy) +void ai_set(object *theEnemy) { // Make friendly craft generally concentrate on smaller fighters if ((theEnemy->flags & FL_FRIEND) && (theEnemy->target == &enemy[WC_BOSS])) @@ -106,7 +106,7 @@ void setEnemyAI(object *theEnemy) } } -void setKlineAttackMethod(object *theEnemy) +void ai_setKlineAttackMethod(object *theEnemy) { theEnemy->maxShield -= 500; if (theEnemy->maxShield == 0) @@ -143,7 +143,7 @@ void setKlineAttackMethod(object *theEnemy) /* This AI is exclusively for Kline. */ -void setKlineAI(object *theEnemy) +void ai_setKline(object *theEnemy) { // Weapon type change if ((rand() % 3) == 0) @@ -186,7 +186,7 @@ void setKlineAI(object *theEnemy) theEnemy->flags |= FL_CIRCLES; break; default: - setEnemyAI(theEnemy); + ai_set(theEnemy); break; } } diff --git a/src/ai.h b/src/ai.h index 0f65e4b..af49f46 100644 --- a/src/ai.h +++ b/src/ai.h @@ -20,8 +20,8 @@ along with this program. If not, see . #ifndef AI_H #define AI_H -extern void setEnemyAI(object *theEnemy); -extern void setKlineAttackMethod(object *theEnemy); -extern void setKlineAI(object *theEnemy); +void ai_set(object *theEnemy); +void ai_setKlineAttackMethod(object *theEnemy); +void ai_setKline(object *theEnemy); #endif diff --git a/src/aliens.cpp b/src/aliens.cpp index 18b212a..e716357 100644 --- a/src/aliens.cpp +++ b/src/aliens.cpp @@ -22,7 +22,25 @@ along with this program. If not, see . object defEnemy[MAX_DEFALIENS]; object enemy[MAX_ALIENS]; -static bool placeAlien(object *theEnemy) +/* +This simply pulls back an alien from the array that is +"dead" (no shield) and returns the index number so we can have +a new one. +*/ +static int alien_getFreeIndex() +{ + for (int i = 0 ; i < engine.maxAliens ; i++) + { + if (!enemy[i].active) + { + return i; + } + } + + return -1; +} + +static bool alien_place(object *theEnemy) { if (rand() % 2 == 0) theEnemy->x = rrand(screen->w, screen->w * 2); @@ -52,90 +70,9 @@ static bool placeAlien(object *theEnemy) return true; } -/* -This simply pulls back an alien from the array that is -"dead" (no shield) and returns the index number so we can have -a new one. -*/ -static int getAlien() +bool alien_add() { - for (int i = 0 ; i < engine.maxAliens ; i++) - { - if (!enemy[i].active) - { - return i; - } - } - - return -1; -} - -static void addDrone(object *host) -{ - int index = getAlien(); - - 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; - - enemy[index].x = host->x + rand() % 50; - enemy[index].y = host->y + rand() % 50; -} - -static void addSmallAsteroid(object *host) -{ - if (engine.missionCompleteTimer != 0) - return; - - int index = -1; - int debris = 1 + rand() % 10; - - for (int i = 0 ; i < debris ; i++) - addBullet(&weapon[W_ROCKETS], host, 0, 0); - - for (int i = 10 ; i < 20 ; i++) - if (!enemy[i].active) - index = i; - - if (index == -1) - return; - - 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]]; - } - else - { - enemy[index] = defEnemy[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; - - enemy[index].x = host->x; - enemy[index].y = host->y; - enemy[index].active = true; -} - -bool addAlien() -{ - int index = getAlien(); + int index = alien_getFreeIndex(); if ((index == -1) || (currentGame.area == 23) || (currentGame.area == 26)) return 0; @@ -143,7 +80,7 @@ bool addAlien() signed char *alienArray; signed char numberOfAliens = 1; - alienArray = new signed char[5]; + alienArray = new signed char[8]; switch(currentGame.area) { @@ -272,7 +209,7 @@ bool addAlien() // Attempts to place an alien. If it fails, the alien is deactivated. for (int i = 0 ; i < 100 ; i++) { - if (placeAlien(&enemy[index])) + if (alien_place(&enemy[index])) break; enemy[index].active = false; @@ -299,7 +236,102 @@ bool addAlien() return true; } -static void getPreDefinedAliens() +static void alien_addDrone(object *hostEnemy) +{ + int index = alien_getFreeIndex(); + + 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; + + enemy[index].x = hostEnemy->x + rand() % 50; + enemy[index].y = hostEnemy->y + rand() % 50; +} + +static void alien_addSmallAsteroid(object *hostEnemy) +{ + if (engine.missionCompleteTimer != 0) + return; + + int index = -1; + int debris = 1 + rand() % 10; + + for (int i = 0 ; i < debris ; i++) + addBullet(&weapon[W_ROCKETS], hostEnemy, 0, 0); + + for (int i = 10 ; i < 20 ; i++) + if (!enemy[i].active) + index = i; + + if (index == -1) + return; + + 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]]; + } + else + { + enemy[index] = defEnemy[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; + + enemy[index].x = hostEnemy->x; + enemy[index].y = hostEnemy->y; + enemy[index].active = true; +} + +static void alien_addFriendly(int type) +{ + if (type != FR_SID) + enemy[type] = defEnemy[CD_FRIEND]; + else + enemy[type] = defEnemy[CD_SID]; + + enemy[type].owner = &enemy[type]; + enemy[type].target = &enemy[type]; + enemy[type].active = true; + + if (rand() % 2 == 0) + enemy[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)); + + if (rand() % 2 == 0) + enemy[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)); + + if (type == FR_PHOEBE) + enemy[type].classDef = CD_PHOEBE; + + if (type == FR_URSULA) + enemy[type].classDef = CD_URSULA; + + // For the sake of it being the final battle :) + if (currentGame.area == 25) + enemy[type].flags |= FL_IMMORTAL; +} + +static void aliens_getPreDefined() { FILE *fp; char string[255]; @@ -324,15 +356,16 @@ static void getPreDefinedAliens() enemy[index].active = true; /* - we make 1000 attempts to place this enemy since it is required. If after 1000 attempts - we still have managed to place the alien, then it simple isn't going to happen and we - will just exit the game. The chances of this happening are very very low! + we make 1000 attempts to place this enemy since it is required. If after + 1000 attempts we still haven't managed to place the alien, then it + simply isn't going to happen and we will just exit the game. The chances + of this happening are very very low! */ while (true) { placeAttempt++; - if (placeAlien(&enemy[index])) + if (alien_place(&enemy[index])) break; if (placeAttempt > 1000) @@ -465,38 +498,6 @@ static void getPreDefinedAliens() } } -static void addFriendly(int type) -{ - if (type != FR_SID) - enemy[type] = defEnemy[CD_FRIEND]; - else - enemy[type] = defEnemy[CD_SID]; - - enemy[type].owner = &enemy[type]; - enemy[type].target = &enemy[type]; - enemy[type].active = true; - - if (rand() % 2 == 0) - enemy[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)); - - if (rand() % 2 == 0) - enemy[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)); - - if (type == FR_PHOEBE) - enemy[type].classDef = CD_PHOEBE; - - if (type == FR_URSULA) - enemy[type].classDef = CD_URSULA; - - // For the sake of it being the final battle :) - if (currentGame.area == 25) - enemy[type].flags |= FL_IMMORTAL; -} - void setTarget(int index) { engine.targetIndex = index; @@ -515,7 +516,7 @@ void initAliens() engine.targetIndex = -1; - getPreDefinedAliens(); + aliens_getPreDefined(); // specific for Phoebe being captured! if (currentGame.area == 7) @@ -525,16 +526,17 @@ void initAliens() enemy[WC_KLINE].active = false; for (int i = 0 ; i < engine.maxAliens ; i++) - addAlien(); + alien_add(); if (currentGame.hasWingMate1) - addFriendly(FR_PHOEBE); + alien_addFriendly(FR_PHOEBE); if (currentGame.hasWingMate2) - addFriendly(FR_URSULA); + alien_addFriendly(FR_URSULA); - if ((currentGame.area == 9) || (currentGame.area == 17) || (currentGame.area == 25)) - addFriendly(FR_SID); + if ((currentGame.area == 9) || (currentGame.area == 17) || + (currentGame.area == 25)) + alien_addFriendly(FR_SID); // Disable Wingmates for certain missions switch (currentGame.area) @@ -991,7 +993,8 @@ void doAliens() theEnemy->target = theEnemy; // Specific to Sid to stop him pissing about(!) - if ((theEnemy->classDef == CD_SID) && (theEnemy->target->flags & FL_DISABLED)) + if ((theEnemy->classDef == CD_SID) && + (theEnemy->target->flags & FL_DISABLED)) theEnemy->target = theEnemy; if (theEnemy->target == theEnemy) @@ -1012,10 +1015,10 @@ void doAliens() if ((!(theEnemy->flags & FL_DISABLED)) && (theEnemy->thinktime == 0) && (theEnemy->target != theEnemy) && (theEnemy->owner == theEnemy)) { - if (theEnemy->classDef != CD_KLINE) - setEnemyAI(theEnemy); + if (theEnemy->classDef == CD_KLINE) + ai_setKline(theEnemy); else - setKlineAI(theEnemy); + ai_set(theEnemy); theEnemy->thinktime = (rand() % 25) * 10; @@ -1042,7 +1045,7 @@ void doAliens() theEnemy->face = 0; if ((theEnemy->flags & FL_DEPLOYDRONES) && ((rand() % 300) == 0)) - addDrone(theEnemy); + alien_addDrone(theEnemy); if (theEnemy->flags & FL_LEAVESECTOR) { @@ -1235,7 +1238,7 @@ void doAliens() { int i = 1 + (rand() % 3); for (int j = 0 ; j < i ; j++) - addSmallAsteroid(theEnemy); + alien_addSmallAsteroid(theEnemy); } } } diff --git a/src/aliens.h b/src/aliens.h index 0ffae41..e414094 100644 --- a/src/aliens.h +++ b/src/aliens.h @@ -23,12 +23,12 @@ along with this program. If not, see . extern object defEnemy[MAX_DEFALIENS]; extern object enemy[MAX_ALIENS]; -extern bool addAlien(); -extern void setTarget(int index); -extern void initAliens(); -extern void killAllAliens(); -extern void doAliens(); -extern void setAlienShapes(); -extern void defineAliens(); +bool alien_add(); +void setTarget(int index); +void initAliens(); +void killAllAliens(); +void doAliens(); +void setAlienShapes(); +void defineAliens(); #endif diff --git a/src/bullets.cpp b/src/bullets.cpp index fd7f0fd..1c6c71e 100644 --- a/src/bullets.cpp +++ b/src/bullets.cpp @@ -621,7 +621,7 @@ void doBullets() } else { - setKlineAttackMethod(theEnemy); + ai_setKlineAttackMethod(theEnemy); } } } diff --git a/src/game.cpp b/src/game.cpp index 163038e..51031c4 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -276,7 +276,7 @@ int mainGameLoop() wrapInt(&(--engine.addAliens), 0, currentMission.addAliens); if ((engine.addAliens == 0) && (allowableAliens > 0)) { - allowableAliens -= addAlien(); + allowableAliens -= alien_add(); } }