Files
PRC8/nwn/nwnprc/trunk/newspellbook/moi_mld_flmcncft.nss
Jaysyn904 73ce19db22 2026/02/21 Update
Updated all soulmelds to allow double chakra binds.
Updated Totemist soulmelds to allow double totem binds.
Pearl of Black Doubt should play nice with Vow of Poverty.
2026-02-21 19:25:00 -05:00

87 lines
3.4 KiB
Plaintext

/*
3/1/20 by Stratovarius
Flame Cincture Waist Bind
Energy attacks are not simply absorbed and dispersed, but instead the energy is bound within the belt, eagerly awaiting release.
You can release a blast of fire from your flame cincture equal 1d6 plus 1d6 per point of essentia invested in the meld. A successful Reflex save reduces the damage by half.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 18:56:13
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_FLAME_CINCTURE;
// Check if bound to Waist chakra (regular or double)
int nBoundToWaist = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_WAIST)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_WAIST)) == nMeldId)
nBoundToWaist = TRUE;
if (!nBoundToWaist) return; // Exit if not bound to Waist
object oTarget = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_FLAME_CINCTURE);
int nDice = 1 + nEssentia;
int nClass = GetMeldShapedClass(oMeldshaper, MELD_FLAME_CINCTURE);
int nMeldshaperLvl = GetMeldshaperLevel(oMeldshaper, nClass, MELD_FLAME_CINCTURE);
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_FLAME_CINCTURE);
// Exclude the caster from the damage effects
if (oTarget != oMeldshaper)
{
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oMeldshaper))
{
if (!PRCDoResistSpell(oMeldshaper, oTarget, nMeldshaperLvl))
{
int nDamage = d6(nDice);
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
if(nDamage > 0)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_FIRE), oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oTarget);
}
}
}
}
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_FLAME_CINCTURE);
int nDice = 1 + nEssentia;
int nClass = GetMeldShapedClass(oMeldshaper, MELD_FLAME_CINCTURE);
int nMeldshaperLvl = GetMeldshaperLevel(oMeldshaper, nClass, MELD_FLAME_CINCTURE);
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_FLAME_CINCTURE);
//Exclude the caster from the damage effects
if (oTarget != oMeldshaper)
{
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oMeldshaper))
{
if (!PRCDoResistSpell(oMeldshaper, oTarget, nMeldshaperLvl))
{
int nDamage = d6(nDice);
//Adjust damage based on Reflex Save, Evasion and Improved Evasion
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
if(nDamage > 0)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_FIRE), oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oTarget);
}
}
}
}
} */