Initial upload.

Adding base PRC 4.19a files to repository.
This commit is contained in:
Jaysyn904
2022-10-07 13:51:24 -04:00
parent 646eb01834
commit 1662218bb4
22441 changed files with 1274376 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
//:://////////////////////////////////////////////
//:: Name
//:: FileName sp_.nss
//:://////////////////////////////////////////////
/** @file
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
PRCSetSchool();
}

View File

@@ -0,0 +1,100 @@
//:://////////////////////////////////////////////
//:: Name Axiomatic Water Impact Script
//:: FileName prc_axiowater.nss
//:://////////////////////////////////////////////
/** @file Transmutation [Lawful]
Level: Cleric 1, Paladin 1,
Components: V, S, M,
Casting Time: 1 minute
Range: Touch
Target: Flask of water touched
Duration: Instantaneous
Saving Throw: Will negates (object)
Spell Resistance: Yes (object)
You speak the ancient, slippery words as you pour the iron and silver into the flask. Despite the fact that there
is more powder than will fit in the container, all of it dissolves, leaving a flask of water dotted with motes of gunmetal gray.
This transmutation imbues a flask (1 pint) of water with the order of law, turning it into axiomatic water. Axiomati
water damages chaotic outsiders the way holy water damages undead and evil outsiders. A flask of axiomatic water can
be thrown as a splash weapon. Treat this attack as a ranged touch attack with a range increment of 10 feet. A flask
breaks if thrown against the body of a corporeal creature, but to use it against an incorporeal creature, the bearer
must open the flask and pout the axiomatic water out onto the target. Thus, a character can douse an incorporeal
creature with axiomatic water only if he is adjacent to it. Doing so is a ranged touch attack that does not provoke
attacks of opportunity.
A direct hit by a flask of axiomatic water deals 2d4 points of damage to a chaotic outsider. Each such creature
within 5 feet of the point where the flask hits takes 1 point of damage from the splash.
Material Component: 5 pounds of powdered iron and silver (worth 25 gp).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/10/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
#include "prc_inc_sp_tch"
void main()
{
location lTarget = GetSpellTargetLocation();
float fRadius = FeetToMeters(5);
int nTouch;
effect eVis = EffectVisualEffect(VFX_IMP_HEAD_HOLY);
object oTarget = PRCGetSpellTargetObject();
//Targeted a creature
if (GetIsObjectValid(oTarget) == TRUE)
{
nTouch = PRCDoRangedTouchAttack(oTarget);
}
//Hit
if(nTouch >= 1)
{
int nDirectDam = d4(2);
}
//Critical
if(nTouch == 2)
{
nDam += nDam;
}
effect eDam = EffectDamage(nDam, DAMAGE_TYPE_DIVINE);
object oDoNotDam = oTarget;
//Outsider
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER)
{
//Chaotic
if(GetAlignmentLawChaos(oTarget) == ALIGNMENT_CHAOTIC)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
}
oTarget = MyGetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget);
while(GetIsObjectValid(oTarget))
{
if(oTarget != oDoNotDam)
{
//Outsider
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER)
{
//Chaotic
if(GetAlignmentLawChaos(oTarget) == ALIGNMENT_CHAOTIC)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1, DAMAGE_TYPE_DIVINE), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
}
}
MyGetNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget);
}
}

View File

@@ -0,0 +1,115 @@
//:://////////////////////////////////////////////
//:: Short description Bladebane Conversation
//:: filename prc_c_bladebane.nss
//:://////////////////////////////////////////////
/** @file
@author Tenjac
@date Created - 7/29/22
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
#include "inc_dynconv"
//////////////////////////////////////////////////
/* Constant defintions */
//////////////////////////////////////////////////
const int STAGE_ENTRY = 0;
//////////////////////////////////////////////////
/* Aid functions */
//////////////////////////////////////////////////
//////////////////////////////////////////////////
/* Main function */
//////////////////////////////////////////////////
void main()
{
object oPC = GetPCSpeaker();
/* Get the value of the local variable set by the conversation script calling
* this script. Values:
* DYNCONV_ABORTED Conversation aborted
* DYNCONV_EXITED Conversation exited via the exit node
* DYNCONV_SETUP_STAGE System's reply turn
* 0 Error - something else called the script
* Other The user made a choice
*/
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
// The stage is used to determine the active conversation node.
// 0 is the entry node.
int nStage = GetStage(oPC);
// Check which of the conversation scripts called the scripts
if(nValue == 0) // All of them set the DynConv_Var to non-zero value, so something is wrong -> abort
return;
if(nValue == DYNCONV_SETUP_STAGE)
{
// Check if this stage is marked as already set up
// This stops list duplication when scrolling
if(!GetIsStageSetUp(nStage, oPC))
{
// variable named nStage determines the current conversation node
// Function SetHeader to set the text displayed to the PC
// Function AddChoice to add a response option for the PC. The responses are show in order added
if(nStage == STAGE_ENTRY)
{
// Set the header
SetHeader("Choose racial type.");
int i;
for (i=0; i <=254; i++)
{
string sName = Get2daCache("racialtypes", "Constant", i);
// Add responses for the PC
if(sName != "")
{
AddChoice(sName, i, oPC);
}
}
MarkStageSetUp(nStage, oPC); // This prevents the setup being run for this stage again until MarkStageNotSetUp is called for it
SetDefaultTokens(); // Set the next, previous, exit and wait tokens to default values
}
//add more stages for more nodes with Else If clauses
}
// Do token setup
SetupTokens();
}
// End of conversation cleanup
else if(nValue == DYNCONV_EXITED)
{
// Add any locals set through this conversation
}
// Abort conversation cleanup.
// NOTE: This section is only run when the conversation is aborted
// while aborting is allowed. When it isn't, the dynconvo infrastructure
// handles restoring the conversation in a transparent manner
else if(nValue == DYNCONV_ABORTED)
{
// Add any locals set through this conversation
}
// Handle PC responses
else
{
// variable named nChoice is the value of the player's choice as stored when building the choice list
// variable named nStage determines the current conversation node
int nChoice = GetChoice(oPC);
if(nStage == STAGE_ENTRY)
{
int n2daLine = nChoice--;
SetLocalInt(oPC, "BladebaneRace", n2daLine);
// Move to another stage based on response, for example
//nStage = STAGE_QUUX;
}
// Store the stage value. If it has been changed, this clears out the choices
SetStage(nStage, oPC);
}
}

View File

