Initial upload.
Adding base PRC 4.19a files to repository.
This commit is contained in:
116
trunk/racescripts/x2_s1_suckbrain.nss
Normal file
116
trunk/racescripts/x2_s1_suckbrain.nss
Normal file
@@ -0,0 +1,116 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: 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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user