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.
135 lines
5.5 KiB
Plaintext
135 lines
5.5 KiB
Plaintext
/*:://////////////////////////////////////////////
|
||
//:: Spell Name Iron Body
|
||
//:: Spell FileName PHS_S_IronBody
|
||
//:://////////////////////////////////////////////
|
||
//:: In Game Spell desctiption
|
||
//:://////////////////////////////////////////////
|
||
Transmutation
|
||
Level: Earth 8, Sor/Wiz 8
|
||
Components: V, S, M/DF
|
||
Casting Time: 1 standard action
|
||
Range: Personal
|
||
Target: You
|
||
Duration: 1 min./level (D)
|
||
|
||
This spell transforms your body into living iron, which grants you several
|
||
powerful resistances and abilities.
|
||
|
||
You gain damage reduction 15/+20. You are immune to blindness, critical hits,
|
||
ability score damage, deafness, disease, drowning, electricity, poison,
|
||
stunning, and all spells or attacks that affect your physiology or respiration,
|
||
because you have no physiology or respiration while this spell is in effect.
|
||
You take only half damage from acid and fire of all kinds. However, you also
|
||
become vulnerable to rust attacks, as an iron golem is.
|
||
|
||
You gain a +6 enhancement bonus to your Strength score, but you take a -6
|
||
penalty to Dexterity as well (to a minimum Dexterity score of 3), and your
|
||
speed is reduced to half normal. You have an spell failure chance of
|
||
50% and a -8 penalty on armor-based skills, just as if you were clad in full
|
||
plate armor. You cannot drink (and thus can’t use potions) or play wind
|
||
instruments.
|
||
|
||
Arcane Material Component: A small piece of iron that was once part of either
|
||
an iron golem, a hero’s armor, or a war machine.
|
||
//:://////////////////////////////////////////////
|
||
//:: Spell Effects Applied / Notes
|
||
//:://////////////////////////////////////////////
|
||
Currently this does this:
|
||
|
||
- Will not work if the dex ability damage, slow or arcane spell failure or
|
||
skill decrease cannot be applied.
|
||
|
||
Got to do this - any "remove" spells will now correctly remove everything
|
||
and stop abuse (as does any immunities). Might change, but it'd be hard
|
||
to stop the bad stuff going and keeping the good stuff.
|
||
|
||
The "respiratory spells" will be added as EffectSpellImmunity()
|
||
//:://////////////////////////////////////////////
|
||
//:: Created By: Jasperre
|
||
//::////////////////////////////////////////////*/
|
||
|
||
#include "PHS_INC_SPELLS"
|
||
|
||
void main()
|
||
{
|
||
// Spell Hook Check.
|
||
if(!PHS_SpellHookCheck(PHS_SPELL_IRON_BODY)) return;
|
||
|
||
// Declare major variables
|
||
object oCaster = OBJECT_SELF;
|
||
object oTarget = GetSpellTargetObject();
|
||
int nCasterLevel = PHS_GetCasterLevel();
|
||
int nMetaMagic = PHS_GetMetaMagicFeat();
|
||
|
||
// Make sure they are not immune to spells
|
||
if(PHS_TotalSpellImmunity(oTarget)) return;
|
||
|
||
// Duration is 1 minute/level
|
||
float fDuration = PHS_GetDuration(PHS_MINUTES, nCasterLevel, nMetaMagic);
|
||
|
||
// Declare effects
|
||
// All "Good" effects
|
||
effect eIron = EffectDamageReduction(15, DAMAGE_POWER_PLUS_TWENTY);
|
||
effect eStr = EffectAbilityIncrease(ABILITY_STRENGTH, 6);
|
||
effect eBlind = EffectImmunity(IMMUNITY_TYPE_BLINDNESS);
|
||
effect eCritical = EffectImmunity(IMMUNITY_TYPE_CRITICAL_HIT);
|
||
effect eAbility = EffectImmunity(IMMUNITY_TYPE_ABILITY_DECREASE);
|
||
effect eDisease = EffectImmunity(IMMUNITY_TYPE_DISEASE);
|
||
effect ePoison = EffectImmunity(IMMUNITY_TYPE_POISON);
|
||
effect eStun = EffectImmunity(IMMUNITY_TYPE_STUN);
|
||
effect eElect = EffectDamageImmunityIncrease(DAMAGE_TYPE_ELECTRICAL, 100);
|
||
effect eAcid = EffectDamageImmunityIncrease(DAMAGE_TYPE_ACID, 50);
|
||
effect eFire = EffectDamageImmunityIncrease(DAMAGE_TYPE_FIRE, 50);
|
||
// Special visual
|
||
effect eDur = EffectVisualEffect(PHS_VFX_DUR_IRONSKIN);
|
||
effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||
// Seperate bad effects
|
||
effect ePenDex = EffectAbilityDecrease(ABILITY_DEXTERITY, 6);
|
||
effect ePenSkill = PHS_EffectArmorSkillsDecrease(8);
|
||
effect ePenSlow = EffectMovementSpeedDecrease(50);
|
||
effect ePenFail = EffectSpellFailure(50);
|
||
|
||
// Link good effects
|
||
effect eLink = EffectLinkEffects(eIron, eBlind);
|
||
|
||
// We add the strength link only if we will havn't got any 6 or more bonuses
|
||
// to strength
|
||
if(PHS_GetHasAbilityBonusOfPower(oTarget, ABILITY_STRENGTH, 6) == 0)
|
||
{
|
||
eLink = EffectLinkEffects(eLink, eStr);
|
||
}
|
||
eLink = EffectLinkEffects(eLink, eCritical);
|
||
eLink = EffectLinkEffects(eLink, eAbility);
|
||
eLink = EffectLinkEffects(eLink, eDisease);
|
||
eLink = EffectLinkEffects(eLink, ePoison);
|
||
eLink = EffectLinkEffects(eLink, eStun);
|
||
eLink = EffectLinkEffects(eLink, eElect);
|
||
eLink = EffectLinkEffects(eLink, eAcid);
|
||
eLink = EffectLinkEffects(eLink, eFire);
|
||
eLink = EffectLinkEffects(eLink, eDur);
|
||
eLink = EffectLinkEffects(eLink, eCessate);
|
||
// Add in bad effects.
|
||
eLink = EffectLinkEffects(eLink, ePenDex);
|
||
eLink = EffectLinkEffects(eLink, ePenSkill);
|
||
eLink = EffectLinkEffects(eLink, ePenSlow);
|
||
eLink = EffectLinkEffects(eLink, ePenFail);
|
||
|
||
// Remove previous effects
|
||
PHS_RemoveSpellEffectsFromTarget(PHS_SPELL_IRON_BODY, oTarget);
|
||
|
||
// Remove any bonuses to strength of 5 or under.
|
||
PHS_RemoveAnyAbilityBonuses(oTarget, ABILITY_STRENGTH, 5);
|
||
|
||
// Signal spell cast at
|
||
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_IRON_BODY, FALSE);
|
||
|
||
// Apply bad effects to the target
|
||
//PHS_ApplyDuration(oTarget, ePenDex, fDuration);
|
||
//PHS_ApplyDuration(oTarget, ePenSkill, fDuration);
|
||
//PHS_ApplyDuration(oTarget, ePenSlow, fDuration);
|
||
//PHS_ApplyDuration(oTarget, ePenFail, fDuration);
|
||
|
||
// Apply effects to the target
|
||
PHS_ApplyDuration(oTarget, eLink, fDuration);
|
||
}
|