PRC8/nwn/nwnprc/trunk/racescripts/x2_s1_suckbrain.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

117 lines
4.1 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Mindflayer Extract Brain
//:: x2_s1_suckbrain
//:: Copyright (c) 2003 Bioware Corp.
//:://////////////////////////////////////////////
/*
The Mindflayer's Extract Brain ability
Since we can not simulate the When All 4 tentacles
hit condition reliably, we use this approach for
extract brain
It is only triggered through the specialized
mindflayer AI if the player is helpless.
(see x2_ai_mflayer for details)
If the player is helpless, the mindflayer will
walk up and cast this spell, which has the Suck Brain
special creature animation tied to it through spells.2da
The spell first performs a melee touch attack. If that succeeds
in <Hardcore difficulty, the player is awarded a Fortitude Save
against DC 10+(HD/2).
If the save fails, or the player is on a hardcore+ difficulty
setting, the mindflayer will do d3()+2 points of permanent
intelligence damage. Once a character's intelligence drops
below 5, his enough of her brain has been extracted to kill her.
As a little special condition, if the player is either diseased
or poisoned, the mindflayer will also become disases or poisoned
if by sucking the brain.
*/
//:://////////////////////////////////////////////
//:: Created By: Georg Zoeller
//:: Created On: 2003-09-01
//:://////////////////////////////////////////////
void DoSuckBrain(object oTarget,int nDamage)
{
effect eDrain = EffectAbilityDecrease(ABILITY_INTELLIGENCE, nDamage);
eDrain = ExtraordinaryEffect(eDrain);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDrain, oTarget);
}
#include "prc_inc_spells"
void main()
{
object oTarget = PRCGetSpellTargetObject();
effect eBlood = EffectVisualEffect(493);
ApplyEffectToObject(DURATION_TYPE_INSTANT,eBlood, oTarget);
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
// Do a melee touch attack.
int bHit = (TouchAttackMelee(oTarget,TRUE)>0) ;
if (!bHit)
{
return;
}
if (GetObjectType(oTarget) != OBJECT_TYPE_CREATURE) return;
int nRacial = MyPRCGetRacialType(oTarget);
// These types dont have brains to eat
if (nRacial == RACIAL_TYPE_CONSTRUCT || nRacial == RACIAL_TYPE_ELEMENTAL || nRacial == RACIAL_TYPE_UNDEAD || nRacial == RACIAL_TYPE_OOZE) return;
int bSave;
int nDifficulty = GetGameDifficulty();
// if we are on hardcore difficulty, we get no save
if (nDifficulty >= GAME_DIFFICULTY_NORMAL)
{
bSave = FALSE;
}
else
{
bSave = (PRCMySavingThrow(SAVING_THROW_FORT,oTarget,10+(GetHitDice(OBJECT_SELF)/2)) != 0);
}
// if we failed the save (or never got one)
if (!bSave)
{
// int below 5? We are braindead
FloatingTextStrRefOnCreature(85566,oTarget);
if (GetAbilityScore(oTarget,ABILITY_INTELLIGENCE) <5)
{
effect eDeath = EffectDamage(GetCurrentHitPoints(oTarget)+1);
ApplyEffectToObject(DURATION_TYPE_INSTANT,eBlood,oTarget);
DelayCommand(1.5f, ApplyEffectToObject(DURATION_TYPE_INSTANT,eDeath,oTarget));
}
else
{
int nDamage = d3()+2;
// Ok, since the engine prevents ability score damage from the same spell to stack,
// we are using another "quirk" in the engine to make it stack:
// by DelayCommanding the spell the effect looses its SpellID information and stacks...
DelayCommand(0.01f,DoSuckBrain(oTarget, nDamage));
// if our target was poisoned or diseased, we inherit that
if (PRCGetHasEffect( EFFECT_TYPE_POISON,oTarget))
{
effect ePoison = EffectPoison(POISON_PHASE_SPIDER_VENOM);
ApplyEffectToObject(DURATION_TYPE_PERMANENT,ePoison,OBJECT_SELF);
}
if (PRCGetHasEffect( EFFECT_TYPE_DISEASE,oTarget))
{
effect eDisease = EffectDisease(DISEASE_SOLDIER_SHAKES);
ApplyEffectToObject(DURATION_TYPE_PERMANENT,eDisease,OBJECT_SELF);
}
}
}
}