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.
117 lines
4.1 KiB
Plaintext
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);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|