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.
This commit is contained in:
parent
45664437e1
commit
e7f5c3825b
|
@ -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));
|
||||
}
|
||||
|
|
|
@ -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!!");
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue