diff --git a/Makefile b/Makefile index 9194b30..a4bce90 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ CXXFLAGS += `pkg-config --cflags sdl2 SDL2_image SDL2_mixer` LIBS = `pkg-config --libs sdl2 SDL2_image SDL2_mixer` OBJS = alien.o audio.o bullet.o cargo.o collectable.o comms.o debris.o events.o explosions.o game.o globals.o graphics.o init.o intermission.o loadSave.o messages.o misc.o missions.o player.o resources.o script.o ship.o shop.o Starfighter.o title.o weapons.o -VERSION = 1.3.1 +VERSION = 1.3.2-dev PROG = starfighter DOCS = docs/* DATA = data gfx sound music diff --git a/src/alien.cpp b/src/alien.cpp index 4395892..55aa664 100644 --- a/src/alien.cpp +++ b/src/alien.cpp @@ -736,9 +736,9 @@ void aliens_init() } if (currentGame.area == MISN_CERADSE) - addCargo(&aliens[index], P_CARGO); + cargo_add(&aliens[index], P_CARGO); else if (currentGame.area == MISN_NEROD) - addCargo(&aliens[index], P_PHOEBE); + cargo_add(&aliens[index], P_PHOEBE); if (index == ALIEN_KLINE) { @@ -1005,7 +1005,7 @@ bool alien_add() } if (aliens[index].classDef == CD_CARGOSHIP) - addCargo(&aliens[index], P_CARGO); + cargo_add(&aliens[index], P_CARGO); if (aliens[index].classDef == CD_MOBILE_RAY) aliens[index].shield = 25; @@ -1605,7 +1605,7 @@ void alien_destroy(object *alien, object *attacker) value = (10 + (rand() % alien->collectValue)); if (value > alien->collectValue) value = alien->collectValue; - addCollectable(alien->x, alien->y, alien->collectType, value, 600); + collectable_add(alien->x, alien->y, alien->collectType, value, 600); alien->collectValue -= value; } } diff --git a/src/bullet.cpp b/src/bullet.cpp index 4cfcf9b..6e4cf15 100644 --- a/src/bullet.cpp +++ b/src/bullet.cpp @@ -177,3 +177,10 @@ object *bullet_getTarget(object *bullet) return &aliens[i]; } + +void bullet_checkMineCollisions(object *bullet) +{ + + + +} diff --git a/src/bullet.h b/src/bullet.h index 9489383..1931a5b 100644 --- a/src/bullet.h +++ b/src/bullet.h @@ -22,5 +22,6 @@ along with this program. If not, see . void bullet_add(object *theWeapon, object *attacker, int y, int dy); object *bullet_getTarget(object *bullet); +void bullet_checkMineCollisions(object *bullet); #endif diff --git a/src/cargo.cpp b/src/cargo.cpp index 4756721..b754ae6 100644 --- a/src/cargo.cpp +++ b/src/cargo.cpp @@ -21,7 +21,7 @@ along with this program. If not, see . object cargo[MAX_CARGO]; -void initCargo() +void cargo_init() { for (int i = 0 ; i < MAX_CARGO ; i++) { @@ -33,7 +33,7 @@ void initCargo() /* * I think you all know what this does by now! ;) */ -static int getCargo() +static int cargo_get() { for (int i = 0 ; i < MAX_CARGO ; i++) { @@ -44,9 +44,9 @@ static int getCargo() return -1; } -object *addCargo(object *owner, int cargoType) +object *cargo_add(object *owner, int cargoType) { - int index = getCargo(); + int index = cargo_get(); if (index == -1) return NULL; @@ -69,7 +69,7 @@ void cargo_becomeCollectable(int i) { if (cargo[i].collectType != P_PHOEBE) { - addCollectable(cargo[i].x, cargo[i].y, cargo[i].collectType, 1, 600); + collectable_add(cargo[i].x, cargo[i].y, cargo[i].collectType, 1, 600); } else { diff --git a/src/cargo.h b/src/cargo.h index 07550ae..5d1c3bf 100644 --- a/src/cargo.h +++ b/src/cargo.h @@ -22,8 +22,8 @@ along with this program. If not, see . extern object cargo[MAX_CARGO]; -extern void initCargo(); -extern object *addCargo(object *owner, int cargoType); +void cargo_init(); +object *cargo_add(object *owner, int cargoType); void cargo_becomeCollectable(int i); #endif diff --git a/src/collectable.cpp b/src/collectable.cpp index df24b8e..1e67c76 100644 --- a/src/collectable.cpp +++ b/src/collectable.cpp @@ -22,7 +22,7 @@ along with this program. If not, see . /* Create a new collectable item based on supplied arguments. */ -void addCollectable(float x, float y, int type, int value, int life) +void collectable_add(float x, float y, int type, int value, int life) { int r; @@ -206,7 +206,7 @@ void addCollectable(float x, float y, int type, int value, int life) engine.collectableTail = collectable; } -void explodeMine(collectables *collectable) +void collectable_explode(collectables *collectable) { if ((collectable->x >= 0) && (collectable->x <= screen->w) && (collectable->y >= 0) && (collectable->y <= screen->h)) @@ -219,53 +219,3 @@ void explodeMine(collectables *collectable) if (player_checkShockDamage(collectable->x, collectable->y)) setInfoLine("Warning: Mine damage to shield!!", FONT_RED); } - -void checkMineBulletCollisions(object *bullet) -{ - collectables *collectable = engine.collectableHead; - collectables *prevCollectable = engine.collectableHead; - engine.collectableTail = engine.collectableHead; - - while (collectable->next != NULL) - { - collectable = collectable->next; - - if (collectable->type == P_MINE) - { - if (collision(collectable, bullet)) - { - collectable->active = false; - - if (bullet->id != WT_CHARGER) - { - bullet->active = false; - } - else - { - bullet->shield--; - if (bullet->shield < 0) - bullet->active = false; - } - - if (bullet->owner == &player) - { - currentGame.minesKilled++; - currentGame.hits++; - } - } - } - - if (collectable->active) - { - prevCollectable = collectable; - engine.collectableTail = collectable; - } - else - { - explodeMine(collectable); - prevCollectable->next = collectable->next; - delete collectable; - collectable = prevCollectable; - } - } -} diff --git a/src/collectable.h b/src/collectable.h index 2166ae6..343ae1a 100644 --- a/src/collectable.h +++ b/src/collectable.h @@ -20,8 +20,7 @@ along with this program. If not, see . #ifndef COLLECTABLE_H #define COLLECTABLE_H -extern void addCollectable(float x, float y, int type, int value, int life); -void explodeMine(collectables *collectable); -extern void checkMineBulletCollisions(object *bullet); +void collectable_add(float x, float y, int type, int value, int life); +void collectable_explode(collectables *collectable); #endif diff --git a/src/game.cpp b/src/game.cpp index b9d67cc..9a3222f 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -407,7 +407,7 @@ static void game_doCollectables() else { if (collectable->type == P_MINE) - explodeMine(collectable); + collectable_explode(collectable); prevCollectable->next = collectable->next; delete collectable; collectable = prevCollectable; @@ -429,14 +429,16 @@ static void game_doBullets() { object *bullet = engine.bulletHead; object *prevBullet = engine.bulletHead; - engine.bulletTail = engine.bulletHead; - object *alien, *theCargo; + collectables *collectable = engine.collectableHead; + collectables *prevCollectable = engine.collectableHead; bool okayToHit = false; int old_shield; float homingMissileSpeed = 0; + engine.bulletTail = engine.bulletHead; + while (bullet->next != NULL) { bullet = bullet->next; @@ -510,44 +512,42 @@ static void game_doBullets() for (int i = 0 ; i < ALIEN_MAX ; i++) { - alien = &aliens[i]; - - if ((alien->shield < 1) || (!alien->active)) + if ((aliens[i].shield < 1) || (!aliens[i].active)) continue; okayToHit = false; - if ((bullet->flags & WF_FRIEND) && (alien->flags & FL_WEAPCO)) + if ((bullet->flags & WF_FRIEND) && (aliens[i].flags & FL_WEAPCO)) okayToHit = true; - if ((bullet->flags & WF_WEAPCO) && (alien->flags & FL_FRIEND)) + if ((bullet->flags & WF_WEAPCO) && (aliens[i].flags & FL_FRIEND)) okayToHit = true; if ((bullet->id == WT_ROCKET) || (bullet->id == WT_LASER) || (bullet->id == WT_CHARGER)) okayToHit = true; - if (bullet->owner == alien->owner) + if (bullet->owner == aliens[i].owner) okayToHit = false; if (okayToHit) { - if ((bullet->active) && (collision(bullet, alien))) + if ((bullet->active) && (collision(bullet, &aliens[i]))) { - old_shield = alien->shield; + old_shield = aliens[i].shield; if (bullet->owner == &player) { currentGame.hits++; - if ((alien->classDef == CD_PHOEBE) || - (alien->classDef == CD_URSULA)) - getMissFireMessage(alien); + if ((aliens[i].classDef == CD_PHOEBE) || + (aliens[i].classDef == CD_URSULA)) + getMissFireMessage(&aliens[i]); } - if (!(alien->flags & FL_IMMORTAL)) + if (!(aliens[i].flags & FL_IMMORTAL)) { - alien_hurt(alien, bullet->owner, bullet->damage, - (bullet->flags & WF_DISABLE)); + alien_hurt(&aliens[i], bullet->owner, + bullet->damage, (bullet->flags & WF_DISABLE)); - alien->hit = 5; + aliens[i].hit = 5; } if (bullet->id == WT_CHARGER) @@ -636,21 +636,20 @@ static void game_doBullets() { for (int j = 0 ; j < 20 ; j++) { - theCargo = &cargo[j]; - if (theCargo->active) + if (cargo[j].active) { - if (collision(bullet, theCargo)) + if (collision(bullet, &cargo[j])) { bullet->active = false; addExplosion(bullet->x, bullet->y, E_SMALL_EXPLOSION); - audio_playSound(SFX_HIT, theCargo->x); - if (theCargo->collectType != P_PHOEBE) + audio_playSound(SFX_HIT, cargo[j].x); + if (cargo[j].collectType != P_PHOEBE) { - theCargo->active = false; - audio_playSound(SFX_EXPLOSION, theCargo->x); + cargo[j].active = false; + audio_playSound(SFX_EXPLOSION, cargo[j].x); for (int i = 0 ; i < 10 ; i++) - addExplosion(theCargo->x + RANDRANGE(-15, 15), - theCargo->y + RANDRANGE(-15, 15), + addExplosion(cargo[j].x + RANDRANGE(-15, 15), + cargo[j].y + RANDRANGE(-15, 15), E_BIG_EXPLOSION); updateMissionRequirements(M_PROTECT_PICKUP, P_CARGO, 1); @@ -661,7 +660,49 @@ static void game_doBullets() } // check to see if a bullet (on any side) hits a mine - checkMineBulletCollisions(bullet); + engine.collectableTail = engine.collectableHead; + while (collectable->next != NULL) + { + collectable = collectable->next; + + if (collectable->type == P_MINE) + { + if (collision(collectable, bullet)) + { + collectable->active = false; + + if (bullet->id != WT_CHARGER) + { + bullet->active = false; + } + else + { + bullet->shield--; + if (bullet->shield < 0) + bullet->active = false; + } + + if (bullet->owner == &player) + { + currentGame.minesKilled++; + currentGame.hits++; + } + } + } + + if (collectable->active) + { + prevCollectable = collectable; + engine.collectableTail = collectable; + } + else + { + collectable_explode(collectable); + prevCollectable->next = collectable->next; + delete collectable; + collectable = prevCollectable; + } + } bullet->shield--; @@ -938,14 +979,14 @@ static void game_doAliens() if (aliens[i].flags & FL_DROPMINES) { if ((rand() % 150) == 0) - addCollectable(aliens[i].x, aliens[i].y, P_MINE, 25, + collectable_add(aliens[i].x, aliens[i].y, P_MINE, 25, 600 + rand() % 2400); // Kline drops mines a lot more often if ((&aliens[i] == &aliens[ALIEN_KLINE])) { if ((rand() % 10) == 0) - addCollectable(aliens[i].x, aliens[i].y, P_MINE, 25, + collectable_add(aliens[i].x, aliens[i].y, P_MINE, 25, 600 + rand() % 2400); } } @@ -1397,7 +1438,7 @@ int mainGameLoop() setMission(currentGame.area); missionBriefScreen(); - initCargo(); + cargo_init(); initPlayer(); aliens_init(); @@ -1693,7 +1734,7 @@ int mainGameLoop() // but I'm not entirely sure what the original intention was. // For now, I've set the range to [800, 1500], which // approximately replicates the original's results. - addCollectable(RANDRANGE(800, 1500), + collectable_add(RANDRANGE(800, 1500), RANDRANGE(-screen->h / 3, (4 * screen->h) / 3), P_MINE, 25, 180 + rand() % 60); }