NWN2Wiki
Register
Advertisement
Is hellball
Hellball
Spell Information
Spell level : Innate level: Epic
School : Evocation
Components : Verbal and Somatic
Range : Long
Target/Area : Huge
Duration : Instant
Save : Reflex 1/2 (DC +5)
Spell resistance : No

Description[]

You unleash a massive blast of energy that detonates upon all in the AoE, dealing 10d6 fire, 10d6 acid, 10d6 electrical and 10d6 sonic damage. The Hellball ignores Evasion and Improved Evasion.

Gameplay notes[]

  • The in-game description incorrectly states that this spell is subject to spell resistance.
  • The NWN2 version functions very differently from the NWN1 version. It is possible to restore the spell to its former glory and to fix some bugs along the way. Check the NWN2 toolset for the NWN1 version (X2_S2_HELLBALL) and NWN2 version (nx_s2_hellball).

The caster is supposed to take 10d6 negative energy damage upon casting if the switch MODULE_SWITCH_EPIC_SPELLS_HURT_CASTER has been enabled for the module:

Module load script (k_mod_load for Mask of Betrayer):

SetModuleSwitch (MODULE_SWITCH_EPIC_SPELLS_HURT_CASTER, TRUE);

nx_s2_hellball:

if (GetModuleSwitchValue(MODULE_SWITCH_EPIC_SPELLS_HURT_CASTER)) {
  ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_HIT_SPELL_INFLICT_6), OBJECT_SELF);
  ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(10), DAMAGE_TYPE_NEGATIVE), OBJECT_SELF);
}

If the spell deals more than 50 damage to a target the target is knocked down:

The problem here is the actual damage dealt calculation. Just because the script calculates 120 points damage doesn't mean the target will actually suffer 120 points damage due to various immunities, damage reductions and resistances. The script needs to check the ACTUAL damage dealt by each particular energy type (except negative damage) and then check if total actual damage dealt exceeds 50. GetTotalDamageDealt() or GetDamageDealtByType() can be used for this purpose, but the damage needs to be checked after each particular damage is dealt, because the game engine only remembers last dealt damage. So several loops are required, during the final loop total damage is checked and the target is knocked down (or not, depending on damage amount):

void CheckKnockdown(int nDamageAcid, int nDamageElectrical, int nDamageFire, int nDamageSonic, int nTotal, int nCurrent) {

  if(nCurrent==DAMAGE_TYPE_ACID) {
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamageAcid, nCurrent), OBJECT_SELF);
    nTotal+=GetDamageDealtByType(nCurrent);
    nCurrent=DAMAGE_TYPE_ELECTRICAL;
  } else if(nCurrent==DAMAGE_TYPE_ELECTRICAL) {
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamageElectrical, nCurrent), OBJECT_SELF);
    nTotal+=GetDamageDealtByType(nCurrent);
    nCurrent=DAMAGE_TYPE_FIRE;
  } else if(nCurrent==DAMAGE_TYPE_FIRE) {
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamageFire, nCurrent), OBJECT_SELF);
    nTotal+=GetDamageDealtByType(nCurrent);
    nCurrent=DAMAGE_TYPE_SONIC;
  } else {
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamageSonic, nCurrent),OBJECT_SELF);
    nTotal+=GetDamageDealtByType(nCurrent);
    nCurrent=0;
  }

  if (!nCurrent) {
    if(nTotal>50) {
      ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectKnockdown(), OBJECT_SELF,3.0f); 
      return;
    }
  } 

  CheckKnockdown(nDamageAcid, nDamageElectrical,nDamageFire,nDamageSonic,nTotal,nCurrent);

}

The function above is called by the affected targets themselves later in the script:

DelayCommand(fDelay+0.0f,AssignCommand(oTarget, CheckKnockdown(nDamageAcid,nDamageElectrical,nDamageFire,nDamageSonic,0,DAMAGE_TYPE_ACID)));

This spell is useful against creatures with resistance to a single element and weakness to other elements (such as Red dragons). However, it does less damage against a creature with some level of resistance to all elements. For example, a ring of elemental resistance decreases the total damage by 60, while a ring of universal energy resistance decreases by a whopping 150 (leaving the average damage at a miniscule 25, 10 points less than a fireball cast by a level 10+ caster) If the ring instead gave total immunity to a single element, the damage would only be decreased by 20%.

This spell's utility is decreased on Hardcore mode and Very Difficult mode, mainly due to its large radius which increases the chance of it hitting allies.

See also epic spell.

Acquisition[]

To learn this spell, a character must take the feat Epic Spell: Hellball.

Type of feat: Epic

Prerequisite: Ability to cast 9th level spells1, Spellcraft 30 ranks

Classes: Druid, Wizard, Sorcerer, Spirit Shaman, Warlock2, Arcane Scholar of Candlekeep, Arcane Trickster, Eldritch Knight, Pale Master, Red Wizard, Stormlord

Notes[]

1 Any level 9 spell qualifies, regardless of class. Any dark invocation also qualifies, regardless of its equivalent spell level.

2 This feat may be taken on a Warlock level if, and only if, the character is able to cast dark invocations by virtue of actual Warlock levels alone (Hellfire Warlock levels do not count towards satisfying this requirement). This is because there are actually two feats corresponding to this epic spell: one for warlocks and one for non-warlocks. It should be noted that no character will ever be eligible for both feats due to the character level cap of 30.

Advertisement