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