From a21153cb127d382c3c20dfd6a71eecf8bbb2cb99 Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 24 Oct 2015 14:52:55 +0100 Subject: [PATCH] Further missile tweaks. Added launch sound effect. --- data/battle/bullets.json | 4 +-- sound/18380__inferno__hvrl.ogg | Bin 0 -> 6518 bytes src/battle/bullets.c | 21 +++++++++++-- src/battle/bullets.h | 1 + src/battle/effects.c | 56 +++++++++++++++++++++++++++++++++ src/defs.h | 2 ++ src/system/lookup.c | 2 ++ src/system/sound.c | 1 + 8 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 sound/18380__inferno__hvrl.ogg diff --git a/data/battle/bullets.json b/data/battle/bullets.json index 66fd53a..7fca7fa 100644 --- a/data/battle/bullets.json +++ b/data/battle/bullets.json @@ -19,8 +19,8 @@ "type" : "BT_MISSILE", "damage" : 25, "textureName" : "gfx/bullets/missile.png", - "sound" : "SND_PLASMA", - "flags" : "BF_ENGINE" + "sound" : "SND_MISSILE", + "flags" : "BF_ENGINE+BF_EXPLODES" }, { diff --git a/sound/18380__inferno__hvrl.ogg b/sound/18380__inferno__hvrl.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1d3a75514f404d14e73878ae81006f41f2033f9f GIT binary patch literal 6518 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 N_9=aEo~CdP`Zq%damage, b->flags); + b->life = 0; + if (b->flags & BF_EXPLODES) + { + addMissileExplosion(b); + } + /* assuming that health <= 0 will always mean killed */ if (f->health <= 0 && b->owner == player) { @@ -142,6 +148,8 @@ static void faceTarget(Bullet *b) { int dir; int wantedAngle = getAngle(b->x, b->y, b->target->x, b->target->y); + int angleDiff, angleDist; + float brakeAmount; wantedAngle %= 360; @@ -153,9 +161,16 @@ static void faceTarget(Bullet *b) b->angle = mod(b->angle, 360); + angleDiff = abs(b->angle - wantedAngle) % 360; + angleDist = angleDiff > 180 ? 360 - angleDiff : angleDiff; + + brakeAmount = angleDist; + brakeAmount /= 360; + brakeAmount = 0.7 - brakeAmount; + /* halve your speed while you're not at the correct angle */ - b->dx *= 0.5; - b->dy *= 0.5; + b->dx *= brakeAmount; + b->dy *= brakeAmount; } } @@ -261,6 +276,8 @@ void fireMissile(Fighter *owner) b->life = FPS * 30; owner->missiles.ammo--; + + playBattleSound(b->sound, owner->x, owner->y); } void destroyBulletDefs(void) diff --git a/src/battle/bullets.h b/src/battle/bullets.h index 818a651..5613eb4 100644 --- a/src/battle/bullets.h +++ b/src/battle/bullets.h @@ -38,6 +38,7 @@ extern char *readFile(char *filename); extern float getAngle(int x1, int y1, int x2, int y2); extern void addMissileEngineEffect(Bullet *b); extern int mod(int n, int x); +extern void addMissileExplosion(Bullet *b); extern Battle battle; extern Fighter *player; diff --git a/src/battle/effects.c b/src/battle/effects.c index b3f2015..591d56b 100644 --- a/src/battle/effects.c +++ b/src/battle/effects.c @@ -170,6 +170,62 @@ void addFighterExplosion(void) } } +void addMissileExplosion(Bullet *b) +{ + int i; + Effect *e; + SDL_Texture *t = getTexture("gfx/battle/explosion.png"); + + for (i = 0 ; i < 8 ; i++) + { + e = malloc(sizeof(Effect)); + memset(e, 0, sizeof(Effect)); + battle.effectTail->next = e; + battle.effectTail = e; + + e->type = EFFECT_TEXTURE; + + e->x = b->x; + e->y = b->y; + e->dx = (rand() % 25) - (rand() % 25); + e->dx *= 0.025; + e->dy = (rand() % 25) - (rand() % 25); + e->dy *= 0.025; + e->texture = t; + e->health = 0; + e->size = 32 + (rand() % 64); + e->r = 255; + + setRandomFlameHue(e); + + e->a = 128 + (rand() % 128); + + e->x -= e->size / 2; + e->y -= e->size / 2; + } + + for (i = 0 ; i < 24 ; i++) + { + e = malloc(sizeof(Effect)); + memset(e, 0, sizeof(Effect)); + battle.effectTail->next = e; + battle.effectTail = e; + + e->type = EFFECT_LINE; + e->x = b->x; + e->y = b->y; + e->dx = rand() % 64 - rand() % 64; + e->dx *= 0.1; + e->dy = rand() % 64 - rand() % 64; + e->dy *= 0.1; + e->health = FPS / 2; + + e->a = 128; + + setRandomFlameHue(e); + } +} + static void setRandomFlameHue(Effect *e) { e->r = 255; diff --git a/src/defs.h b/src/defs.h index cd535c4..a24f4fa 100644 --- a/src/defs.h +++ b/src/defs.h @@ -49,6 +49,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define BF_NONE 0 #define BF_ENGINE (2 << 0) #define BF_SYSTEM_DAMAGE (2 << 1) +#define BF_EXPLODES (2 << 2) #define FF_NONE 0 #define FF_NO_KILL (2 << 0) @@ -121,6 +122,7 @@ enum SND_EXPLOSION_2, SND_EXPLOSION_3, SND_EXPLOSION_4, + SND_MISSILE, SND_GUI_CLICK, SND_GUI_SELECT, SND_GUI_CLOSE, diff --git a/src/system/lookup.c b/src/system/lookup.c index 4120586..7cf5ff8 100644 --- a/src/system/lookup.c +++ b/src/system/lookup.c @@ -51,6 +51,7 @@ void initLookups(void) addLookup("SND_PARTICLE", SND_PARTICLE); addLookup("SND_PLASMA", SND_PLASMA); addLookup("SND_MAG", SND_MAG); + addLookup("SND_MISSILE", SND_MISSILE); addLookup("BT_PARTICLE", BT_PARTICLE); addLookup("BT_PLASMA", BT_PLASMA); @@ -62,6 +63,7 @@ void initLookups(void) addLookup("BF_NONE", BF_NONE); addLookup("BF_ENGINE", BF_ENGINE); addLookup("BF_SYSTEM_DAMAGE", BF_SYSTEM_DAMAGE); + addLookup("BF_EXPLODES", BF_EXPLODES); addLookup("MISSILE_ROCKET", MISSILE_ROCKET); addLookup("MISSILE_MISSILE", MISSILE_MISSILE); diff --git a/src/system/sound.c b/src/system/sound.c index 786fa08..50b880d 100644 --- a/src/system/sound.c +++ b/src/system/sound.c @@ -95,6 +95,7 @@ static void loadSounds(void) sounds[SND_PLASMA] = Mix_LoadWAV("sound/268344__julien-matthey__jm-noiz-laser-01.ogg"); sounds[SND_MAG] = Mix_LoadWAV("sound/18382__inferno__hvylas.ogg"); sounds[SND_PARTICLE] = Mix_LoadWAV("sound/77087__supraliminal__laser-short.ogg"); + sounds[SND_MISSILE] = Mix_LoadWAV("sound/18380__inferno__hvrl.ogg"); sounds[SND_EXPLOSION_1] = Mix_LoadWAV("sound/162265__qubodup__explosive.ogg"); sounds[SND_EXPLOSION_2] = Mix_LoadWAV("sound/207322__animationisaac__short-explosion.ogg"); sounds[SND_EXPLOSION_3] = Mix_LoadWAV("sound/254071__tb0y298__firework-explosion.ogg");