PRC8/nwn/nwnprc/trunk/newspellbook/inv_blastessence.nss
Jaysyn904 2caeb8941c 2025/05/13 Update
Updated TF Shadowlord's prereq 2da.
Fixed CW Samurai's TWF levelup issue.
Added CW Samurai's skill 2DA back in.
Cleaned up ECL 2DA.
Fixed prereq bug with Imp Crit Eagle Claw.
Added Ability Focus feats for all Shapes, Essences & Invocations with DCs.
Fixed bug with 6th slot of crafting spells prereqs.
Added Reth Dekala HD to Initiator total.
Removed Dark Sun race files.
Updated all racial outsiders, monstrous humanoids, aberrations, giants, humanoids and fey to have the correct weapon & armor profs.
2025-05-13 23:05:31 -04:00

283 lines
8.3 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Warlock Eldritch Blast Essences
//:: inv_blastessence.nss
//::///////////////////////////////////////////////
/*
Handles the Essence invocations for Warlocks
*/
//:://////////////////////////////////////////////
//:: Created By: Fox
//:: Created On: Feb 29, 2008
//:://////////////////////////////////////////////
#include "inv_inc_invfunc"
void main()
{
object oPC = OBJECT_SELF;
int nSpellID = GetSpellId();
int bSecondEssenceActive = GetLocalInt(oPC, "UsingSecondEssence");
if(GetLocalInt(oPC, "BlastEssence") == nSpellID)
{
DeleteLocalInt(oPC, "BlastEssence");
DeleteLocalInt(oPC, "EssenceData");
FloatingTextStringOnCreature("*Blast Essence Removed*", oPC, FALSE);
return;
}
if(GetLocalInt(oPC, "BlastEssence2") == nSpellID)
{
DeleteLocalInt(oPC, "BlastEssence2");
DeleteLocalInt(oPC, "EssenceData2");
FloatingTextStringOnCreature("*Second Blast Essence Removed*", oPC, FALSE);
return;
}
int nLevel, nRace = -1, nDamage = DAMAGE_TYPE_MAGICAL;
string sEssenceData, sBlastEssence, sMes;
if(bSecondEssenceActive)
{
sBlastEssence = "BlastEssence2";
sEssenceData = "EssenceData2";
}
else
{
sBlastEssence = "BlastEssence";
sEssenceData = "EssenceData";
}
switch(nSpellID)
{
case INVOKE_LORD_OF_ALL_ESSENCES:
if(bSecondEssenceActive)
{
DeleteLocalInt(oPC, "UsingSecondEssence");
sMes = "*Modifying First Essence*";
}
else
{
SetLocalInt(oPC, "UsingSecondEssence", TRUE);
sMes = "*Modifying Second Essence*";
}
break;
case INVOKE_FRIGHTFUL_BLAST:
nLevel = 2;
sMes = "*Frightful Blast Essence Applied*";
break;
case INVOKE_HAMMER_BLAST:
nLevel = 2;
sMes = "*Hammer Blast Essence Applied*";
break;
case INVOKE_SICKENING_BLAST:
nLevel = 2;
sMes = "*Sickening Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_ABERRATION:
nLevel = 3;
nRace = RACIAL_TYPE_ABERRATION;
sMes = "*Abberation Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_BEAST:
nLevel = 3;
nRace = RACIAL_TYPE_BEAST;
sMes = "*Beast Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_CONSTRUCT:
nLevel = 3;
nRace = RACIAL_TYPE_CONSTRUCT;
sMes = "*Construct Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_DRAGON:
nLevel = 3;
nRace = RACIAL_TYPE_DRAGON;
sMes = "*Dragon Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_DWARF:
nLevel = 3;
nRace = RACIAL_TYPE_DWARF;
sMes = "*Dwarf Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_ELEMENTAL:
nLevel = 3;
nRace = RACIAL_TYPE_ELEMENTAL;
sMes = "*Elemental Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_ELF:
nLevel = 3;
nRace = RACIAL_TYPE_ELF;
sMes = "*Elf Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_FEY:
nLevel = 3;
nRace = RACIAL_TYPE_FEY;
sMes = "*Fey Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_GIANT:
nLevel = 3;
nRace = RACIAL_TYPE_GIANT;
sMes = "*Giant Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_GOBLINOID:
nLevel = 3;
nRace = RACIAL_TYPE_HUMANOID_GOBLINOID;
sMes = "*Goblinoid Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_GNOME:
nLevel = 3;
nRace = RACIAL_TYPE_GNOME;
sMes = "*Gnome Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_HALFLING:
nLevel = 3;
nRace = RACIAL_TYPE_HALFLING;
sMes = "*Halfling Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_HUMAN:
nLevel = 3;
nRace = RACIAL_TYPE_HUMAN;
sMes = "*Human Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_MONSTROUS:
nLevel = 3;
nRace = RACIAL_TYPE_HUMANOID_MONSTROUS;
sMes = "*Monstrous Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_ORC:
nLevel = 3;
nRace = RACIAL_TYPE_HUMANOID_ORC;
sMes = "*Orc Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_OUTSIDER:
nLevel = 3;
nRace = RACIAL_TYPE_OUTSIDER;
sMes = "*Outsider Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_PLANT:
nLevel = 3;
nRace = RACIAL_TYPE_PLANT;
sMes = "*Plant Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_REPTILIAN:
nLevel = 3;
nRace = RACIAL_TYPE_HUMANOID_REPTILIAN;
sMes = "*Reptilian Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_SHAPECHANGER:
nLevel = 3;
nRace = RACIAL_TYPE_SHAPECHANGER;
sMes = "*Shapechanger Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_UNDEAD:
nLevel = 3;
nRace = RACIAL_TYPE_UNDEAD;
sMes = "*Undead Blast Essence Applied*";
break;
case INVOKE_BANEFUL_BLAST_VERMIN:
nLevel = 3;
nRace = RACIAL_TYPE_VERMIN;
sMes = "*Vermin Blast Essence Applied*";
break;
case INVOKE_BESHADOWED_BLAST:
nLevel = 4;
sMes = "*Beshadowed Blast Essence Applied*";
break;
case INVOKE_BRIMSTONE_BLAST:
nLevel = 3;
nDamage = DAMAGE_TYPE_FIRE;
sMes = "*Brimstone Blast Essence Applied*";
break;
case INVOKE_HELLRIME_BLAST:
nLevel = 4;
nDamage = DAMAGE_TYPE_COLD;
sMes = "*Hellrime Blast Essence Applied*";
break;
case INVOKE_BEWITCHING_BLAST:
nLevel = 4;
sMes = "*Bewitching Blast Essence Applied*";
break;
case INVOKE_HINDERING_BLAST:
nLevel = 4;
sMes = "*Hindering Blast Essence Applied*";
break;
case INVOKE_NOXIOUS_BLAST:
nLevel = 6;
sMes = "*Noxious Blast Essence Applied*";
break;
case INVOKE_PENETRATING_BLAST:
nLevel = 6;
sMes = "*Penetrating Blast Essence Applied*";
break;
case INVOKE_VITRIOLIC_BLAST:
nLevel = 6;
nDamage = DAMAGE_TYPE_ACID;
sMes = "*Vitriolic Blast Essence Applied*";
break;
case INVOKE_BINDING_BLAST:
nLevel = 7;
sMes = "*Binding Blast Essence Applied*";
break;
case INVOKE_UTTERDARK_BLAST:
nLevel = 8;
nDamage = DAMAGE_TYPE_NEGATIVE;
sMes = "*Utterdark Blast Essence Applied*";
break;
case INVOKE_CORRUPTING_BLAST:
nLevel = 1;
sMes = "*Corrupting Blast Applied*";
break;
}
if(nLevel)
{
nRace++;//bias race info
//Essence data format:
// 8 bits: [24...31] : ***UNUSED / IGNORED***
// 8 bits: [16...23] : bane race (biased by +1 == 0 if none)
// 12 bits: [ 4...15] : damage type (magical by default)
// 4 bits: [ 0... 3] : essence level
int nData = ((nRace & 0xFF) << 16) |
((nDamage & 0xFFF) << 4) |
(nLevel & 0xF);
SetLocalInt(oPC, sBlastEssence, nSpellID);
SetLocalInt(oPC, sEssenceData, nData);
}
FloatingTextStringOnCreature(sMes, oPC, FALSE);
}