@@ -944,7 +944,11 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
944
944
945
945
// Only degrade the equipment if Friendly Fire is ON or if it is (OFF && target is an enemy)
946
946
bool bShouldEquipmentDegrade = false ;
947
- if ( (svFlags & SV_FLAG_FRIENDLYFIRE) )
947
+ if ( parent && parent->behavior == &actDeathGhost )
948
+ {
949
+ bShouldEquipmentDegrade = false ;
950
+ }
951
+ else if ( (svFlags & SV_FLAG_FRIENDLYFIRE) )
948
952
{
949
953
// Friendly Fire is ON, equipment should always degrade, as hit will register
950
954
bShouldEquipmentDegrade = true ;
@@ -1243,11 +1247,35 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
1243
1247
// check for magic resistance...
1244
1248
// resistance stacks diminishingly
1245
1249
int resistance = 0 ;
1250
+ DamageGib dmgGib = DMG_DEFAULT;
1251
+ real_t damageMultiplier = 1.0 ;
1246
1252
if ( hit.entity )
1247
1253
{
1248
1254
resistance = Entity::getMagicResistance (hit.entity ->getStats ());
1249
-
1250
- // TODO - magic impact weak/strong messages?
1255
+ if ( (hit.entity ->behavior == &actMonster || hit.entity ->behavior == &actPlayer) && hitstats )
1256
+ {
1257
+ damageMultiplier = Entity::getDamageTableMultiplier (hit.entity , *hitstats, DAMAGE_TABLE_MAGIC);
1258
+ if ( damageMultiplier <= 0.75 )
1259
+ {
1260
+ dmgGib = DMG_WEAKEST;
1261
+ }
1262
+ else if ( damageMultiplier <= 0.85 )
1263
+ {
1264
+ dmgGib = DMG_WEAKER;
1265
+ }
1266
+ else if ( damageMultiplier >= 1.25 )
1267
+ {
1268
+ dmgGib = resistance == 0 ? DMG_STRONGEST : DMG_WEAKER;
1269
+ }
1270
+ else if ( damageMultiplier >= 1.15 )
1271
+ {
1272
+ dmgGib = resistance == 0 ? DMG_STRONGER : DMG_WEAKER;
1273
+ }
1274
+ else if ( resistance > 0 )
1275
+ {
1276
+ dmgGib = DMG_WEAKEST;
1277
+ }
1278
+ }
1251
1279
}
1252
1280
1253
1281
real_t spellbookDamageBonus = (my->actmagicSpellbookBonus / 100 .f );
@@ -1274,7 +1302,7 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
1274
1302
int damage = element->damage ;
1275
1303
damage += (spellbookDamageBonus * damage);
1276
1304
// damage += ((element->mana - element->base_mana) / static_cast<double>(element->overload_multiplier)) * element->damage;
1277
- damage *= Entity::getDamageTableMultiplier (hit. entity , *hitstats, DAMAGE_TABLE_MAGIC) ;
1305
+ damage *= damageMultiplier ;
1278
1306
damage /= (1 + (int )resistance);
1279
1307
hit.entity ->modHP (-damage);
1280
1308
for (i = 0 ; i < damage; i += 2 ) // Spawn a gib for every two points of damage.
@@ -1292,12 +1320,12 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
1292
1320
if ( !strcmp (hitstats->name , " " ) )
1293
1321
{
1294
1322
updateEnemyBar (parent, hit.entity , getMonsterLocalizedName (hitstats->type ).c_str (), hitstats->HP , hitstats->MAXHP ,
1295
- false , DamageGib::DMG_TODO );
1323
+ false , dmgGib );
1296
1324
}
1297
1325
else
1298
1326
{
1299
1327
updateEnemyBar (parent, hit.entity , hitstats->name , hitstats->HP , hitstats->MAXHP ,
1300
- false , DamageGib::DMG_TODO );
1328
+ false , dmgGib );
1301
1329
}
1302
1330
1303
1331
if ( hitstats->HP <= 0 && parent)
@@ -1406,7 +1434,7 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
1406
1434
}
1407
1435
1408
1436
1409
- damage *= Entity::getDamageTableMultiplier (hit. entity , *hitstats, DAMAGE_TABLE_MAGIC) ;
1437
+ damage *= damageMultiplier ;
1410
1438
damage /= (1 + (int )resistance);
1411
1439
hit.entity ->modHP (-damage);
1412
1440
for (i = 0 ; i < damage; i += 2 ) // Spawn a gib for every two points of damage.
@@ -1425,12 +1453,12 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
1425
1453
if ( !strcmp (hitstats->name , " " ) )
1426
1454
{
1427
1455
updateEnemyBar (parent, hit.entity , getMonsterLocalizedName (hitstats->type ).c_str (), hitstats->HP , hitstats->MAXHP ,
1428
- false , DamageGib::DMG_TODO );
1456
+ false , dmgGib );
1429
1457
}
1430
1458
else
1431
1459
{
1432
1460
updateEnemyBar (parent, hit.entity , hitstats->name , hitstats->HP , hitstats->MAXHP ,
1433
- false , DamageGib::DMG_TODO );
1461
+ false , dmgGib );
1434
1462
}
1435
1463
1436
1464
if ( hitstats->HP <= 0 && parent)
@@ -1621,7 +1649,7 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
1621
1649
}
1622
1650
damage = damage - local_rng.rand () % ((damage / 8 ) + 1 );
1623
1651
}
1624
- damage *= Entity::getDamageTableMultiplier (hit. entity , *hitstats, DAMAGE_TABLE_MAGIC) ;
1652
+ damage *= damageMultiplier ;
1625
1653
if ( parent )
1626
1654
{
1627
1655
Stat* casterStats = parent->getStats ();
@@ -1672,12 +1700,12 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
1672
1700
if ( !strcmp (hitstats->name , " " ) )
1673
1701
{
1674
1702
updateEnemyBar (parent, hit.entity , getMonsterLocalizedName (hitstats->type ).c_str (), hitstats->HP , hitstats->MAXHP ,
1675
- false , DamageGib::DMG_TODO );
1703
+ false , dmgGib );
1676
1704
}
1677
1705
else
1678
1706
{
1679
1707
updateEnemyBar (parent, hit.entity , hitstats->name , hitstats->HP , hitstats->MAXHP ,
1680
- false , DamageGib::DMG_TODO );
1708
+ false , dmgGib );
1681
1709
}
1682
1710
if ( oldHP > 0 && hitstats->HP <= 0 )
1683
1711
{
@@ -1940,7 +1968,7 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
1940
1968
}
1941
1969
// damage += ((element->mana - element->base_mana) / static_cast<double>(element->overload_multiplier)) * element->damage;
1942
1970
int oldHP = hitstats->HP ;
1943
- damage *= Entity::getDamageTableMultiplier (hit. entity , *hitstats, DAMAGE_TABLE_MAGIC) ;
1971
+ damage *= damageMultiplier ;
1944
1972
damage /= (1 + (int )resistance);
1945
1973
hit.entity ->modHP (-damage);
1946
1974
Entity* gib = spawnGib (hit.entity );
@@ -1956,12 +1984,12 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
1956
1984
if ( !strcmp (hitstats->name , " " ) )
1957
1985
{
1958
1986
updateEnemyBar (parent, hit.entity , getMonsterLocalizedName (hitstats->type ).c_str (), hitstats->HP , hitstats->MAXHP ,
1959
- false , DamageGib::DMG_TODO );
1987
+ false , dmgGib );
1960
1988
}
1961
1989
else
1962
1990
{
1963
1991
updateEnemyBar (parent, hit.entity , hitstats->name , hitstats->HP , hitstats->MAXHP ,
1964
- false , DamageGib::DMG_TODO );
1992
+ false , dmgGib );
1965
1993
}
1966
1994
if ( parent )
1967
1995
{
@@ -2166,7 +2194,7 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
2166
2194
}
2167
2195
// damage += ((element->mana - element->base_mana) / static_cast<double>(element->overload_multiplier)) * element->damage;
2168
2196
int oldHP = hitstats->HP ;
2169
- damage *= Entity::getDamageTableMultiplier (hit. entity , *hitstats, DAMAGE_TABLE_MAGIC) ;
2197
+ damage *= damageMultiplier ;
2170
2198
damage /= (1 + (int )resistance);
2171
2199
hit.entity ->modHP (-damage);
2172
2200
@@ -2180,12 +2208,12 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
2180
2208
if ( !strcmp (hitstats->name , " " ) )
2181
2209
{
2182
2210
updateEnemyBar (parent, hit.entity , getMonsterLocalizedName (hitstats->type ).c_str (), hitstats->HP , hitstats->MAXHP ,
2183
- false , DamageGib::DMG_TODO );
2211
+ false , dmgGib );
2184
2212
}
2185
2213
else
2186
2214
{
2187
2215
updateEnemyBar (parent, hit.entity , hitstats->name , hitstats->HP , hitstats->MAXHP ,
2188
- false , DamageGib::DMG_TODO );
2216
+ false , dmgGib );
2189
2217
}
2190
2218
if ( oldHP > 0 && hitstats->HP <= 0 && parent)
2191
2219
{
@@ -2721,7 +2749,7 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
2721
2749
int damage = element->damage ;
2722
2750
damage += (spellbookDamageBonus * damage);
2723
2751
// damage += ((element->mana - element->base_mana) / static_cast<double>(element->overload_multiplier)) * element->damage;
2724
- damage *= Entity::getDamageTableMultiplier (hit. entity , *hitstats, DAMAGE_TABLE_MAGIC) ;
2752
+ damage *= damageMultiplier ;
2725
2753
Stat* casterStats = nullptr ;
2726
2754
if ( parent )
2727
2755
{
@@ -2795,12 +2823,12 @@ void actMagicMissile(Entity* my) //TODO: Verify this function.
2795
2823
if ( !strcmp (hitstats->name , " " ) )
2796
2824
{
2797
2825
updateEnemyBar (parent, hit.entity , getMonsterLocalizedName (hitstats->type ).c_str (), hitstats->HP , hitstats->MAXHP ,
2798
- false , DamageGib::DMG_TODO );
2826
+ false , dmgGib );
2799
2827
}
2800
2828
else
2801
2829
{
2802
2830
updateEnemyBar (parent, hit.entity , hitstats->name , hitstats->HP , hitstats->MAXHP ,
2803
- false , DamageGib::DMG_TODO );
2831
+ false , dmgGib );
2804
2832
}
2805
2833
2806
2834
if ( hitstats->HP <= 0 && parent )
0 commit comments