Some reorganization.
This commit is contained in:
parent
f4bd2f2abe
commit
5982fcc0d8
2
Makefile
2
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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -177,3 +177,10 @@ object *bullet_getTarget(object *bullet)
|
|||
|
||||
return &aliens[i];
|
||||
}
|
||||
|
||||
void bullet_checkMineCollisions(object *bullet)
|
||||
{
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -22,5 +22,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
void bullet_add(object *theWeapon, object *attacker, int y, int dy);
|
||||
object *bullet_getTarget(object *bullet);
|
||||
void bullet_checkMineCollisions(object *bullet);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -21,7 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
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
|
||||
{
|
||||
|
|
|
@ -22,8 +22,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
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
|
||||
|
|
|
@ -22,7 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
/*
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,8 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#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
|
||||
|
|
105
src/game.cpp
105
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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue