Baleful Utterance affects detected traps

Baleful Utterance affects detected traps.  Tempest offhand attack fix.  Minified feat.2da.  Started reviewing @Tenjac's incomplete spell scripts.  Updated release archive.
This commit is contained in:
Jaysyn904 2024-10-06 00:21:54 -04:00
parent 51b4141961
commit bb7073b5c6
20 changed files with 25193 additions and 25326 deletions

Binary file not shown.

View File

@ -1,46 +0,0 @@
//::///////////////////////////////////////////////
//:: Sihlbrane's Grove
//:: Regenerate Critical Wounds
//:: 00_S0_REGCW
//:://////////////////////////////////////////////
/*
Regenerate 4 HP per round for 10 rounds +
caster level.
*/
//:://////////////////////////////////////////////
//:: Created By: Yaballa
//:: Created On: 7/9/2003
//:://////////////////////////////////////////////
#include "pg_ss_spelltwk"
#include "x2_inc_spellhook"
//#include "x0_i0_spells"
#include "prc_inc_spells"
void main()
{
/*
Spellcast Hook Code
Added 2003-06-20 by Georg
If you want to make changes to all spells,
check x2_inc_spellhook.nss to find out more
*/
if (!X2PreSpellCastCode())
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
object oTarget = PRCGetSpellTargetObject();
int nRace = MyPRCGetRacialType(oTarget);
int nMetamagic = PRCGetMetaMagicFeat();
if((nRace != RACIAL_TYPE_CONSTRUCT) || (nRace != RACIAL_TYPE_UNDEAD))
{
PRCRemoveEffectsFromSpell(oTarget, GetSpellId());
RegenerateWounds(4, oTarget, nMetamagic);
}
}

View File

@ -1,46 +0,0 @@
//::///////////////////////////////////////////////
//:: Sihlbrane's Grove
//:: Regenerate Light Wounds
//:: 00_S0_REGLW
//:://////////////////////////////////////////////
/*
Regenerate 1 HP per round for 10 rounds +
caster level.
*/
//:://////////////////////////////////////////////
//:: Created By: Yaballa
//:: Created On: 7/9/2003
//:://////////////////////////////////////////////
#include "pg_ss_spelltwk"
#include "x2_inc_spellhook"
//#include "x0_i0_spells"
#include "prc_inc_spells"
void main()
{
/*
Spellcast Hook Code
Added 2003-06-20 by Georg
If you want to make changes to all spells,
check x2_inc_spellhook.nss to find out more
*/
if (!X2PreSpellCastCode())
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
object oTarget = PRCGetSpellTargetObject();
int nRace = MyPRCGetRacialType(oTarget);
int nMetamagic = PRCGetMetaMagicFeat();
if((nRace != RACIAL_TYPE_CONSTRUCT) || (nRace != RACIAL_TYPE_UNDEAD))
{
PRCRemoveEffectsFromSpell(oTarget, GetSpellId());
RegenerateWounds(1, oTarget, nMetamagic);
}
}

View File

@ -1,46 +0,0 @@
//::///////////////////////////////////////////////
//:: Sihlbrane's Grove
//:: Regenerate Moderate Wounds
//:: 00_S0_REGMW
//:://////////////////////////////////////////////
/*
Regenerate 2 HP per round for 10 rounds +
caster level.
*/
//:://////////////////////////////////////////////
//:: Created By: Yaballa
//:: Created On: 7/9/2003
//:://////////////////////////////////////////////
#include "pg_ss_spelltwk"
#include "x2_inc_spellhook"
//#include "x0_i0_spells"
#include "prc_inc_spells"
void main()
{
/*
Spellcast Hook Code
Added 2003-06-20 by Georg
If you want to make changes to all spells,
check x2_inc_spellhook.nss to find out more
*/
if (!X2PreSpellCastCode())
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
object oTarget = PRCGetSpellTargetObject();
int nRace = MyPRCGetRacialType(oTarget);
int nMetamagic = PRCGetMetaMagicFeat();
if((nRace != RACIAL_TYPE_CONSTRUCT) || (nRace != RACIAL_TYPE_UNDEAD))
{
PRCRemoveEffectsFromSpell(oTarget, GetSpellId());
RegenerateWounds(2, oTarget, nMetamagic);
}
}

View File

@ -1,46 +0,0 @@
//::///////////////////////////////////////////////
//:: Sihlbrane's Grove
//:: Regenerate Moderate Wounds
//:: 00_S0_REGSW
//:://////////////////////////////////////////////
/*
Regenerate 3 HP per round for 10 rounds +
caster level.
*/
//:://////////////////////////////////////////////
//:: Created By: Yaballa
//:: Created On: 7/9/2003
//:://////////////////////////////////////////////
#include "pg_ss_spelltwk"
#include "x2_inc_spellhook"
//#include "x0_i0_spells"
#include "prc_inc_spells"
void main()
{
/*
Spellcast Hook Code
Added 2003-06-20 by Georg
If you want to make changes to all spells,
check x2_inc_spellhook.nss to find out more
*/
if (!X2PreSpellCastCode())
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
object oTarget = PRCGetSpellTargetObject();
int nRace = MyPRCGetRacialType(oTarget);
int nMetamagic = PRCGetMetaMagicFeat();
if((nRace != RACIAL_TYPE_CONSTRUCT) || (nRace != RACIAL_TYPE_UNDEAD))
{
PRCRemoveEffectsFromSpell(oTarget, GetSpellId());
RegenerateWounds(3, oTarget, nMetamagic);
}
}

View File

@ -1,68 +0,0 @@
//::///////////////////////////////////////////////
//:: Sihlbrane's Grove
//:: Speed of the Wind
//:: 00_S0_SPEEDWIND
//:://////////////////////////////////////////////
/*
Caster gains +4 Dex and -2 Con for 10 turns
per level.
*/
//:://////////////////////////////////////////////
//:: Created By: Yaballa
//:: Created On: 7/9/2003
//:://////////////////////////////////////////////
#include "x2_inc_spellhook"
#include "prc_inc_spells"
void main()
{
/*
Spellcast Hook Code
Added 2003-06-20 by Georg
If you want to make changes to all spells,
check x2_inc_spellhook.nss to find out more
*/
if (!X2PreSpellCastCode())
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
object oTarget = PRCGetSpellTargetObject();
//--------------------------------------------------------------------------
// This spell no longer stacks. If there is one of that type, thats ok
//--------------------------------------------------------------------------
if (GetHasSpellEffect(GetSpellId(), oTarget))
{
FloatingTextStrRefOnCreature(100775, OBJECT_SELF, FALSE);
return;
}
effect eDex = EffectAbilityIncrease(ABILITY_DEXTERITY, 4);
effect eCon = EffectAbilityDecrease(ABILITY_CONSTITUTION, 2);
effect eVis1 = EffectVisualEffect(VFX_IMP_IMPROVE_ABILITY_SCORE);
effect eVis2 = EffectVisualEffect(VFX_IMP_HEAD_EVIL);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEUTRAL);
effect eLink = EffectLinkEffects(eDex, eCon);
eLink = EffectLinkEffects(eLink, eDur);
int nRace = MyPRCGetRacialType(oTarget);
int nDuration = PRCGetCasterLevel(OBJECT_SELF) * 10;
int nMetaMagic = PRCGetMetaMagicFeat();
if(nMetaMagic == METAMAGIC_EXTEND) {
nDuration = nDuration * 2; }
if((nRace != RACIAL_TYPE_CONSTRUCT) || (nRace != RACIAL_TYPE_UNDEAD))
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, TurnsToSeconds(nDuration));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis1, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget);
}
}

View File

@ -1,44 +0,0 @@
//::///////////////////////////////////////////////
//:: Sihlbrane's Grove
//:: Spiritual Hammer
//:: 00_S0_SPIRO
//:://////////////////////////////////////////////
/*
*/
//:://////////////////////////////////////////////
//:: Created By: Yaballa
//:: Created On: 7/9/2003
//:://////////////////////////////////////////////
#include "x2_inc_spellhook"
#include "prc_inc_spells"
void main()
{
/*
Spellcast Hook Code
Added 2003-06-20 by Georg
If you want to make changes to all spells,
check x2_inc_spellhook.nss to find out more
*/
if (!X2PreSpellCastCode())
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
int nMetaMagic = PRCGetMetaMagicFeat();
int nDuration = PRCGetCasterLevel(OBJECT_SELF);
int nAttack = GetBaseAttackBonus(OBJECT_SELF);
effect eSummon = EffectSummonCreature("pg_spiritweap", VFX_FNF_SUMMON_MONSTER_1);
if(nMetaMagic == METAMAGIC_EXTEND) {
nDuration = nDuration * 2; }
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation(), RoundsToSeconds(nDuration));
DelayCommand(1.5f, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAttackIncrease(nAttack - 1), GetAssociate(ASSOCIATE_TYPE_SUMMONED), RoundsToSeconds(nDuration)));
}

