PRC8/trunk/smp/phs_s_foresight.nss
Jaysyn904 1662218bb4 Initial upload.
Adding base PRC 4.19a files to repository.
2022-10-07 13:51:24 -04:00

121 lines
4.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*:://////////////////////////////////////////////
//:: Spell Name Foresight
//:: Spell FileName PHS_S_Foresight
//:://////////////////////////////////////////////
//:: In Game Spell desctiption
//:://////////////////////////////////////////////
Divination
Level: Drd 9, Knowledge 9, Sor/Wiz 9
Components: V, S, M/DF
Casting Time: 1 standard action
Range: Personal
Target: See text
Duration: 10 min./level
Saving Throw: None or Will negates (harmless)
Spell Resistance: No or Yes (harmless)
This spell grants you a powerful sixth sense in relation to yourself. Once
foresight is cast, you receive instantaneous warnings of impending danger or
harm to the yourself.
You recieve +4 inititive (Unless you already have improved inititive) and
become immune to knockdown, and gain the Uncanny Dodge feat, if you do not
already know it, so you are never caught flat footed.
In addition, the spell gives you a general idea of what action you might
take to best protect yourself and gives you a +2 dodge bonus to AC and
Reflex saves.
Arcane Material Component: A hummingbirds feather.
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Different from 3E. Casts only on self is much easier :-)
It'd not grant as many bonuses to an ally anyway.
Immunity to knockdown, +4 intitive VIA Improved Inititive, Uncanny dodge
to retain thier dex bonus to thier AC. Add these feats onto the creature
hide. +2 AC and +2 reflex saves too.
Type of Feat: Class
Prerequisite: Barbarian level 2, rogue level 3, shadowdancer level 2 or
assassin level 2.
Specifics: The character retains his Dex bonus to AC, even if caught
flat-footed or attacked by a hidden or invisible creature.
Use: Automatic.
TO DO:
- Add correct feats to somewhere
The "somewhere" where the feats go is thier current armor. If unequipped,
the effects are lost.
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
// These hold the all important weapon functions. Will seperate later and modify.
#include "prc_x2_itemprop"
void main()
{
// Spell Hook check
if(!PHS_SpellHookCheck(PHS_SPELL_FORESIGHT)) return;
// Declare Major Variables
object oCaster = OBJECT_SELF;
object oTarget = GetSpellTargetObject();// Should be OBJECT_SELF
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget);
int nCasterLevel = PHS_GetCasterLevel();
int nMetaMagic = PHS_GetMetaMagicFeat();
// Make sure they are not immune to spells
if(PHS_TotalSpellImmunity(oTarget)) return;
// If oArmor is not valid, we will at least use the creature hide
if(!GetIsObjectValid(oArmor))
{
// If this also is invalid, no feats are put on items.
oArmor = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTarget);
}
// Duration is 10 turns/level
float fDuration = PHS_GetDuration(PHS_MINUTES, nCasterLevel * 10, nMetaMagic);
// Declare effects
effect eDur = EffectVisualEffect(VFX_DUR_MAGICAL_SIGHT);
effect eAC = EffectACIncrease(2, AC_DODGE_BONUS);
effect eSave = EffectSavingThrowIncrease(SAVING_THROW_REFLEX, 2);
effect eImmune = EffectImmunity(IMMUNITY_TYPE_KNOCKDOWN);
effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
// Item properties. Need to update sometime to real ones.
itemproperty IP_UncannyDodge = ItemPropertyBonusFeat(IP_CONST_FEAT_DODGE);
itemproperty IP_ImprovedInitiative = ItemPropertyBonusFeat(IP_CONST_FEAT_DODGE);
// Link effects
effect eLink = EffectLinkEffects(eDur, eAC);
eLink = EffectLinkEffects(eLink, eSave);
eLink = EffectLinkEffects(eLink, eImmune);
eLink = EffectLinkEffects(eLink, eCessate);
// Signal spell cast at event
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_FORESIGHT, FALSE);
// Remove previous castings
PHS_RemoveSpellEffectsFromTarget(PHS_SPELL_FORESIGHT, oTarget);
// Apply new effects
PHS_ApplyDuration(oTarget, eLink, fDuration);
if(GetIsObjectValid(oArmor))
{
IPSafeAddItemProperty(oArmor, IP_UncannyDodge, fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(oArmor, IP_ImprovedInitiative, fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
}