@@ -0,0 +1,70 @@
//:://////////////////////////////////////////////
//:: Name Smite of Sacred Fire
//:: FileName sp_smitesacfire.nss
//:://////////////////////////////////////////////
/** @file Evocation [Good]
Level: Paladin 2,
Components: V, DF,
Casting Time: 1 swift action
Range: Personal
Target: You
Duration: 1 round/level; see text
You must cast this spell in the same round when you
attempt a smite attack. If the attack hits, you deal
an extra 2d6 points of damage to the target of the
smite. Whether or not you succeed on the smite attempt,
during each subsequent round of the spell?s duration,
you deal an extra 2d6 points of damage on any successful
melee attack against the target you attempted to smite.
The spell ends prematurely after any round when you do not
attempt a melee attack against the target you previously
attempted to smite, or if you fail to hit with any of
your attacks in a round.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/25/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oSpellOrigin = OBJECT_SELF;
// find the weapon
object oWeapon = PRCGetSpellCastItem(oSpellOrigin);
// find the target of the spell
object oTarget = PRCGetSpellTargetObject(oSpellOrigin);
//Hit in the last round
if(GetHasSpellEffect(SPELL_SMITE_SACRED_FIRE_HIT))
{
//Target of the original smite
if(GetLocalInt(oTarget, "PRCSSFTarget"));
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(DAMAGE_TYPE_DIVINE, d6(2)), oTarget);
ActionCastSpellOnSelf(SPELL_SMITE_SACRED_FIRE_HIT);
}
}
else //We've missed; effect ends, make sure this doesn't trigger the first time
{
effect eToDispel = GetFirstEffect(oSpellOrigin);
while(GetIsEffectValid(eToDispel))
{
if(GetEffectSpellId(eToDispel) == SPELL_SMITE_OF_SACRED_FIRE)
{
RemoveEffect(oSpellOrigin, eToDispel);
}
eToDispel = GetNextEffect(oSpellOrigin);
}
}
}

View File

@@ -0,0 +1,42 @@
//:://////////////////////////////////////////////
//:: Name Righteous Aura On Death
//:: FileName prc_rightaura.nss
//:://////////////////////////////////////////////
/** @file
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/20/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oPC = OBJECT_SELF;
int nDice = min(20, PRCGetCasterLevel(oPC) * 2);
location lLoc = GetLocation(oPC);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_STRIKE_HOLY), lLoc);
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(20), lLoc, FALSE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oTarget))
{
if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_GOOD)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(d6(nDice)), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HOLY_AID), oTarget);
}
if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL)
{
int nDam = d6(nDice);
//Double damage for undead
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) nDam+=nDam;
effect eLink = EffectLinkEffects(EffectVisualEffect(VFX_IMP_HOLY_AID), EffectDamage(DAMAGE_TYPE_DIVINE, nDam));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(20), lLoc, FALSE, OBJECT_TYPE_CREATURE);
}
}

View File

@@ -0,0 +1,115 @@
//:://////////////////////////////////////////////
//:: Name Aligned Aura Discarge
//:: FileName sp_algnaurdisc.nss
//:://////////////////////////////////////////////
/** @file
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/25/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
int nMetaMagic = PRCGetMetaMagicFeat();
location lLoc = GetLocation(oPC);
int nDC;
int nAlign;
int nAlignTarget;
if (GetHasSpellEffect(SPELL_ALIGNED_AURA_LAW,oPC)) nAlign == ALIGNMENT_LAWFUL;
else if(GetHasSpellEffect(SPELL_ALIGNED_AURA_CHAOS,oPC)) nAlign = ALIGNMENT_CHAOTIC;
else if (GetHasSpellEffect(SPELL_ALIGNED_AURA_GOOD,oPC)) nAlign = ALIGNMENT_GOOD;
else if (GetHasSpellEffect(SPELL_ALIGNED_AURA_EVIL,oPC)) nAlign = ALIGNMENT_EVIL;
else SendMessageToPC(oPC, "Invalid alignment passed in script sp_algnaurdisc.nss");
//Get duration left
int nEffectDuration, nEffectDurationRemaining;
effect eEffect = GetFirstEffect(OBJECT_SELF);
while(GetIsEffectValid(eEffect))
{
if(GetEffectSpellId(eEffect) == SPELL_ALIGNED_AURA_LAW)
{
nEffectDuration = GetEffectDuration(eEffect);
nEffectDurationRemaining = GetEffectDurationRemaining(eEffect);
nAlign = ALIGNMENT_LAWFUL;
}
else if(GetSpellId(eEffect) == SPELL_ALIGNED_AURA_CHAOS)
{
nEffectDuration = GetEffectDuration(eEffect);
nEffectDurationRemaining = GetEffectDurationRemaining(eEffect);
nAlign = ALIGNMENT_CHAOTIC;
}
else if(GetSpellId(eEffect) == SPELL_ALIGNED_AURA_GOOD)
{
nEffectDuration = GetEffectDuration(eEffect);
nEffectDurationRemaining = GetEffectDurationRemaining(eEffect);
nAlign = ALIGNMENT_GOOD;
}
else if(GetSpellId(eEffect) == SPELL_ALIGNED_AURA_EVIL)
{
nEffectDuration = GetEffectDuration(eEffect);
nEffectDurationRemaining = GetEffectDurationRemaining(eEffect);
nAlign = ALIGNMENT_EVIL;
}
eEffect = GetNextEffect(OBJECT_SELF);
}
//GetEffectDurationRemaining returns seconds, need rounds
int nDice = nEffectDurationRemaining / 6;
int nDam = d4(min(15, nDice));
//Do the AoE
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE,FeetToMeters(60.0), lLoc);
{
while(GetIsObjectValid(oTarget))
{
if(oTarget != oPC)
{
//lawful or chaotic
if(nAlign == ALIGNMENT_LAWFUL || nAlign == ALIGNMENT_CHAOTIC) nAlignTarget = GetAlignmentLawChaos(oTarget);
else if (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_EVIL) nAlignTarget = GetAlignmentGoodEvil(oTarget);
//Same alignment, heal
if(nAlign == nAlignTarget)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(nDam, oTarget), oTarget);
}
//Opposing alignment, damage
if(nAlign != nAlignTarget)
{
nDC = PRCGetSaveDC(oTarget, oPC);
//SR
if(!PRCDoResistSpell(oPC, oTarget, nCasterLvl + SPGetPenetr()))
{
//Fort Save half
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_DIVINE)
{
nDam = nDam/2;
}
effect eDam = PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_MAGICAL);
effect eVis = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY);
effect eLink = EffectLinkEffects(eDam, eVis);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
}
}
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(60.0), lLoc);
}
}
PRCSetSchool();
}

View File

@@ -0,0 +1,68 @@
//:://////////////////////////////////////////////
//:: Name Aligned Aura
//:: FileName sp_alignedaura.nss
//:://////////////////////////////////////////////
/** @file
Abjuration
Level: Blackguard 4, Cleric 4, Paladin 4,
Components: V, S, DF,
Casting Time: 1 standard action
Range: 20 ft. or 60 ft.
Area: 20-ft.-radius emanation or 60-ft.-radius burst, centered on you
Duration: 1 round/level or until discharged
Saving Throw: Fortitude partial
Spell Resistance: Yes
A rush of divine energy flows through your holy symbol, infusing your body
with the essence of the divine ethos. When you cast this spell, choose one
non-neutral aspect of your own alignment<6E>chaos, evil, good, or law.
(If you are neutral, you can select whichever alignment you wish each time
you cast this spell). You are immediately surrounded in a 20-foot aura of
invisible energy associated with the chosen alignment component. Anyone in
that area who shares that alignment component gains a bonus, and anyone with
the opposed alignment component must make a Fortitude save or take a penalty.
The values of these modifiers and the features to which they apply are given
on the following table. These modifiers end when the affected creature leaves
the spell's area.
Alignment Bonus Penalty
Chaos +1 on attack rolls -1 on saving throws
Evil +1 on damage rolls -1 to Armor Class
Good +1 on saving throws -1 on attack rolls
Law +1 to Armor Class -1 on damage rolls
At any point before the duration expires, you can choose to unleash the spell's
remaining power in a 60-foot burst that deals 1d4 points of damage per round of
duration remaining (maximum 15d4) to each creature of the opposed alignment in
the area. Each affected creature can attempt a Fortitude save for half damage.
The burst also heals 1 point of damage per round of duration remaining
(maximum 15 points) for each creature of the same alignment in the area. Once
this option is invoked, the spell ends immediately.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/24/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
int nMetaMagic = PRCGetMetaMagicFeat();
int nGood = GetAlignmentGoodEvil(oPC);
int nLaw = GetLawChaosValue(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nSpellID = PRCGetSpellId();
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_MOB_ALIGNED_AURA), oPC, fDur);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_YELLOW_WHITE), oPC, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,119 @@
//:://////////////////////////////////////////////
//:: Name Aligned Aura
//:: FileName sp_alignedaura.nss
//:://////////////////////////////////////////////
/** @file
Abjuration
Level: Blackguard 4, Cleric 4, Paladin 4,
Components: V, S, DF,
Casting Time: 1 standard action
Range: 20 ft. or 60 ft.
Area: 20-ft.-radius emanation or 60-ft.-radius burst, centered on you
Duration: 1 round/level or until discharged
Saving Throw: Fortitude partial
Spell Resistance: Yes
A rush of divine energy flows through your holy symbol, infusing your body
with the essence of the divine ethos. When you cast this spell, choose one
non-neutral aspect of your own alignment<6E>chaos, evil, good, or law.
(If you are neutral, you can select whichever alignment you wish each time
you cast this spell). You are immediately surrounded in a 20-foot aura of
invisible energy associated with the chosen alignment component. Anyone in
that area who shares that alignment component gains a bonus, and anyone with
the opposed alignment component must make a Fortitude save or take a penalty.
The values of these modifiers and the features to which they apply are given
on the following table. These modifiers end when the affected creature leaves
the spell's area.
Alignment Bonus Penalty
Chaos +1 on attack rolls -1 on saving throws
Evil +1 on damage rolls -1 to Armor Class
Good +1 on saving throws -1 on attack rolls
Law +1 to Armor Class -1 on damage rolls
At any point before the duration expires, you can choose to unleash the spell's
remaining power in a 60-foot burst that deals 1d4 points of damage per round of
duration remaining (maximum 15d4) to each creature of the opposed alignment in
the area. Each affected creature can attempt a Fortitude save for half damage.
The burst also heals 1 point of damage per round of duration remaining
(maximum 15 points) for each creature of the same alignment in the area. Once
this option is invoked, the spell ends immediately.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/24/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oCreator = GetAreaOfEffectCreator();
int nGood = GetAlignmentGoodEvil(oCreator);
int nLaw = GetLawChaosValue(oCreator);
int nCasterLvl = PRCGetCasterLevel(oCreator);
float fDur = RoundsToSeconds(nCasterLvl);
int nSpellID = PRCGetSpellId();
int nSaveType;
object oTarget = GetEnteringObject();
effect eBuff;
effect eDebuff;
effect eVisHelp;
effect eVisHarm;
effect eLink;
if(nSpellID == SPELL_ALIGNED_AURA_CHAOS)
{
eBuff = EffectAttackIncrease(1);
eDebuff = EffectSavingThrowDecrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_ALL);
eVisHelp = EffectVisualEffect(VFX_IMP_DESTRUCTION);
eVisHarm = EffectVisualEffect(VFX_IMP_HEAD_ODD);
nSaveType = SAVING_THROW_TYPE_CHAOS;
}
if(nSpellID == SPELL_ALIGNED_AURA_EVIL)
{
eBuff = EffectDamageIncrease(DAMAGE_BONUS_1);
eDebuff = EffectACDecrease(1);
eVisHelp = EffectVisualEffect(VFX_IMP_EVIL_HELP);
eVisHarm = EffectVisualEffect(VFX_IMP_HEAD_EVIL);
nSaveType = SAVING_THROW_TYPE_EVIL;
}
if(nSpellID == SPELL_ALIGNED_AURA_GOOD)
{
eBuff = EffectSavingThrowIncrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_ALL;
eDebuff = EffectAttackDecrease(1);
eVisHelp = EffectVisualEffect(VFX_IMP_GOOD_HELP);
eVisHarm = EffectVisualEffect(VFX_IMP_HEAD_HOLY);
nSaveType = SAVING_THROW_TYPE_GOOD;
}
if(nSpellID == SPELL_ALIGNED_AURA_LAW)
{
eBuff = EffectACIncrease(1);
eDebuff = EffectDamageDecrease(DAMAGE_BONUS_1, DAMAGE_TYPE_BLUDGEONING|DAMAGE_TYPE_PIERCING|DAMAGE_TYPE_SLASHING);
eVisHelp = EffectVisualEffect(VFX_IMP_AC_BONUS);
eVisHarm = EffectVisualEffect(VFX_IMP_HEAD_COLD);
nSaveType = SAVING_THROW_TYPE_LAW;
}
if(GetIsReactionTypeFriendly(oTarget) || GetFactionEqual(oTarget))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBuff, oTarget, fDur);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVisHelp, oTarget);
}
else
{ //Spell Resist
if(!PRCDoResistSpell(oCaster, oTarget,nCasterLvl + SPGetPenetr()))
{
//Save
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (PRCGetSaveDC(oTarget,oCreator)), nSaveType))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDebuff, oTarget, fDur);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVisHarm, oTarget);
}
}
}
PRCSetSchool();
}

View File

@@ -0,0 +1,68 @@
//:://////////////////////////////////////////////
//:: Name Aligned Aura
//:: FileName sp_alignedaura.nss
//:://////////////////////////////////////////////
/** @file
Abjuration
Level: Blackguard 4, Cleric 4, Paladin 4,
Components: V, S, DF,
Casting Time: 1 standard action
Range: 20 ft. or 60 ft.
Area: 20-ft.-radius emanation or 60-ft.-radius burst, centered on you
Duration: 1 round/level or until discharged
Saving Throw: Fortitude partial
Spell Resistance: Yes
A rush of divine energy flows through your holy symbol, infusing your body
with the essence of the divine ethos. When you cast this spell, choose one
non-neutral aspect of your own alignment<6E>chaos, evil, good, or law.
(If you are neutral, you can select whichever alignment you wish each time
you cast this spell). You are immediately surrounded in a 20-foot aura of
invisible energy associated with the chosen alignment component. Anyone in
that area who shares that alignment component gains a bonus, and anyone with
the opposed alignment component must make a Fortitude save or take a penalty.
The values of these modifiers and the features to which they apply are given
on the following table. These modifiers end when the affected creature leaves
the spell's area.
Alignment Bonus Penalty
Chaos +1 on attack rolls -1 on saving throws
Evil +1 on damage rolls -1 to Armor Class
Good +1 on saving throws -1 on attack rolls
Law +1 to Armor Class -1 on damage rolls
At any point before the duration expires, you can choose to unleash the spell's
remaining power in a 60-foot burst that deals 1d4 points of damage per round of
duration remaining (maximum 15d4) to each creature of the opposed alignment in
the area. Each affected creature can attempt a Fortitude save for half damage.
The burst also heals 1 point of damage per round of duration remaining
(maximum 15 points) for each creature of the same alignment in the area. Once
this option is invoked, the spell ends immediately.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/24/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oCaster = GetAreaOfEffectCreator();
object oTarget = GetExitingObject();
int nSpellId
effect eToDispel = GetFirstEffect(oTarget);
while(GetIsEffectValid(eToDispel))
{
nSpellId = GetEffectSpellId(eToDispel);
if(nSpellId == SPELL_ALIGNED_AURA_CHAOS || nSpellId == SPELL_ALIGNED_AURA_LAW || nSpellId == SPELL_ALIGNED_AURA_GOOD || nSpellId == SPELL_ALIGNED_AURA_EVIL)
{
RemoveEffect(oTarget, eToDispel);
}
eToDispel = GetNextEffect(oTarget);
}
}
}

View File

@@ -0,0 +1,60 @@
//:://////////////////////////////////////////////
//:: Name Angelskin
//:: FileName sp_angelskin.nss
//:://////////////////////////////////////////////
/** @file
Abjuration [Good]
Level: Paladin 2
Components: V, S, DF,
Casting Time: 1 standard action
Range: Touch
Target: Lawful good creature touched
Duration: 1 round/level
Saving Throw: Will negates (harmless)
Spell Resistance: Yes (harmless)
You touch your ally with the holy symbol and invoke the blessed words. An opalescent
glow spreads across her skin, imbuing it with a pearl-like sheen.
The subject gains damage reduction 5/evil.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/22/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
int nCasterLvl = PRCGetCasterLevel(oPC);
int nMetaMagic = PRCGetMetaMagicFeat();
float fDur = RoundsToSeconds(nCasterLvl);
if(nMetaMagic & METAMAGIC_EXTEND)
{
fDur += fDur;
}
//Alignment check
if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_GOOD) && (GetAlignmentLawChaos(oTarget) == ALIGNMENT_LAWFUL)
{
effect eDR = EffectDamageReduction(5,DAMAGE_POWER_PLUS_THREE,0);
effect eVFX = EffectVisualEffect(VFX_DUR_AURA_WHITE);
effect eSpell = EffectLinkEffects(eDR, eVFX);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSpell, oTarget, fDur);
}
//Invalid target alignment
else
{
SendMessageToPC(oPC, "This spell must target a lawful good creature.");
}
PRCSetSchool();
}

View File

@@ -0,0 +1,67 @@
//:://////////////////////////////////////////////
//:: Name Aura of Cold
//:: FileName sp_auracold.nss
//:://////////////////////////////////////////////
/** @file Transmutation [Cold]
Level: Cleric 3, Druid 3, Disciple of Thrym 3, Paladin 4, Ranger 4,
Components: V, S, DF,
Casting Time: 1 standard action
Range: 5 ft.
Area: 5-ft.-radius spherical emanation, centered on you
Duration: 1 round/level (D)
Saving Throw: None
Spell Resistance: Yes
You are covered in a thin layer of white frost and frigid cold emanates from your
body, dealing 1d6 points of cold damage at the start of your round to each creature
within 5 feet.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/8/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void DoCold(object oPC, int nRounds)
{
if(nRounds > 0)
{
location lLoc=GetLocation(oPC);
//Do the AoE
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE,FeetToMeters(5.0), lLoc);
{
while(GetIsObjectValid(oTarget))
{
if(oTarget != oPC)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(1), DAMAGE_TYPE_COLD), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FROST_S), oTarget);
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(5.0), lLoc);
}
}
nRounds--;
DelayCommand(6.0f, DoCold(oPC, nRounds));
}
}
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
int nRounds = nCasterLvl;
if(nMetaMagic & METAMAGIC_EXTEND) nRounds += nRounds;
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_BLUE_WHITE), oPC, fDur);
DoCold(oPC, nRounds);
PRCSetSchool();
}

View File

@@ -0,0 +1,48 @@
//:://////////////////////////////////////////////
//:: Name Aura of the Sun
//:: FileName sp_aurasun.nss
//:://////////////////////////////////////////////
/** @file Aura of the Sun
Abjuration [Light]
Level: Cleric 4, Paladin 4,
Components: V, S, DF,
Casting Time: 1 standard action
Range: 10 ft.
Area: 10-ft.-radius emanation centered on you
Duration: 1 round/level (D)
Saving Throw: No
Spell Resistance: None
By casting aura of the sun, you fill the area around you with warm, glowing light that eliminates natural
shadows and hampers magical darkness.Any creature attempting to cast a spell from the shadow subschool or
a spell with the darkness descriptor within an aura of the sun must succeed on a caster level check (DC 11 +
your caster level), or the spell fails. Areas of magical darkness originating from 3rd-level or lower spells
and effects are temporarily suppressed when overlapping with an aura of the sun. Creatures that take penalties
in bright light also take them while within an aura of the sun, and an undead creature takes 1d6 points of positive
energy damage at the end of its turn every round that it spends within the spell's area.Furthermore, any creature
attempting to hide within the aura takes a -4 penalty on Hide checks.
This effect is centered on you and moves with you.
Anyone who enters the aura immediately becomes subject to its effect, but creatures that leave are no longer affected.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_MOB_AURASUN), fDur, oPC);
PRCSetSchool();
}

View File

@@ -0,0 +1,42 @@
//:://////////////////////////////////////////////
//:: Name Aura of the Sun On Enter
//:: FileName sp_aurasunA.nss
//:://////////////////////////////////////////////
/** @file Aura of the Sun
Abjuration [Light]
Level: Cleric 4, Paladin 4,
Components: V, S, DF,
Casting Time: 1 standard action
Range: 10 ft.
Area: 10-ft.-radius emanation centered on you
Duration: 1 round/level (D)
Saving Throw: No
Spell Resistance: None
By casting aura of the sun, you fill the area around you with warm, glowing light that eliminates natural
shadows and hampers magical darkness.Any creature attempting to cast a spell from the shadow subschool or
a spell with the darkness descriptor within an aura of the sun must succeed on a caster level check (DC 11 +
your caster level), or the spell fails. Areas of magical darkness originating from 3rd-level or lower spells
and effects are temporarily suppressed when overlapping with an aura of the sun. Creatures that take penalties
in bright light also take them while within an aura of the sun, and an undead creature takes 1d6 points of positive
energy damage at the end of its turn every round that it spends within the spell's area.Furthermore, any creature
attempting to hide within the aura takes a -4 penalty on Hide checks.
This effect is centered on you and moves with you.
Anyone who enters the aura immediately becomes subject to its effect, but creatures that leave are no longer affected.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 8/10/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main
{
object oCreator = GetAreaOfEffectCreator();
int nCasterLvl = PRCGetCasterLvl(oCreator);
object oTarget = GetEnteringObject();
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectSkillDecrease(SKILL_HIDE), oTarget);
SetLocalInt(oTarget, "PRCAuraSunDC", 11 + nCasterLvl);
}

View File

@@ -0,0 +1,54 @@
//:://////////////////////////////////////////////
//:: Name Aura of the Sun On Exit
//:: FileName sp_aurasunB.nss
//:://////////////////////////////////////////////
/** @file Aura of the Sun
Abjuration [Light]
Level: Cleric 4, Paladin 4,
Components: V, S, DF,
Casting Time: 1 standard action
Range: 10 ft.
Area: 10-ft.-radius emanation centered on you
Duration: 1 round/level (D)
Saving Throw: No
Spell Resistance: None
By casting aura of the sun, you fill the area around you with warm, glowing light that eliminates natural
shadows and hampers magical darkness.Any creature attempting to cast a spell from the shadow subschool or
a spell with the darkness descriptor within an aura of the sun must succeed on a caster level check (DC 11 +
your caster level), or the spell fails. Areas of magical darkness originating from 3rd-level or lower spells
and effects are temporarily suppressed when overlapping with an aura of the sun. Creatures that take penalties
in bright light also take them while within an aura of the sun, and an undead creature takes 1d6 points of positive
energy damage at the end of its turn every round that it spends within the spell's area.Furthermore, any creature
attempting to hide within the aura takes a -4 penalty on Hide checks.
This effect is centered on you and moves with you.
Anyone who enters the aura immediately becomes subject to its effect, but creatures that leave are no longer affected.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 8/10/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oCaster = GetAreaOfEffectCreator();
object oTarget = GetExitingObject();
effect eToDispel = GetFirstEffect(oTarget);
while(GetIsEffectValid(eToDispel))
{
if(GetEffectSpellId(eToDispel) == SPELL_AURA_OF_THE_SUN)
{
RemoveEffect(oTarget, eToDispel);
}
eToDispel = GetNextEffect(oTarget);
}
}
DeleteLocalInt(oTarget, "PRCAuraSunDC");
}

View File

@@ -0,0 +1,49 @@
//:://////////////////////////////////////////////
//:: Name Aura of the Sun Heartbeat
//:: FileName sp_aurasunC.nss
//:://////////////////////////////////////////////
/** @file Aura of the Sun
Abjuration [Light]
Level: Cleric 4, Paladin 4,
Components: V, S, DF,
Casting Time: 1 standard action
Range: 10 ft.
Area: 10-ft.-radius emanation centered on you
Duration: 1 round/level (D)
Saving Throw: No
Spell Resistance: None
By casting aura of the sun, you fill the area around you with warm, glowing light that eliminates natural
shadows and hampers magical darkness.Any creature attempting to cast a spell from the shadow subschool or
a spell with the darkness descriptor within an aura of the sun must succeed on a caster level check (DC 11 +
your caster level), or the spell fails. Areas of magical darkness originating from 3rd-level or lower spells
and effects are temporarily suppressed when overlapping with an aura of the sun. Creatures that take penalties
in bright light also take them while within an aura of the sun, and an undead creature takes 1d6 points of positive
energy damage at the end of its turn every round that it spends within the spell's area.Furthermore, any creature
attempting to hide within the aura takes a -4 penalty on Hide checks.
This effect is centered on you and moves with you.
Anyone who enters the aura immediately becomes subject to its effect, but creatures that leave are no longer affected.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 8/10/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main
{
object oTarget = GetFirstInPersistentObject();
while(GetIsObjectValid(oTarget))
{
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_HIT_DIVINE), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, d6(1), DAMAGE_TYPE_DIVINE), oTarget);
}
oTarget = GetNextInPersistentObject();
}
}

View File

@@ -0,0 +1,105 @@
//:://////////////////////////////////////////////
//:: Name Axiomatic Storm
//:: FileName sp_axio_storm.nss
//:://////////////////////////////////////////////
/** @file
Conjuration (Creation)
Level: Cleric 3, Paladin 3,
Components: V, S, M, DF,
Casting Time: 1 standard action
Area: Cylinder (20-ft. radius, 20 ft. high)
Duration: 1 round/level (D)
Saving Throw: None
Spell Resistance: No
You call upon the forces of law and a heavy rain
begins to fall around you, its raindrops harsh and
metallic. Above you, a jet of caustic acid lances
down from the heavens.
A driving rain falls around you. It falls in a fixed
area once created. The storm reduces hearing and
visibility, resulting in a <20>4 penalty on Listen, Spot,
and Search checks. It also applies a <20>4 penalty on ranged
attacks made into, out of, or through the storm. Finally,
it automatically extinguishes any unprotected flames and
has a 50% chance to extinguish protected flames (such as
those of lanterns).
The rain damages chaotic creatures, dealing 2d6 points
of damage per round (chaotic outsiders take double damage).
In addition, each round, a gout of acid strikes a randomly
selected chaotic outsider within the spell's area, dealing
5d6 points of acid damage.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void DoAcid(int nCount, location lLoc, object oPC)
{
if(nCount >0)
{
object oChaotic = GetFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(20), lLoc);
{
while(GetIsObjectValid(oChaotic))
{
if(GetAlignmentLawChaos(oChaotic) == ALIGNMENT_CHAOTIC))
{
if(PRCGetRacialType(oChaotic) == RACIAL_TYPE_OUTSIDER))
{
//increment count of chaotic outsiders
nOutsiders++;
//Set as a target
SetLocalObject(oPC, "oAxioStorm" + IntToString(nOutsiders), oChaotic);
}
}
oChaotic = GetNextObjectInShape(SHAPE_SPHERE, FeetToMeters(20), lLoc);
}
}
//get a random number
int nRandom = Random(nOutsiders);
//Get the target
object oTarget = GetLocalObject(oPC, "oAxioStorm" + IntToString(nRandom));
//Deal acid damage
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, d6(5), DAMAGE_TYPE_ACID));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_ACID), oTarget);
//another round down
nCount--;
nOutsiders=0;
if(nCount >0) DelayCommand(6.0f, DoAcid(nCount, lLoc, oPC));
}
}
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nCount = nCasterLvl;
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND)
{
fDur += fDur;
nCount += nCount;
}
//Apply AoE
effect eAoe = EffectAreaOfEffect(AOE_PER_AXIOMATIC_STORM);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eAoe, lLoc, fDur);
DoAcid(nCount, lLoc, oPC);
PRCSetSchool();
}

View File

@@ -0,0 +1,60 @@
//:://////////////////////////////////////////////
//:: Name Axiomatic Storm On Enter
//:: FileName sp_axio_stormA.nss
//:://////////////////////////////////////////////
/** @file
Conjuration (Creation)
Level: Cleric 3, Paladin 3,
Components: V, S, M, DF,
Casting Time: 1 standard action
Area: Cylinder (20-ft. radius, 20 ft. high)
Duration: 1 round/level (D)
Saving Throw: None
Spell Resistance: No
You call upon the forces of law and a heavy rain
begins to fall around you, its raindrops harsh and
metallic. Above you, a jet of caustic acid lances
down from the heavens.
A driving rain falls around you. It falls in a fixed
area once created. The storm reduces hearing and
visibility, resulting in a <20>4 penalty on Listen, Spot,
and Search checks. It also applies a <20>4 penalty on ranged
attacks made into, out of, or through the storm. Finally,
it automatically extinguishes any unprotected flames and
has a 50% chance to extinguish protected flames (such as
those of lanterns).
The rain damages chaotic creatures, dealing 2d6 points
of damage per round (chaotic outsiders take double damage).
In addition, each round, a gout of acid strikes a randomly
selected chaotic outsider within the spell's area, dealing
5d6 points of acid damage.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oTarget = GetEnteringObject();
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
effect eLink = EffectLinkEffects(EffectSkillDecrease(SKILL_LISTEN, 4), EffectSkillDecrease(SKILL_SPOT, 4));
eLink = EffectLinkEffects(eLink, EffectSkillDecrease(SKILL_SEARCH, 4));
//Apply permanently, AoE exit will remove
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget);
if GetWeaponRanged(oItem)
{
SPApplyEffectToObject(DURAITON_TYPE_TEMPORARY, EffectAttackDecrease(4), oTarget, 6.0f)
}
//Can't do hit penalty to ranged, approximate with hit chance
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectConcealment(20, MISS_CHANCE_TYPE_VS_RANGED), oTarget);
}

View File

@@ -0,0 +1,60 @@
//:://////////////////////////////////////////////
//:: Name Axiomatic Storm
//:: FileName sp_axio_storm.nss
//:://////////////////////////////////////////////
/** @file
Conjuration (Creation)
Level: Cleric 3, Paladin 3,
Components: V, S, M, DF,
Casting Time: 1 standard action
Area: Cylinder (20-ft. radius, 20 ft. high)
Duration: 1 round/level (D)
Saving Throw: None
Spell Resistance: No
You call upon the forces of law and a heavy rain
begins to fall around you, its raindrops harsh and
metallic. Above you, a jet of caustic acid lances
down from the heavens.
A driving rain falls around you. It falls in a fixed
area once created. The storm reduces hearing and
visibility, resulting in a <20>4 penalty on Listen, Spot,
and Search checks. It also applies a <20>4 penalty on ranged
attacks made into, out of, or through the storm. Finally,
it automatically extinguishes any unprotected flames and
has a 50% chance to extinguish protected flames (such as
those of lanterns).
The rain damages chaotic creatures, dealing 2d6 points
of damage per round (chaotic outsiders take double damage).
In addition, each round, a gout of acid strikes a randomly
selected chaotic outsider within the spell's area, dealing
5d6 points of acid damage.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oCaster = GetAreaOfEffectCreator();
object oTarget = GetExitingObject();
effect eToDispel = GetFirstEffect(oTarget);
while(GetIsEffectValid(eToDispel))
{
if(GetEffectSpellId(eToDispel) == SPELL_AXIOMATIC_STORM)
{
RemoveEffect(oTarget, eToDispel);
}
eToDispel = GetNextEffect(oTarget);
}
}
}

View File

@@ -0,0 +1,51 @@
//:://////////////////////////////////////////////
//:: Name Axiomatic Storm
//:: FileName sp_axio_storm.nss
//:://////////////////////////////////////////////
/** @file
Conjuration (Creation)
Level: Cleric 3, Paladin 3,
Components: V, S, M, DF,
Casting Time: 1 standard action
Area: Cylinder (20-ft. radius, 20 ft. high)
Duration: 1 round/level (D)
Saving Throw: None
Spell Resistance: No
You call upon the forces of law and a heavy rain
begins to fall around you, its raindrops harsh and
metallic. Above you, a jet of caustic acid lances
down from the heavens.
A driving rain falls around you. It falls in a fixed
area once created. The storm reduces hearing and
visibility, resulting in a <20>4 penalty on Listen, Spot,
and Search checks. It also applies a <20>4 penalty on ranged
attacks made into, out of, or through the storm. Finally,
it automatically extinguishes any unprotected flames and
has a 50% chance to extinguish protected flames (such as
those of lanterns).
The rain damages chaotic creatures, dealing 2d6 points
of damage per round (chaotic outsiders take double damage).
In addition, each round, a gout of acid strikes a randomly
selected chaotic outsider within the spell's area, dealing
5d6 points of acid damage.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oTarget = GetEnteringObject();
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
if GetWeaponRanged(oItem)
{
SPApplyEffectToObject(oTarget, EffectAttackDecrease(4), 6.0f);
}
}

View File

@@ -0,0 +1,45 @@
//:://////////////////////////////////////////////
//:: Name Axiomatic Water
//:: FileName sp_axiowater.nss
//:://////////////////////////////////////////////
/** @file Transmutation [Lawful]
Level: Cleric 1, Paladin 1,
Components: V, S, M,
Casting Time: 1 minute
Range: Touch
Target: Flask of water touched
Duration: Instantaneous
Saving Throw: Will negates (object)
Spell Resistance: Yes (object)
You speak the ancient, slippery words as you pour the iron and silver into the flask. Despite the fact that there is more powder than will fit in the container, all of it dissolves, leaving a flask of water dotted with motes of gunmetal gray.
This transmutation imbues a flask (1 pint) of water with the order of law, turning it into axiomatic water. Axiomatic water damages chaotic outsiders the way holy water damages undead and evil outsiders. A flask of axiomatic water can be thrown as a splash weapon. Treat this attack as a ranged touch attack with a range increment of 10 feet. A flask breaks if thrown against the body of a corporeal creature, but to use it against an incorporeal creature, the bearer must open the flask and pout the axiomatic water out onto the target. Thus, a character can douse an incorporeal creature with axiomatic water only if he is adjacent to it. Doing so is a ranged touch attack that does not provoke attacks of opportunity.
A direct hit by a flask of axiomatic water deals 2d4 points of damage to a chaotic outsider. Each such creature within 5 feet of the point where the flask hits takes 1 point of damage from the splash.
Material Component: 5 pounds of powdered iron and silver (worth 25 gp).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/10/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
CreateItemOnObject("prc_axiowater", oPC, 1);
PRCSetSchool();
PRCSetSchool();
}

View File

@@ -0,0 +1,69 @@
//:://////////////////////////////////////////////
//:: Name Bladebane
//:: FileName sp_bladebane.nss
//:://////////////////////////////////////////////
/** @file Transmutation
Level: Paladin 2, Cleric 3, Sorcerer 4, Wizard 4,
Components: V, S, M,
Casting Time: 1 standard action
Range: Touch
Target: Weapon touched
Duration: 1 round/level
Saving Throw: Will negates (harmless, object)
Spell Resistance: Yes (harmless, object)
You impart a deadly quality to a single bladed weapon
(any slashing weapon) for a short time.
Bladebane confers the bane ability on the weapon touched,
against a creature type (and subtype, if necessary) of
your choice.
The weapon's enhancement bonus increases by +2 against
the appropriate creature type, and it deals +2d6 points
of bonus damage to those creatures.
Material Component: A drop of blood and ruby dust worth 500 gp.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/27/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
object oWeapon = PRCGetSpellTargetObject();
//only bladed
if(GetDamageTypeOfWeapon(oWeapon) != DAMAGE_TYPE_SLASHING)
{
SendMessageToPC(oPC, "Invalid target. This spell must target slashing weapons.");
return;
}
//+2 increase
int nBonus = IPGetWeaponEnhancementBonus(oWeapon) + 2;
//convo for race
SetLocalInt(oPC, "BladebaneRace");
StartDynamicConversation("prc_c_bladebane", oPC, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oPC);
int nRace = GetLocalInt(oPC, "BladebaneRace");
itemproperty iEnhance = ItemPropertyEnhancementBonusVsRace(nRace, nBonus)
itemproperty iDam = ItemPropertyDamageBonusVsRace(nRace, IP_CONST_DAMAGETYPE_SLASHING, IP_CONST_DAMAGEBONUS_2d6);
IPSafeAddItemProperty(oWeapon, iEnhance, fDur);
IPSafeAddItemProperty(oWeapon, iDam, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,65 @@
//:://////////////////////////////////////////////
//:: Name Blaze of Light
//:: FileName sp_blazelight.nss
//:://////////////////////////////////////////////
/** @file Evocation [Light]
Level: Paladin 1, Druid 2,
Components: V, S,
Casting Time: 1 standard action
Range: 60 ft.
Area: Cone
Duration: Instantaneous
Saving Throw: Fortitude negates
Spell Resistance: Yes
A cone of bright light shines forth from just above the caster's head.
All creatures within the cone that fail a Fortitude saving throw are dazzled for 1 minute.
Sightless creatures are not affected by blaze of light.
A light spell (one with the light descriptor) counters and dispels a darkness spell
(one with the darkness descriptor) of an equal or lower level.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/10/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
object oPC = OBJECT_SELF;
float fDur = 60.0f;
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
effect eVis = EffectVisualEffect(VFX_IMP_HEAD_HOLY);
float fRadius = FeetToMeters(60);
location lLoc = PRCGetSpellTargetLocation();
effect eDazzled = EffectLinkEffects(EffectAttackDecrease(1), EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED));
eDazzled = EffectLinkEffects(eDazzled, EffectSkillDecrease(SKILL_SPOT, 1));
eDazzled = EffectLinkEffects(eDazzled, EffectSkillDecrease(SKILL_SEARCH, 1));
object oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, fRadius, lLoc, TRUE);
while(GetIsObjectValid(oTarget))
{
//Resist
if(!PRCDoResistSpell(OBJECT_SELF, oTarget,CasterLvl) && (oTarget != OBJECT_SELF))
{
//Fort Save
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, PRCGetSaveDC(oTarget, oPC), SAVING_THROW_TYPE_SPELL, oPC))
{
//Not blind
if(!GetHasEffect(EFFECT_TYPE_BLINDNESS, oTarget))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDazzled, oTarget, fDur);
}
}
}
MyNextObjectInShape(SHAPE_SPELLCONE, fRadius, lLoc, TRUE);
}
PRCSetSchool();
}

View File

@@ -0,0 +1,45 @@
//:://////////////////////////////////////////////
//:: Name Blessed Aim
//:: FileName sp_blessedaim.nss
//:://////////////////////////////////////////////
/** @file Divination
Level: Blackguard 1, Cleric 1, Paladin 1,
Components: V, S,
Casting Time: 1 standard action
Range: 50 ft.
Effect: 50-ft.-radius spread centered on you
Duration: 1 minute/level
Saving Throw: Will negates (harmless)
Spell Resistance: No
With the blessing of your deity, you bolster your
allies' aim with an exhortation.
This spell grants your allies within the spread
a +2 morale bonus on ranged attack rolls.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On:
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_DIVINATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = 60 * nCasterLvl;
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
effect eAOE = EffectAreaOfEffect(AOE_PER_BLESSEDAIM);
SPApplyEffectToObejct(DURATION_TYPE_TEMPORARY, eAOE, oPC, fDur);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PULSE_HOLY), oPC);
PRCSetSchool();
}

View File

@@ -0,0 +1,47 @@
//:://////////////////////////////////////////////
//:: Name Blessed Aim on Enter
//:: FileName sp_blessedaimA.nss
//:://////////////////////////////////////////////
/** @file
Blessed Aim
Divination
Level: Blackguard 1, Cleric 1, Paladin 1,
Components: V, S,
Casting Time: 1 standard action
Range: 50 ft.
Effect: 50-ft.-radius spread centered on you
Duration: 1 minute/level
Saving Throw: Will negates (harmless)
Spell Resistance: No
With the blessing of your deity, you bolster your allies' aim with an exhortation.
This spell grants your allies within the spread a +2 morale bonus on ranged attack rolls.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On:
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
location lLoc = GetLocation(OBJECT_SELF);
object oItem;
object oTarget = GetEnteringObject();
{
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
if(GetIsReactionTypeFriendly(oTarget))
{
if GetWeaponRanged(oItem)
{
SPApplyEffectToObject(oTarget, EffectAttackIncrease(2), 6.0f)
}
}
}
}

View File

@@ -0,0 +1,32 @@
//::///////////////////////////////////////////////
//:: Name Blessed Aim On Exit
//:: FileName sp_blessedaimB.nss
//:://////////////////////////////////////////////
/**@file
Author: Tenjac
Created: 1/27/21
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
#include "prc_inc_spells"
#include "prc_add_spell_dc"
void main()
{
object oCaster = GetAreaOfEffectCreator();
object oTarget = GetExitingObject();
effect eToDispel = GetFirstEffect(oTarget);
while(GetIsEffectValid(eToDispel))
{
if(GetEffectSpellId(eToDispel) == SPELL_BLESSED_AIM)
{
RemoveEffect(oTarget, eToDispel);
}
eToDispel = GetNextEffect(oTarget);
}
}
}

View File

@@ -0,0 +1,47 @@
//:://////////////////////////////////////////////
//:: Name Blessed Aim Heartbeat
//:: FileName sp_blessedaimc.nss
//:://////////////////////////////////////////////
/** @file
Blessed Aim
Divination
Level: Blackguard 1, Cleric 1, Paladin 1,
Components: V, S,
Casting Time: 1 standard action
Range: 50 ft.
Effect: 50-ft.-radius spread centered on you
Duration: 1 minute/level
Saving Throw: Will negates (harmless)
Spell Resistance: No
With the blessing of your deity, you bolster your allies' aim with an exhortation.
This spell grants your allies within the spread a +2 morale bonus on ranged attack rolls.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On:
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
location lLoc = GetLocation(OBJECT_SELF);
object oItem;
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(50.0), lLoc, FALSE, OBJECT_TYPE_CREATURE);
{
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
if(GetIsReactionTypeFriendly(oTarget)
{
if GetWeaponRanged(oItem)
{
SPApplyEffectToObject(oTarget, EffectAttackIncrease(2), 6.0f)
}
}
oTarget = GetNextObjectInShape(SHAPE_SPHERE, FeetToMeters(50.0), lLoc, FALSE, OBJECT_TYPE_CREATURE);
}

View File

@@ -0,0 +1,61 @@
//:://////////////////////////////////////////////
//:: Name Blessing of the Righteous
//:: FileName sp_blessright.nss
//:://////////////////////////////////////////////
/** @file
Blessing of the Righteous
Evocation [Good]
Level: Cleric 4, Paladin 4,
Components: V, S, DF,
Casting Time: 1 standard action
Range: 40 ft.
Area: All allies in a 40-ft.-radius burst centered on you
Duration: 1 round/level
Saving Throw: Will negates (harmless)
Spell Resistance: Yes (harmless)
A sudden burst of warm, radiant light engulfs you and your allies.
The light fades quickly but lingers on the weapons of those affected.
You bless yourself and your allies.
You and your allies'melee and ranged attacks deal an extra 1d6 points
of holy damage and are considered good-aligned for the purpose of
overcoming damage reduction.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/26/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
location lLoc = PRCGetSpellTargetLocation();
int nBonus = DAMAGE_BONUS_1d6;
if (nMetaMagic & METAMAGIC_EXTEND) fDur *= 2;
if (nMetaMagic & METAMAGIC_MAXIMIZE) nBonus = DAMAGE_BONUS_6;
object oTarget = GetFirstObjectinShape(SHAPE_SPHERE, FeetToMeters(40.0), lLoc);
while (GetIsObjectValid(oTarget))
{
//if it's friendly
if(GetIsReactionTypeFriendly(oTarget))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDamageIncrease(nBonus, DAMAGE_TYPE_POSITIVE), oTarget, fDur);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HOLY_AID), oTarget);
}
OTarget = GetNextObjectInShape(SHAPE_SPHERE, FeetToMeters(40.0), lLoc);
PRCSetSchool();
}

View File

@@ -0,0 +1,49 @@
//:://////////////////////////////////////////////
//:: Name Call Mount
//:: FileName sp_callmount.nss
//:://////////////////////////////////////////////
/** @file Conjuration (Calling) [Good]
Level: Paladin 2,
Components: V,
Casting Time: 1 round
Range: 10 ft.
Effect: Your special mount
Duration: 1 hour/level (D)
Saving Throw: None
Spell Resistance: No
You summon your special mount from the celestial
planes where it resides.
This works exactly as your normal, spell-like class a
bility to summon the creature, except that the duration
is shorter and you are not limited in how many times
you can call the mount in a day (except by how many
times you can cast call mount).
You can cast this spell even if you have already
called your mount using your class ability on the same day.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 8/9/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = HoursToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
HorseSummonPaladinMount();
PRCSetSchool();
}

View File

@@ -0,0 +1,98 @@
//:://////////////////////////////////////////////
//:: Name Castigate
//:: FileName sp_castigate.nss
//:://////////////////////////////////////////////
/** @file Evocation [Sonic]
Level: Cleric 4, Paladin 4, Purification 4,
Components: V,
Casting Time: 1 standard action
Range: 10 ft.
Area: 10-ft.-radius burst centered on you
Duration: Instantaneous
Saving Throw: Fortitude half
Spell Resistance: Yes
Shouting your deity's teachings, you rebuke your foes with the magic
of your sacred words.
This spell has no effect on creatures that cannot hear.
All creatures whose alignment differs from yours on both
the law<61>chaos and the good<6F>evil axes take 1d4 points of damage
per caster level (maximum 10d4). All creatures whose alignment
differs from yours on one component take half damage, and this
spell does not deal damage to those who share your alignment.
A Fortitude saving throw reduces damage by half.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
int nDC = PRCGetSaveDC(oTarget, oPC);
float fDur = 3600 * nCasterLvl;
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
location lLoc = PRCGetSpellTargetLocation();
int nAlignGE = GetAlignmentGoodEvil(oPC);
int nAlignLC = GetAlignmentLawChaos(oPC);
int nTargetAlignGE;
int nTargetAlignLC;
int nDam;
int nLevels = min(10, nCasterLvl);
float fRadius = FeetToMeters(10);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_HOWL_WAR_CRY), oPC);
object oTarget = (MyFirstObjectInShape(SHAPE_SPHERE, fRadius. lLoc, FALSE));
while(GetIsObjectValid(oTarget))
{
//Not deaf
if(GetHasEffect(EFFECT_TYPE_DEAF, oTarget) == FALSE)
{
//SR
if(!PRCDoResistSpell(oPC, oTarget, nCasterLvl + SPGetPenetr()))
{
nTargetAlignGE = GetAlignmentGoodEvil(oTarget);
nTargetAlignLC = GetAlignmentLawChaos(oTarget);
//Test alignment differences
//Both
if(nAlignGE != nTargetAlignGE) && (nAlignLC != nTargetAlignLC)
{
nDam = d4(nLevels);
}
//Half for one
else if(nAlignGE != nTargetAlignGE) || (nAlignLC != nTargetAlignLC)
{
nDam = d4(nLevels)/2;
}
//save for half
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_DIVINE))
{
nDam = nDam/2;
}
if(nDam > 0)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDam, DAMAGE_TYPE_DIVINE), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectvisualEffect(VFX_IMP_HEAD_HOLY), oTarget);
}
}
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRadius. lLoc, FALSE);
}
PRCSetSchool();
}

View File

@@ -0,0 +1,72 @@
//:://////////////////////////////////////////////
//:: Name Checkmate's Light
//:: FileName sp_chkmlt.nss
//:://////////////////////////////////////////////
/** @file Evocation [Lawful]
Level: Paladin 2, Cleric 3,
Components: V, S, DF,
Casting Time: 1 standard action
Range: Touch
Target: Melee weapon touched
Duration: 1 round/level (D)
Saving Throw: None
Spell Resistance: No
You intone your deity's name and the weapon you touch hums a
harmonic response before it lights up with a soothing red glow.
You imbue the touched weapon with a +1 enhancement bonus per
three caster levels (maximum +5 at 15th level), and it is treated
as lawful-aligned for the purpose of overcoming damage reduction.
In addition, you can cause it to cast a red glow as bright as a torch.
Any creature within the radius of its clear illumination (20 feet)
gets a +1 morale bonus on saving throws against fear effects.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/14/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
object oWeapon = PRCGetSpellCastItem(oPC);
object oTarget = PRCGetSpellTargetObject(oPC);
if (GetIsObjectValid(oWeapon))
{
int nBonus = min(nCasterLvl, 15)/3;
//Simulating lawful as +3, so give +3 enhancement and penalty to damage and hit to offset
if(nBonus == 1)
{
AddItemProperty(oWeapon, DURATION_TYPE_TEMPORARY, ItemPropertyAttackPenalty(2), fDuration);
AddItemProperty(oWeapon, DURATION_TYPE_TEMPORARY, ItemPropertyDamagePenalty(2), fDuration);
nBonus=3;
}
if (nBonus == 2)
{
AddItemProperty(oWeapon, DURATION_TYPE_TEMPORARY, ItemPropertyAttackPenalty(1), fDuration);
AddItemProperty(oWeapon, DURATION_TYPE_TEMPORARY, ItemPropertyDamagePenalty(1), fDuration);
nBonus=3;
}
IPSafeAddItemProperty(oWeapon, DURATION_TYPE_TEMPORARY, ItemPropertyEnhancementBonus(nBonus), fDuration);
IPSafeAddItemProperty(oWeapon, DURATION_TYPE_TEMPORARY, ItemPropertyVisualEffect(ITEM_VISUAL_EVIL), fDuration);
PRCSetSchool();
}

View File

@@ -0,0 +1,45 @@
//:://////////////////////////////////////////////
//:: Name Clear Mind
//:: FileName sp_clearmind.nss
//:://////////////////////////////////////////////
/** @file
Clear Mind
Abjuration
Level: Paladin 1
Components: V, S, DF,
Casting Time: 1 standard action
Range: Personal
Target: You
Duration: 10 minutes/level
A silver glow sheathes your body as you complete the spell. As the glow fades, you feel a touch
of the divine at the back of your mind. This divine touch spreads until you feel your concerns
and anxieties fade away.
You gain a +4 sacred bonus on saving throws made against mind-affecting spells and effects.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/23/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = 600 * nCasterLvl;
effect eVis = EffectVisualEffect(VFX_DUR_AURA_BLUE_LIGHT);
effect eBuff = EffectSavingThrowIncrease(SAVING_THROW_ALL, 4, SAVING_THROW_TYPE_MIND_SPELLS);
SPApplyEffectToObject(oPC, DURATION_TYPE_TEMPORARY, eVis, 3.0f);
SPApplyEffectToObject(oPC, DURATION_TYPE_TEMPORARY, eBuff, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,47 @@
//:://////////////////////////////////////////////
//:: Name Cloak of Bravery
//:: FileName sp_cloakbrave.nss
//:://////////////////////////////////////////////
/** @file
Abjuration [Mind-Affecting]
Level: Paladin 2, Cleric 3, Courage 3,
Components: V, S,
Casting Time: 1 standard action
Range: 60 ft.
Area: 60-ft.-radius emanation centered on you
Duration: 10 minutes/level
Saving Throw: Will negates (harmless)
Spell Resistance: Yes (harmless)
Summoning up your courage, you throw out your arm and sweep
it over the area, cloaking all your allies in a glittering
mantle of magic that bolsters their bravery.
All allies within the emanation (including you) gain a morale
bonus on saves against fear effects equal to your caster level
(to a maximum of +10 at caster level 10th).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = HoursToSeconds(nCasterLvl)/6;
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(VFX_MOB_CLOAK_OF_BRAVERY), oPC, fDur);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_LIGHT_WHITE_20), oPC, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,49 @@
//:://////////////////////////////////////////////
//:: Name Cloak of Bravery On Enter
//:: FileName sp_cloakbraveA.nss
//:://////////////////////////////////////////////
/** @file
Abjuration [Mind-Affecting]
Level: Paladin 2, Cleric 3, Courage 3,
Components: V, S,
Casting Time: 1 standard action
Range: 60 ft.
Area: 60-ft.-radius emanation centered on you
Duration: 10 minutes/level
Saving Throw: Will negates (harmless)
Spell Resistance: Yes (harmless)
Summoning up your courage, you throw out your arm and sweep
it over the area, cloaking all your allies in a glittering
mantle of magic that bolsters their bravery.
All allies within the emanation (including you) gain a morale
bonus on saves against fear effects equal to your caster level
(to a maximum of +10 at caster level 10th).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oCreator = GetAreaOfEffectCreator();
int nCasterLvl = PRCGetCasterLevel(oCreator);
float fDur = HoursToSeconds(nCasterLvl)/6;
object oTarget = GetEnteringObject();
int nBonus = min(10, nCasterLvl);
if(GetFactionEqual(oCreator))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSavingThrowIncrease(SAVING_THROW_ALL, nBonus, SAVING_THROW_TYPE_FEAR), oTarget, fDur);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HEAD_HOLY), oTarget);
}
PRCSetSchool();
}

View File

@@ -0,0 +1,51 @@
//:://////////////////////////////////////////////
//:: Name Cloak of Bravery On Exit
//:: FileName sp_cloakbraveB.nss
//:://////////////////////////////////////////////
/** @file
Abjuration [Mind-Affecting]
Level: Paladin 2, Cleric 3, Courage 3,
Components: V, S,
Casting Time: 1 standard action
Range: 60 ft.
Area: 60-ft.-radius emanation centered on you
Duration: 10 minutes/level
Saving Throw: Will negates (harmless)
Spell Resistance: Yes (harmless)
Summoning up your courage, you throw out your arm and sweep
it over the area, cloaking all your allies in a glittering
mantle of magic that bolsters their bravery.
All allies within the emanation (including you) gain a morale
bonus on saves against fear effects equal to your caster level
(to a maximum of +10 at caster level 10th).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oCaster = GetAreaOfEffectCreator();
object oTarget = GetExitingObject();
effect eToDispel = GetFirstEffect(oTarget);
while(GetIsEffectValid(eToDispel))
{
if(GetEffectSpellId(eToDispel) == SPELL_CLOAK_OF_BRAVERY)
{
RemoveEffect(oTarget, eToDispel);
}
eToDispel = GetNextEffect(oTarget);
}
}
}

View File

@@ -0,0 +1,61 @@
//:://////////////////////////////////////////////
//:: Name Conduit of Life
//:: FileName sp_conduitlife.nss
//:://////////////////////////////////////////////
/** @file Conjuration (Healing)
Level: Cleric 2, Paladin 2,
Components: V, S,
Casting Time: 1 standard action
Range: Personal
Target: You
Duration: 10 minutes/level or until discharged
A small kernel of positive energy grows within your
heart, warming your whole body.
The next time you use a class feature or racial ability
to channel positive energy (such as turn undead or lay on hands),
you also heal a number of points of damage to yourself equal to
2d10+1/caster level (maximum 10).
If you are already subject to an ongoing healing effect
(such as vigor), or if you receive a cure spell while conduit
of life is still in effect, this spell instead heals a number of
points of damage equal to 3d8+1/caster level and it is discharged.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 8/5/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = nCasterLvl * 600.0f;
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
//Apply VFX
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_YELLOW_WHITE), oPC, fDur);
//Ongoing healing triggering
effect eTest = GetFirstEffect(oTarget);
while(GetIsEffectValid(eTest))
{
if (eTest == EffectRegenerate())
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(d8(3) + nCasterLvl), oPC);
PRCRemoveSpellEffects(SPELL_CONDUIT_OF_LIFE, oPC, oPC);
break;
}
eTest = GetNextEffect(oTarget);
}
PRCSetSchool();
}

View File

@@ -0,0 +1,62 @@
//:://////////////////////////////////////////////
//:: Name Curse of the Brute
//:: FileName sp_cursebrute.nss
//:://////////////////////////////////////////////
/** @file Transmutation
Level: Paladin 2, Cleric 3,
Components: V, S,
Casting Time: 1 action
Range: Touch
Target: Creature touched
Duration: 1 round/level
Saving Throw: Fortitude negates
Spell Resistance: Yes
You can grant an enhancement bonus up to +1 per caster
level to one physical ability of the creature touched
(Strength, Constitution, or Dexterity).
However, this temporarily suppresses both the creature's
Intelligence and Charisma, each by the amount of the
enhancement bonus. If this lowers any ability below 3,
the spell fails.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/17/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
int nAbilBuff;
object oTarget = PRCGetSpellTargetObject();
int nSpell = PRCGetSpellId();
//Get ability by which spell is used
if (nSpell == SPELL_CURSE_BRUTE_STR) nAbilBuff = ABILITY_STRENGTH;
if (nSpell == SPELL_CURSE_BRUTE_DEX) nAbilBuff = ABILITY_DEXTERITY;
if (nSpell == SPELL_CURSE_BRUTE_CON) nAbilBuff = ABILITY_CONSTITUTION;
//Get maximum bonus without lowering either stat below 3
int nBonus = min(GetAbilityScore(oTarget, ABILITY_CHARISMA), GetAbilityScore(oTarget, ABILITY_INTELLIGENCE)) - 3;
nBonus = min(nCasterLvl, nBonus);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityIncrease(nAbilBuff, nBonus), oTarget, fDur);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityDecrease(ABILITY_INTELLIGENCE, nBonus), oTarget, fDur);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityDecrease(ABILITY_CHARISMA, nBonus), oTarget, fDur);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_RED_LIGHT), oTarget, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,93 @@
//:://////////////////////////////////////////////
//:: Name Denounce
//:: FileName sp_denounce.nss
//:://////////////////////////////////////////////
/** @file
Enchantment [Mind-Affecting]
Level: Cleric 2, Paladin 2
Components: V, S,
Casting Time: 1 standard action
Range: Close (25 ft. + 5 ft./2 levels)
Target: One outsider
Duration: 1 min./level (D); see text
Saving Throw: Will negates; see text
Spell Resistance: Yes
You point your finger and pronounce judgment.
You instill feelings of shame and guilt in a target outsider, imposing a -4 insight penalty
on its attack rolls, saves, and checks. Each round on its turn, the subject can attempt a new
saving throw to end the effect.
(This is a full-round action that does not provoke attacks of opportunity).
Outsiders with the good subtype are immune to denounce.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 5/25/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void SaveCheck(object oTarget, object oPC, int nRounds)
{
if(GetHasSpellEffect(SPELL_DENOUNCE, oTarget))
{
//Save
if(PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, OBJECT_SELF)))
{
RemoveSpellEffects(SPELL_DENOUNCE);
}
//Loop for another round
else
{
nRounds--;
DelayCommand(6.0f, SaveCheck(oTarget, oPC, nRounds));
}
}
}
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ENCHANTMENT);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = 60.0f *(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
object oTarget = SPGetSpellTargetObject();
int nPenetr = nCaster + SPGetPenetr();
if(GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
{
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER)
{
//No good subtypes, interpret as good alignment
if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_GOOD)
{
SendMessageToPC(oPC, "Outsiders of good alignment are immune to Denounce."
}
//Non-good outsider; resolve spell
else
{
//SR
if(!PRCDoResistSpell(oCreator, oTarget, nPenetr))
{
//Save
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, OBJECT_SELF)))
{
effect eLink = EffectLinkEffects(EffectAttackDecrease(4), EffectSavingThrowDecrease(SAVING_THROW_ALL, 4));
eLink = EffectLinkEffects(eLink, EffectSkillDecrease(SKILL_ALL_SKILLS, 4));
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_AURA_PULSE_ORANGE_WHITE));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDur);
DelayCommand(6.0f, SaveCheck(oTarget, oPC, FloatToInt(fDur / 6)));
}
}
}
}
PRCSetSchool();
}

View File

@@ -0,0 +1,48 @@
//:://////////////////////////////////////////////
//:: Name Devastating Smite
//:: FileName sp_devsmite.nss
//:://////////////////////////////////////////////
/** @file Transmutation
Level: Blackguard 1, Cleric 1, Paladin 1,
Components: V, S, DF,
Casting Time: 1 swift action
Range: Touch
Target: Creature touched
Duration: 1 round or until discharged; see text
Saving Throw: Will negates (harmless)
Spell Resistance: Yes (harmless)
The next smite attack made by the subject deals double
its normal smite damage. For instance, a 9th-level paladin
normally deals an extra 9 points of damage with her smite
evil ability. Under the effect of this spell, she would
deal an extra 18 points of damage. The spell applies to
only one smite attack; if that attack misses, the spell
is lost without effect.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(1);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
//Apply VFX, handle damage in smite script
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_ORANGE_WHITE), oPC, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,77 @@
//:://////////////////////////////////////////////
//:: Name Diamondsteel
//:: FileName sp_diamondsteel.nss
//:://////////////////////////////////////////////
/** @file
Diamondsteel
Transmutation
Level: Paladin 3, Sorcerer 3, Wizard 3,
Components: V, S, M,
Casting Time: 1 standard action
Range: Touch
Target: Suit of metal armor touched
Duration: 1 round/level
Saving Throw: Will negates (object)
Spell Resistance: Yes (object)
You pass your hand over the suit of armor several times before finally touching it.
As you do so, you feel a warmth grow in the palm of your hand. The warmth passes into
the armor and manifests as a sparkling shine.
Diamondsteel enhances the strength of one suit of metal armor. The armor provides
damage reduction equal to half the AC bonus of the armor. This damage reduction can
be overcome only by adamantine weapons. For example, a suit of full plate would provide
damage reduction 4/adamantine, and a +1 breastplate (+6 AC) would provide damage reduction
3/adamantine.
Material Component: Diamond dust worth at least 50 gp.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/23/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
int oTarget = SPGetSpellTargetObject();
if(GetObjectType(oTarget)) == OBJECT_TYPE_ITEM
{
oArmor = oTarget;
}
if(GetObjectType(oTarget)) == OBJECT_TYPE_CREATURE
{
oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget);
}
int nMetaMagic = PRCGetMetaMagicFeat();
int nAC = GetBaseAC(oArmor);
//Must be metal
if(nAC > 3)
{
if(nMetaMagic & METAMAGIC_EXTEND)
{
fDur += fDur;
}
//Get amount for bonus - includes any +
int nBonus = GetItemACValue(oArmor)/2;
//Adamantine is x/+5
effect eDR = EffectDamageReduction(nBonus, DAMAGE_POWER_PLUS_FIVE);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDR, oTarget, fDur);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_AC_BONUS), oTarget);
}
else SendMessageToPC(oPC, "Invalid target. Target armor must be metal."
PRCSetSchool();
}

View File

@@ -0,0 +1,107 @@
//:://////////////////////////////////////////////
//:: Name Energy Shield
//:: FileName sp_enshield.nss
//:://////////////////////////////////////////////
/** @file Abjuration
Level: Paladin 2, Cleric 3
Components: V, S, DF,
Casting Time: 1 Standard Action
Range: Touch
Target: Shield touched
Duration: 1 round/level
Saving Throw: None
Spell Resistance: No
A silver aura surrounds the touched shield for a
moment before it appears to transform into the chosen
type of energy. The shield hums with power.
When this spell is cast, the shield touched appears
to be made entirely out of one type of energy (fire,
cold, electricity, acid, or sonic). Whoever bears the
shield gains resistance 10 against the chosen energy
type. Additionally, if the wielder successfully hits
someone with the shield with a shield bash attack, th
e victim takes 2d6 points of the appropriate energy
damage in addition to the normal shield bash damage.
The energy type must be chosen when the spell is cast
and cannot be changed during the duration of the spell.
The energy resistance overlaps (and does not stack)
with resist elements. A given shield cannot be the
subject of more than one lesser energized shield
or energized shield spell at the same time.
The descriptor of this spell is the same as the
energy type you choose when you cast it.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/19/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
#include "prc_inc_fork"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
object oTarget = PRCGetSpellTargetObject();
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
//Check that this is a shield, if not abort
if(GetIsShield(oShield) == FALSE)
{
SendMessageToPC(OBJECT_SELF, "Target has no equipped shield.");
break;
}
//The type of damage resistance we're choosing
int nDR;
//Get the type by which subradial spell is used to cast
int nSpell = GetSpellId();
if(nSpell == SPELL_ENERGIZED_SHIELD_FIRE)
{
nDR = IP_CONST_DAMAGETYPE_FIRE;
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_FIRE);
}
if(nSpell == SPELL_ENERGIZED_SHIELD_COLD)
{
nDR = IP_CONST_DAMAGETYPE_COLD;
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_COLD);
}
if(nSpell == SPELL_ENERGIZED_SHIELD_ELEC)
{
nDR = IP_CONST_DAMAGETYPE_ELECTRICAL;
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_ELECTRICAL);
}
if(nSpell == SPELL_ENERGIZED_SHIELD_ACID)
{
nDR = IP_CONST_DAMAGETYPE_ACID;
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_ACID);
}
if(nSpell == SPELL_ENERGIZED_SHIELD_SONIC)
{
nDR = IP_CONST_DAMAGETYPE_SONIC;
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_SONIC);
}
//Set local int for amount of shield damage on the wielder of the shield
SetLocalInt(oTarget, "EnShieldD6", 2);
//Schedule ints for deletion
DelayCommand(fDur, DeleteLocalInt(oTarget, "EnShieldType"));
DelayCommand(fDur, DeleteLocalInt(oTarget, "EnShieldD6"));
//Add resistance property
IPSafeAddItemProperty(oShield, ItemPropertyDamageResistance(nDR, 10), fDur, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
PRCSetSchool();
}

View File

@@ -0,0 +1,105 @@
//:://////////////////////////////////////////////
//:: Name Estana's Stew
//:: FileName sp_estanasstew.nss
//:://////////////////////////////////////////////
/** @file Conjuration (Healing)
Level: Cleric 2, Druid 2, Paladin 2,
Components: V, S, AF,
Casting Time: 1 round
Range: 0 ft.
Effect: Fills pot with healing stew (1 serving/2 levels)
Duration: Instantaneous (see text)
Saving Throw: Will half (harmless); see text
Spell Resistance: Yes (harmless)
This spell calls upon Estanna, goddess of hearth and home
, to fill a specially crafted stewpot with a potent healing stew.
The caster must be hold the pot in hand when Estanna's stew
is cast; otherwise, the spell fails and is wasted.
The spell creates one serving per two caster levels (maximum 5).
A single serving heals 1d6+1 points of damage and requires
a standard action to consume. Any portion of the stew that
is not consumed disappears after 1 hour.The stew can be
splashed onto a single undead creature within 10 feet.
If a ranged touch attack succeeds, the undead creature
takes 1d6+1 points of damage per serving splashed on it.
The undead creature can apply spell resistance and can
attempt a Will save to take half damage.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/20/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nSpell = GetSpellId();
if (nSpell == SPELL_ESTANAS_STEW)
{
object oItem = CreateItemOnObject("prc_estanasstew", oPC, 1);
int nServings = min(5, (nCasterLvl/2));
SetItemCharges(oItem, nServings);
}
if (nSpell == SPELL_ESTANAS_STEW_EAT)
{
int nHeal = d6(1) + 1;
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(nHeal), oPC);
}
if (nSpell == SPELL_ESTANAS_STEW_SPLASH)
{
object oItem = PRCGetSpellCastItem(OBJECT_SELF);
object oTarget = GetSpellTargetObject();
if(GetIsObjectValid(oTarget))
{
nTouch = TouchAttackRanged(oTarget);
}
// Check if we hit, or even have anything to hit!
if(nTouch >= 1)
{
int nServings = GetItemCharges(oItem);
//Chuck all of it
int nDam = (d6(1) + 1) * nServings;
// Critical hit?
if(nTouch == 2)
{
nDam *= 2;
}
int nPenetr = SPGetPenetr();
//Resist
if(!PRCDoResistSpell(OBJECT_SELF, oTarget nPenetr);
{
if(PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, OBJECT_SELF)))
{
nDam = nDam/2'
}
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_DIVINE), oTarget);
}
}
SPApplyEffectToObject(DURATION_TYPER_INSTANT, EffectVisualEffect(VFX_COM_CHUNK_YELLOW_SMALL), oTarget);
}
//Remove the object
DestroyObject(oItem);
}
PRCSetSchool();
}

View File

@@ -0,0 +1,72 @@
//:://////////////////////////////////////////////
//:: Name Favor of the Martyr
//:: FileName sp_favormartyr.nss
//:://////////////////////////////////////////////
/** @file
Necromancy
Level: Paladin 4,
Components: V, S,
Casting Time: 1 standard action
Range: Medium (100 ft. + 10 ft./level)
Target: One willing creature
Duration: 1 minute/level
Saving Throw: None
Spell Resistance: Yes (harmless)
Calling upon the saints of your order, you imbue the person
in need with the power to resist the dire forces arrayed
against you.
The subject gains immunity to nonlethal damage, charm and
compulsion effects, and attacks that function specifically
by causing pain, such as the wrack spell (see page 243). it
is further immune to effects that would cause it to be dazed,
exhausted, fatigued, nauseated, sickened, staggered, or stunned.
The subject remains conscious at -1 to -9 hit points and can
take a single action each round while in that state, and does
not lose hit point for acting. If any of the above conditions
were in effect on the subject at the time of casting, they are
suspended for the spell's duration. (Thus, an unconscious
subject becomes conscious and functional.)
When the spell ends, any effects suspended by the spell that
have not expired in the interim (such as the fatigued condition,
which normally requires 8 hours of rest to recover from) return.
Effects that expired during the duration of this spell do not
resume when it ends.
In addition to these effects, the subject gains the benefit of
the Endurance feat for the duration of the spell.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/29/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = 60.0f * (nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
object oTarget = PRCGetSpellTargetObject();
//Immunities
effect eLink = EffectLinkEffects(EffectImmunity(IMMUNITY_TYPE_CHARM), EffectImmunity(IMMUNITY_TYPE_DAZED));
eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_STUN));
//+4 Save vs Death
eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, 4, SAVING_THROW_TYPE_DEATH));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,67 @@
//:://////////////////////////////////////////////
//:: Name Forceward
//:: FileName sp_forceward.nss
//:://////////////////////////////////////////////
/** @file Abjuration
Level: Cleric 3 (Helm), Paladin 3, Knight of the Weave 3,
Components: V, S, DF,
Casting Time: 1 full round
Range: 10 ft.
Area: 10-ft.-radius emanation centered on you
Duration: 1 minute/level
Saving Throw: Will negates
Spell Resistance: Yes
You create an unmoving, transparent sphere of force
centered on your location.
The sphere illuminates its interior and everything
within 5 feet of its edge.
You and your allies may enter the sphere at will.
Any other creature that tries to enter the sphere must
make a Will saving throw, otherwise it cannot pass into
the area defined by the sphere.
A creature may leave the area freely, although it must
make a Will save to enter again, even if the creature
is you or one of your allies.
Creatures within the area when the spell is cast are not
forced out.
The forceward does not prevent spells or objects from
entering the forceward, so it is possible for two creatures
on opposite sides of the forceward's edge to fight without
penalties (although creatures using unarmed attacks or
natural weapons still have tomake Will saves every round
for their attacks to have a chance of entering the forceward).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 07/04/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
location lLoc = GetLocation(oPC);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(VFX_PER_FORCEWARD), lLoc, fDur);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_LIGHT_ORANGE_15), lLoc, fDur);
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, 3.048f, lLoc, FALSE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oTarget))
{
SetLocalInt(oTarget, "PRCForcewardEntry", 1)
oTarget = MyNextObjectInShape(SHAPE_SPHERE, 3.048f, lLoc, FALSE, OBJECT_TYPE_CREATURE);
}
PRCSetSchool();
}

View File

@@ -0,0 +1,60 @@
//:://////////////////////////////////////////////
//:: Name Forceward On Enter
//:: FileName sp_forcewardA.nss
//:://////////////////////////////////////////////
/** @file Abjuration
Level: Cleric 3 (Helm), Paladin 3, Knight of the Weave 3,
Components: V, S, DF,
Casting Time: 1 full round
Range: 10 ft.
Area: 10-ft.-radius emanation centered on you
Duration: 1 minute/level
Saving Throw: Will negates
Spell Resistance: Yes
You create an unmoving, transparent sphere of force
centered on your location.
The sphere illuminates its interior and everything
within 5 feet of its edge.
You and your allies may enter the sphere at will.
Any other creature that tries to enter the sphere must
make a Will saving throw, otherwise it cannot pass into
the area defined by the sphere.
A creature may leave the area freely, although it must
make a Will save to enter again, even if the creature
is you or one of your allies.
Creatures within the area when the spell is cast are not
forced out.
The forceward does not prevent spells or objects from
entering the forceward, so it is possible for two creatures
on opposite sides of the forceward's edge to fight without
penalties (although creatures using unarmed attacks or
natural weapons still have tomake Will saves every round
for their attacks to have a chance of entering the forceward).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 07/04/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oTarget = GetEnteringObject();
object oCreator = GetAreaOfEffectCreator();
int nDC = PRCGetSaveDC(oTarget, oCreator);
int nCasterLvl = PRCGetCasterLevel(oCreator);
location lAOE = GetLocation(OBJECT_SELF);
//Will save if it doesn't have the local int
if(!GetLocalInt(oTarget, "PRCForcewardEntry"))
{
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE, oCreator))
{
ActionMoveAwayFromLocation(lAOE, FALSE, 3.048f);
}
}
}

View File

@@ -0,0 +1,44 @@
//:://////////////////////////////////////////////
//:: Name Forceward On Exit
//:: FileName sp_forcewardB.nss
//:://////////////////////////////////////////////
/** @file
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/4/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oTarget = GetExitingObject();
if(GetLocalInt(oTarget, "PRCForcewardEntry"))
{
DeleteLocalInt(oTarget, "PRCForcewardEntry"));
}
effect eAOE;
if(GetHasSpellEffect(SPELL_SOLID_FOG, oTarget))
{
//Search through the valid effects on the target.
eAOE = GetFirstEffect(oTarget);
while (GetIsEffectValid(eAOE))
{
if (GetEffectCreator(eAOE) == GetAreaOfEffectCreator())
{
//If the effect was created by either half of Fog from the Void
if(GetEffectSpellId(eAOE) == SPELL_SOLID_FOG)
{
RemoveEffect(oTarget, eAOE);
}
}
}
//Get next effect on the target
eAOE = GetNextEffect(oTarget);
}
}

View File

@@ -0,0 +1,135 @@
//:://////////////////////////////////////////////
//:: Name Glory of the Martyr
//:: FileName sp_glorymartyr.nss
//:://////////////////////////////////////////////
/** @file Abjuration [Good]
Level: Champion of Gwynharwyf 4, Paladin 4,
Components: V, S, AF, DF,
Casting Time: 1 standard action
Range: Close (25 ft. + 5 ft./2 levels)
Target: One creature/level
Duration: 1 hour/level (D)
Saving Throw: Will negates (harmless)
Spell Resistance: Yes (harmless)
Like shield other, this spell wards the subjects,
creating a mystic connection between them and you
so that some of their wounds are transferred to you.
The subjects each gain a +1 deflection bonus to AC
and a +1 resistance bonus on saves.
All the subjects take only half damage from all
wounds and attacks that deal them hit point damage.
The amount of damage not taken by all the warded
creatures is taken by you.
Forms of harm that do not involve hit points, such
as charm effects, temporary ability damage, level
draining, and disintegration, are not affected.
If a subject suffers a reduction of hit points
from a lowered Constitution score, the reduction
is not split with you because it is not hit point damage.
When the spell ends, subsequent damage is no
longer divided between you and the subjects, but
damage already split is not reassigned to the
subjects.
If you die while this spell is in effect, the spell
ends in a burst of positive energy that restores 1d8
hit points to each subject.
If a subject moves out of range of the spell, that
subject's connection to you is severed but the spell
continues as long as there is at least one subject
remaining and you remain alive.
Focus: A platinum ring (worth at least 50 gp) worn
by you and each subject of the spell.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void DispelMonitor(object oManifester, object oTarget, int nSpellID, int nManifesterLevel, int nBeatsRemaining);
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = HoursToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
int nBeatsRemaining = FloatToInt(fDur)/6;
int nMaxTargets = nCasterLvl;
float fRadius = FeetToMeters(25.0f + (5.0f * (nCasterLvl / 2))))
location lLoc = GetLocation(oPC);
int nSpell = GetSpellId();
effect eDurPos = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_POSITIVE);
effect eDurNeg = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRadius, lLoc, FALSE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oTarget) && nMaxTargets >0)
{
if(oTarget != oPC)
{
if(GetIsReactionTypeFriendly(oTarget))
{
// Get the OnHitCast: Unique on the caster's armor / hide
ExecuteScript("prc_keep_onhit_a", oPC);
// Hook eventscript
AddEventScript(oPC, EVENT_ONHIT, "psi_pow_shrpnaux", TRUE, FALSE);
// Store the target for use in the damage script
SetLocalObject(oPC, "PRC_Power_SharePain_Target", oTarget);
//Apply bonuses to target
effect eLink = EffectLinkEffects(EffectACIncrease(1, AC_DEFLECTION_BONUS), EffectSavingThrowIncrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_ALL));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDur);
// Do VFX for the monitor to look for
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDurNeg, oTarget, fDur, TRUE, nSpell, nCasterLvl);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDurPos, oPC, fDur, TRUE, nSpell, nCasterLvl);
// Start effect end monitor
DelayCommand(6.0f, DispelMonitor(oPC, oTarget, nSpell, nCasterLvl, nBeatsRemaining);
nMaxTargets--;
}
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRadius, lLoc, FALSE, OBJECT_TYPE_CREATURE);
}
PRCSetSchool();
}
void DispelMonitor(object oPC, object oTarget, int nSpellID, int CasterLvl, int nBeatsRemaining)
{
// Has the power ended since the last beat, or does the duration run out now
if((--nBeatsRemaining == 0) ||
GetIsDead(oTarget) ||
PRCGetDelayedSpellEffectsExpired(nSpellID, oTarget, oPC) ||
PRCGetDelayedSpellEffectsExpired(nSpellID, oPC, oPC) ||
GetDistanceBetween(oPC, oTarget) > FeetToMeters(25.0f + (5.0f * (nCasterLvl / 2))))
{
if(DEBUG) DoDebug("Glory of the Martyr: Effect expired, clearing");
// Clear the target local
DeleteLocalObject(PC, "PRC_Power_SharePain_Target");
// Remove the eventscript
RemoveEventScript(oPC, EVENT_ONHIT, "psi_pow_shrpnaux", TRUE, FALSE);
// Remove remaining effects
PRCRemoveSpellEffects(nSpellID, oPC, oTarget);
PRCRemoveSpellEffects(nSpellID, oPC, oPC);
}
else
{
nBeatsRemaining --;
DelayCommand(6.0f, DispelMonitor(oPC, oTarget, nSpellID, nCasterLvl, nBeatsRemaining));
}

View File

@@ -0,0 +1,46 @@
//:://////////////////////////////////////////////
//:: Name Holy Fire
//:: FileName sp_holyfire.nss
//:://////////////////////////////////////////////
/** @file Evocation [Fire, Good]
Level: Cleric 2, Paladin 3,
Components: V, S, DF,
Casting Time: 1 swift action
Range: Personal
Target: You
Duration: 1 round
All undead within range of your next turning attempt
(if you make it before this spell's duration expires)
are especially vulnerable to the attempt. Whether you
succeed in turning them or not, the undead take hit
point damage equal to the result of your turning damage
roll. This damage is half fire and half sacred energy.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/21/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(1);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
//Set a VFX
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MAJOR), oPC);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(VFX_MOB_HOLYFIRE), oPC);
PRCSetSchool();
}

View File

@@ -0,0 +1,35 @@
//:://////////////////////////////////////////////
//:: Name Holy Fire On Enter
//:: FileName sp_holyfireA.nss
//:://////////////////////////////////////////////
/** @file Evocation [Fire, Good]
Level: Cleric 2, Paladin 3,
Components: V, S, DF,
Casting Time: 1 swift action
Range: Personal
Target: You
Duration: 1 round
All undead within range of your next turning attempt
(if you make it before this spell's duration expires)
are especially vulnerable to the attempt. Whether you
succeed in turning them or not, the undead take hit
point damage equal to the result of your turning damage
roll. This damage is half fire and half sacred energy.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/21/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oTarget = GetEnteringObject();
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_YELLOW_ORANGE), oTarget, 6.0f);
}

View File

@@ -0,0 +1,46 @@
//:://////////////////////////////////////////////
//:: Name Holy Fire On Exit
//:: FileName sp_holyfireB.nss
//:://////////////////////////////////////////////
/** @file Evocation [Fire, Good]
Level: Cleric 2, Paladin 3,
Components: V, S, DF,
Casting Time: 1 swift action
Range: Personal
Target: You
Duration: 1 round
All undead within range of your next turning attempt
(if you make it before this spell's duration expires)
are especially vulnerable to the attempt. Whether you
succeed in turning them or not, the undead take hit
point damage equal to the result of your turning damage
roll. This damage is half fire and half sacred energy.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/21/2022
//:://////////////////////////////////////////////
#include "prc_inc_spells"
#include "prc_add_spell_dc"
void main()
{
object oCaster = GetAreaOfEffectCreator();
object oTarget = GetExitingObject();
effect eToDispel = GetFirstEffect(oTarget);
while(GetIsEffectValid(eToDispel))
{
if(GetEffectSpellId(eToDispel) == SPELL_HOLY_FIRE)
{
RemoveEffect(oTarget, eToDispel);
}
eToDispel = GetNextEffect(oTarget);
}
}
}

View File

@@ -0,0 +1,62 @@
//:://////////////////////////////////////////////
//:: Name Holy Storm
//:: FileName sp_holystorm.nss
//:://////////////////////////////////////////////
/** @file
Conjuration (Creation) [Good, Water]
Level: Cleric 3, Paladin 3,
Components: V, S, M, DF,
Casting Time: 1 standard action
Range: 20 ft.
Area: Cylinder (20-ft. radius, 20 ft. high)
Duration: 1 round/level (D)
Saving Throw: None
Spell Resistance: No
You call upon the forces of good, and a heavy rain begins to fall
around you, its raindrops soft and warm.
A driving rain falls around you. It falls in a fixed area once
created. The storm reduces hearing and visibility, resulting in a
-4 penalty on Listen, Spot, and Search checks. It also applies a
-4 penalty on ranged attacks made into, out of, or through the
storm. Finally, it automatically extinguishes any unprotected
flames and has a 50% chance to extinguish protected flames
(such as those of lanterns).
The rain damages evil creatures, dealing 2d6 points of damage
per round (evil outsiders take double damage) at the beginning
of your turn.
Material Component: A flask of holy water (25 gp).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/9/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
//VFX
effect eVis = EffectVisualEffect(VFX_FNF_STORM);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lTarget);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_PER_STORM, "sp_holystormA", "sp_holystormB", "sp_holystormC"), lTarget, fDur);
object oAoE = GetAreaOfEffectObject(lTarget, "VFX_PER_STORM");
SetAllAoEInts(SPELL_HOLY_STORM, oAoE, PRCGetSpellSaveDC(SPELL_HOLY_STORM, SPELL_SCHOOL_CONJURATION), 0, PRCGetCasterLevel(oPC));
PRCSetSchool();
}

View File

@@ -0,0 +1,48 @@
//:://////////////////////////////////////////////
//:: Name Holy Storm On Enter
//:: FileName sp_holystormA.nss
//:://////////////////////////////////////////////
/** @file
Conjuration (Creation) [Good, Water]
Level: Cleric 3, Paladin 3,
Components: V, S, M, DF,
Casting Time: 1 standard action
Range: 20 ft.
Area: Cylinder (20-ft. radius, 20 ft. high)
Duration: 1 round/level (D)
Saving Throw: None
Spell Resistance: No
You call upon the forces of good, and a heavy rain begins to fall
around you, its raindrops soft and warm.
A driving rain falls around you. It falls in a fixed area once
created. The storm reduces hearing and visibility, resulting in a
-4 penalty on Listen, Spot, and Search checks. It also applies a
-4 penalty on ranged attacks made into, out of, or through the
storm.
The rain damages evil creatures, dealing 2d6 points of damage
per round (evil outsiders take double damage) at the beginning
of your turn.
Material Component: A flask of holy water (25 gp).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/9/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oTarget = GetEnteringObject();
effect ePenalty = EffectLinkEffects(EffectSkillDecrease(SKILL_LISTEN, 4), EffectSkillDecrease(SKILL_SPOT), 4));
ePenalty = EffectLinkEffects(ePenalty, EffectSkillDecrease(SKILL_SEARCH, 4));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePenalty, oTarget, RoundsToSeconds(1));
}

View File

@@ -0,0 +1,53 @@
//:://////////////////////////////////////////////
//:: Name Holy Storm On Enter
//:: FileName sp_holystormA.nss
//:://////////////////////////////////////////////
/** @file
Conjuration (Creation) [Good, Water]
Level: Cleric 3, Paladin 3,
Components: V, S, M, DF,
Casting Time: 1 standard action
Range: 20 ft.
Area: Cylinder (20-ft. radius, 20 ft. high)
Duration: 1 round/level (D)
Saving Throw: None
Spell Resistance: No
You call upon the forces of good, and a heavy rain begins to fall
around you, its raindrops soft and warm.
A driving rain falls around you. It falls in a fixed area once
created. The storm reduces hearing and visibility, resulting in a
-4 penalty on Listen, Spot, and Search checks. It also applies a
-4 penalty on ranged attacks made into, out of, or through the
storm.
The rain damages evil creatures, dealing 2d6 points of damage
per round (evil outsiders take double damage) at the beginning
of your turn.
Material Component: A flask of holy water (25 gp).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/9/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
object oTarget = GetExitingObject();
effect eToDispel = GetFirstEffect(oTarget);
while(GetIsEffectValid(eToDispel))
{
if(GetEffectSpellId(eToDispel) == SPELL_HOLY_STORM)
{
RemoveEffect(oTarget, eToDispel);
}
eToDispel = GetNextEffect(oTarget);
}
}

View File

@@ -0,0 +1,76 @@
//:://////////////////////////////////////////////
//:: Name Holy Storm On Enter
//:: FileName sp_holystormA.nss
//:://////////////////////////////////////////////
/** @file
Conjuration (Creation) [Good, Water]
Level: Cleric 3, Paladin 3,
Components: V, S, M, DF,
Casting Time: 1 standard action
Range: 20 ft.
Area: Cylinder (20-ft. radius, 20 ft. high)
Duration: 1 round/level (D)
Saving Throw: None
Spell Resistance: No
You call upon the forces of good, and a heavy rain begins to fall
around you, its raindrops soft and warm.
A driving rain falls around you. It falls in a fixed area once
created. The storm reduces hearing and visibility, resulting in a
-4 penalty on Listen, Spot, and Search checks. It also applies a
-4 penalty on ranged attacks made into, out of, or through the
storm.
The rain damages evil creatures, dealing 2d6 points of damage
per round (evil outsiders take double damage) at the beginning
of your turn.
Material Component: A flask of holy water (25 gp).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/9/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
location lLoc = GetLocation(OBJECT_SELF);
int nDam;
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, 6.096f, lLoc, FALSE, OBJECT_TYPE_CREATURE);
effect ePenalty = EffectLinkEffects(EffectSkillDecrease(SKILL_LISTEN, 4), EffectSkillDecrease(SKILL_SPOT), 4));
ePenalty = EffectLinkEffects(ePenalty, EffectSkillDecrease(SKILL_SEARCH, 4));
while(GetIsObjectValid(oTarget))
{
//Penalties to skills
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePenalty, oTarget, RoundsToSeconds(1));
//Penalty to attack if ranged equipped
if(GetWeaponRanged(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAttackDecrease(4), 6.0f);
}
//Bonus AC vs Ranged?
//if evil
if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL)
{
nDam = d6(2);
//if outsider
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER)
{
nDam+=nDam;
}
//damage
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(DAMAGE_TYPE_DIVINE, nDam, oTarget));
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, 6.096f, lLoc, FALSE, OBJECT_TYPE_CREATURE);
}
}

View File

@@ -0,0 +1,130 @@
//:://////////////////////////////////////////////
//:: Name Invoke the Cerulean Sign
//:: FileName sp_invCS.nss
//:://////////////////////////////////////////////
/** @file
Evocation
Level: Druid 2, Ranger 2, Bard 3, Cleric 3, Paladin 3, Sorcerer 3, Wizard 3,
Components: S,
Casting Time: 1 standard action
Range: 30 ft.
Area: Multiple aberrations whose combined total Hit Dice do not exceed twice
caster level in a spread emanating from the character to the extreme of the range
Duration: Instantaneous
Saving Throw: Fortitude negates
Spell Resistance: No
The cerulean sign is an ancient symbol said to embody
the purity of the natural world, and as such it is
anathema to aberrations.
While druids and rangers are the classes most often
known to cast this ancient spell, its magic is nearly
universal and can be mastered by all spellcasting classes.
When you cast this spell, you trace the cerulean sign
in the air with a hand, leaving a glowing blue rune
in the air for a brief moment before it flashes and fills
the area of effect with a pulse of cerulean light.
Any aberration within the area must make a Fortitude
saving throw or suffer the following ill effects.
Closer aberrations are affected first.
Each effect lasts for 1 round.
None: The aberration suffers no ill effect, even if it fails the
saving throw.
Sickened: The aberration takes a -2 penalty on attack
rolls, saving throws, skill checks, and ability checks for 1 round.
Nauseated: The aberration cannot attack, cast spells, concentrate
on spells, or do anything but take a single move action for 1 round.
Dazed: The aberration can take no actions, but has no penalty to
its Armor Class, for 1 round.
Stunned: The aberration drops everything held, can't take actions,
takes a -2 penalty to AC, and loses its Dexterity bonus to AC (if any)
for 1 round.
Once a creature recovers from an effect, it moves up one level on the table.
Thus, a creature that is stunned by this spell is dazed the round after
that, nauseated the round after that, sickened the round after that, and
then recovers fully the next round.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/13/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
#include "prc_effect_inc"
void DoDrop(object oTarget)
{
object oTargetWep = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
object oOffhand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
object oNewWeap = CopyObject(oTargetWep, GetLocation(oTarget));
object oNewOff = CopyObject(oOffhand, GetLocation(oTarget));
DestroyObject(oTargetWep);
DestroyObject(oOffhand);
}
void DoSign(object oTarget)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FROST_L), oTarget);
//2nd round sickened
DelayCommand(6.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSickened(), oTarget, 6.0f));
//3rd round Nauseated
DelayCommand(12.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectNausea(oTarget, 6.0f), oTarget, 6.0f));
//4th round Dazed
DelayCommand(18.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneParalyze(), oTarget, 6.0f));
//5th round Stunned
DelayCommand(24.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneParalyze(), oTarget, 6.0f));
DelayCommand(24.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectACDecrease(2), oTarget, 6.0f));
DelayCommand(24.0f, DoDrop(oTarget));
//6th round Dazed
DelayCommand(30.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneParalyze(), oTarget, 6.0f));
//7th round Nauseated
DelayCommand(36.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectNausea(oTarget, 6.0f), oTarget, 6.0f));
//8th round sickened
DelayCommand(42.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSickened(), oTarget, 6.0f));
}
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
int nDice = nCasterLvl * 2;
location lLoc = GetLocation(oPC);
int nTargetDice;
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FROST_L), oPC);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HASTE), oPC);
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, 9.144f, lLocl, FALSE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid && nDice > 0)
{
//Aberration
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_ABERRATION)
{
//Save
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, PRCGetSaveDC(oTarget, oPC)))
{
nTargetDice = GetHitDice(oTarget);
if(nDice >= nTargetDice)
{
nDice -= nTargetDice;
DoSign(oTarget);
}
}
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, 9.144f, lLocl, FALSE, OBJECT_TYPE_CREATURE);
}
PRCSetSchool();
}

View File

@@ -0,0 +1,46 @@
//:://////////////////////////////////////////////
//:: Name Irresistable Force
//:: FileName sp_irresforce.nss
//:://////////////////////////////////////////////
/** @file Evocation
Level: Paladin 4,
Components: V, S,
Casting Time: 1 action
Range: Personal
Target: You
Duration: 1 round/level
Charging yourself with divine energy, you become the epitome of force in motion.
You are protected by freedom of movement.
You gain a +10 bonus on bull rush attempts.
You gain a +10 bonus on checks made to avoid being tripped.
When moving in combat, you act as if you had the Mobility feat.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/14/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
//Freedom of Movement
effect eLink = EffectLinkEffects(EffectImmunity(IMMUNITY_TYPE_PARALYSIS), EffectImmunity(IMMUNITY_TYPE_SLOW));
eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_ENTANGLE));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
//Mobility
IPSafeAddItemProperty(GetPCSkin(oPC), PRCItemPropertyBonusFeat(FEAT_MOBILITY), fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,49 @@
//:://////////////////////////////////////////////
//:: Name Lesser Aspect of the Diety
//:: FileName sp_laspdiety.nss
//:://////////////////////////////////////////////
/** @file
Transmutation [Good]
Level: Apostle of Peace 4, Exalted Arcanist 4, Paladin 4, Knight of the Chalice 4,
Components: V, S, DF,
Casting Time: 1 standard action
Range: Personal
Target: You
Duration: 1 round/level
When you cast this spell, your body changes into a form that is more like
your deity (in a very limited fashion, of course).
You gain a +4 enhancement bonus to your Charisma score.
You also gain acid, cold, and electricity resistance 10.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/7/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
effect eLink = EffectAbilityIncrease(ABILITY_CHARISMA, 4);
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ACID, 10));
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_COLD, 10));
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, 10));
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_IOUNSTONE_YELLOW));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,67 @@
//:://////////////////////////////////////////////
//:: Name Lesser Aura of Cold
//:: FileName sp_lauracold.nss
//:://////////////////////////////////////////////
/** @file Transmutation [Cold]
Level: Cleric 3, Druid 3, Disciple of Thrym 3, Paladin 4, Ranger 4,
Components: V, S, DF,
Casting Time: 1 standard action
Range: 5 ft.
Area: 5-ft.-radius spherical emanation, centered on you
Duration: 1 round/level (D)
Saving Throw: None
Spell Resistance: Yes
You are covered in a thin layer of white frost and frigid cold emanates from your
body, dealing 1d6 points of cold damage at the start of your round to each creature
within 5 feet.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 6/8/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void DoCold(object oPC, int nRounds)
{
if(nRounds > 0)
{
location lLoc=GetLocation(oPC);
//Do the AoE
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE,FeetToMeters(5.0), lLoc);
{
while(GetIsObjectValid(oTarget))
{
if(oTarget != oPC)
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(1), DAMAGE_TYPE_COLD), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FROST_S), oTarget);
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(5.0), lLoc);
}
}
nRounds--;
DelayCommand(6.0f, DoCold(oPC, nRounds));
}
}
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
int nRounds = nCasterLvl;
if(nMetaMagic & METAMAGIC_EXTEND) nRounds += nRounds;
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_BLUE_WHITE), oPC, fDur);
DoCold(oPC, nRounds);
PRCSetSchool();
}

View File

@@ -0,0 +1,67 @@
//:://////////////////////////////////////////////
//:: Name Lawful Sword
//:: FileName sp_lawsword.nss
//:://////////////////////////////////////////////
/** @file
Evocation
Level: Paladin 4,
Components: V, S,
Casting Time: 1 standard action
Range: Touch
Target: Weapon touched
Duration: 1 round/level
Saving Throw: None
Spell Resistance: No
Calling to mind thoughts of justice, you run your
fingers along the weapon, imbuing it with power.
This spell functions like holy sword (PH 242), except
as follows. The weapon functions as a +5 axiomatic
weapon (+5 enhancement bonus on attack rolls and damage
rolls, lawful-aligned, deals an extra 2d6 points of damage
against chaotic opponents). It also emits a magic circle
against chaos effect (as the spell).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 2/2/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
object oTarget = GetSpellTargetObject();
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
//+2d6 vs chaotic
itemproperty iDam = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC, IP_CONST_DAMAGETYPE_PHYSICAL, IP_CONST_DAMAGEBONUS_2d6);
//+5 vs everything
itemproperty iAttack = ItemPropertyEnhancementBonus(5);
if(GetObjectType(oTarget)) == OBJECT_TYPE_CREATURE
{
oTarget = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
}
IPSafeAddItemProperty(oTarget, iDam, fDur);
IPSafeAddItemProperty(oTarget, iAttack, fDur);
//magic circle on the weapon
effect eCircle = EffectAreaOfEffect(AOE_MOB_CIRCCHAOS);
effect eVis = EffectVisualEffect(VFX_IMP_EVIL_HELP);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCircle, oTarget, fDur);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
PRCSetSchool();
}

View File

@@ -0,0 +1,107 @@
//:://////////////////////////////////////////////
//:: Name Lesser Energy Shield
//:: FileName sp_lenshield.nss
//:://////////////////////////////////////////////
/** @file Abjuration
Level: Paladin 1, Cleric 2
Components: V, S, DF,
Casting Time: 1 Standard Action
Range: Touch
Target: Shield touched
Duration: 1 round/level
Saving Throw: None
Spell Resistance: No
A silver aura surrounds the touched shield for a
moment before it appears to transform into the chosen
type of energy. The shield hums with power.
When this spell is cast, the shield touched appears
to be made entirely out of one type of energy (fire,
cold, electricity, acid, or sonic). Whoever bears the
shield gains resistance 5 against the chosen energy
type. Additionally, if the wielder successfully hits
someone with the shield with a shield bash attack, th
e victim takes 1d6 points of the appropriate energy
damage in addition to the normal shield bash damage.
The energy type must be chosen when the spell is cast
and cannot be changed during the duration of the spell.
The energy resistance overlaps (and does not stack)
with resist elements. A given shield cannot be the
subject of more than one lesser energized shield
or energized shield spell at the same time.
The descriptor of this spell is the same as the
energy type you choose when you cast it.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
#include "prc_inc_fork"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
object oTarget = PRCGetSpellTargetObject();
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
//Check that this is a shield, if not abort
if(GetIsShield(oShield) == FALSE)
{
SendMessageToPC(OBJECT_SELF, "Target has no equipped shield.");
break;
}
//The type of damage resistance we're choosing
int nDR;
//Get the type by which subradial spell is used to cast
int nSpell = GetSpellId();
if(nSpell == SPELL_LESSER_ENERGIZED_SHIELD_FIRE)
{
nDR = IP_CONST_DAMAGETYPE_FIRE;
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_FIRE);
}
if(nSpell == SPELL_LESSER_ENERGIZED_SHIELD_COLD)
{
nDR = IP_CONST_DAMAGETYPE_COLD;
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_COLD);
}
if(nSpell == SPELL_LESSER_ENERGIZED_SHIELD_ELEC)
{
nDR = IP_CONST_DAMAGETYPE_ELECTRICAL;
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_ELECTRICAL);
}
if(nSpell == SPELL_LESSER_ENERGIZED_SHIELD_ACID)
{
nDR = IP_CONST_DAMAGETYPE_ACID;
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_ACID);
}
if(nSpell == SPELL_LESSER_ENERGIZED_SHIELD_SONIC)
{
nDR = IP_CONST_DAMAGETYPE_SONIC;
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_SONIC);
}
//Set local int for amount of shield damage on the wielder of the shield
SetLocalInt(oTarget, "EnShieldD6", 1);
//Schedule ints for deletion
DelayCommand(fDur, DeleteLocalInt(oTarget, "EnShieldType"));
DelayCommand(fDur, DeleteLocalInt(oTarget, "EnShieldD6"));
//Add resistance property
IPSafeAddItemProperty(oShield, ItemPropertyDamageResistance(nDR, 5), fDur, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
PRCSetSchool();
}

View File

@@ -0,0 +1,56 @@
//:://////////////////////////////////////////////
//:: Name Legion's Magic Weapon
//:: FileName sp_lmagweap.nss
//:://////////////////////////////////////////////
/** @file
Transmutation
Level: Cleric 2, Paladin 2, Sorcerer 2, Wizard 2,
Components: V, S, DF,
Casting Time: 1 standard action
Range: Close (25 ft. + 5 ft./2 levels)
Target: Melee or ranged weapons held by allied creatures in a 20-ft.-radius burst
Duration: 1 round/level
Saving Throw: Will negates (harmless, object)
Spell Resistance: Yes (harmless, object)
This spell functions like magic weapon (see page 251 of the
Player's Handbook), except as noted above and as follows. It
affects only weapons held by allies when the spell is cast.
It has no effect on ammunition.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/13/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
location lLoc = GetLocation(oPC);
object oTarget = MyGetFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30), lLoc, FALSE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oTarget))
{
if(GetIsReactionTypeFriendly(oTarget))
{
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
if(GetIsObjectValid(oItem))
{
IPSafeAddItemProperty(oItem,ItemPropertyEnhancementBonus(1), fDur, X2_IP_ADDPROP_POLICY_KEEP_EXISTING ,TRUE,TRUE);
}
}
oTarget = MyGetNextObjectInShape(SHAPE_SPHERE, FeetToMeters(30), lLoc, FALSE, OBJECT_TYPE_CREATURE);
}
PRCSetSchool();
}

View File

@@ -0,0 +1,65 @@
//:://////////////////////////////////////////////
//:: Name Lesser Visage of the Deity
//:: FileName sp_lvisdiety.nss
//:://////////////////////////////////////////////
/** @file
Transmutation [Good or Evil]
Level: Cleric 3, Blackguard 4, Paladin 4, Mysticism 3,
Components: V, S, DF,
Casting Time: 1 standard action
Range: Personal
Target: You
Duration: 1 round/level
As you end your prayer, you can feel the hand of your
deity upon you. Your appearance reflects her divine power,
and her touch grants you resistance from some of the damage
of this world.
You gain a +4 enhancement bonus to Charisma. You also gain
resistance to acid 10, cold 10, and electricity 10 if you
are good, or resistance to cold 10 and fire 10 if you are evil.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/26/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
int nMetaMagic = PRCGetMetaMagicFeat();
int nAlign = GetAlignmentGoodEvil(oPC);
int nBonus = 4;
float fDur = RoundsToSeconds(nCasterLvl);
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityIncrease(ABILITY_CHARISMA, nBonus), oPC, fDur);
if (nAlign == ALIGNMENT_GOOD)
{
effect eResAcid = EffectDamageResistance(DAMAGE_TYPE_ACID, 10);
effect eResCold = EffectDamageResistance(DAMAGE_TYPE_COLD, 10);
effect eResElec = EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, 10);
effect eLink = EffectLinkEffects(eResAcid, eResCold);
eLink = EffectLinkEffects(eLink, eResElec);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_GOOD_HELP), oPC);
}
else if (nAlign == ALIGNMENT_EVIL)
{
effect eLink = EffectLinkEffects(EffectDamageResistance(DAMAGE_TYPE_COLD, 10), EffectDamageResistance(DAMAGE_TYPE_FIRE, 10));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_EVIL_HELP), oPC);
}
PRCSetSchool();
}

View File

@@ -0,0 +1,44 @@
//:://////////////////////////////////////////////
//:: Name Major Resistance
//:: FileName sp_majorresist.nss
//:://////////////////////////////////////////////
/** @file
Abjuration
Level: Bard 2, Cleric 2, Druid 2, Paladin 2, Sorcerer 2, Wizard 2,
Components: V, S, M, DF,
Casting Time: 1 action
Range: Touch
Target: Creature touched
Duration: 1 hour/level
Saving Throw: Will negates (harmless)
Spell Resistance: Yes (harmless)
You imbue the subject with a strong magical energy that protects
her from harm, granting a +3 resistance bonus on saves.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/14/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = HoursToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
object oTarget = GetSpellTargetObject();
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_WHITE), oTarget, fDur);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSavingThrowIncrease(SAVING_THROW_ALL, 3), oTarget, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,52 @@
//:://////////////////////////////////////////////
//:: Name Meteoric Strike
//:: FileName sp_meteoric.nss
//:://////////////////////////////////////////////
/** @file Transmutation [Fire]
Level: Druid 4, Paladin 4, Cleric 5,
Components: V, S,
Casting Time: 1 swift action
Range: 0 ft.
Target: Your melee weapon
Duration: 1 round or until discharged
Saving Throw: None or Reflex half; see text
Spell Resistance: See text
Your melee weapon bursts into orange, red, and gold
flames, and shining sparks trail in its wake.
Your next successful melee attack deals extra fire
damage equal to 1d6 points + 1d6 points per four caster
levels.
In addition, the flames splash into all squares adjacent
to the target.
Any creatures standing in these squares take half damage
from the explosion, with a Reflex save allowed to halve
this again.
If a creature has spell resistance, it applies to this
splash effect.
You are not harmed by your own meteoric strike.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/15/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
object oTarget = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
itemproperty ipHook = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1);
IPSafeAddItemProperty(oTarget, ipHook, 6.0f)
AddEventScript(oTarget, "sp_meteoriconhit", FALSE, FALSE);
PRCSetSchool();
}

View File

@@ -0,0 +1,93 @@
//:://////////////////////////////////////////////
//:: Name Meteoric Strike On Hit
//:: FileName sp_meteoriconhit.nss
//:://////////////////////////////////////////////
/** @file Transmutation [Fire]
Level: Druid 4, Paladin 4, Cleric 5,
Components: V, S,
Casting Time: 1 swift action
Range: 0 ft.
Target: Your melee weapon
Duration: 1 round or until discharged
Saving Throw: None or Reflex half; see text
Spell Resistance: See text
Your melee weapon bursts into orange, red, and gold flames,
and shining sparks trail in its wake.
Your next successful melee attack deals extra fire damage equal
to 1d6 points + 1d6 points per four caster levels.
In addition, the flames splash into all squares adjacent to the t
arget.
Any creatures standing in these squares take half damage from the
explosion, with a Reflex save allowed to halve this again.
If a creature has spell resistance, it applies to this splash effect.
You are not harmed by your own meteoric strike.
You can cast meteoric strike before you make an unarmed attack.
If you do, your unarmed attack is considered armed.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/14/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
#include "prc_alterations"
#include "prc_inc_combat"
void main()
{
object oSpellOrigin = OBJECT_SELF;
// route all onhit-cast spells through the unique power script (hardcoded to "prc_onhitcast")
// in order to fix the Bioware bug, that only executes the first onhitcast spell found on an item
// any onhitcast spell should have the check ContinueOnHitCast() at the beginning of its code
// if you want to force the execution of an onhitcast spell script, that has the check, without routing the call
// through prc_onhitcast, you must use ForceExecuteSpellScript(), to be found in prc_inc_spells
if(!ContinueOnHitCastSpell(oSpellOrigin)) return;
// DeleteLocalInt(oSpellOrigin, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(oSpellOrigin, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
// find the weapon
object oWeapon = PRCGetSpellCastItem(oSpellOrigin);
//Get Caster level
int nBonus = GetLocalInt(oWeapon, "MeteoricCasterLvl") / 4;
// find the target of the spell
object oTarget = PRCGetSpellTargetObject(oSpellOrigin);
// only do anything if we have a valid weapon and a valid living target
if (GetIsObjectValid(oWeapon) && GetIsObjectValid(oTarget)&& !GetIsDead(oTarget))
{
int nDam = d6(1 + nBonus);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(oTarget, nDam, DAMAGE_TYPE_FIRE), oTarget);
//Burst
nDam = nDam/2;
location lLoc = GetLocation(oTarget);
object oTargetB = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(5), lLoc, TRUE);
while(GetIsObjectValid(oTargetB))
{
if(oTargetB != oPC)
{
if(!PRCDoResistSpell(oTargetB))
{
if (PRCMySavingThrow(SAVING_THROW_REFLEX, oTargetB, (PRCGetSaveDC(oTargetB, oSpellOrigin))))
{
nDam = nDam/2;
}
effect eLink = EffectLinkEffects(EffectDamage(DAMAGE_TYPE_FIRE, nDam), EffectVisualEffect(VFX_COM_HIT_FIRE));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTargetB);
}
}
oTargetB = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(5), lLoc, TRUE);
}
}
}

View File

@@ -0,0 +1,56 @@
//:://////////////////////////////////////////////
//:: Name Quick March
//:: FileName sp_quickmarch.nss
//:://////////////////////////////////////////////
/** @file Transmutation
Level: Cleric 2, Paladin 2,
Components: V, S, DF,
Casting Time: 1 swift action
Range: Medium (100 ft. + 10 ft./level)
Target: Allies in a 20-ft.-radius burst
Duration: 1 round
Saving Throw: Will negates (harmless)
Spell Resistance: Yes (harmless)
Upon casting this spell, your feet and those of your
allies glow with a yellow nimbus of light.
Quick march increases your allies' base land speed by
30 feet. (This adjustment is considered an enhancement
bonus.) There is no effect on other modes of movement,
such as burrow, climb, fly, or swim. As with any
effect that increases a creature's speed, this spell
affects maximum jumping distance.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/19/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
float fDur = RoundsToSeconds(1);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
effect eSpeed = EffectMovementSpeedIncrease(100);
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(20), lLoc, FALSE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oTarget))
{
if(GetIsReactionTypeFriendly(oTarget))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSpeed, oTarget, fDur);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HASTE), oTarget);
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(20), lLoc, FALSE, OBJECT_TYPE_CREATURE);
}
PRCSetSchool();
}

View File

@@ -0,0 +1,93 @@
//:://////////////////////////////////////////////
//:: Name Resist Energy
//:: FileName sp_resenergy.nss
//:://////////////////////////////////////////////
/** @file Abjuration
Level: Ranger 1, Duskblade 1, Cleric 2, Death Master 2,
Sha'ir 2, Wu Jen 2 (All), Death Delver 2, Fatemaker 2,
Knight of the Chalice 2, Knight of the Weave 2,
Vassal of Bahamut 2, Hoardstealer 2, Adept 2, Wizard 2,
Sorcerer 2, Paladin 2, Druid 2, Urban Druid 2, Dragon 2,
Fire 3
Components: V, S, DF,
Casting Time: 1 standard action
Range: Touch
Target: Creature touched
Duration: 10 min./level
Saving Throw: Fortitude negates (harmless)
Spell Resistance: Yes (harmless)
This abjuration grants a creature limited protection from
damage of whichever one of five energy types you select:
acid, cold, electricity, fire, or sonic. The subject gains
energy resistance 10 against the energy type chosen, meaning
that each time the creature is subjected to such damage
(whether from a natural or magical source), that damage is
reduced by 10 points before being applied to the creature's
hit points. The value of the energy resistance granted increases
to 20 points at 7th level and to a maximum of 30 points at 11th
level. The spell protects the recipient's equipment as well.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/20/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = 600.0f * (nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
int nSpell = GetSpellId();
int nDamType;
int nVis;
if(nSpell == SPELL_RESIST_ENERGY_ACID)
{
nDamType = DAMAGE_TYPE_ACID;
nVis = VFX_DUR_AURA_GREEN;
}
else if (nSpell == SPELL_RESIST_ENERGY_COLD)
{
nDamType = DAMAGE_TYPE_COLD;
nVis = VFX_DUR_AURA_CYAN;
}
else if (nSpell == SPELL_RESIST_ENERGY_ELEC)
{
nDamType = DAMAGE_TYPE_ELECTRICAL;
nVis = VFX_DUR_AURA_WHITE;
}
else if (nSpell == SPELL_RESIST_ENERGY_FIRE)
{
nDamType = DAMAGE_TYPE_FIRE;
nVis = VFX_DUR_AURA_RED;
}
else if (nSpell == SPELL_RESIST_ENERGY_SONIC)
{
nDamType = DAMAGE_TYPE_SONIC;
nVis = VFX_DUR_AURA_BLUE_LIGHT;
}
else
{
SendMessageToPC(oPC, "Invalid spell ID.");
break;
}
int nDamRes = 10;
if(nCasterLvl > 6) nDamRes +=10;
if(nCasterLvl > 10) nDamRes +=10;
effect eLink = EffectLinkEffects(EffectVisualEffect(nVis), EffectDamageResistance(nDamType, nDamRes));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,62 @@
//:://////////////////////////////////////////////
//:: Name Revenance
//:: FileName sp_revenance.nss
//:://////////////////////////////////////////////
/** @file Conjuration (Healing)
Level: Blackguard 4, Cleric 4, Paladin 4, Bard 6
Components: V, S, DF,
Casting Time: 1 standard action
Range: Touch
Target: Dead ally touched
Duration: 1 minute/level
Saving Throw: None; see text
Spell Resistance: Yes (harmless)
You rush to your fallen companion amid the chaos of the
battle and cry out the words that will bring her back for
one last fight.
This spell brings a dead ally temporarily back to life.
The subject can have been dead for up to 1 round per level.
Your target functions as if a raise dead spell (PH 268)
had been cast upon her, except that she does not lose a level
and has half of her full normal hit points. She is alive
(not undead) for the duration of the spell and can be healed
normally, but dies as soon as the spell ends.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/20/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = (nCasterLvl * 60);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
object oTarget = GetSpellTargetObject();
if(!GetIsDead(oTarget) || GetIsReactionTypeHostile(oTarget))
{
SendMessageToPC(oPC, "Must target a dead ally.");
break;
}
//resurrect
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), oTarget);
//Heal by half
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(GetMaxHitPoints(oTarget) / 2, oTarget), oTarget);
//Schedule doom
DelayCommand(fDur, SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), oTarget);
PRCSetSchool();
}

View File

@@ -0,0 +1,39 @@
//:://////////////////////////////////////////////
//:: Name Rhino's Rush
//:: FileName sp_rhinorush.nss
//:://////////////////////////////////////////////
/** @file Transmutation
Level: Paladin 1, Ranger 1, Wrath (SpC) 1,
Components: V, S,
Casting Time: 1 swift action
Range: Personal
Target: You
Duration: 1 round
This spell allows you to propel yourself in a single deadly
charge. The first charge attack you make before the end of
the round deals double damage on a successful hit.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/21/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(1);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_IOUNSTONE_RED), oPC, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,58 @@
//:://////////////////////////////////////////////
//:: Name Righteous Aura
//:: FileName sp_rightaura.nss
//:://////////////////////////////////////////////
/** @file Abjuration [Good, Light]
Level: Paladin 4,
Components: V, S, DF,
Casting Time: 1 standard action
Range: Personal
Target: You
Duration: 1 hour/level
You invoke the powers of good and law, and in response
to your pleas, you glow with the golden radiance of the sun.
You are bathed in an unearthly glow for the duration of the
spell, as if a daylight spell (PH 216) had been cast on you.
You get a +4 sacred bonus to Charisma.
If you die, your body is converted into an explosive blast
of energy in a 20-foot-radius burst centered where you fell,
dealing 2d6 points of damage per caster level (maximum 20d6)
to all evil creatures in the burst's area. Good creatures in
the area are healed by the same amount, and undead take
double this damage. Spell resistance cannot prevent this
damage, but a successful Reflex save reduces it to half.
Your body is disintegrated, so you cannot be raised with a
raise dead spell. Spells that do not require an intact body,
such as true resurrection, can be used to bring you back to
life as normal.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/20/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = HoursToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityIncrease(ABILITY_CHARISMA, 4), fDur, oPC);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(VFX_MOB_DAYLIGHT), fDur, oPC);
AddEventScript(oPC, EVENT_ONPLAYERDEATH, "prc_rightaura", FALSE, TRUE);
AddEventScript(oPC, EVENT_NPC_ONDEATH, "prc_rightaura", FALSE, TRUE);
PRCSetSchool();
}

View File

@@ -0,0 +1,49 @@
//:://////////////////////////////////////////////
//:: Name Righteous Fury
//:: FileName sp_rightfury.nss
//:://////////////////////////////////////////////
/** @file
Transmutation
Level: Paladin 3,
Components: V, S, DF,
Casting Time: 1 standard action
Range: Personal
Target: You
Duration: 1 minute/level
You pull a holy aura about you that glows a golden red.
Summoning the power of your deity, you charge yourself
with positive energy. This gives you 5 temporary hit
points per caster level (maximum 50) and a +4 sacred
bonus to Strength. These temporary hit points last for
up to 1 hour.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/29/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = 60*(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
int nHP = min(50, nCasterLvl * 5);
effect eBuff = EffectAbilityIncrease(ABILITY_STRENGTH, 4);
effect eHP = EffectTemporaryHitpoints(nHP);
effect eLink = EffectLinkEffects(eBuff, eHP);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_GOOD_HELP), oPC);
PRCSetSchool();
}

View File

@@ -0,0 +1,44 @@
//:://////////////////////////////////////////////
//:: Name Seek Eternal Rest
//:: FileName sp_seeketrest.nss
//:://////////////////////////////////////////////
/** @file
Conjuration (Healing)
Level: Paladin 3,
Components: V, DF,
Casting Time: 1 standard action
Range: Personal
Target: You
Duration: 1 hour/level
You invoke the greater powers and are infused with
a great, golden glow, empowering you with holy glory.
You improve your ability to turn undead. For the
purpose of turning or destroying undead, you are
treated as a cleric of your paladin level.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/29/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = HoursToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
//Apply VFX, need to alter the turning script
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_YELLOW_LIGHT), oPC, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,63 @@
//:://////////////////////////////////////////////
//:: Name Shield of Warding
//:: FileName sp_shieldward.nss
//:://////////////////////////////////////////////
/** @file Abjuration [Good]
Level: Paladin 2, Cleric 3,
Components: V, S,
Casting Time: 1 standard action
Range: Touch
Target: One shield or buckler touched
Duration: 1 minute/level
Saving Throw: Will negates (object, harmless)
Spell Resistance: No
The touched shield or buckler grants its wielder a +1
sacred bonus to Armor Class and on Reflex saves, +1 per
five caster levels (maximum +5 at 20th level). The bonus
applies only when the shield is worn or carried normally
(but not, for instance, if it is slung over the shoulder).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/21/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl) * 60;
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
object oTarget = PRCGetSpellTargetObject();
object oShield;
if GetObjectType(oTarget == OBJECT_TYPE_CREATURE) oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
if GetObjectType(oTarget == OBJECT_TYPE_ITEM) oShield = oTarget;
//Check that this is a shield, if not abort
if(GetIsShield(oShield) == FALSE)
{
SendMessageToPC(OBJECT_SELF, "Target has no equipped shield.");
break;
}
int nBonus = 1;
if nCasterLvl > 4 nBonus +=1;
if nCasterLvl > 9 nBonus +=1;
if nCasterLvl > 14 nBonus +=1;
if nCasterLvl > 19 nBonus +=1;
IPSafeAddItemProperty(oShield, ItemPropertyACBonus(nBonus), fDur);
IPSafeAddItemProperty(oShield, ItemProperBonusSavingThrow(IP_CONST_SAVEBASETYPE_REFLEX, nBonus), fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,43 @@
//:://////////////////////////////////////////////
//:: Name Smite Heretic
//:: FileName sp_smiteher.nss
//:://////////////////////////////////////////////
/** @file Conjuration
Level: Paladin 3,
Components: V, S, DF,
Casting Time: 1 standard action
Range: Personal
Target: You
Duration: 10 minutes/level
For the duration of the spell, when using your smite
evil class ability against an evil creature with the
ability to cast divine spells, you gain a +2 sacred
bonus on the attack roll.
Furthermore, the attack deals 2 extra points of damage
(instead of 1) per paladin level.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/25/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = 600 * nCasterLvl;
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_YELLOW_WHITE), oPC, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,62 @@
//:://////////////////////////////////////////////
//:: Name Smite of Sacred Fire
//:: FileName sp_smitesacfire.nss
//:://////////////////////////////////////////////
/** @file Evocation [Good]
Level: Paladin 2,
Components: V, DF,
Casting Time: 1 swift action
Range: Personal
Target: You
Duration: 1 round/level; see text
You must cast this spell in the same round when you
attempt a smite attack. If the attack hits, you deal
an extra 2d6 points of damage to the target of the
smite. Whether or not you succeed on the smite attempt,
during each subsequent round of the spell?s duration,
you deal an extra 2d6 points of damage on any successful
melee attack against the target you attempted to smite.
The spell ends prematurely after any round when you do not
attempt a melee attack against the target you previously
attempted to smite, or if you fail to hit with any of
your attacks in a round.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/25/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void SmiteCheck(object oWeapon)
{
//No smite attempt last round
if(!GetLocalInt(oWeapon, "PRCSmiteLastRound"))
{
RemoveEventScript(oWeapon, EVENT_ITEM_ONHIT, "prc_evnt_ssf", TRUE, FALSE);
}
}
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
itemproperty ipHook = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1);
IPSafeAddItemProperty(oWeapon, ipHook, fDur);
//Add onhit
AddEventScript(oWeapon, EVENT_ITEM_ONHIT, "prc_evnt_ssf", TRUE, FALSE);
DelayCommand(6.0f, SmiteCheck(oWeapon));
PRCSetSchool();
}

View File

@@ -0,0 +1,76 @@
//:://////////////////////////////////////////////
//:: Name Soldiers of Sanctity
//:: FileName sp_soldsanc.nss
//:://////////////////////////////////////////////
/** @file Evocation [Good]
Level: Cleric 3, Paladin 3,
Components: V, S, DF,
Casting Time: 1 full round
Range: Close (25 ft. + 5 ft./2 levels)
Target: You, plus one willing creature/2 levels; see text
Duration: 1 min./level
Saving Throw: None
Spell Resistance: No
For the duration of soldiers of sanctity, you gain a
bonus on turning checks and turning damage rolls made
when you have allies within 30 feet of you. This is a
sacred bonus, equal to the number of allies within 30
feet, to a maximum of +6.
In addition, each target gains a +2 bonus to AC against
all attacks made by undead creatures. This bonus
applies for the duration of the spell as long as an
ally is within 30 feet of you.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 8/4/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void AllyCheck(object oPC, float fDur)
{
int nCount;
object oTest = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30), GetLocation(oPC), OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oTest))
{
if(GetIsReactionTypeFriendly(oTest))
{
nCount++;
}
oTest = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(30), GetLocation(oPC), OBJECT_TYPE_CREATURE);
}
SetLocalInt(oPC, "SOLDIERS_OF_SANCTITY_ALLIES", nCount);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, VersusRacialTypeEffect(EffectACIncrease(2), RACIAL_TYPE_UNDEAD), oPC, 6.0f);
DelayCommand(6.0f, AllyCheck(oPC, fDur- 6.0));
}
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = 60.0f * (nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
int nTargets = min(6, nCasterLvl/2);
AllyCheck(oPC, fDur);
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30), GetLocation(oPC), OBJECT_TYPE_CREATURE);
while(nTargets > 0)
{
AllyCheck(oTarget, fDur);
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(30), GetLocation(oPC), OBJECT_TYPE_CREATURE);
nTargets--;
}
PRCSetSchool();
}

View File

@@ -0,0 +1,87 @@
//:://////////////////////////////////////////////
//:: Name Soul of Light
//:: FileName sp_soulight.nss
//:://////////////////////////////////////////////
/** @file Transmutation [Good]
Level: Paladin 2, Cleric 3,
Components: V, S,
Casting Time: 1 standard action
Range: Personal
Target: You
Duration: 1 hour
Bright, clear light sprouts from your body, quickly
flaring before fading to a faint white pulse. This spell
infuses your body with energy drawn from the Positive
Energy Plane, making it easier to repair injuries.
Whenever you cast or are the target of a conjuration
(healing) spell, you can choose for the spell to heal
a number of extra points of damage equal to twice the spell's level.
If such a spell heals at least 10 points of damage,
it also removes the fatigued condition from the
target (or reduces exhaustion to fatigue).
If soul of light and soul of order are active on you at the
same time, you gain damage reduction 3/+3
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 8/8/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = HoursToSeconds(1);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_WHITE), oPC, fDur);
if(GetHasSpellEffect(SPELL_SOUL_OF_ORDER, oPC))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDamageReduction(3, DAMAGE_POWER_PLUS_THREE, 0), oPC, fDur);
}
/**To add into PRCEffectHeal
if(GetHasSpellEffect(SPELL_SOUL_OF_LIGHT, oTarget))
{
//2x the spell level bonus
nHP += (StringToInt(Get2DACache("spells", "Innate", PRCGetSpellId()) *2);
if(nHP >= 10)
{
effect eEffect = GetFirstEffect(oPC);
while(GetIsEffectValid(eEffect))
{
//remove fatigue
if(GetEffectTag(eEffect) == "PRCFatigue")
{
RemoveEffect(oPC, eEffect);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffecVisualEffect(VFX_DUR_CESSATE_POSITIVE) oTarget, 6.0f);
}
//downgrade exhaustion
if(GetEffectTag(eEffect) == "PRCExhausted")
{
float fNew = IntToFloat(GetEffectDurationRemaining(eEffect));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFatigue(), oTarget, fNew);
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffecVisualEffect(VFX_DUR_CESSATE_POSITIVE) oTarget, 6.0f);
}
eEffect = GetNextEffect(oPC);
}
}
*/
PRCSetSchool();
}