View File

@ -1,67 +0,0 @@
//::///////////////////////////////////////////////
//:: Sihlbrane's Grove
//:: Tortoise Shell
//:: 00_S0_TORTSHELL
//:://////////////////////////////////////////////
/*
Caster gains 100 temporary HP and DR 10/-
against physical damage for one round/level.
*/
//:://////////////////////////////////////////////
//:: Created By: Yaballa
//:: Created On: 7/9/2003
//:://////////////////////////////////////////////
#include "x2_inc_spellhook"
#include "prc_inc_spells"
void main()
{
/*
Spellcast Hook Code
Added 2003-06-20 by Georg
If you want to make changes to all spells,
check x2_inc_spellhook.nss to find out more
*/
if (!X2PreSpellCastCode())
{
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
return;
}
// End of Spell Cast Hook
//--------------------------------------------------------------------------
// This spell no longer stacks. If there is one of that type, thats ok
//--------------------------------------------------------------------------
if (GetHasSpellEffect(GetSpellId(), OBJECT_SELF))
{
FloatingTextStrRefOnCreature(100775, OBJECT_SELF, FALSE);
return;
}
int nDuration = PRCGetCasterLevel(OBJECT_SELF);
int nMetaMagic = PRCGetMetaMagicFeat();
effect eTemp = EffectTemporaryHitpoints(100);
effect eDamage1 = EffectDamageResistance(DAMAGE_TYPE_BLUDGEONING, 10);
effect eDamage2 = EffectDamageResistance(DAMAGE_TYPE_PIERCING, 10);
effect eDamage3 = EffectDamageResistance(DAMAGE_TYPE_SLASHING, 10);
effect eVis = EffectVisualEffect(VFX_IMP_SPELL_MANTLE_USE);
effect eShell = EffectVisualEffect(VFX_DUR_PROT_BARKSKIN);
effect eDur = EffectVisualEffect(VFX_DUR_SANCTUARY);
effect eLink = EffectLinkEffects(eTemp, eDamage1);
eLink = EffectLinkEffects(eLink, eDamage2);
eLink = EffectLinkEffects(eLink, eDamage3);
eLink = EffectLinkEffects(eLink, eDur);
eLink = EffectLinkEffects(eLink, eShell);
if(nMetaMagic == METAMAGIC_EXTEND) {
nDuration = nDuration * 2; }
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, OBJECT_SELF, RoundsToSeconds(nDuration));
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
}

View File

