Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
92 lines
4.7 KiB
Plaintext
92 lines
4.7 KiB
Plaintext
/*
|
||
23/10/20 by Stratovarius
|
||
|
||
Soulspark Familiar
|
||
|
||
Descriptors: None
|
||
Classes: Incarnate, soulborn
|
||
Chakra: Brow, crown, or throat
|
||
Saving Throw: None
|
||
|
||
A spark of light hovers over your shoulder. While featureless, it seems to emote using its own brilliance, ranging from an angry burn to a contented glow.
|
||
|
||
You shape a small mote of soul energy called a least soulspark. The presence of the soulspark grants you the Alertness feat. If the soulspark is reduced to 0 or fewer hit points, the meld unshapes.
|
||
|
||
Essentia: When you allocate essentia to your soulspark familiar, you can select one of the following effects. All essentia invested must be put toward the same effect.
|
||
|
||
Attack Bonus: Every point of essentia grants the soulspark a +1 bonus on its attack rolls and damage rolls.
|
||
Deflection Bonus: Every point of essentia grants the soulspark a +1 deflection bonus to Armor Class.
|
||
Healing: Every point of essentia invested grants the soulspark a certain amount of fast healing. A least soulspark gains fast healing equal to 1 × the points of essentia invested, a lesser
|
||
soulspark gains fast healing equal to 2 × the points of essentia invested, a standard soulspark gains fast healing equal to 3 × the points of essentia invested, and a greater soulspark gains
|
||
fast healing equal to 4 × the points of essentia invested.
|
||
Saving Throw Bonus: Every point of essentia grants the soulspark a +1 resistance bonus on all saving throws.
|
||
|
||
Chakra Bind (Brow)
|
||
Your soulspark shimmers like the desert sky.
|
||
If you bind soulspark familiar to your brow chakra, you create a standard soulspark.
|
||
|
||
Chakra Bind (Crown)
|
||
Your soulspark glows sapphire blue, like a brilliant gemstone.
|
||
If you bind soulspark familiar to your crown chakra, you create a lesser soulspark.
|
||
|
||
Chakra Bind (Throat)
|
||
Your soulspark burns with a fierce blue-white light.
|
||
If you bind soulspark familiar to your throat chakra, you create a greater soulspark.
|
||
*/
|
||
|
||
#include "moi_inc_moifunc"
|
||
|
||
void AugmentSoulspark(object oMeldshaper, string sSummon, int nEssentia)
|
||
{
|
||
effect eDR = EffectDamageReduction(1, DAMAGE_POWER_PLUS_THREE);
|
||
effect eHeal = ExtraordinaryEffect(EffectRegenerate(nEssentia, 6.0));
|
||
if (sSummon == "moi_slspk_lesser")
|
||
{
|
||
eDR = EffectDamageReduction(3, DAMAGE_POWER_PLUS_THREE);
|
||
eHeal = ExtraordinaryEffect(EffectRegenerate(nEssentia * 2, 6.0));
|
||
}
|
||
else if (sSummon == "moi_slspk_medium")
|
||
{
|
||
eDR = EffectDamageReduction(5, DAMAGE_POWER_PLUS_THREE);
|
||
eHeal = ExtraordinaryEffect(EffectRegenerate(nEssentia * 3, 6.0));
|
||
}
|
||
else if (sSummon == "moi_slspk_greatr")
|
||
{
|
||
eDR = EffectDamageReduction(10, DAMAGE_POWER_PLUS_THREE);
|
||
eHeal = ExtraordinaryEffect(EffectRegenerate(nEssentia * 4, 6.0));
|
||
}
|
||
|
||
int i = 1;
|
||
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oMeldshaper);
|
||
while(GetIsObjectValid(oSummon))
|
||
{
|
||
if(GetResRef(oSummon) == sSummon)
|
||
{
|
||
SetLocalString(oSummon, "X2_SPECIAL_COMBAT_AI_SCRIPT", "moi_mld_slspkai");
|
||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDR, oSummon);
|
||
if (GetLocalInt(oMeldshaper, "SoulsparkEssentiaChoice") == 1) ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectACIncrease(nEssentia, AC_DEFLECTION_BONUS), oSummon);
|
||
else if (GetLocalInt(oMeldshaper, "SoulsparkEssentiaChoice") == 2) ApplyEffectToObject(DURATION_TYPE_PERMANENT, eHeal, oSummon);
|
||
else if (GetLocalInt(oMeldshaper, "SoulsparkEssentiaChoice") == 3) ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectSavingThrowIncrease(SAVING_THROW_ALL, nEssentia, SAVING_THROW_TYPE_ALL), oSummon);
|
||
}
|
||
i++;
|
||
oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, oMeldshaper, i);
|
||
}
|
||
}
|
||
|
||
void main()
|
||
{
|
||
object oMeldshaper = PRCGetSpellTargetObject();
|
||
int nEssentia = GetEssentiaInvested(oMeldshaper);
|
||
string sSummon = "moi_slspk_least";
|
||
|
||
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) sSummon = "moi_slspk_lesser";
|
||
else if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW) sSummon = "moi_slspk_medium";
|
||
else if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) sSummon = "moi_slspk_greatr";
|
||
|
||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectSummonCreature(sSummon)), oMeldshaper, 9999.0);
|
||
DelayCommand(0.5, AugmentSoulspark(oMeldshaper, sSummon, nEssentia));
|
||
|
||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SOULSPARK_FAMILIAR), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SOULSPARK_FAMILIAR_ESS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_ALERTNESS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||
} |