From 8a8da04560da2dab0ddf7017d60c1bd92bb2ae69 Mon Sep 17 00:00:00 2001 From: onpon4 Date: Fri, 6 Mar 2015 09:37:21 -0500 Subject: [PATCH] Don't restrict enemies from passing through other enemies. This was inconsistent and had no particular benefits. The only minor benefit I can see is that it prevents smaller enemies from hiding inside bigger enemies, and in my test run through Spirit, this only happened once. Not at all significant compared to how incredibly awkward the aliens look when they're acting as if they can't move through other ships. This commit also includes more function name changes and other minor style fixes. --- src/ai.cpp | 94 ++++----- src/ai.h | 6 +- src/aliens.cpp | 471 +++++++++++++++++++++------------------------- src/bullets.cpp | 181 +++++++++--------- src/resources.cpp | 45 +++-- 5 files changed, 383 insertions(+), 414 deletions(-) diff --git a/src/ai.cpp b/src/ai.cpp index de00cc8..6b19ea8 100644 --- a/src/ai.cpp +++ b/src/ai.cpp @@ -25,29 +25,29 @@ Aliens are assigned various AI types and this routine makes use of them. Levels of aggression, defence and evasion are all here. */ -void alien_setAI(object *theEnemy) +void alien_setAI(object *alien) { // Make friendly craft generally concentrate on smaller fighters - if ((theEnemy->flags & FL_FRIEND) && (theEnemy->target == &enemy[WC_BOSS])) + if ((alien->flags & FL_FRIEND) && (alien->target == &enemy[WC_BOSS])) { if ((rand() % 5) == 0) { - theEnemy->target = theEnemy; - theEnemy->thinktime = 0; + alien->target = alien; + alien->thinktime = 0; return; } } int i = rand() % 10; - float tx = theEnemy->target->x; - float ty = theEnemy->target->y; + float tx = alien->target->x; + float ty = alien->target->y; int chase = 0; // Chance in 10 of chasing player int area = 0; // Chance in 10 of moving to an area around the player int stop = 0; // Chance in 10 of hanging back int point = 0; // Size of area alien will move into - switch (theEnemy->AIType) + switch (alien->AIType) { case AI_NORMAL: chase = 3; @@ -84,8 +84,8 @@ void alien_setAI(object *theEnemy) if (i <= chase) { // Chase the target - theEnemy->dx = ((theEnemy->x - tx) / ((300 / theEnemy->speed) + rand() % 100)); - theEnemy->dy = ((theEnemy->y - ty) / ((300 / theEnemy->speed) + rand() % 100)); + alien->dx = ((alien->x - tx) / ((300 / alien->speed) + rand() % 100)); + alien->dy = ((alien->y - ty) / ((300 / alien->speed) + rand() % 100)); return; } else if ((i >= point) && (i <= stop)) @@ -93,100 +93,100 @@ void alien_setAI(object *theEnemy) // Fly to a random point around the target tx += (rand() % area - (rand() % area * 2)); ty += (rand() % area - (rand() % area * 2)); - theEnemy->dx = ((theEnemy->x - tx) / ((300 / theEnemy->speed) + rand() % 100)); - theEnemy->dy = ((theEnemy->y - ty) / ((300 / theEnemy->speed) + rand() % 100)); + alien->dx = ((alien->x - tx) / ((300 / alien->speed) + rand() % 100)); + alien->dy = ((alien->y - ty) / ((300 / alien->speed) + rand() % 100)); return; } else { // Hang back - theEnemy->dx = 0; - theEnemy->dy = 0; + alien->dx = 0; + alien->dy = 0; return; } } -void alien_setKlineAttackMethod(object *theEnemy) +void alien_setKlineAttackMethod(object *alien) { - theEnemy->maxShield -= 500; - if (theEnemy->maxShield == 0) - theEnemy->flags &= ~FL_CANNOTDIE; + alien->maxShield -= 500; + if (alien->maxShield == 0) + alien->flags &= ~FL_CANNOTDIE; - if (theEnemy->maxShield == 1000) + if (alien->maxShield == 1000) { setRadioMessage(FACE_KLINE, "Very good, Bainfield. Now let's get a little more serious...", 1); - theEnemy->weaponType[0] = W_SPREADSHOT; - theEnemy->chance[1] = 40; + alien->weaponType[0] = W_SPREADSHOT; + alien->chance[1] = 40; } - else if (theEnemy->maxShield == 500) + else if (alien->maxShield == 500) { setRadioMessage(FACE_KLINE, "Your ability to stay alive irritates me!! Try dodging some of these!!", 1); - theEnemy->weaponType[0] = W_DIRSHOCKMISSILE; - theEnemy->weaponType[1] = W_DIRSHOCKMISSILE; - theEnemy->chance[0] = 2; - theEnemy->chance[1] = 2; - theEnemy->flags |= FL_AIMS; + alien->weaponType[0] = W_DIRSHOCKMISSILE; + alien->weaponType[1] = W_DIRSHOCKMISSILE; + alien->chance[0] = 2; + alien->chance[1] = 2; + alien->flags |= FL_AIMS; } - else if (theEnemy->maxShield == 0) + else if (alien->maxShield == 0) { setRadioMessage(FACE_KLINE, "ENOUGH!! THIS ENDS NOW!!!", 1); - theEnemy->weaponType[0] = W_AIMED_SHOT; - theEnemy->weaponType[1] = W_MICRO_HOMING_MISSILES; - theEnemy->flags |= FL_CANCLOAK; - theEnemy->chance[0] = 100; - theEnemy->chance[1] = 2; + alien->weaponType[0] = W_AIMED_SHOT; + alien->weaponType[1] = W_MICRO_HOMING_MISSILES; + alien->flags |= FL_CANCLOAK; + alien->chance[0] = 100; + alien->chance[1] = 2; } - theEnemy->shield = 500; + alien->shield = 500; } /* This AI is exclusively for Kline. */ -void alien_setKlineAI(object *theEnemy) +void alien_setKlineAI(object *alien) { // Weapon type change if ((rand() % 3) == 0) { if (currentGame.area != 26) { - theEnemy->flags &= ~FL_AIMS; + alien->flags &= ~FL_AIMS; switch(rand() % 2) { case 0: - theEnemy->weaponType[0] = W_TRIPLE_SHOT; + alien->weaponType[0] = W_TRIPLE_SHOT; break; case 1: - theEnemy->weaponType[0] = W_AIMED_SHOT; - theEnemy->flags |= FL_AIMS; + alien->weaponType[0] = W_AIMED_SHOT; + alien->flags |= FL_AIMS; break; } } } - theEnemy->flags &= ~(FL_CIRCLES | FL_CONTINUOUS_FIRE | FL_DROPMINES); + alien->flags &= ~(FL_CIRCLES | FL_CONTINUOUS_FIRE | FL_DROPMINES); switch(rand() % 10) { case 0: - if ((theEnemy->weaponType[0] != W_DIRSHOCKMISSILE) && (theEnemy->weaponType[1] != W_MICRO_HOMING_MISSILES)) - theEnemy->flags |= FL_CONTINUOUS_FIRE; - theEnemy->dx = ((theEnemy->x - theEnemy->target->x) / ((300 / theEnemy->speed) + rand() % 100)); - theEnemy->dy = ((theEnemy->y - theEnemy->target->y) / ((300 / theEnemy->speed) + rand() % 100)); + 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)); break; case 1: case 2: // Kline only attacks then he is ready! - if ((!(theEnemy->flags & FL_NOFIRE)) && (currentGame.area == 11)) - theEnemy->flags |= FL_DROPMINES; + if ((!(alien->flags & FL_NOFIRE)) && (currentGame.area == 11)) + alien->flags |= FL_DROPMINES; break; case 3: case 4: - theEnemy->flags |= FL_CIRCLES; + alien->flags |= FL_CIRCLES; break; default: - alien_setAI(theEnemy); + alien_setAI(alien); break; } } diff --git a/src/ai.h b/src/ai.h index 6e37725..a6519e0 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 -void alien_setAI(object *theEnemy); -void alien_setKlineAttackMethod(object *theEnemy); -void alien_setKlineAI(object *theEnemy); +void alien_setAI(object *alien); +void alien_setKlineAttackMethod(object *alien); +void alien_setKlineAI(object *alien); #endif diff --git a/src/aliens.cpp b/src/aliens.cpp index 9008f6d..05042ae 100644 --- a/src/aliens.cpp +++ b/src/aliens.cpp @@ -40,29 +40,29 @@ static int alien_getFreeIndex() return -1; } -static bool alien_place(object *theEnemy) +static bool alien_place(object *alien) { if (rand() % 2 == 0) - theEnemy->x = rrand(screen->w, screen->w * 2); + alien->x = rrand(screen->w, screen->w * 2); else - theEnemy->x = rrand(-screen->w, 0); + alien->x = rrand(-screen->w, 0); if (rand() % 2 == 0) - theEnemy->y = rrand(screen->h, screen->h * 2); + alien->y = rrand(screen->h, screen->h * 2); else - theEnemy->y = rrand(-screen->h, 0); + alien->y = rrand(-screen->h, 0); if (currentGame.area == 24) { - theEnemy->x = screen->w; - theEnemy->y = rrand(screen->h / 3, (2 * screen->h) / 3); + alien->x = screen->w; + alien->y = rrand(screen->h / 3, (2 * screen->h) / 3); } for (int i = 0 ; i < MAX_ALIENS ; i++) { - if ((enemy[i].owner != theEnemy) && (enemy[i].shield > 0)) + if ((enemy[i].owner != alien) && (enemy[i].shield > 0)) { - 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)) + 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)) return false; } } @@ -653,17 +653,17 @@ void initAliens() "Looks" for an enemy by picking a randomly active enemy and using them as a target. If the target is too far away, it will be ignored. */ -static void alien_searchForTarget(object *theEnemy) +static void alien_searchForTarget(object *alien) { int i; - if (theEnemy->flags & FL_WEAPCO) + if (alien->flags & FL_WEAPCO) { i = (rand() % 10); if (i == 0) { - theEnemy->target = &player; + alien->target = &player; return; } } @@ -674,7 +674,7 @@ static void alien_searchForTarget(object *theEnemy) // 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) - if ((theEnemy->classDef == CD_SID) && (currentGame.area != 25)) + if ((alien->classDef == CD_SID) && (currentGame.area != 25)) { if ((targetEnemy->flags & FL_DISABLED) || (!(targetEnemy->flags & FL_NOFIRE))) return; @@ -683,7 +683,7 @@ static void alien_searchForTarget(object *theEnemy) // Tell Phoebe and Ursula not to attack ships that cannot fire or are disabled (unless we're on the last mission) if (currentGame.area != 25) { - if ((theEnemy->classDef == CD_PHOEBE) || (theEnemy->classDef == CD_URSULA)) + if ((alien->classDef == CD_PHOEBE) || (alien->classDef == CD_URSULA)) { // Don't attack the boss or we could be here all day(!) if (targetEnemy->classDef == CD_BOSS) @@ -697,55 +697,55 @@ static void alien_searchForTarget(object *theEnemy) if ((targetEnemy->shield < 1) || (!targetEnemy->active)) return; - if ((targetEnemy->flags & FL_WEAPCO) && (theEnemy->flags & FL_WEAPCO)) + if ((targetEnemy->flags & FL_WEAPCO) && (alien->flags & FL_WEAPCO)) return; - if ((targetEnemy->flags & FL_FRIEND) && (theEnemy->flags & FL_FRIEND)) + if ((targetEnemy->flags & FL_FRIEND) && (alien->flags & FL_FRIEND)) return; - if (abs((int)theEnemy->x - (int)theEnemy->target->x) > 550) + if (abs((int)alien->x - (int)alien->target->x) > 550) return; - if (abs((int)theEnemy->y - (int)theEnemy->target->y) > 400) + if (abs((int)alien->y - (int)alien->target->y) > 400) return; - theEnemy->target = targetEnemy; + alien->target = targetEnemy; } -static int alien_checkTarget(object *theEnemy) +static int alien_checkTarget(object *alien) { // Do various checks to see if the alien can fire at // the target. Start with the most obvious checks. // No target - if (theEnemy->target == theEnemy) + if (alien->target == alien) return 0; // Whilst firing a Ray, no other weapons can be fired! - if (theEnemy->flags & FL_FIRERAY) + if (alien->flags & FL_FIRERAY) return 0; // The target is on the same side as you! - if ((theEnemy->flags & FL_WEAPCO) && (theEnemy->target->flags & FL_WEAPCO)) + if ((alien->flags & FL_WEAPCO) && (alien->target->flags & FL_WEAPCO)) return 0; - if ((theEnemy->flags & FL_FRIEND) && (theEnemy->target->flags & FL_FRIEND)) + if ((alien->flags & FL_FRIEND) && (alien->target->flags & FL_FRIEND)) return 0; // You're facing the wrong way - if ((theEnemy->face == 0) && (theEnemy->target->x < theEnemy->x)) + if ((alien->face == 0) && (alien->target->x < alien->x)) return 0; - if ((theEnemy->face == 1) && (theEnemy->target->x > theEnemy->x)) + if ((alien->face == 1) && (alien->target->x > alien->x)) return 0; // Slightly more than half a screen away from you - if (abs((int)theEnemy->x - (int)theEnemy->target->x) > 550) + if (abs((int)alien->x - (int)alien->target->x) > 550) return 0; - if ((theEnemy->flags & FL_AIMS) || (theEnemy->flags & FL_CONTINUOUS_FIRE)) + if ((alien->flags & FL_AIMS) || (alien->flags & FL_CONTINUOUS_FIRE)) return 1; // Not at the correct vertical height - if ((theEnemy->y < theEnemy->target->y - 15) || (theEnemy->y > theEnemy->target->y + theEnemy->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; @@ -755,19 +755,19 @@ static int alien_checkTarget(object *theEnemy) Currently only used for the allies. Whilst flying around, the allies will fire on any enemy craft that enter their line of sight. */ -static int alien_enemiesInFront(object *theEnemy) +static int alien_enemiesInFront(object *alien) { object *anEnemy = enemy; for (int i = 0 ; i < MAX_ALIENS ; i++) { - if ((theEnemy != anEnemy) && (anEnemy->flags & FL_WEAPCO) && (anEnemy->shield > 0)) + if ((alien != anEnemy) && (anEnemy->flags & FL_WEAPCO) && (anEnemy->shield > 0)) { - if ((theEnemy->y > anEnemy->y - 15) && (theEnemy->y < anEnemy->y + anEnemy->image[0]->h + 15)) + if ((alien->y > anEnemy->y - 15) && (alien->y < anEnemy->y + anEnemy->image[0]->h + 15)) { - if ((theEnemy->face == 1) && (anEnemy->x < theEnemy->x)) + if ((alien->face == 1) && (anEnemy->x < alien->x)) return 1; - if ((theEnemy->face == 0) && (anEnemy->x > theEnemy->x)) + if ((alien->face == 0) && (anEnemy->x > alien->x)) return 1; } } @@ -778,40 +778,37 @@ static int alien_enemiesInFront(object *theEnemy) return 0; } -static void moveAndSeparate(object *theEnemy) +static void alien_move(object *alien) { - bool checkCollisions = true; - bool hasCollided = false; + bool checkCollisions; - // don't worry about bumping into other craft - if ((theEnemy->flags & FL_LEAVESECTOR) || (theEnemy->classDef == CD_DRONE) || (currentGame.area == 18)) + if ((alien->flags & FL_LEAVESECTOR) || (alien->shield < 1)) checkCollisions = false; + else + checkCollisions = true; - if (theEnemy->shield < 1) - checkCollisions = false; - - if (theEnemy->owner == theEnemy) + if (alien->owner == alien) { - if (theEnemy->flags & FL_CIRCLES) + if (alien->flags & FL_CIRCLES) { - if (theEnemy->face == 0) + if (alien->face == 0) { - theEnemy->dx += 0.02; - theEnemy->dy += 0.02; + alien->dx += 0.02; + alien->dy += 0.02; } else { - theEnemy->dx -= 0.02; - theEnemy->dy -= 0.02; + alien->dx -= 0.02; + alien->dy -= 0.02; } - theEnemy->x -= (sinf(theEnemy->dx) * 4); - theEnemy->y -= (cosf(theEnemy->dy) * 4); + alien->x -= (sinf(alien->dx) * 4); + alien->y -= (cosf(alien->dy) * 4); } else { - theEnemy->x -= theEnemy->dx; - theEnemy->y -= theEnemy->dy; + alien->x -= alien->dx; + alien->y -= alien->dy; } } @@ -821,25 +818,22 @@ static void moveAndSeparate(object *theEnemy) { for (int i = 0 ; i < MAX_ALIENS ; i++) { - if ((theEnemy->flags & FL_LEAVESECTOR) || (theEnemy->classDef == CD_DRONE) || (theEnemy->classDef == CD_ASTEROID2) || (theEnemy->owner == anEnemy->owner) || (theEnemy->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; } - if (collision(theEnemy, anEnemy)) + if (collision(alien, anEnemy)) { - if ((anEnemy->classDef == CD_BARRIER) && (anEnemy->owner != theEnemy)) + if ((anEnemy->classDef == CD_BARRIER) && (anEnemy->owner != alien)) { - theEnemy->shield--; - theEnemy->hit = 3; - theEnemy->dx *= -1; - theEnemy->dy *= -1; - playSound(SFX_HIT, theEnemy->x); + alien->shield--; + alien->hit = 3; + alien->dx *= -1; + alien->dy *= -1; + playSound(SFX_HIT, alien->x); } - - if (anEnemy->owner == anEnemy) - hasCollided = true; } anEnemy++; @@ -847,35 +841,33 @@ static void moveAndSeparate(object *theEnemy) } // Handle a collision with the player - if ((player.shield > 0) && (theEnemy->shield > 0) && (checkCollisions)) + if ((player.shield > 0) && (alien->shield > 0) && (checkCollisions)) { - if (collision(theEnemy, &player)) + if (collision(alien, &player)) { - hasCollided = true; - - if (theEnemy->classDef == CD_ASTEROID) + if (alien->classDef == CD_ASTEROID) { if (!engine.cheatShield) - player.shield -= theEnemy->shield; - theEnemy->shield = 0; - playSound(SFX_EXPLOSION, theEnemy->x); + player.shield -= alien->shield; + alien->shield = 0; + playSound(SFX_EXPLOSION, alien->x); setInfoLine("Warning: Asteroid Collision Damage!!", FONT_RED); player.hit = 5; playSound(SFX_HIT, player.x); } - if (theEnemy->classDef == CD_ASTEROID2) + if (alien->classDef == CD_ASTEROID2) { if (!engine.cheatShield) - player.shield -= theEnemy->shield; - theEnemy->shield = 0; - playSound(SFX_EXPLOSION, theEnemy->x); + player.shield -= alien->shield; + alien->shield = 0; + playSound(SFX_EXPLOSION, alien->x); setInfoLine("Warning: Asteroid Collision Damage!!", FONT_RED); player.hit = 5; playSound(SFX_HIT, player.x); } - if (theEnemy->classDef == CD_BARRIER) + if (alien->classDef == CD_BARRIER) { if (!engine.cheatShield) player.shield--; @@ -884,45 +876,6 @@ static void moveAndSeparate(object *theEnemy) } } } - - // Got back to where you originally were... - if (theEnemy->owner == theEnemy) - { - if (hasCollided) - { - if (theEnemy->flags & FL_CIRCLES) - { - if (theEnemy->face == 0) - { - theEnemy->dx -= 0.02; - theEnemy->dy -= 0.02; - } - else - { - theEnemy->dx += 0.02; - theEnemy->dy += 0.02; - } - - theEnemy->x += (sinf(theEnemy->dx) * 4); - theEnemy->y += (cosf(theEnemy->dy) * 4); - - theEnemy->thinktime = 0; - } - else - { - theEnemy->x += theEnemy->dx; - theEnemy->y += theEnemy->dy; - - theEnemy->dx *= -1; - theEnemy->dy *= -1; - - theEnemy->dx *= 0.2; - theEnemy->dy *= 0.2; - - limitInt(&theEnemy->thinktime, 0, 15); - } - } - } } /* @@ -938,6 +891,8 @@ void mission_killAllEnemies() } } +// XXX: This function is used in only one place, the main game loop. +// Should probably be moved to there. void doAliens() { static float barrierLoop = 0; @@ -950,130 +905,130 @@ void doAliens() bool canFire; int shapeToUse; - object *theEnemy = enemy; + object *alien = enemy; for (int i = 0 ; i < MAX_ALIENS ; i++) { - if (theEnemy->active) + if (alien->active) { - if (theEnemy->shield > 0) + if (alien->shield > 0) { - if ((theEnemy->flags & FL_WEAPCO) && (!(theEnemy->flags & FL_DISABLED))) + if ((alien->flags & FL_WEAPCO) && (!(alien->flags & FL_DISABLED))) engine.allAliensDead = 0; // Set part attributes - if (theEnemy->owner != theEnemy) + if (alien->owner != alien) { - theEnemy->face = theEnemy->owner->face; + alien->face = alien->owner->face; - if (theEnemy->face == 0) - theEnemy->x = theEnemy->owner->x - theEnemy->dx; + if (alien->face == 0) + alien->x = alien->owner->x - alien->dx; else - theEnemy->x = theEnemy->owner->x + theEnemy->owner->image[0]->w + theEnemy->dx - theEnemy->image[0]->w; + alien->x = alien->owner->x + alien->owner->image[0]->w + alien->dx - alien->image[0]->w; - theEnemy->y = (theEnemy->owner->y + theEnemy->dy); + alien->y = (alien->owner->y + alien->dy); - if (theEnemy->owner->shield < 1) + if (alien->owner->shield < 1) { - if ((theEnemy->classDef != CD_URANUSBOSSWING1) && (theEnemy->classDef != CD_URANUSBOSSWING2)) + if ((alien->classDef != CD_URANUSBOSSWING1) && (alien->classDef != CD_URANUSBOSSWING2)) { - theEnemy->shield = 0; + alien->shield = 0; } else { - theEnemy->flags &= ~FL_IMMORTAL; - theEnemy->owner = theEnemy; - theEnemy->chance[0] = 25; + alien->flags &= ~FL_IMMORTAL; + alien->owner = alien; + alien->chance[0] = 25; } } } canFire = true; // The alien is allowed to fire - limitInt(&--theEnemy->thinktime, 0, 250); + limitInt(&--alien->thinktime, 0, 250); - if (theEnemy->target->shield < 1) - theEnemy->target = theEnemy; + if (alien->target->shield < 1) + alien->target = alien; // Specific to Sid to stop him pissing about(!) - if ((theEnemy->classDef == CD_SID) && - (theEnemy->target->flags & FL_DISABLED)) - theEnemy->target = theEnemy; + if ((alien->classDef == CD_SID) && + (alien->target->flags & FL_DISABLED)) + alien->target = alien; - if (theEnemy->target == theEnemy) + if (alien->target == alien) { if (engine.missionCompleteTimer == 0) { - alien_searchForTarget(theEnemy); + alien_searchForTarget(alien); } else { - if (theEnemy->flags & FL_FRIEND) + if (alien->flags & FL_FRIEND) { - theEnemy->target = &player; - theEnemy->thinktime = 1; + alien->target = &player; + alien->thinktime = 1; } } } - if ((!(theEnemy->flags & FL_DISABLED)) && (theEnemy->thinktime == 0) && (theEnemy->target != theEnemy) && (theEnemy->owner == theEnemy)) + if ((!(alien->flags & FL_DISABLED)) && (alien->thinktime == 0) && (alien->target != alien) && (alien->owner == alien)) { - if (theEnemy->classDef == CD_KLINE) - alien_setKlineAI(theEnemy); + if (alien->classDef == CD_KLINE) + alien_setKlineAI(alien); else - alien_setAI(theEnemy); + alien_setAI(alien); - theEnemy->thinktime = (rand() % 25) * 10; + alien->thinktime = (rand() % 25) * 10; // Face direction of movement unless you always face your target(!) - if (!(theEnemy->flags & FL_ALWAYSFACE)) + if (!(alien->flags & FL_ALWAYSFACE)) { - theEnemy->face = 0; - if (theEnemy->dx > 0) theEnemy->face = 1; + alien->face = 0; + if (alien->dx > 0) alien->face = 1; } - limitFloat(&theEnemy->dx, 0 - theEnemy->speed, theEnemy->speed); - limitFloat(&theEnemy->dy, 0 - theEnemy->speed, theEnemy->speed); + limitFloat(&alien->dx, 0 - alien->speed, alien->speed); + limitFloat(&alien->dy, 0 - alien->speed, alien->speed); } - if (theEnemy->flags & FL_ALWAYSFACE) + if (alien->flags & FL_ALWAYSFACE) { - theEnemy->face = 0; - if (theEnemy->x > theEnemy->target->x) theEnemy->face = 1; + alien->face = 0; + if (alien->x > alien->target->x) alien->face = 1; } - if ((currentGame.area == 18) && (theEnemy->classDef == CD_BOSS)) - theEnemy->face = 0; + if ((currentGame.area == 18) && (alien->classDef == CD_BOSS)) + alien->face = 0; - if ((theEnemy->flags & FL_DEPLOYDRONES) && ((rand() % 300) == 0)) - alien_addDrone(theEnemy); + if ((alien->flags & FL_DEPLOYDRONES) && ((rand() % 300) == 0)) + alien_addDrone(alien); - if (theEnemy->flags & FL_LEAVESECTOR) + if (alien->flags & FL_LEAVESECTOR) { - limitFloat(&(theEnemy->dx -= 0.5), 0, -15); - theEnemy->dy = 0; - theEnemy->thinktime = 999; - theEnemy->face = 0; + limitFloat(&(alien->dx -= 0.5), 0, -15); + alien->dy = 0; + alien->thinktime = 999; + alien->face = 0; - if (theEnemy->x >= 5000) + if (alien->x >= 5000) { - theEnemy->flags -= FL_LEAVESECTOR; - theEnemy->flags += FL_ESCAPED; - theEnemy->active = false; + alien->flags -= FL_LEAVESECTOR; + alien->flags += FL_ESCAPED; + alien->active = false; - if (theEnemy->classDef == CD_CLOAKFIGHTER) + if (alien->classDef == CD_CLOAKFIGHTER) { - currentGame.experimentalShield = theEnemy->shield; + currentGame.experimentalShield = alien->shield; setInfoLine("Experimental Fighter has fled", FONT_CYAN); } - theEnemy->shield = 0; - updateMissionRequirements(M_ESCAPE_TARGET, theEnemy->classDef, 1); + alien->shield = 0; + updateMissionRequirements(M_ESCAPE_TARGET, alien->classDef, 1); - if (theEnemy->classDef != CD_CLOAKFIGHTER) - updateMissionRequirements(M_DESTROY_TARGET_TYPE, theEnemy->classDef, 1); + if (alien->classDef != CD_CLOAKFIGHTER) + updateMissionRequirements(M_DESTROY_TARGET_TYPE, alien->classDef, 1); } } @@ -1082,46 +1037,46 @@ void doAliens() It can cloak and uncloak at random. When cloaked, it's sprite is not displayed. However the engine trail is still visible! */ - if ((theEnemy->flags & FL_CANCLOAK) && ((rand() % 500) == 0)) + if ((alien->flags & FL_CANCLOAK) && ((rand() % 500) == 0)) { - if (theEnemy->flags & FL_ISCLOAKED) - theEnemy->flags -= FL_ISCLOAKED; + if (alien->flags & FL_ISCLOAKED) + alien->flags -= FL_ISCLOAKED; else - theEnemy->flags += FL_ISCLOAKED; - playSound(SFX_CLOAK, theEnemy->x); + alien->flags += FL_ISCLOAKED; + playSound(SFX_CLOAK, alien->x); } // ------------ Barriers ------------------ - if (theEnemy->classDef == CD_BARRIER) + if (alien->classDef == CD_BARRIER) { - theEnemy->dx = -10 + (sinf(barrierLoop + theEnemy->speed) * 60); - theEnemy->dy = 20 + (cosf(barrierLoop + theEnemy->speed) * 40); + alien->dx = -10 + (sinf(barrierLoop + alien->speed) * 60); + alien->dy = 20 + (cosf(barrierLoop + alien->speed) * 40); } // ---------------------------------------- // ------------ Mobile Shields ------------ - if (theEnemy->classDef == CD_MOBILESHIELD) + if (alien->classDef == CD_MOBILESHIELD) { limitInt(&(++enemy[WC_BOSS].shield), 0, enemy[WC_BOSS].maxShield); } // ---------------------------------------- - limitCharAdd(&theEnemy->reload[0], -1, 0, 999); - limitCharAdd(&theEnemy->reload[1], -1, 0, 999); + limitCharAdd(&alien->reload[0], -1, 0, 999); + limitCharAdd(&alien->reload[1], -1, 0, 999); - if ((!(theEnemy->flags & FL_DISABLED)) && - (!(theEnemy->flags & FL_NOFIRE))) + if ((!(alien->flags & FL_DISABLED)) && + (!(alien->flags & FL_NOFIRE))) { - if ((theEnemy->target->shield > 0)) - canFire = alien_checkTarget(theEnemy); + if ((alien->target->shield > 0)) + canFire = alien_checkTarget(alien); - if (((theEnemy->thinktime % 2) == 0) && - (theEnemy->flags & FL_FRIEND)) - canFire = alien_enemiesInFront(theEnemy); + if (((alien->thinktime % 2) == 0) && + (alien->flags & FL_FRIEND)) + canFire = alien_enemiesInFront(alien); } else { @@ -1130,138 +1085,140 @@ void doAliens() if ((canFire) && (dev.fireAliens)) { - if ((theEnemy->reload[0] == 0) && - ((rand() % 1000 < theEnemy->chance[0]) || - (theEnemy->flags & FL_CONTINUOUS_FIRE))) + if ((alien->reload[0] == 0) && + ((rand() % 1000 < alien->chance[0]) || + (alien->flags & FL_CONTINUOUS_FIRE))) { - fireBullet(theEnemy, 0); + fireBullet(alien, 0); } - if ((theEnemy->reload[1] == 0) && - ((rand() % 1000 < theEnemy->chance[1]) || - (theEnemy->flags & FL_CONTINUOUS_FIRE))) + if ((alien->reload[1] == 0) && + ((rand() % 1000 < alien->chance[1]) || + (alien->flags & FL_CONTINUOUS_FIRE))) { - if ((theEnemy->weaponType[1] != W_ENERGYRAY) && - (theEnemy->weaponType[1] != W_LASER)) + if ((alien->weaponType[1] != W_ENERGYRAY) && + (alien->weaponType[1] != W_LASER)) { - if (theEnemy->weaponType[1] == W_CHARGER) - theEnemy->ammo[1] = 50 + rand() % 150; - fireBullet(theEnemy, 1); + if (alien->weaponType[1] == W_CHARGER) + alien->ammo[1] = 50 + rand() % 150; + fireBullet(alien, 1); } - else if (theEnemy->weaponType[1] == W_LASER) + else if (alien->weaponType[1] == W_LASER) { - theEnemy->flags += FL_FIRELASER; + alien->flags += FL_FIRELASER; } - else if ((theEnemy->weaponType[1] == W_ENERGYRAY) && - (theEnemy->ammo[0] == 250)) + else if ((alien->weaponType[1] == W_ENERGYRAY) && + (alien->ammo[0] == 250)) { - theEnemy->flags += FL_FIRERAY; - playSound(SFX_ENERGYRAY, theEnemy->x); + alien->flags += FL_FIRERAY; + playSound(SFX_ENERGYRAY, alien->x); } } } // --------------- Ray specific stuff ------------------ - if (theEnemy->flags & FL_FIRERAY) + if (alien->flags & FL_FIRERAY) { - fireRay(theEnemy); + fireRay(alien); } else { - limitCharAdd(&theEnemy->ammo[0], 1, 0, 250); + limitCharAdd(&alien->ammo[0], 1, 0, 250); } // ------------------------------------------------------- // --------------- Laser specific stuff ------------------ - if (theEnemy->flags & FL_FIRELASER) + if (alien->flags & FL_FIRELASER) { - fireBullet(theEnemy, 1); + fireBullet(alien, 1); if ((rand() % 25) == 0) - theEnemy->flags -= FL_FIRELASER; + alien->flags -= FL_FIRELASER; } // ------------------------------------------------------- // ---------------- Mine specific stuff ------------------ - if (theEnemy->flags & FL_DROPMINES) + if (alien->flags & FL_DROPMINES) if ((rand() % 150) == 0) - addCollectable(theEnemy->x, theEnemy->y, P_MINE, 25, + addCollectable(alien->x, alien->y, P_MINE, 25, 600 + rand() % 2400); // Kline drops mines a lot more often - if ((theEnemy->flags & FL_DROPMINES) && (theEnemy == &enemy[WC_KLINE])) + if ((alien->flags & FL_DROPMINES) && (alien == &enemy[WC_KLINE])) if ((rand() % 10) == 0) - addCollectable(theEnemy->x, theEnemy->y, P_MINE, 25, + addCollectable(alien->x, alien->y, P_MINE, 25, 600 + rand() % 2400); // ------------------------------------------------------- - shapeToUse = theEnemy->imageIndex[theEnemy->face]; + shapeToUse = alien->imageIndex[alien->face]; - if (theEnemy->hit) + if (alien->hit) shapeToUse += SHIP_HIT_INDEX; - limitCharAdd(&theEnemy->hit, -1, 0, 100); + limitCharAdd(&alien->hit, -1, 0, 100); - if ((theEnemy->x + theEnemy->image[0]->w > 0) && (theEnemy->x < screen->w) && (theEnemy->y + theEnemy->image[0]->h > 0) && (theEnemy->y < screen->h)) + if ((alien->x + alien->image[0]->w > 0) && (alien->x < screen->w) && (alien->y + alien->image[0]->h > 0) && (alien->y < screen->h)) { - if ((!(theEnemy->flags & FL_DISABLED)) && (theEnemy->classDef != CD_ASTEROID) && (theEnemy->classDef != CD_ASTEROID2)) - addEngine(theEnemy); - if ((!(theEnemy->flags & FL_ISCLOAKED)) || (theEnemy->hit > 0)) - blit(shipShape[shapeToUse], (int)theEnemy->x, (int)theEnemy->y); - if (theEnemy->flags & FL_DISABLED) + if ((!(alien->flags & FL_DISABLED)) && (alien->classDef != CD_ASTEROID) && (alien->classDef != CD_ASTEROID2)) + addEngine(alien); + if ((!(alien->flags & FL_ISCLOAKED)) || (alien->hit > 0)) + blit(shipShape[shapeToUse], (int)alien->x, (int)alien->y); + if (alien->flags & FL_DISABLED) { if ((rand() % 10) == 0) - addExplosion(theEnemy->x + (rand() % theEnemy->image[0]->w), theEnemy->y + (rand() % theEnemy->image[0]->h), E_ELECTRICAL); + addExplosion(alien->x + (rand() % alien->image[0]->w), alien->y + (rand() % alien->image[0]->h), E_ELECTRICAL); } } - if ((currentGame.area == 24) && (theEnemy->x < -300)) - theEnemy->active = false; + if ((currentGame.area == 24) && (alien->x < -300)) + alien->active = false; } else { - theEnemy->shield--; - if ((theEnemy->x > 0) && (theEnemy->x < screen->w) && (theEnemy->y > 0) && (theEnemy->y < screen->h)) + alien->shield--; + if ((alien->x > 0) && (alien->x < screen->w) && (alien->y > 0) && (alien->y < screen->h)) { - blit(theEnemy->image[theEnemy->face], (int)theEnemy->x, (int)theEnemy->y); - addExplosion(theEnemy->x + (rand() % theEnemy->image[0]->w), theEnemy->y + (rand() % theEnemy->image[0]->h), E_BIG_EXPLOSION); + blit(alien->image[alien->face], (int)alien->x, (int)alien->y); + addExplosion(alien->x + (rand() % alien->image[0]->w), alien->y + (rand() % alien->image[0]->h), E_BIG_EXPLOSION); } - if (theEnemy->shield < theEnemy->deathCounter) + if (alien->shield < alien->deathCounter) { - theEnemy->active = false; - if ((theEnemy->classDef == CD_BOSS) || - (theEnemy->owner == &enemy[WC_BOSS]) || - (theEnemy->flags & FL_FRIEND) || - (theEnemy->classDef == CD_ASTEROID) || - (theEnemy->classDef == CD_KLINE)) - addDebris((int)theEnemy->x, (int)theEnemy->y, - theEnemy->maxShield); + alien->active = false; + if ((alien->classDef == CD_BOSS) || + (alien->owner == &enemy[WC_BOSS]) || + (alien->flags & FL_FRIEND) || + (alien->classDef == CD_ASTEROID) || + (alien->classDef == CD_KLINE)) + addDebris((int)alien->x, (int)alien->y, + alien->maxShield); - if (theEnemy->classDef == CD_ASTEROID) + if (alien->classDef == CD_ASTEROID) { int i = 1 + (rand() % 3); for (int j = 0 ; j < i ; j++) - alien_addSmallAsteroid(theEnemy); + alien_addSmallAsteroid(alien); } } } // Adjust the movement even whilst exploding - if ((dev.moveAliens) && (!(theEnemy->flags & FL_NOMOVE)) && - (!(theEnemy->flags & FL_DISABLED))) - moveAndSeparate(theEnemy); + if ((dev.moveAliens) && (!(alien->flags & FL_NOMOVE)) && + (!(alien->flags & FL_DISABLED))) + alien_move(alien); - if ((currentGame.area != 18) || (theEnemy->shield < 0)) - theEnemy->x += engine.ssx; + if ((currentGame.area != 18) || (alien->shield < 0)) + alien->x += engine.ssx; - theEnemy->x += engine.smx; - theEnemy->y += engine.ssy + engine.smy; + alien->x += engine.smx; + alien->y += engine.ssy + engine.smy; } - theEnemy++; + alien++; } } +// XXX: This function is called only once, as part of the function that +// loads game graphics. Should probably be merged into that function. void setAlienShapes() { for (int i = 0 ; i < MAX_DEFALIENS ; i++) @@ -1276,6 +1233,8 @@ void setAlienShapes() } } +// XXX: This function is called only once, before the game starts. +// Should probably be merged into main. void defineAliens() { // Dual Plasma Fighter. diff --git a/src/bullets.cpp b/src/bullets.cpp index 1cc8128..f06027c 100644 --- a/src/bullets.cpp +++ b/src/bullets.cpp @@ -269,100 +269,103 @@ static object *getRandomEnemy(object *bullet) /* Fill in later... */ -static void destroyAlien(object *bullet, object *theEnemy) +static void alien_destroy(object *alien, object *attacker) { - playSound(SFX_EXPLOSION, theEnemy->x); + playSound(SFX_EXPLOSION, alien->x); // Chain reaction destruction if needed - if (theEnemy->flags & FL_DAMAGEOWNER) + if (alien->flags & FL_DAMAGEOWNER) { - theEnemy->owner->shield -= theEnemy->maxShield; - if (theEnemy->owner->shield < 1) - destroyAlien(bullet, theEnemy->owner); + alien->owner->shield -= alien->maxShield; + if (alien->owner->shield < 1) + alien_destroy(alien->owner, attacker); } - if (theEnemy->flags & FL_FRIEND) + if (alien->flags & FL_FRIEND) { - if (theEnemy->classDef == CD_PHOEBE) + if (alien->classDef == CD_PHOEBE) currentGame.wingMate1Ejects++; - else if (theEnemy->classDef == CD_URSULA) + else if (alien->classDef == CD_URSULA) currentGame.wingMate2Ejects++; // Phoebe cannot eject on the rescue mission if (currentGame.area != 7) { - if ((theEnemy->classDef == CD_PHOEBE) || (theEnemy->classDef == CD_URSULA)) + if ((alien->classDef == CD_PHOEBE) || (alien->classDef == CD_URSULA)) setInfoLine(">> Ally has ejected! <<\n", FONT_RED); else setInfoLine(">> Friendly craft has been destroyed!! <<\n", FONT_RED); } } - if (bullet->owner == &player) + if (attacker != NULL) { - // Once again, stop point leeching - if (currentGame.area != MAX_MISSIONS - 1) - currentGame.cash += theEnemy->score; - currentGame.cashEarned += theEnemy->score; - currentGame.totalKills++; - updateMissionRequirements(M_COLLECT, P_CASH, theEnemy->score); - } - else if (bullet->owner->classDef == CD_PHOEBE) - { - currentGame.wingMate1Kills++; - } - else if (bullet->owner->classDef == CD_URSULA) - { - currentGame.wingMate2Kills++; - } - else - { - currentGame.totalOtherKills++; - } - - if ((bullet->owner->classDef == CD_PHOEBE) || (bullet->owner->classDef == CD_URSULA)) - { - if ((rand() % 8) == 0) + if (attacker == &player) { - getKillMessage(bullet->owner); + // Once again, stop point leeching + if (currentGame.area != MAX_MISSIONS - 1) + currentGame.cash += alien->score; + currentGame.cashEarned += alien->score; + currentGame.totalKills++; + updateMissionRequirements(M_COLLECT, P_CASH, alien->score); + } + else if (attacker->classDef == CD_PHOEBE) + { + currentGame.wingMate1Kills++; + } + else if (attacker->classDef == CD_URSULA) + { + currentGame.wingMate2Kills++; + } + else + { + currentGame.totalOtherKills++; + } + + if ((attacker->classDef == CD_PHOEBE) || (attacker->classDef == CD_URSULA)) + { + if ((rand() % 8) == 0) + { + getKillMessage(attacker); + } } } - updateMissionRequirements(M_DESTROY_TARGET_TYPE, theEnemy->classDef, 1); - updateMissionRequirements(M_PROTECT_TARGET, theEnemy->classDef, 1); + updateMissionRequirements(M_DESTROY_TARGET_TYPE, alien->classDef, 1); + updateMissionRequirements(M_PROTECT_TARGET, alien->classDef, 1); - if (rand() % 100 <= theEnemy->collectChance) + if (rand() % 100 <= alien->collectChance) { unsigned char value; if ((rand() % 10) == 0) - theEnemy->collectValue *= 2; + alien->collectValue *= 2; - while (theEnemy->collectValue > 0) + while (alien->collectValue > 0) { - value = (10 + (rand() % theEnemy->collectValue)); - if (value > theEnemy->collectValue) - value =theEnemy->collectValue; - addCollectable(theEnemy->x, theEnemy->y, theEnemy->collectType, value, 600); - theEnemy->collectValue -= value; + value = (10 + (rand() % alien->collectValue)); + if (value > alien->collectValue) + value =alien->collectValue; + addCollectable(alien->x, alien->y, alien->collectType, value, 600); + alien->collectValue -= value; } } // Make it explode immediately - if (theEnemy->classDef == CD_ASTEROID) + if (alien->classDef == CD_ASTEROID) { - theEnemy->shield = -999; + alien->shield = -999; } - if ((theEnemy->classDef == CD_KRASS) && (bullet->owner == &player)) + if ((alien->classDef == CD_KRASS) && (attacker == &player)) setRadioMessage(FACE_CHRIS, "My NAME is CHRIS!!!!!!!!", 1); - if (theEnemy->classDef == CD_KLINE) + if (alien->classDef == CD_KLINE) { setRadioMessage(FACE_KLINE, "It was an honor... to have fought you...", 1); - theEnemy->dx = theEnemy->dy = 0; - theEnemy->maxShield = 1500; - theEnemy->shield = -200; + alien->dx = alien->dy = 0; + alien->maxShield = 1500; + alien->shield = -200; } } @@ -460,7 +463,7 @@ void fireRay(object *attacker) playSound(SFX_HIT, anEnemy->x); if (anEnemy->shield < 1) { - destroyAlien(attacker, anEnemy); + alien_destroy(anEnemy, attacker->owner); } } } @@ -489,7 +492,7 @@ void doBullets() object *prevBullet = engine.bulletHead; engine.bulletTail = engine.bulletHead; - object *theEnemy, *theCargo; + object *alien, *theCargo; bool okayToHit = false; float homingMissileSpeed = 0; @@ -564,55 +567,55 @@ void doBullets() for (int i = 0 ; i < MAX_ALIENS ; i++) { - theEnemy = &enemy[i]; + alien = &enemy[i]; - if ((theEnemy->shield < 1) || (!theEnemy->active)) + if ((alien->shield < 1) || (!alien->active)) continue; okayToHit = false; - if ((bullet->flags & WF_FRIEND) && (theEnemy->flags & FL_WEAPCO)) + if ((bullet->flags & WF_FRIEND) && (alien->flags & FL_WEAPCO)) okayToHit = true; - if ((bullet->flags & WF_WEAPCO) && (theEnemy->flags & FL_FRIEND)) + if ((bullet->flags & WF_WEAPCO) && (alien->flags & FL_FRIEND)) okayToHit = true; if ((bullet->id == WT_ROCKET) || (bullet->id == WT_LASER) || (bullet->id == WT_CHARGER)) okayToHit = true; - if (bullet->owner == theEnemy->owner) + if (bullet->owner == alien->owner) okayToHit = false; if (okayToHit) { - if ((bullet->active) && (collision(bullet, theEnemy))) + if ((bullet->active) && (collision(bullet, alien))) { if (bullet->owner == &player) { currentGame.hits++; - if ((theEnemy->classDef == CD_PHOEBE) || (theEnemy->classDef == CD_URSULA)) - getMissFireMessage(theEnemy); + if ((alien->classDef == CD_PHOEBE) || (alien->classDef == CD_URSULA)) + getMissFireMessage(alien); } - if (!(theEnemy->flags & FL_IMMORTAL)) + if (!(alien->flags & FL_IMMORTAL)) { if (!(bullet->flags & WF_DISABLE)) - theEnemy->shield -= bullet->damage; + alien->shield -= bullet->damage; else - theEnemy->systemPower -= bullet->damage; + alien->systemPower -= bullet->damage; - theEnemy->hit = 5; + alien->hit = 5; } - if (theEnemy->flags & FL_CANNOTDIE) + if (alien->flags & FL_CANNOTDIE) { - limitInt(&theEnemy->shield, 1, theEnemy->maxShield); - if (theEnemy->shield == 1) + limitInt(&alien->shield, 1, alien->maxShield); + if (alien->shield == 1) { if (currentGame.area != 26) { - if (!(theEnemy->flags & FL_LEAVESECTOR)) + if (!(alien->flags & FL_LEAVESECTOR)) { - theEnemy->flags |= FL_LEAVESECTOR; - theEnemy->flags &= ~FL_CIRCLES; + alien->flags |= FL_LEAVESECTOR; + alien->flags &= ~FL_CIRCLES; if (currentGame.area == 11) setRadioMessage(FACE_KLINE, "Seems I underestimated you, Bainfield! We'll meet again!", 1); else if (currentGame.area == 25) @@ -621,14 +624,14 @@ void doBullets() } else { - alien_setKlineAttackMethod(theEnemy); + alien_setKlineAttackMethod(alien); } } } - if ((theEnemy->flags & FL_RUNSAWAY) && ((rand() % 50) == 0)) + if ((alien->flags & FL_RUNSAWAY) && ((rand() % 50) == 0)) { - theEnemy->flags |= FL_LEAVESECTOR; + alien->flags |= FL_LEAVESECTOR; } if (bullet->id != WT_CHARGER) @@ -638,29 +641,29 @@ void doBullets() } else if (bullet->id == WT_CHARGER) { - bullet->shield -= theEnemy->shield; + bullet->shield -= alien->shield; if (bullet->shield < 0) bullet->active = false; } - playSound(SFX_HIT, theEnemy->x); - if (theEnemy->AIType == AI_EVASIVE) - theEnemy->thinktime = 0; + playSound(SFX_HIT, alien->x); + if (alien->AIType == AI_EVASIVE) + alien->thinktime = 0; - if (theEnemy->shield < 1) - destroyAlien(bullet, theEnemy); + if (alien->shield < 1) + alien_destroy(alien, bullet->owner); - if (theEnemy->systemPower < 1) + if (alien->systemPower < 1) { - if (!(theEnemy->flags & FL_DISABLED)) + if (!(alien->flags & FL_DISABLED)) { - theEnemy->flags += FL_DISABLED; - updateMissionRequirements(M_DISABLE_TARGET, theEnemy->classDef, 1); + alien->flags += FL_DISABLED; + updateMissionRequirements(M_DISABLE_TARGET, alien->classDef, 1); } - theEnemy->systemPower = 0; - if (theEnemy->classDef == CD_KLINE) - theEnemy->systemPower = theEnemy->maxShield; + alien->systemPower = 0; + if (alien->classDef == CD_KLINE) + alien->systemPower = alien->maxShield; } if (bullet->id == WT_ROCKET) @@ -700,7 +703,7 @@ void doBullets() } else if (bullet->id == WT_CHARGER) { - bullet->shield -= theEnemy->shield; + bullet->shield -= alien->shield; if (bullet->shield < 0) bullet->active = false; } diff --git a/src/resources.cpp b/src/resources.cpp index 513e99e..4475b78 100644 --- a/src/resources.cpp +++ b/src/resources.cpp @@ -34,6 +34,10 @@ void loadGameGraphics() { int index; char string[75] = ""; + FILE *fp; + uint32_t *p32; + uint16_t *p16; + uint8_t *p8; freeGraphics(); @@ -56,8 +60,6 @@ void loadGameGraphics() break; } - FILE *fp; - fp = fopen(string, "rb"); if (fp == NULL) @@ -81,33 +83,38 @@ void loadGameGraphics() shipShape[i- SHIP_HIT_INDEX]->h); blit(shipShape[i - SHIP_HIT_INDEX], 0, 0, shipShape[i]); - switch(shipShape[i]->format->BytesPerPixel) { - case 4: { - uint32_t *p = (uint32_t *)shipShape[i]->pixels; + switch (shipShape[i]->format->BytesPerPixel) + { + case 4: + p32 = (uint32_t *)shipShape[i]->pixels; for (int j = 0; j < shipShape[i]->w * shipShape[i]->h; j++) - if (p[j]) - p[j] |= shipShape[i]->format->Rmask; + { + if (p32[j]) + p32[j] |= shipShape[i]->format->Rmask; + } break; - } - case 2: { - uint16_t *p = (uint16_t *)shipShape[i]->pixels; + case 2: + p16 = (uint16_t *)shipShape[i]->pixels; for (int j = 0; j < shipShape[i]->w * shipShape[i]->h; j++) - if (p[j]) - p[j] |= shipShape[i]->format->Rmask; + { + if (p16[j]) + p16[j] |= shipShape[i]->format->Rmask; + } break; - } - case 1: { - uint8_t *p = (uint8_t *)shipShape[i]->pixels; + case 1: + p8 = (uint8_t *)shipShape[i]->pixels; for (int j = 0; j < shipShape[i]->w * shipShape[i]->h; j++) - if (p[j]) - p[j] = SDL_MapRGB(shipShape[i]->format, 255, 0, 0); + { + if (p8[j]) + p8[j] = SDL_MapRGB(shipShape[i]->format, 255, 0, 0); + } break; - } } - SDL_SetColorKey(shipShape[i], SDL_TRUE, SDL_MapRGB(shipShape[i]->format, 0, 0, 0)); + SDL_SetColorKey(shipShape[i], SDL_TRUE, + SDL_MapRGB(shipShape[i]->format, 0, 0, 0)); } strcpy(string, "data/resources_all.dat");