@ -1,185 +0,0 @@
//::///////////////////////////////////////////////
//:: Sihlbrane's Grove
//:: Spirit Worm
//:: 00_S0_WORM
//:://////////////////////////////////////////////
/*
You create a lingering decay in the spirit and
body of the target. If the target fails its saving
throw, it takes 1 point of temporary Constitution
damage each round while the spell lasts (maximum
5 points of Constitution). If it makes its save,
it does not lose any Constitution but take 1d2
points of damage each round while the spell
lasts (maximum 5).
31.12 - Updated to reflect new scirpting.
See melf's acid arrow for details.
*/
//:://////////////////////////////////////////////
//:: Created By: Yaballa
//:: Created On: 6/9/2003
//:://////////////////////////////////////////////
#include "pg_spell_CONST"
#include "x2_inc_spellhook"
//#include "x2_i0_spells"
#include "prc_inc_spells"
const int nSpellID = 1501;
void RunConImpact(object oTarget, object oCaster);
void RunDamImpact(object oTarget, object oCaster, int nMetamagic);
void main()
{
object oTarget = GetSpellTargetObject();
//--------------------------------------------------------------------------
// Spellcast Hook Code
// Added 2003-06-20 by Georg
// If you want to make changes to all spells, check x2_inc_spellhook.nss to
// find out more
//--------------------------------------------------------------------------
if(!X2PreSpellCastCode()) {
return; }
// End of Spell Cast Hook
//--------------------------------------------------------------------------
// This spell no longer stacks. If there is one of that type, thats ok
//--------------------------------------------------------------------------
if (GetHasSpellEffect(GetSpellId(), oTarget))
{
FloatingTextStrRefOnCreature(100775, OBJECT_SELF, FALSE);
return;
}
//--------------------------------------------------------------------------
// Calculate the duration
//--------------------------------------------------------------------------
int nMetaMagic = PRCGetMetaMagicFeat();
int nDuration = PRCGetCasterLevel(OBJECT_SELF);
int nTouch = TouchAttackMelee(oTarget);
if(nDuration < 1) {
nDuration = 1; }
if(nDuration > 5) {
nDuration = 5; }
if(nMetaMagic == METAMAGIC_EXTEND) {
nDuration = nDuration * 2; }
//--------------------------------------------------------------------------
// Setup VFX
//--------------------------------------------------------------------------
effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
//--------------------------------------------------------------------------
// Set the VFX to be non dispelable
//--------------------------------------------------------------------------
eDur = ExtraordinaryEffect(eDur);
if(!GetIsReactionTypeFriendly(oTarget))
{
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
if(nTouch > 0)
{
if(!PRCDoResistSpell(OBJECT_SELF, oTarget))
{
SetLocalInt(oTarget, "XP2_L_SPELL_SAVE_DC_" + IntToString(nSpellID), GetSpellSaveDC());
int nDC = GetLocalInt(oTarget, "XP2_L_SPELL_SAVE_DC_" + IntToString(nSpellID));
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
{
//----------------------------------------------------------------------
// Con decrease
//----------------------------------------------------------------------
effect eCon = EffectAbilityDecrease(ABILITY_CONSTITUTION, 1);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eCon, oTarget);
//----------------------------------------------------------------------
// Apply the VFX that is used to track the spells duration
//----------------------------------------------------------------------
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, oTarget, RoundsToSeconds(nDuration));
object oSelf = OBJECT_SELF; // because OBJECT_SELF is a function
DelayCommand(6.0f, RunConImpact(oTarget, oSelf));
}
//-----------------------------------
// Magical damage
//-----------------------------------
else
{
int nDam = d2();
//-----------------------------------
//max damage on critical hit, only once
//-----------------------------------
if(nTouch == 2) {
nDam = 2; }
effect eDam = EffectDamage(nDam);
//-----------------------------------
//update VFX
//-----------------------------------
eVis = EffectVisualEffect(VFX_IMP_MAGBLUE);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
//----------------------------------------------------------------------
// Apply the VFX that is used to track the spells duration
//----------------------------------------------------------------------
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, oTarget, RoundsToSeconds(nDuration));
object oSelf = OBJECT_SELF; // because OBJECT_SELF is a function
DelayCommand(6.0f, RunDamImpact(oTarget, oSelf, nMetaMagic));
}
}
}
}
}
void RunDamImpact(object oTarget, object oCaster, int nMetaMagic)
{
if(!GetIsEnemy(oTarget, oCaster)){return;}
//--------------------------------------------------------------------------
// Check if the spell has expired (check also removes effects)
//--------------------------------------------------------------------------
if(PRCGetDelayedSpellEffectsExpired(SPELL_SPIRIT_WORM, oTarget, oCaster)) {
return; }
if(GetIsDead(oTarget) == FALSE)
{
int nDC = GetLocalInt(oTarget, "XP2_L_SPELL_SAVE_DC_" + IntToString(nSpellID));
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
{
//----------------------------------------------------------------------
// Calculate Damage
//----------------------------------------------------------------------
int nDamage = PRCMaximizeOrEmpower(2, 1, nMetaMagic);
effect eDam = EffectDamage(nDamage);
effect eVis = EffectVisualEffect(VFX_IMP_MAGBLUE);
eDam = EffectLinkEffects(eVis, eDam); // flare up
ApplyEffectToObject (DURATION_TYPE_INSTANT, eDam, oTarget);
DelayCommand(6.0f, RunDamImpact(oTarget, oCaster, nMetaMagic));
}
}
}
void RunConImpact(object oTarget, object oCaster)
{
if(!GetIsEnemy(oTarget, oCaster)){return;}
//--------------------------------------------------------------------------
// Check if the spell has expired (check also removes effects)
//--------------------------------------------------------------------------
if(PRCGetDelayedSpellEffectsExpired(SPELL_SPIRIT_WORM, oTarget, oCaster)) {
return; }
if(GetIsDead(oTarget) == FALSE)
{
int nDC = GetLocalInt(oTarget, "XP2_L_SPELL_SAVE_DC_" + IntToString(nSpellID));
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
{
//----------------------------------------------------------------------
// Calculate Damage
//----------------------------------------------------------------------
effect eCon = EffectAbilityDecrease(ABILITY_CONSTITUTION, 1);
effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
eCon = EffectLinkEffects(eVis, eCon); // flare up
ApplyEffectToObject (DURATION_TYPE_INSTANT, eCon, oTarget);
DelayCommand(6.0f, RunConImpact(oTarget, oCaster));
}
}
}