View File

@@ -0,0 +1,64 @@
//:://////////////////////////////////////////////
//:: Name Soul of Order
//:: FileName sp_soulorder.nss
//:://////////////////////////////////////////////
/** @file Transmutation [Lawful]
Level: Paladin 1, Sorcerer 2, Wizard 2,
Components: V, S,
Casting Time: 1 standard action
Range: Personal
Target: You
Duration: 1 hour
A shimmering field of silver energy flows up your
body from your feet to your head, giving your skin a
metallic sheen.
This spell infuses your body with energy drawn from
the primal forces of law. You gain a +2 morale bonus
on Will saves made to resist enchantment effects.
Your natural weapons are treated as lawful-aligned for
the purpose of overcoming damage reduction.
Regardless of your normal alignment, you are considered
lawful-aligned for the purpose of effects that rely on
alignment (such as protection from law or order's wrath).
If soul of order and soul of light are active on you at
the same time, you gain damage reduction 3/+3.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 8/8/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
#include " x2_inc_itemprop"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = HoursToSeconds(1);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSavingThrowIncrease(SAVING_THROW_WILL, 2, SAVING_THROW_TYPE_MIND_SPELLS));
object oNatural = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC);
IPSafeAddItemProperty(oNatural, ItemPropertyEnhancementBonus(3), fDur);
IPSafeAddItemProperty(oNAtural, ItemPropertyDamagePenalty(3), fDur);
IPSafeAddItemProperty(oNAtural, ItemPropertyAttackPenalty(3), fDur);
if(GetHasSpellEffect(SPELL_SOUL_OF_LIGHT, oPC))
{
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDamageReduction(3, DAMAGE_POWER_PLUS_THREE, 0), oPC, fDur);
}
PRCSetSchool();
}

View File

@@ -0,0 +1,59 @@
//:://////////////////////////////////////////////
//:: Name Stabilize
//:: FileName sp_stabilize.nss
//:://////////////////////////////////////////////
/** @file Conjuration (Healing)
Level: Cleric 2, Paladin 2,
Components: V, S, DF,
Casting Time: 1 swift action
Area: 50-ft.-radius burst centered on you
Duration: Instantaneous
Saving Throw: Will negates (harmless); see text
Spell Resistance: Yes (harmless)
This spell, designed to work on the battlefield,
allows you to stabilize the dying all around you.
A burst of positive energy spreads out from you,
healing 1 point of damage to all living creatures
in the affected area, whether allied or not. This
spell deals 1 point of damage to undead creatures,
which are allowed a Will saving throw to negate
the effect.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/25/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
location lLoc = GetLocation(oPC);
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(50), lLoc, FALSE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oTarget))
{
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_HIT_DIVINE), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(DAMAGE_TYPE_POSITIVE, 1), oTarget);
}
else
{
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HEAD_HEAL), oTarget);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(1), oTarget);
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(50), lLoc, FALSE, OBJECT_TYPE_CREATURE);
}
PRCSetSchool();
}

View File

@@ -0,0 +1,44 @@
//:://////////////////////////////////////////////
//:: Name Strategic Charge
//:: FileName sp_stratchrg.nss
//:://////////////////////////////////////////////
/** @file Abjuration
Level: Blackguard 1, Paladin 1
Components: V, DF,
Casting Time: 1 swift action
Range: Personal
Target: You
Duration: 1 round/level
A red nimbus surrounds you as you move smoothly
across the crowded battlefield.
You gain the benefit of the Mobility feat (PH 98),
even if you not meet the prerequisites. You do not
have to be charging to gain this benefit.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/26/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
object oSkin = GetPCSkin(oPC);
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
itemproperty iProp = PRCItemPropertyBonusFeat(IP_FEAT_MOBILITY);
IPSafeAddItemProperty(oSkin, iProp, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,48 @@
//:://////////////////////////////////////////////
//:: Name Strength of Stone
//:: FileName sp_strstone.nss
//:://////////////////////////////////////////////
/** @file
Transmutation
Level: Paladin 2,
Components: V, S, DF,
Casting Time: 1 swift action
Range: Personal
Target: You
Duration: 1 round
You call upon the fortitude of the powers of good,
and your flesh turns an ivory-gray hue as you draw
power up through the earth itself.
The spell grants you a +8 enhancement bonus to Strength.
The spell ends instantly if you lose contact with the
ground. This means you cannot jump, tumble, charge, run,
or move more than your speed in a round (because these acts
cause both of your feet to leave the ground) without breaking
the spell. A natural stone wall or ceiling counts as the ground
for the purpose of this spell (so you could climb a cavern wall
and not lose the spell).
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(1);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityIncrease(ABILITY_STRENGTH, 8) oPC, fDur);
PRCSetSchool();
}

View File

@@ -0,0 +1,56 @@
//:://////////////////////////////////////////////
//:: Name True Prayer of the Chosen
//:: FileName sp_tpchosen.nss
//:://////////////////////////////////////////////
/** @file Transmutation
Level: Paladin 3, Cleric 4,
Components: V, S, DF, TN,
Casting Time: 1 standard action
Range: Personal
Target: You
Duration: 1 round/level
Raising your eyes to the skies, you speak your own
truename to your patron deity, asking for protection
as your mission takes you into harm's way.
A golden coruscation surrounds you.
True prayer of the chosen grants you a +3 insight
bonus on saving throws and to Armor Class.
For the duration of the spell, you are protected by
the power of your deity, who gives you divine insight
into the threats you're about to face.
Truename Component: When you cast this spell, you must
correctly speak your personal truename.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 8/3/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
#include "true_inc_trufunc"
#include "true_utterhook"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
struct utterance utter = EvaluateUtterance(oPC, oPC, METAUTTERANCE_NONE/* Use METAUTTERANCE_NONE if it has no Metautterance usable*/, LEXICON_EVOLVING_MIND /* Uses the same DC formula*/);
if(utter.bCanUtter)
{
effect eLink = EffectLinkEffects(EffectVisualEffect(VFX_DUR_AURA_ORANGE), EffectSavingThrowIncrease(SAVING_THROW_ALL, 3));
eLink = EffectLinkEffects(eLink, EffectACIncrease(3));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
}
PRCSetSchool();
}

