diff --git a/Notes/WOTC Web Archive/Savage Progressions_ Ghost and Werewolf Template Classes.pdf b/Notes/WOTC Web Archive/Savage Progressions_ Ghost and Werewolf Template Classes.pdf
new file mode 100644
index 00000000..63974336
Binary files /dev/null and b/Notes/WOTC Web Archive/Savage Progressions_ Ghost and Werewolf Template Classes.pdf differ
diff --git a/nwn/nwnprc/trunk/2das/feat.2da b/nwn/nwnprc/trunk/2das/feat.2da
index a600c6a5..72762351 100644
--- a/nwn/nwnprc/trunk/2das/feat.2da
+++ b/nwn/nwnprc/trunk/2das/feat.2da
@@ -4460,8 +4460,8 @@
4456 minstrel_song_wisdom 16823470 16823487 ife_bardsong **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** 2154 **** 0.5 **** 105 1 **** **** **** **** **** **** **** **** **** FEAT_MINSTREL_SONG_WISDOM 5 **** **** **** **** **** 0 1
4457 minstrel_song_charisma 16823471 16823488 ife_bardsong **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** 2155 **** 0.5 **** 105 1 **** **** **** **** **** **** **** **** **** FEAT_MINSTREL_SONG_CHARISMA 5 **** **** **** **** **** 0 1
4458 minstrel_song_wound_whisp 16823111 16823489 ife_bardsong **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** 2156 **** 0.5 **** 105 1 **** **** **** **** **** **** **** **** **** FEAT_MINSTREL_SONG_WOUND_WHISP 5 **** **** **** **** **** 0 1
-4459 Warlock_Imbue_Item 16827950 16827951 ife_imbueitem **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2082 **** 0.5 -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_IMBUE_ITEM 6 1 **** **** **** **** 0 1
-4460 Warlock_Eldritch_Blast 16827948 16827949 inv_eldrtchblast **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2083 **** 0.5 -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_ELDRITCH_BLAST 6 1 **** **** **** **** 0 1
+4459 Warlock_Imbue_Item 16827950 16827951 ife_imbueitem **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2082 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_IMBUE_ITEM 6 1 **** **** **** **** 0 1
+4460 Warlock_Eldritch_Blast 16827948 16827949 inv_eldrtchblast **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 2083 **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_ELDRITCH_BLAST 6 1 **** **** **** **** 0 1
4461 Warlock_Resist_Acid 16827938 16827943 ife_X2EnrRsA1 **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_WARLOCK_RESIST_ACID 5 **** **** **** **** **** 0 1
4462 Warlock_Resist_Cold 16827939 16827943 ife_X2EnrRsC1 **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_WARLOCK_RESIST_COLD 5 **** **** **** **** **** 0 1
4463 Warlock_Resist_Elec 16827940 16827943 ife_X2EnrRsE1 **** **** **** **** **** **** **** **** **** **** 0 0 0 23 **** **** **** 0.5 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_WARLOCK_RESIST_ELEC 5 **** **** **** **** **** 0 1
diff --git a/nwn/nwnprc/trunk/include/inc_epicspellfnc.nss b/nwn/nwnprc/trunk/include/inc_epicspellfnc.nss
index 59f4dd60..7fb60540 100644
--- a/nwn/nwnprc/trunk/include/inc_epicspellfnc.nss
+++ b/nwn/nwnprc/trunk/include/inc_epicspellfnc.nss
@@ -246,7 +246,7 @@ int GetSpellFromAbrev(string sAbrev)
sAbrev = GetStringLowerCase(sAbrev);
if(GetStringLeft(sAbrev, 8) == "epic_sp_")
sAbrev = GetStringRight(sAbrev, GetStringLength(sAbrev)-8);
- if(DEBUG) DoDebug("sAbrew to check vs: " + sAbrev);
+ if(DEBUG) DoDebug("sAbrev to check vs: " + sAbrev);
int i = 0;
string sLabel = GetStringLowerCase(Get2DACache("epicspells", "LABEL", i));
while(sLabel != "")
diff --git a/nwn/nwnprc/trunk/include/prc_inc_skills.nss b/nwn/nwnprc/trunk/include/prc_inc_skills.nss
index bbca2991..f1311ed5 100644
--- a/nwn/nwnprc/trunk/include/prc_inc_skills.nss
+++ b/nwn/nwnprc/trunk/include/prc_inc_skills.nss
@@ -374,6 +374,12 @@ int PRCIsFlying(object oCreature)
if(GetRacialType(oCreature) == RACIAL_TYPE_GLOURA)
bFlying = TRUE;
+
+ if(GetRacialType(oCreature) == RACIAL_TYPE_AVARIEL)
+ bFlying = TRUE;
+
+ if(GetRacialType(oCreature) == RACIAL_TYPE_FEYRI)
+ bFlying = TRUE;
if(GetRacialType(oCreature) == RACIAL_TYPE_SPIRETOPDRAGON)
bFlying = TRUE;
diff --git a/nwn/nwnprc/trunk/racescripts/race_skin.nss b/nwn/nwnprc/trunk/racescripts/race_skin.nss
index 31672000..d8d8cdb3 100644
--- a/nwn/nwnprc/trunk/racescripts/race_skin.nss
+++ b/nwn/nwnprc/trunk/racescripts/race_skin.nss
@@ -456,6 +456,14 @@ void main()
{
SetCreatureWingType(CREATURE_WING_TYPE_BUTTERFLY, oPC);
}
+ if(GetRacialType(oPC) == RACIAL_TYPE_AVARIEL)
+ {
+ SetCreatureWingType(CREATURE_WING_TYPE_BIRD, oPC);
+ }
+ if(GetRacialType(oPC) == RACIAL_TYPE_FEYRI)
+ {
+ SetCreatureWingType(CREATURE_WING_TYPE_DEMON, oPC);
+ }
if(GetRacialType(oPC) == RACIAL_TYPE_JAEBRIN)
{
SetCompositeBonus(oSkin, "Jaebrin_Spell", 4, ITEM_PROPERTY_SKILL_BONUS, SKILL_SPELLCRAFT);
diff --git a/nwn/nwnprc/trunk/spells/sp_whrl_blade.nss b/nwn/nwnprc/trunk/spells/sp_whrl_blade.nss
index 1f7cc158..0c321254 100644
--- a/nwn/nwnprc/trunk/spells/sp_whrl_blade.nss
+++ b/nwn/nwnprc/trunk/spells/sp_whrl_blade.nss
@@ -45,27 +45,68 @@ Created: 7/6/07
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
+/* void PerformAttack(object oDefender, object oAttacker,
+ effect eSpecialEffect, float eDuration = 0.0, int iAttackBonusMod = 0,
+ int iDamageModifier = 0, int iDamageType = 0,
+ string sMessageSuccess = "", string sMessageFailure = "",
+ int iTouchAttackType = FALSE,
+ object oRightHandOverride = OBJECT_INVALID, object oLeftHandOverride = OBJECT_INVALID,
+ int nHandednessOverride = 0, int bCombatModeFlags = 0); // motu99: changed default of nHandednessOverride to FALSE (was -1) */
+
#include "prc_inc_combat"
+int GetIsSlashingWeapon(object oItem)
+{
+ int iWeapType = StringToInt(Get2DACache("baseitems", "WeaponType", GetBaseItemType(oItem)));
+
+ if (iWeapType == 3 || iWeapType == 4) // slashing or slashing & piercing
+ return TRUE;
+ else
+ return FALSE;
+}
+
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
- object oPC = OBJECT_SELF;
- vector vOrigin = GetPosition(oPC);
- location lTarget = PRCGetSpellTargetLocation();
+ object oPC = OBJECT_SELF;
+
+ object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
+
+ int bSlashing = GetIsSlashingWeapon(oWeapon);
+
+ if(!bSlashing)
+ {
+ SendMessageToPC(oPC, "This spell requires a slashing weapon in the spellcaster's right hand.");
+ return;
+ }
+
+ int nClass = GetLastSpellCastClass();
+ int nStatMod = GetDCAbilityModForClass(nClass, oPC);
+ int nStatBonus = GetAbilityModifier(nStatMod);
+
+ vector vOrigin = GetPosition(oPC);
+
+ location lTarget = PRCGetSpellTargetLocation();
+
+ float fLength = FeetToMeters(60.0);
+
effect eNone;
- object oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, FeetToMeters(60.0f), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin);
+
+ SetLocalInt(oPC, "WhirlingBlade", TRUE);
+
+ object oTarget = MyFirstObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin);
while(GetIsObjectValid(oTarget))
{
- if(!GetIsReactionTypeFriendly(oTarget, oPC))
+ if (oTarget != oPC && GetIsReactionTypeHostile(oTarget, oPC))
{
- PerformAttack(oTarget, oPC, eNone);
+ DelayCommand(0.0, PerformAttack(oTarget, oPC, eNone, 0.0, nStatBonus, 0, 0, "Whirling Blade: Hit!", "Whirling Blade: Miss!"));
}
- oTarget = MyNextObjectInShape(SHAPE_SPELLCYLINDER, FeetToMeters(60.0f), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin);
+ oTarget = MyNextObjectInShape(SHAPE_SPELLCYLINDER, fLength, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE, vOrigin);
}
+ DelayCommand(1.0f, DeleteLocalInt(oPC, "WhirlingBlade"));
PRCSetSchool();
}
\ No newline at end of file
diff --git a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml
index 00b412b2..7d0c957f 100644
--- a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml
+++ b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml
@@ -46467,8 +46467,7 @@ Duration: Instantaneous
Saving Throw: None
Spell Resistance: No
-Because magic is powerful, so, too, is the ability to dispel magic. You can use Superb Dispelling to end ongoing spells that have been cast on a creature or object, or to end ongoing spells within an area.
-One object, creature, or affected area is the target of the spell. You make a dispel check against the spell currently in effect on the target. A dispel check is 1d20 + 1 per caster level (maximum +40) against a DC of 11 + the spells caster level. If successful, the target's effects are dispelled.
+As greater dispel magic, except that the maximum bonus on the dispel check is +40, and the character takes 10d6 points of backlash damage.
Epic Spell: Symrustar's Spellbinding
Researched Epic Spell: Symrustar's Spellbinding
School: Enchantment