View File

@ -0,0 +1,143 @@
//:://////////////////////////////////////////////
//:: Short description Bladebane Conversation
//:: filename prc_c_bladebane.nss
//:://////////////////////////////////////////////
/** @file
@author Tenjac
@date Created - 7/29/22
@updater Jaysyn
@updated 2024-10-02 10:47:03
//////////////////////////////////////////////////
/* Constant defintions */
//////////////////////////////////////////////////
const int STAGE_ENTRY = 0;
//////////////////////////////////////////////////
/* Aid functions */
//////////////////////////////////////////////////
//////////////////////////////////////////////////
/* Main function */
//////////////////////////////////////////////////
#include "inc_dynconv"
#include "prc_inc_racial"
#include "inc_2dacache"
#include "inc_addragebonus"
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.");
object oPC = GetPCSpeaker(); // The PC object
string sName; // Variable to hold the racial type name
int racialType; // Variable for the racial type
// Loop through the specified racial types
for (racialType = 0; racialType <= 52; racialType++) // Covers all the default racialtypes + ooze & plant
{
// Only list specific racial groups
if (racialType == 0 || racialType == 1 || racialType == 2 || racialType == 3 || racialType == 4 ||
racialType == 5 || racialType == 6 || racialType == 7 || racialType == 8 || racialType == 9 ||
racialType == 10 || racialType == 11 || racialType == 12 || racialType == 13 || racialType == 14 ||
racialType == 15 || racialType == 16 || racialType == 17 || racialType == 18 || racialType == 19 ||
racialType == 20 || racialType == 23 || racialType == 24 || racialType == 25 || racialType == 29 ||
racialType == 52)
{
// Get the racial type name using the current racial type integer
sName = Get2DACache("racialtypes", "Constant", racialType); // Use racialType to get the name
// Only add to the conversation if sName is not empty
if (sName != "")
{
AddChoice(sName, racialType, oPC); // Add the choice to the conversation
}
}
}
/* // 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,61 @@
//:://////////////////////////////////////////////
//:: 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
//:: Updated by: Jaysyn
//:: Updated on: 2024-10-01 08:58:45
//:://////////////////////////////////////////////
#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);
}
else
{
// Invalid target alignment
SendMessageToPC(oPC, "This spell must target a lawful good creature.");
}
}

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"
#include "inc_dynconv"
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,114 @@
//:://////////////////////////////////////////////
//:: 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
//:: Updated By: Jaysyn
//:: Updated on: 2024-10-01 09:23:56
//:://////////////////////////////////////////////
#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(oPC);
while (GetIsEffectValid(eToDispel))
{
if (GetEffectSpellId(eToDispel) == SPELL_UNMOVABLE_OBJECT)
{
RemoveEffect(oPC, eToDispel);
}
eToDispel = GetNextEffect(oPC);
}
}
else
{
DelayCommand(1.0f, StillCheck(oPC, fDur - 1.0f, lLoc));
}
}
void main()
{
if (!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_EVOCATION); // Set spell school
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(1.0f, StillCheck(oPC, fDur - 1.0f, GetLocation(oPC)));
// Apply cutscene immobilization
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneImmobilize(), oPC, fDur);
// Apply ability increases: +2 STR, +4 CON
effect eLink = EffectLinkEffects(EffectAbilityIncrease(ABILITY_STRENGTH, 2),
EffectAbilityIncrease(ABILITY_CONSTITUTION, 4));
// Apply +2 to all saving throws
eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, 2, SAVING_THROW_TYPE_ALL));
// Apply +4 dodge bonus to AC
eLink = EffectLinkEffects(eLink, EffectACIncrease(4, AC_DODGE_BONUS));
// Apply +10 resistance vs fear effects (to resist effects that move the target)
eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, 10, SAVING_THROW_TYPE_FEAR));
// Apply all linked effects to the caster
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
// Apply visual effect for AC bonus
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_AC_BONUS), oPC);
PRCSetSchool(); // Reset spell school (correctly used)
}

Binary file not shown.

BIN
_backup/PRC8_20240925.7z Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -33,14 +33,23 @@ void main()
effect eVis = EffectVisualEffect(VFX_IMP_DESTRUCTION);
if(GetIsObjectValid(oTarget))
{
int nType = GetObjectType(oTarget);
if((nType == OBJECT_TYPE_DOOR || nType == OBJECT_TYPE_PLACEABLE) && !GetPlotFlag(oTarget))
{
/* if((nType == OBJECT_TYPE_DOOR || nType == OBJECT_TYPE_PLACEABLE ) && !GetPlotFlag(oTarget))
{
effect eDamage = EffectDamage(9999, DAMAGE_TYPE_MAGICAL);
effect eLink = EffectLinkEffects(eDamage, eVis);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
}
} */
int nType = GetObjectType(oTarget);
if ((nType == OBJECT_TYPE_DOOR || nType == OBJECT_TYPE_PLACEABLE || nType == OBJECT_TYPE_TRIGGER) &&
!GetPlotFlag(oTarget) &&
GetIsTrapped(oTarget))
{
effect eDamage = EffectDamage(9999, DAMAGE_TYPE_MAGICAL);
effect eLink = EffectLinkEffects(eDamage, eVis);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
}
else if(nType == OBJECT_TYPE_CREATURE)
{
PRCSignalSpellEvent(oTarget, TRUE, INVOKE_BALEFUL_UTTERANCE, OBJECT_SELF);

View File

@ -29,6 +29,29 @@ void ApplyTwoWeaponDefense(object oPC, object oSkin)
int ACBonus = 0;
int tempestLevel = GetLevelByClass(CLASS_TYPE_TEMPEST, oPC);
if(tempestLevel >= 7)
{
ACBonus = 3;
}
else if(tempestLevel >= 4)
{
ACBonus = 2;
}
else
{
ACBonus = 1;
}
itemproperty ipACBonus = ItemPropertyACBonus(ACBonus);
SetCompositeBonus(oSkin, "TwoWeaponDefenseBonus", ACBonus, ITEM_PROPERTY_AC_BONUS);
}
/* void ApplyTwoWeaponDefense(object oPC, object oSkin)
{
int ACBonus = 0;
int tempestLevel = GetLevelByClass(CLASS_TYPE_TEMPEST, oPC);
if(tempestLevel < 4)
{
ACBonus = 1;
@ -45,7 +68,7 @@ void ApplyTwoWeaponDefense(object oPC, object oSkin)
itemproperty ipACBonus = ItemPropertyACBonus(ACBonus);
SetCompositeBonus(oSkin, "TwoWeaponDefenseBonus", ACBonus, ITEM_PROPERTY_AC_BONUS);
}
} */
void RemoveTwoWeaponDefense(object oPC, object oSkin)
{
@ -70,8 +93,8 @@ void ApplyExtraAttacks(object oPC)
{
RemoveExtraAttacks(oPC);
int nIncrease = 0;
if(GetHasFeat(FEAT_SUPREME_TWO_WEAPON_FIGHTING, oPC)) nIncrease = 2;
else if(GetHasFeat(FEAT_GREATER_TWO_WEAPON_FIGHTING, oPC)) nIncrease = 1;
if(GetHasFeat(FEAT_SUPREME_TWO_WEAPON_FIGHTING, oPC)) nIncrease = 4;
else if(GetHasFeat(FEAT_GREATER_TWO_WEAPON_FIGHTING, oPC)) nIncrease = 3;
ApplyEffectToObject(DURATION_TYPE_PERMANENT, TagEffect(ExtraordinaryEffect(EffectModifyAttacks(nIncrease)), "TempestTWF"), oPC);
}
@ -87,7 +110,7 @@ void main()
object oWeapL = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
int armorType = GetArmorType(oArmor);
if (oArmor == OBJECT_INVALID) armorType = ARMOR_TYPE_LIGHT;
if (oArmor == OBJECT_INVALID) armorType = ARMOR_TYPE_CLOTH;
string nMes = "";

View File

@ -3166,15 +3166,11 @@ 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.
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.
</entry>
<entry id="13026" lang="en" sex="m">Righteous Aura</entry>