From 8339c0d54f40f6252c13eb39b021d0c2426a5040 Mon Sep 17 00:00:00 2001
From: Jaysyn904 <68194417+Jaysyn904@users.noreply.github.com>
Date: Fri, 12 Jan 2024 07:35:37 -0500
Subject: [PATCH] Fixed a few TLK entries
Fixed a few TLK entries. Added potential future spell scripts to notes.
---
Notes/future spells/pg_s0_chromorb.nss | 162 +++++++++++++++++
Notes/future spells/pg_s0_larldrain.nss | 64 +++++++
Notes/future spells/pg_s0_regcw.nss | 46 +++++
Notes/future spells/pg_s0_reglw.nss | 46 +++++
Notes/future spells/pg_s0_regmw.nss | 46 +++++
Notes/future spells/pg_s0_regsw.nss | 46 +++++
Notes/future spells/pg_s0_speedwind.nss | 68 +++++++
Notes/future spells/pg_s0_spiro.nss | 44 +++++
Notes/future spells/pg_s0_tortshell.nss | 67 +++++++
Notes/future spells/pg_s0_worm.nss | 185 ++++++++++++++++++++
nwn/nwnprc/trunk/tlk/prc_consortium.tlk.xml | 13 +-
11 files changed, 782 insertions(+), 5 deletions(-)
create mode 100644 Notes/future spells/pg_s0_chromorb.nss
create mode 100644 Notes/future spells/pg_s0_larldrain.nss
create mode 100644 Notes/future spells/pg_s0_regcw.nss
create mode 100644 Notes/future spells/pg_s0_reglw.nss
create mode 100644 Notes/future spells/pg_s0_regmw.nss
create mode 100644 Notes/future spells/pg_s0_regsw.nss
create mode 100644 Notes/future spells/pg_s0_speedwind.nss
create mode 100644 Notes/future spells/pg_s0_spiro.nss
create mode 100644 Notes/future spells/pg_s0_tortshell.nss
create mode 100644 Notes/future spells/pg_s0_worm.nss
diff --git a/Notes/future spells/pg_s0_chromorb.nss b/Notes/future spells/pg_s0_chromorb.nss
new file mode 100644
index 00000000..ddf1b595
--- /dev/null
+++ b/Notes/future spells/pg_s0_chromorb.nss
@@ -0,0 +1,162 @@
+//::///////////////////////////////////////////////
+//:: Sihlbrane's Grove
+//:: Chromatic Orb
+//:: 00_S0_CHROMORB
+//:://////////////////////////////////////////////
+/*
+ This spell creates a 4-inch-diameter sphere
+ that can be hurled unerringly to its target.
+ The orb's effect depends on the level of the
+ wizard:
+ A 1st-level sphere inflicts 1d4 damage and blinds
+ the target for one round.
+ A 2nd-level sphere inflicts 1d6 damage.
+ A 3rd-level sphere deals 1d8 damage and burns the
+ victim for 1d3 fire damage.
+ A 4th-level sphere deals 1d10 damage and blinds
+ the target for four rounds.
+ A 5th to 6th-level sphere deals 1d12 damage and
+ stuns the target for three rounds.
+ The 7th+ level sphere deals 2d8 damage and
+ paralyzes the victim for 13 rounds.
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Yaballa
+//:: Created On: 5/9/2003
+//:://////////////////////////////////////////////
+
+#include "NW_I0_SPELLS"
+#include "pg_spell_CONST"
+#include "x2_inc_spellhook"
+#include "prc_inc_spells"
+
+void RunWhiteOrb(object oTarget, int nDamage, int nColor);
+void RunRedOrb(object oTarget, int nDamage, int nColor);
+void RunOrangeOrb(object oTarget, int nDamage, int nDamage2, int nColor);
+void RunYellowOrb(object oTarget, int nDamage, int nColor);
+void RunGreenOrb(object oTarget, int nDamage, int nColor);
+void RunBlackOrb(object oTarget, int nDamage, int nColor);
+
+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 oCaster = OBJECT_SELF;
+ object oTarget = PRCGetSpellTargetObject();
+ int nHD = PRCGetCasterLevel(oCaster);
+ int nMetaMagic = PRCGetMetaMagicFeat();
+ int nDamage, nDamage2, nColor;
+ effect eMissile = EffectVisualEffect(VFX_IMP_MIRV);
+ float fDist = GetDistanceBetween(OBJECT_SELF, oTarget);
+ float fDelay = (fDist/25.0f);
+ float fDelay2, fTime;
+
+ if(nHD < 1) {nHD = 1;}
+ switch(nHD)
+ {
+ case 1: nDamage = d4(); nColor = VFX_DUR_LIGHT_WHITE_20; break;
+ case 2: nDamage = d6(); nColor = VFX_DUR_LIGHT_RED_20; break;
+ case 3: nDamage = d8(); nDamage2 = d3(); nColor = VFX_DUR_LIGHT_ORANGE_20; break;
+ case 4: nDamage = d10(); nColor = VFX_DUR_LIGHT_YELLOW_20; break;
+ case 5: case 6: nDamage = d12(); nColor = VFX_DUR_LIGHT_PURPLE_20; break;
+ default: nDamage = d8(2); nColor = VFX_DUR_DARKNESS; break;
+ }
+ if(nMetaMagic == METAMAGIC_MAXIMIZE)
+ {
+ switch(nHD)
+ {
+ case 1: nDamage = 4; break;
+ case 2: nDamage = 6; break;
+ case 3: nDamage = 8; nDamage2 = 3; break;
+ case 4: nDamage = 10; break;
+ case 5: case 6: nDamage = 12; break;
+ default: nDamage = 16; break;
+ }
+ }
+ else if(nMetaMagic == METAMAGIC_EMPOWER) {
+ nDamage = nDamage + (nDamage/2); }
+ if(!GetIsReactionTypeFriendly(oTarget))
+ {
+ fTime = fDelay;
+ fDelay2 += 0.1f;
+ fTime += fDelay2;
+ SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_CHROMATIC_ORB));
+ if(!PRCDoResistSpell(OBJECT_SELF, oTarget, FloatToInt(fDelay)))
+ {
+ if(!PRCMySavingThrow(SAVING_THROW_REFLEX, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_NONE, OBJECT_SELF, fDelay))
+ {
+ switch(nHD)
+ {
+ case 1: DelayCommand(fTime, RunWhiteOrb(oTarget, nDamage, nColor)); break;
+ case 2: DelayCommand(fTime, RunRedOrb(oTarget, nDamage, nColor)); break;
+ case 3: DelayCommand(fTime, RunOrangeOrb(oTarget, nDamage, nDamage2, nColor)); break;
+ case 4: DelayCommand(fTime, RunYellowOrb(oTarget, nDamage, nColor)); break;
+ case 5: case 6: DelayCommand(fTime, RunGreenOrb(oTarget, nDamage, nColor)); break;
+ default: DelayCommand(fTime, RunBlackOrb(oTarget, nDamage, nColor)); break;
+ }
+ DelayCommand(fTime, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_IMP_MAGBLUE), oTarget));
+ }
+ }
+ DelayCommand(fDelay2, ApplyEffectToObject(DURATION_TYPE_INSTANT, eMissile, oTarget));
+ }
+}
+
+void RunWhiteOrb(object oTarget, int nDamage, int nColor)
+{
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_BLIND_DEAF_M), oTarget);
+ ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(nColor), oTarget, 3.0f);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage), oTarget);
+ ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBlindness(), oTarget, 6.0f);
+}
+
+void RunRedOrb(object oTarget, int nDamage, int nColor)
+{
+ ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(nColor), oTarget, 3.0f);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage), oTarget);
+}
+
+void RunOrangeOrb(object oTarget, int nDamage, int nDamage2, int nColor)
+{
+ ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(nColor), oTarget, 3.0f);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage), oTarget);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage2, DAMAGE_TYPE_FIRE), oTarget);
+}
+
+void RunYellowOrb(object oTarget, int nDamage, int nColor)
+{
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_BLIND_DEAF_M), oTarget);
+ ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(nColor), oTarget, 3.0f);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage), oTarget);
+ ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBlindness(), oTarget, 24.0f);
+}
+
+void RunGreenOrb(object oTarget, int nDamage, int nColor)
+{
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_STUN), oTarget);
+ ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(nColor), oTarget, 3.0f);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage), oTarget);
+ ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, 18.0f);
+}
+
+void RunBlackOrb(object oTarget, int nDamage, int nColor)
+{
+ ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_PARALYZE_HOLD), oTarget, 78.0f);
+ ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(nColor), oTarget, 3.0f);
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDamage), oTarget);
+ ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectParalyze(), oTarget, 78.0f);
+}
diff --git a/Notes/future spells/pg_s0_larldrain.nss b/Notes/future spells/pg_s0_larldrain.nss
new file mode 100644
index 00000000..13934d87
--- /dev/null
+++ b/Notes/future spells/pg_s0_larldrain.nss
@@ -0,0 +1,64 @@
+//::///////////////////////////////////////////////
+//:: Sihlbrane's Grove
+//:: Larloch's Minor Drain
+//:: 00_S0_LARLDRAIN
+//:://////////////////////////////////////////////
+/*
+
+*/
+//:://////////////////////////////////////////////
+//:: Created By: Yaballa
+//:: Created On: 7/9/2003
+//:://////////////////////////////////////////////
+
+#include "NW_I0_SPELLS"
+#include "pg_spell_CONST"
+#include "x2_inc_spellhook"
+#include "prc_inc_spells"
+
+void main()
+{
+
+ /*
+ Spellcast Hook Code
+ Added 2003-07-07 by Georg Zoeller
+ 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 nMetaMagic = PRCGetMetaMagicFeat();
+ int nDamage = d4();
+
+ if(nMetaMagic == METAMAGIC_MAXIMIZE) {
+ nDamage = 4; }
+ else if(nMetaMagic == METAMAGIC_EMPOWER) {
+ nDamage = nDamage + (nDamage/2); }
+ effect eHeal = EffectTemporaryHitpoints(nDamage);
+ effect eRay = EffectBeam(VFX_BEAM_EVIL, OBJECT_SELF, BODY_NODE_HAND);
+
+ if(!GetIsReactionTypeFriendly(oTarget))
+ {
+ SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_LARLOCHS_MINOR_DRAIN));
+ if(!PRCDoResistSpell(OBJECT_SELF, oTarget, 1))
+ {
+ effect eDam = EffectDamage(nDamage, DAMAGE_TYPE_NEGATIVE);
+ DelayCommand(1.0f, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget));
+ DelayCommand(1.0f, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eHeal, OBJECT_SELF, HoursToSeconds(1)));
+ DelayCommand(1.0f, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HEAD_EVIL), oTarget));
+ DelayCommand(1.0f, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HEAD_HEAL), OBJECT_SELF));
+ }
+ }
+ ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRay, oTarget, 1.7f);
+}
+
diff --git a/Notes/future spells/pg_s0_regcw.nss b/Notes/future spells/pg_s0_regcw.nss
new file mode 100644
index 00000000..e0ddc53a
--- /dev/null
+++ b/Notes/future spells/pg_s0_regcw.nss
@@ -0,0 +1,46 @@
+//::///////////////////////////////////////////////
+//:: 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);
+ }
+}
diff --git a/Notes/future spells/pg_s0_reglw.nss b/Notes/future spells/pg_s0_reglw.nss
new file mode 100644
index 00000000..c12aa3d0
--- /dev/null
+++ b/Notes/future spells/pg_s0_reglw.nss
@@ -0,0 +1,46 @@
+//::///////////////////////////////////////////////
+//:: 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);
+ }
+}
diff --git a/Notes/future spells/pg_s0_regmw.nss b/Notes/future spells/pg_s0_regmw.nss
new file mode 100644
index 00000000..6c0fcc48
--- /dev/null
+++ b/Notes/future spells/pg_s0_regmw.nss
@@ -0,0 +1,46 @@
+//::///////////////////////////////////////////////
+//:: 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);
+ }
+}
diff --git a/Notes/future spells/pg_s0_regsw.nss b/Notes/future spells/pg_s0_regsw.nss
new file mode 100644
index 00000000..7be0ca3a
--- /dev/null
+++ b/Notes/future spells/pg_s0_regsw.nss
@@ -0,0 +1,46 @@
+//::///////////////////////////////////////////////
+//:: 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);
+ }
+}
diff --git a/Notes/future spells/pg_s0_speedwind.nss b/Notes/future spells/pg_s0_speedwind.nss
new file mode 100644
index 00000000..c75ab6b4
--- /dev/null
+++ b/Notes/future spells/pg_s0_speedwind.nss
@@ -0,0 +1,68 @@
+//::///////////////////////////////////////////////
+//:: 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);
+ }
+}
diff --git a/Notes/future spells/pg_s0_spiro.nss b/Notes/future spells/pg_s0_spiro.nss
new file mode 100644
index 00000000..9185bb9d
--- /dev/null
+++ b/Notes/future spells/pg_s0_spiro.nss
@@ -0,0 +1,44 @@
+//::///////////////////////////////////////////////
+//:: 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)));
+}
diff --git a/Notes/future spells/pg_s0_tortshell.nss b/Notes/future spells/pg_s0_tortshell.nss
new file mode 100644
index 00000000..929ed3af
--- /dev/null
+++ b/Notes/future spells/pg_s0_tortshell.nss
@@ -0,0 +1,67 @@
+//::///////////////////////////////////////////////
+//:: 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);
+}
diff --git a/Notes/future spells/pg_s0_worm.nss b/Notes/future spells/pg_s0_worm.nss
new file mode 100644
index 00000000..beeaa6a2
--- /dev/null
+++ b/Notes/future spells/pg_s0_worm.nss
@@ -0,0 +1,185 @@
+//::///////////////////////////////////////////////
+//:: 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));
+ }
+ }
+}
\ No newline at end of file
diff --git a/nwn/nwnprc/trunk/tlk/prc_consortium.tlk.xml b/nwn/nwnprc/trunk/tlk/prc_consortium.tlk.xml
index 545c8ae0..a86a6cad 100644
--- a/nwn/nwnprc/trunk/tlk/prc_consortium.tlk.xml
+++ b/nwn/nwnprc/trunk/tlk/prc_consortium.tlk.xml
@@ -19438,7 +19438,8 @@ This spell summons a treant to defend you.
Totem Ragers
totem rager
(PRESTIGE CLASS)
-The totem rager embodies the wrath of nature in its most bestial form. Like the barbarian, she can stir herself into a fierce rage to cleave her enemies, and like the totemist, she can shape the forces of nature into soulmelds that grant her the power of magical beasts. But only in the totem rager do these abilities feed upon each other like the beasts of the wild, growing stronger from one another's essence. She can use her rage to make her soulmelds better, and use her soulmelds to make her virtually unstoppable in combat
+The totem rager embodies the wrath of nature in its most bestial form. Like the barbarian, she can stir herself into a fierce rage to cleave her enemies, and like the totemist, she can shape the forces of nature into soulmelds that grant her the power of magical beasts. But only in the totem rager do these abilities feed upon each other like the beasts of the wild, growing stronger from one another's essence. She can use her rage to make her soulmelds better, and use her soulmelds to make her virtually unstoppable in combat.
+
REQUIREMENTS:
Base Attack Bonus: +5.
@@ -19447,7 +19448,6 @@ Feat: Cobalt Rage.
Special: Ability to bind soulmelds to totem chakra, rage class feature.
-
- Hit Die: d10.
- Proficiencies: You gain no new proficiencies with weapons, armor, or shields.
- Skill Points: 4 + Int Modifier.
@@ -23694,8 +23694,7 @@ Use: Selected
- Proficient with all simple weapons, or by character class.
- Proficient with whatever type of armor (light, medium, or heavy) it is described as wearing, or by character class. If a humanoid does not have a class and wears armor, it is proficient with that type of armor and all lighter types. Humanoids not indicated as wearing armor are not proficient with armor. Humanoids are proficient with shields if they are proficient with any form of armor.
--Humanoids breathe, eat, and sleep.
-
+-Humanoids breathe, eat, and sleep.
**** 50,000 - 50,500 reserved for Race Pack Feats ****
Light Sensitivity
Type of Feat: Racial
@@ -43353,6 +43352,7 @@ Your draconic blood lets you access ancient draconic knowledge. You gain a bonu
Dragontouched
Type of Feat: General
Prerequisite: Cha 11
+
Benefit: You have a trace of draconic power, a result of draconic ancestors or a spiritual connection between you and the forces of dragonkind. You gain the dragonblood subtype, a +1 bonus on Listen, Search, and Spot checks, and a +1 bonus on saving throws against paralysis and sleep. In addition, you can select draconic feats as a sorcerer of your charaacter level.
Use: Automatic
Draconic Vigor
@@ -44779,7 +44779,8 @@ Racial Hit Dice/Class: NA
Hagspawns
Sons of malicious, predatory mothers, hagspawn are not a complete race, as there are no females of their kind. Hags continue their awful lineage by taking human males for mates, usually murdering and devouring the hapless captive later. The female children of a hag quickly grow into hags like their mothers, but the male children are hagspawn, half-human outcasts. Feared and hated by normal humans, hagspawn must make their way in the world by dint of their strength, hardiness, and sheer determination.
-Hagspawn Ability Adjustments: +2 Strength, +2 Constitution, -2 Charisma: Hagspawn are strong and hardy, but are sullen and ill-tempered.
+Hagspawn Ability Adjustments: +2 Strength, +2 Constitution, -2 Charisma: Hagspawn are strong and hardy, but are sullen and ill-tempered.
+
Favored Class (Barbarian): A multiclass hagspawn's barbarian class does not count when determining whether he suffers an XP penalty for multiclassing.
- Medium size
@@ -48933,6 +48934,7 @@ Use: Automatic
Type of Feat: Binding
Prerequisite: Bind Vestige
Benefit: When you bind a vestige using the Bind Vestige feat, you gain a second power, as described in the Bind Vestige feat.
+
Use: Automatic
Binding Feats
Feats associated with the Binding alternate magic system from Tome of Magic
@@ -49119,6 +49121,7 @@ Use: Automatic
Type of Feat: Binding
Prerequisite: Ability to bind vestiges
Benefit: You can ignore the special requirements of vestiges with which you make pacts.
+
Use: Automatic
Leraje, the Green Herald
Leraje, the Green Herald