From e7f5c3825b8fe5e74e225fbf0e4af679d9967ab5 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Sun, 4 Sep 2011 18:24:54 +0200 Subject: [PATCH] Simplify spread bullet code. There were three flags, WF_STRAIGHT, WF_THIN_SPREAD and WF_WIDE_SPREAD, when only one flag, WF_SPREAD suffices. This makes the code simpler and gets rid of some duplication. --- code/bullets.cpp | 41 +++++++++++++----------------- code/collectable.cpp | 3 +-- code/defs.h | 4 +-- code/player.cpp | 60 +++++++++----------------------------------- code/weapons.cpp | 44 ++++++++++++++++---------------- data/weapons.dat | 36 +++++++++++++------------- 6 files changed, 71 insertions(+), 117 deletions(-) diff --git a/code/bullets.cpp b/code/bullets.cpp index 5f1d242..77f6a8c 100644 --- a/code/bullets.cpp +++ b/code/bullets.cpp @@ -170,7 +170,22 @@ void fireBullet(object *attacker, int weaponType) break; } - if (theWeapon->flags & WF_STRAIGHT) + if (theWeapon->flags & WF_SPREAD && theWeapon->ammo[0] >= 3) + { + addBullet(theWeapon, attacker, y * 1, -2); + + if(theWeapon->ammo[0] != 4) + addBullet(theWeapon, attacker, y * 3, 0); + + if(theWeapon->ammo[0] != 3) + { + addBullet(theWeapon, attacker, y * 2, -1); + addBullet(theWeapon, attacker, y * 4, 1); + } + + addBullet(theWeapon, attacker, y * 5, 2); + } + else { switch (theWeapon->ammo[0]) { @@ -198,28 +213,6 @@ void fireBullet(object *attacker, int weaponType) break; } } - else if (theWeapon->flags & WF_THIN_SPREAD) - { - addBullet(theWeapon, attacker, y * 2, -1); - if (theWeapon->ammo[0] == 3) - { - addBullet(theWeapon, attacker, y * 3, 0); - } - else - { - addBullet(theWeapon, attacker, y * 2, 0); - addBullet(theWeapon, attacker, y * 4, 0); - } - addBullet(theWeapon, attacker, y * 4, 1); - } - else if (theWeapon->flags & WF_WIDE_SPREAD) - { - addBullet(theWeapon, attacker, y * 1, -2); - addBullet(theWeapon, attacker, y * 2, -1); - addBullet(theWeapon, attacker, y * 3, 0); - addBullet(theWeapon, attacker, y * 4, 1); - addBullet(theWeapon, attacker, y * 5, 2); - } // Reset the weapon reload time. Double it if it is not friendly or a boss or Kline attacker->reload[weaponType] = theWeapon->reload[0]; @@ -539,7 +532,7 @@ void doBullets() addExplosion(bullet->x, bullet->y, E_TINY_EXPLOSION); } - if ((bullet->flags & WF_AIMED) || (bullet->flags & WF_THIN_SPREAD)) + if ((bullet->flags & WF_AIMED) || (bullet->flags & WF_SPREAD)) { blit(bullet->image[0], (int)(bullet->x - bullet->dx), (int)(bullet->y - bullet->dy)); } diff --git a/code/collectable.cpp b/code/collectable.cpp index a17e418..2f71d06 100644 --- a/code/collectable.cpp +++ b/code/collectable.cpp @@ -327,8 +327,7 @@ void doCollectables() weapon[1].damage = 5; weapon[1].reload[0] = 7; - weapon[1].flags &= ~(WF_STRAIGHT | WF_THIN_SPREAD); - weapon[1].flags |= WF_WIDE_SPREAD; + weapon[1].flags |= WF_SPREAD; sprintf(temp, "Picked up a Super Charge!!"); diff --git a/code/defs.h b/code/defs.h index ab36885..91c18fe 100644 --- a/code/defs.h +++ b/code/defs.h @@ -135,9 +135,7 @@ enum { }; // Weapon flags -#define WF_STRAIGHT 1 -#define WF_THIN_SPREAD 2 -#define WF_WIDE_SPREAD 4 +#define WF_SPREAD 4 #define WF_SCATTER 8 #define WF_VARIABLE_SPEED 16 #define WF_HOMING 32 diff --git a/code/player.cpp b/code/player.cpp index 4da3aa3..bb79300 100644 --- a/code/player.cpp +++ b/code/player.cpp @@ -130,58 +130,22 @@ void doPlayer() if ((engine.keyState[SDLK_LSHIFT]) || (engine.keyState[SDLK_RSHIFT])) { - if (player.ammo[0] < 1) + int w = player.ammo[0] > 0; + + if(weapon[w].ammo[0] >= 3) { - if (weapon[0].ammo[0] == 3) + weapon[w].flags ^= WF_SPREAD; + + if(weapon[w].flags & WF_SPREAD) { - if (weapon[0].flags & WF_THIN_SPREAD) - { - weapon[0].flags &= ~WF_THIN_SPREAD; - weapon[0].flags |= WF_STRAIGHT; - setInfoLine("Weapon set to Concentrate", FONT_WHITE); - } - else - { - weapon[0].flags &= ~WF_STRAIGHT; - weapon[0].flags |= WF_THIN_SPREAD; - setInfoLine("Weapon set to Spread", FONT_WHITE); - } + setInfoLine("Weapon set to Spread", FONT_WHITE); + } + else + { + setInfoLine("Weapon set to Concentrate", FONT_WHITE); } } - else - { - if (weapon[1].ammo[0] == 3 || weapon[1].ammo[0] == 4) - { - if (weapon[1].flags & WF_THIN_SPREAD) - { - weapon[1].flags &= ~WF_THIN_SPREAD; - weapon[1].flags |= WF_STRAIGHT; - setInfoLine("Weapon set to Concentrate", FONT_WHITE); - } - else - { - weapon[1].flags &= ~WF_STRAIGHT; - weapon[1].flags |= WF_THIN_SPREAD; - setInfoLine("Weapon set to Spread", FONT_WHITE); - } - } - else if (weapon[1].ammo[0] == 5) - { - if (weapon[1].flags & WF_WIDE_SPREAD) - { - weapon[1].flags &= ~(WF_THIN_SPREAD | WF_WIDE_SPREAD); - weapon[1].flags |= WF_STRAIGHT; - setInfoLine("Weapon set to Concentrate", FONT_WHITE); - } - else - { - weapon[1].flags &= (WF_THIN_SPREAD | WF_STRAIGHT); - weapon[1].flags |= WF_WIDE_SPREAD; - setInfoLine("Weapon set to Spread", FONT_WHITE); - } - } - } - + engine.keyState[SDLK_LSHIFT] = engine.keyState[SDLK_RSHIFT] = 0; } diff --git a/code/weapons.cpp b/code/weapons.cpp index d6c77a1..f1ea76e 100644 --- a/code/weapons.cpp +++ b/code/weapons.cpp @@ -114,7 +114,7 @@ void initWeapons() weapon[W_PLAYER_WEAPON].speed = 10; weapon[W_PLAYER_WEAPON].imageIndex[0] = 0; weapon[W_PLAYER_WEAPON].imageIndex[1] = 0; - weapon[W_PLAYER_WEAPON].flags = WF_STRAIGHT; + weapon[W_PLAYER_WEAPON].flags = 0; // Nor is this one! weapon[W_PLAYER_WEAPON2] = weapon[W_PLAYER_WEAPON]; @@ -127,7 +127,7 @@ void initWeapons() weapon[W_SINGLE_SHOT].speed = 10; weapon[W_SINGLE_SHOT].imageIndex[0] = 0; weapon[W_SINGLE_SHOT].imageIndex[1] = 1; - weapon[W_SINGLE_SHOT].flags = WF_STRAIGHT; + weapon[W_SINGLE_SHOT].flags = 0; // Double Shot weapon[W_DOUBLE_SHOT] = weapon[W_SINGLE_SHOT]; @@ -143,8 +143,8 @@ void initWeapons() weapon[W_ROCKETS].damage = 15; weapon[W_ROCKETS].reload[0] = 45; weapon[W_ROCKETS].speed = 20; - weapon[W_ROCKETS].flags = WF_STRAIGHT; - weapon[W_ROCKETS].imageIndex[0] = 2; + weapon[W_ROCKETS].flags = 0; + weapon[W_ROCKETS].imageIndex[0] = 2; weapon[W_ROCKETS].imageIndex[1] = 3; // Double Rockets (uses ROCKETS as base) @@ -158,7 +158,7 @@ void initWeapons() weapon[W_MICRO_ROCKETS].damage = 3; weapon[W_MICRO_ROCKETS].reload[0] = 30; weapon[W_MICRO_ROCKETS].speed = 15; - weapon[W_MICRO_ROCKETS].flags = WF_STRAIGHT | WF_VARIABLE_SPEED; + weapon[W_MICRO_ROCKETS].flags = WF_VARIABLE_SPEED; weapon[W_MICRO_ROCKETS].imageIndex[0] = 2; weapon[W_MICRO_ROCKETS].imageIndex[1] = 3; @@ -168,7 +168,7 @@ void initWeapons() weapon[W_ENERGYRAY].damage = 1; weapon[W_ENERGYRAY].reload[0] = 25; // reload for energy ray is never used weapon[W_ENERGYRAY].speed = 15; - weapon[W_ENERGYRAY].flags = WF_STRAIGHT; + weapon[W_ENERGYRAY].flags = 0; // Laser weapon[W_LASER].id = WT_LASER; @@ -178,7 +178,7 @@ void initWeapons() weapon[W_LASER].speed = 10; weapon[W_LASER].imageIndex[0] = 1; weapon[W_LASER].imageIndex[1] = 1; - weapon[W_LASER].flags = WF_STRAIGHT; + weapon[W_LASER].flags = 0; // Beam up weapon weapon[W_CHARGER].id = WT_CHARGER; @@ -186,25 +186,25 @@ void initWeapons() weapon[W_CHARGER].damage = 1; weapon[W_CHARGER].reload[0] = 0; weapon[W_CHARGER].speed = 12; - weapon[W_CHARGER].flags = WF_STRAIGHT; - weapon[W_CHARGER].imageIndex[0] = 33; + weapon[W_CHARGER].flags = 0; + weapon[W_CHARGER].imageIndex[0] = 33; weapon[W_CHARGER].imageIndex[1] = 34; - // Homing missile + // Homing missile weapon[W_HOMING_MISSILE].id = WT_ROCKET; weapon[W_HOMING_MISSILE].ammo[0] = 1; weapon[W_HOMING_MISSILE].damage = 15; weapon[W_HOMING_MISSILE].reload[0] = 35; weapon[W_HOMING_MISSILE].speed = 10; - weapon[W_HOMING_MISSILE].flags = WF_STRAIGHT | WF_HOMING; - weapon[W_HOMING_MISSILE].imageIndex[0] = 4; + weapon[W_HOMING_MISSILE].flags = WF_HOMING; + weapon[W_HOMING_MISSILE].imageIndex[0] = 4; weapon[W_HOMING_MISSILE].imageIndex[1] = 4; - // Double homing missile + // Double homing missile weapon[W_DOUBLE_HOMING_MISSILES] = weapon[W_HOMING_MISSILE]; - weapon[W_DOUBLE_HOMING_MISSILES].ammo[0] = 2; - weapon[W_DOUBLE_HOMING_MISSILES].reload[0] = 65; - weapon[W_DOUBLE_HOMING_MISSILES].imageIndex[0] = 4; + weapon[W_DOUBLE_HOMING_MISSILES].ammo[0] = 2; + weapon[W_DOUBLE_HOMING_MISSILES].reload[0] = 65; + weapon[W_DOUBLE_HOMING_MISSILES].imageIndex[0] = 4; weapon[W_DOUBLE_HOMING_MISSILES].imageIndex[1] = 4; // Micro homing missiles @@ -213,8 +213,8 @@ void initWeapons() weapon[W_MICRO_HOMING_MISSILES].damage = 12; weapon[W_MICRO_HOMING_MISSILES].reload[0] = 65; weapon[W_MICRO_HOMING_MISSILES].speed = 3; - weapon[W_MICRO_HOMING_MISSILES].flags = WF_STRAIGHT | WF_HOMING; - weapon[W_MICRO_HOMING_MISSILES].imageIndex[0] = 4; + weapon[W_MICRO_HOMING_MISSILES].flags = WF_HOMING; + weapon[W_MICRO_HOMING_MISSILES].imageIndex[0] = 4; weapon[W_MICRO_HOMING_MISSILES].imageIndex[1] = 4; // Aimed plasma bolt (2x damage) @@ -223,7 +223,7 @@ void initWeapons() weapon[W_AIMED_SHOT].damage = 2; weapon[W_AIMED_SHOT].reload[0] = 15; weapon[W_AIMED_SHOT].speed = 0; - weapon[W_AIMED_SHOT].flags = WF_STRAIGHT | WF_AIMED; + weapon[W_AIMED_SHOT].flags = WF_AIMED; weapon[W_AIMED_SHOT].imageIndex[0] = 33; weapon[W_AIMED_SHOT].imageIndex[1] = 34; @@ -233,7 +233,7 @@ void initWeapons() weapon[W_SPREADSHOT].damage = 1; weapon[W_SPREADSHOT].reload[0] = 10; weapon[W_SPREADSHOT].speed = 10; - weapon[W_SPREADSHOT].flags = WF_THIN_SPREAD; + weapon[W_SPREADSHOT].flags = WF_SPREAD; weapon[W_SPREADSHOT].imageIndex[0] = 0; weapon[W_SPREADSHOT].imageIndex[1] = 1; @@ -243,7 +243,7 @@ void initWeapons() weapon[W_IONCANNON].damage = 1; weapon[W_IONCANNON].reload[0] = 2; weapon[W_IONCANNON].speed = 10; - weapon[W_IONCANNON].flags = WF_STRAIGHT | WF_DISABLE | WF_AIMED; + weapon[W_IONCANNON].flags = WF_DISABLE | WF_AIMED; weapon[W_IONCANNON].imageIndex[0] = 35; weapon[W_IONCANNON].imageIndex[1] = 35; @@ -253,7 +253,7 @@ void initWeapons() weapon[W_DIRSHOCKMISSILE].damage = 20; weapon[W_DIRSHOCKMISSILE].reload[0] = 60; weapon[W_DIRSHOCKMISSILE].speed = 0; - weapon[W_DIRSHOCKMISSILE].flags = WF_STRAIGHT | WF_AIMED | WF_TIMEDEXPLOSION; + weapon[W_DIRSHOCKMISSILE].flags = WF_AIMED | WF_TIMEDEXPLOSION; weapon[W_DIRSHOCKMISSILE].imageIndex[0] = 4; weapon[W_DIRSHOCKMISSILE].imageIndex[1] = 4; diff --git a/data/weapons.dat b/data/weapons.dat index 13870e7..fb01333 100644 --- a/data/weapons.dat +++ b/data/weapons.dat @@ -1,21 +1,21 @@ -1 1 1 15 10 0 0 1 -1 1 1 15 10 0 0 1 -1 1 1 15 10 0 1 1 -1 2 1 15 10 0 1 1 -1 3 1 15 10 0 1 1 -2 1 15 45 20 2 3 1 -2 2 15 80 20 2 3 1 -2 5 3 30 15 2 3 17 -3 255 1 25 15 0 0 1 -4 1 3 1 10 1 1 1 -6 1 1 0 12 33 34 1 -2 1 15 35 10 4 4 33 -2 2 15 65 10 4 4 33 -2 5 12 65 3 4 4 33 -7 1 2 15 0 33 34 513 -8 3 1 10 10 0 1 2 -1 1 1 2 10 35 35 1537 -2 5 20 60 0 4 4 2561 +1 1 1 15 10 0 0 0 +1 1 1 15 10 0 0 0 +1 1 1 15 10 0 1 0 +1 2 1 15 10 0 1 0 +1 3 1 15 10 0 1 0 +2 1 15 45 20 2 3 0 +2 2 15 80 20 2 3 0 +2 5 3 30 15 2 3 16 +3 255 1 25 15 0 0 0 +4 1 3 1 10 1 1 0 +6 1 1 0 12 33 34 0 +2 1 15 35 10 4 4 32 +2 2 15 65 10 4 4 32 +2 5 12 65 3 4 4 32 +7 1 2 15 0 33 34 512 +8 3 1 10 10 0 1 4 +1 1 1 2 10 35 35 1536 +2 5 20 60 0 4 4 2560 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0