Files
PRC8/nwn/nwnprc/trunk/newspellbook/moi_mld_dsplcrft.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

92 lines
3.7 KiB
Plaintext

/*
30/12/19 by Stratovarius
Displacer Mantle
Descriptors: None
Classes: Totemist
Chakra: Shoulders (totem)
Saving Throw: None
Chakra Bind (Totem)
A pair of tentacles extends from your shoulder blades. They end in pads ridged with sharp horn, allowing you to lash out even at distant foes to batter and tear them.
As a full-round action, you can make two tentacle attacks using your full base attack bonus. Each tentacle deals 1d4 points of damage plus your Strength modifier. Every point of essentia invested in the displacer mantle grants you a +1 enhancement bonus on damage rolls made with the tentacle attacks.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 19:12:16
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
#include "prc_inc_combat"
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_DISPLACER_MANTLE;
// Check if bound to Totem chakra (regular or double)
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (!nBoundToTotem) return; // Exit if not bound to Totem
object oTarget = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_DISPLACER_MANTLE);
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper);
// First tentacle attack
int nAtk = GetAttackRoll(oTarget, oMeldshaper, oWeap);
if (nAtk > 0)
{
int nDam = d4() + GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper) + nEssentia;
int nDamType = GetWeaponDamageType(oWeap);
effect eLink = EffectLinkEffects(EffectDamage(nDam * nAtk, nDamType), EffectVisualEffect(VFX_COM_HIT_ACID));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
}
// Second tentacle attack
nAtk = GetAttackRoll(oTarget, oMeldshaper, oWeap);
if (nAtk > 0)
{
int nDam = d4() + GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper) + nEssentia;
int nDamType = GetWeaponDamageType(oWeap);
effect eLink = EffectLinkEffects(EffectDamage(nDam * nAtk, nDamType), EffectVisualEffect(VFX_COM_HIT_ACID));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
}
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_BASILISK_MASK);
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper);
int nAtk = GetAttackRoll(oTarget, oMeldshaper, oWeap);
if (nAtk > 0)
{
int nDam = d4() + GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper) + nEssentia;
int nDamType = GetWeaponDamageType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper));
effect eLink = EffectLinkEffects(EffectDamage(nDam * nAtk, nDamType), EffectVisualEffect(VFX_COM_HIT_ACID));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
}
nAtk = GetAttackRoll(oTarget, oMeldshaper, oWeap);
if (nAtk > 0)
{
int nDam = d4() + GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper) + nEssentia;
int nDamType = GetWeaponDamageType(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper));
effect eLink = EffectLinkEffects(EffectDamage(nDam * nAtk, nDamType), EffectVisualEffect(VFX_COM_HIT_ACID));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
}
} */