View File

@@ -0,0 +1,66 @@
//:://////////////////////////////////////////////
//:: Name Undead Bane Weapon
//:: FileName sp_undbanew.nss
//:://////////////////////////////////////////////
/** @file
Undead Bane Weapon
Transmutation
Level: Paladin 3, Cleric 4,
Components: V, S, DF,
Casting Time: 1 Standard Action
Range: Touch
Target: Weapon touched
Duration: 1 hour/level
Saving Throw: Will negates (harmless, object)
Spell Resistance: Yes (harmless, object)
Your hand glows with a dull light, and when you touch the weapon,
the light shifts to it, so that it sheds a serene gray radiance as
bright as a candle.
You give a weapon the undead bane special ability in addition to
any other properties it has. Against undead, your weapon's enhancement
bonus is 2 higher than normal, and it deals an extra 2d6 points of damage
against undead. The spell has no effect if cast upon a weapon that already
has the undead bane special ability.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 1/28/21
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
object oItem = GetSpellTargetObject();
//Check if it's a creature and if so get main weapon
if(GetObjectType(oItem) == OBJECT_TYPE_CREATURE
{
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oItem);
}
itemproperty iAttack = ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD, 2);
itemproperty iDamage = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD, IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_2d6);
//Valid targets
if(IPGetIsProjectile(oItem) || IPGetIsMeleeWeapon(oItem) || IPGetIsRangedWeapon(oItem))
{
AddItemProperty(DURATION_TYPE_TEMPOARY, iAttack, oItem, fDur);
IPSafeAddItemProperty(oItem, iDamage, fDur);
}
else SendMessageToPC(oPC, "Invalid target. Must target a weapon or projectile.");
PRCSetSchool();
}

View File

@@ -0,0 +1,101 @@
//:://////////////////////////////////////////////
//:: Name Unmovable Object
//:: FileName sp_unmovobj.nss
//:://////////////////////////////////////////////
/** @file Evocation
Level: Paladin 4,
Components: V, S,
Casting Time: 1 action
Range: Personal
Target: You
Duration: 1 round/level
Charging yourself with divine energy, you bond yourself
to the ground beneath your feet and become the epitome
of stability.
The spell ends instantly if you move from your current
position and does not work unless you are in contact
with the ground.
You gain a +2 bonus to Strength, a +4 bonus to Constitution,
a +2 resistance bonus on saving throws, and a +4 dodge
bonus to AC.
You gain a +10 bonus to resist a bull rush (this bonus does
not include the +4 bonus for being "exceptionally stable",
but exceptionally stable creatures do get that bonus in
addition to the bonus from this spell).
You gain a +10 bonus to resist all trip attacks (but not
to your attempts to trip someone in return).
You gain a +10 resistance bonus on any roll made to resist
an effect that would cause you to move from your current
location.
For example, while you are not immune to enchantment
effects, you gain a +10 resistance bonus on saving throws
(or Charisma checks, in the case of effects such as charm
person) to resist commands that would cause you to leave
your current position.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 8/4/22
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void StillCheck(object oPC, float fDur, location lLoc)
{
if(!GetIsInCombat(oPC) || GetLocation(oPC) != lLoc)
{
effect eToDispel = GetFirstEffect(oTarget);
while(GetIsEffectValid(eToDispel))
{
if(GetEffectSpellId(eToDispel) == SPELL_UNMOVABLE_OBJECT)
{
RemoveEffect(oTarget, eToDispel);
}
eToDispel = GetNextEffect(oTarget);
}
}
else DelayCommand(6.0f, StillCheck(oPC, fDur - 6.0f, lLoc));
}
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
//Delay to check if combat has ended, if so remove the effects
DelayCommand(6.0f, StillCheck(oPC, fDur - 6.0f, GetLocation(oPC)));
//Cutscene Immobilize
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneImmobilize(), oPC, fDur);
//+2 STR +4 CON
effect eLink = EffectLinkEffects(EffectAbilityIncrease(ABILITY_STRENGTH, 2), EffectAbilityIncrease(ABILITY_CONSTITUTION, 4));
//+2 Saving throws
eLink = EffectSavingThrowIncrease(SAVING_THROW_ALL, 2, SAVING_THROW_TYPE_ALL);
//+4 AC
eLink = EffectLinkEffects(eLink, EffectACIncrease(4, AC_DODGE_BONUS));
//+10 Save vs Fear
eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, 10, SAVING_THROW_TYPE_FEAR));
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_AC_BONUS), oPC);
PRCSetSchool();
}

View File

@@ -0,0 +1,50 @@
//:://////////////////////////////////////////////
//:: Name Vision of Glory
//:: FileName sp_visionglory.nss
//:://////////////////////////////////////////////
/** @file Divination
Level: Cleric 1, Paladin 1,
Components: V, S, DF,
Casting Time: 1 standard action
Range: Touch
Target: Creature touched
Duration: 1 minute or until discharged
Saving Throw: None
Spell Resistance: Yes
You give the subject creature a brief vision of a divine
entity that is giving it support and inspiring it to
continue. The creature gets a morale bonus equal to your
Charisma modifier on a single saving throw. It must choose
to use the bonus before making the roll to which it applies.
Using the bonus discharges the spell.
*/
//:://////////////////////////////////////////////
//:: Created By: Tenjac
//:: Created On: 7/25/2022
//:://////////////////////////////////////////////
#include "prc_sp_func"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
object oPC = OBJECT_SELF;
int nCasterLvl = PRCGetCasterLevel(oPC);
float fDur = RoundsToSeconds(nCasterLvl);
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
object oTarget = PRCGetSpellTargetObject();
int nBonus = GetAbilityModifier(ABILITY_CHARISMA, oPC);
SetLocalInt(oTarget, "PRCVisGlory", nBonus);
DelayCommand(60.0f, DeleteLocalInt(oTarget, "PRCVisGlory"));
PRCSetSchool();
}