Browse Source

Cleanup for weapon explosions

pull/7573/head
staphen 1 year ago
parent
commit
1f6b94459a
No known key found for this signature in database
GPG Key ID: E6D757EEF0CE235F
  1. 25
      Source/missiles.cpp
  2. 21
      Source/player.cpp

25
Source/missiles.cpp

@ -1974,8 +1974,14 @@ void AddMissileExplosion(Missile &missile, AddMissileParameter &parameter)
void AddWeaponExplosion(Missile &missile, AddMissileParameter &parameter)
{
missile.var2 = parameter.dst.x;
if (parameter.dst.x == 1)
bool isFireExplosion = parameter.dst.x == 1;
if (missile._midam > 0) {
DamageType damageType = isFireExplosion ? DamageType::Fire : DamageType::Lightning;
CheckMissileCol(missile, damageType, missile._midam, missile._midam, false, missile.position.tile, true);
}
if (isFireExplosion)
missile.setAnimation(MissileGraphicID::MagmaBallExplosion);
else
missile.setAnimation(MissileGraphicID::ChargedBolt);
@ -3520,21 +3526,6 @@ void ProcessWeaponExplosion(Missile &missile)
missile.duration--;
const Player &player = Players[missile._misource];
int mind;
int maxd;
DamageType damageType;
if (missile.var2 == 1) {
// BUGFIX: damage of missile should be encoded in missile struct; player can be dead/have left the game before missile arrives.
mind = player._pIFMinDam;
maxd = player._pIFMaxDam;
damageType = DamageType::Fire;
} else {
// BUGFIX: damage of missile should be encoded in missile struct; player can be dead/have left the game before missile arrives.
mind = player._pILMinDam;
maxd = player._pILMaxDam;
damageType = DamageType::Lightning;
}
CheckMissileCol(missile, damageType, mind, maxd, false, missile.position.tile, false);
if (missile.var1 == 0) {
missile._mlid = AddLight(missile.position.tile, 9);
} else {

21
Source/player.cpp

@ -783,15 +783,6 @@ bool DoAttack(Player &player)
}
}
if (!gbIsHellfire || !HasAllOf(player._pIFlags, ItemSpecialEffect::FireDamage | ItemSpecialEffect::LightningDamage)) {
if (HasAnyOf(player._pIFlags, ItemSpecialEffect::FireDamage)) {
AddMissile(position, { 1, 0 }, Direction::South, MissileID::WeaponExplosion, TARGET_MONSTERS, player, 0, 0);
}
if (HasAnyOf(player._pIFlags, ItemSpecialEffect::LightningDamage)) {
AddMissile(position, { 2, 0 }, Direction::South, MissileID::WeaponExplosion, TARGET_MONSTERS, player, 0, 0);
}
}
if (monster != nullptr) {
didhit = PlrHitMonst(player, *monster);
} else if (PlayerAtPosition(position) != nullptr && !player.friendlyMode) {
@ -802,6 +793,18 @@ bool DoAttack(Player &player)
didhit = PlrHitObj(player, *object);
}
}
if (!gbIsHellfire || !HasAllOf(player._pIFlags, ItemSpecialEffect::FireDamage | ItemSpecialEffect::LightningDamage)) {
if (HasAnyOf(player._pIFlags, ItemSpecialEffect::FireDamage)) {
int elementalDamage = didhit ? RandomIntBetween(player._pIFMinDam, player._pIFMaxDam) : 0;
AddMissile(position, { 1, 0 }, Direction::South, MissileID::WeaponExplosion, TARGET_MONSTERS, player, elementalDamage, 0);
}
if (HasAnyOf(player._pIFlags, ItemSpecialEffect::LightningDamage)) {
int elementalDamage = didhit ? RandomIntBetween(player._pILMinDam, player._pILMaxDam) : 0;
AddMissile(position, { 2, 0 }, Direction::South, MissileID::WeaponExplosion, TARGET_MONSTERS, player, elementalDamage, 0);
}
}
if (player.CanCleave()) {
// playing as a class/weapon with cleave
position = player.position.tile + Right(player._pdir);

Loading…
Cancel
Save