diff --git a/nwn/nwnprc/trunk/2das/cls_feat_acego.2da b/nwn/nwnprc/trunk/2das/cls_feat_acego.2da
index 6958c5de..3131f78d 100644
--- a/nwn/nwnprc/trunk/2das/cls_feat_acego.2da
+++ b/nwn/nwnprc/trunk/2das/cls_feat_acego.2da
@@ -82,7 +82,7 @@
78 FEAT_EPIC_TOUGHNESS_8 761 1 11 0
79 FEAT_EPIC_TOUGHNESS_9 762 1 11 0
80 FEAT_EPIC_TOUGHNESS_10 763 1 11 0
-81 FEAT_EPIC_REFLEXES 4058 1 11 0
+81 FEAT_EPIC_REFLEXES 585 1 11 0
82 FEAT_EPIC_SKILL_FOCUS_RIDE 3038 1 11 0
83 FEAT_EPIC_SKILL_FOCUS_JUMP 3040 1 11 0
84 FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE 3042 1 11 0
diff --git a/nwn/nwnprc/trunk/2das/cls_feat_foclyr.2da b/nwn/nwnprc/trunk/2das/cls_feat_foclyr.2da
index 16d2397b..8b4f1eb8 100644
--- a/nwn/nwnprc/trunk/2das/cls_feat_foclyr.2da
+++ b/nwn/nwnprc/trunk/2das/cls_feat_foclyr.2da
@@ -173,7 +173,7 @@
169 FocusedSpellPenetrAbj 3135 1 2 0
170 FEAT_EPIC_LEADERSHIP 4366 1 2 0
171 FEAT_LEGENDARY_COMMANDER 4367 1 2 0
-172 FEAT_EPIC_PROWESS 4056 1 2 0
+172 FEAT_EPIC_PROWESS 584 1 2 0
173 FEAT_EPIC_REPUTATION 586 1 2 0
174 FAST_HEALING_1 4145 1 2 0
175 FAST_HEALING_2 4146 1 2 0
diff --git a/nwn/nwnprc/trunk/2das/cls_feat_justww.2da b/nwn/nwnprc/trunk/2das/cls_feat_justww.2da
index 4e7f331b..7e790278 100644
--- a/nwn/nwnprc/trunk/2das/cls_feat_justww.2da
+++ b/nwn/nwnprc/trunk/2das/cls_feat_justww.2da
@@ -45,7 +45,7 @@
41 FEAT_EPIC_SUPERIOR_INITIATIVE 753 1 -1 0
42 FEAT_EPIC_PERFECT_HEALTH 747 1 -1 0
43 FEAT_Improved_ManyShot 3350 1 -1 0
-44 FEAT_EPIC_PROWESS 4056 1 -1 0
+44 FEAT_EPIC_PROWESS 584 1 -1 0
45 FAST_HEALING_1 4145 1 -1 0
46 FAST_HEALING_2 4146 1 -1 0
47 FAST_HEALING_3 4147 1 -1 0
diff --git a/nwn/nwnprc/trunk/2das/cls_feat_monk.2da b/nwn/nwnprc/trunk/2das/cls_feat_monk.2da
index 460b2fd8..7671afa6 100644
--- a/nwn/nwnprc/trunk/2das/cls_feat_monk.2da
+++ b/nwn/nwnprc/trunk/2das/cls_feat_monk.2da
@@ -126,7 +126,7 @@
122 FEAT_EPIC_MONK 971 3 21 0
123 FEAT_EPIC_BLINDING_SPEED 491 1 -1 1
124 LegendaryWrestler 5173 1 -1 0
-125 FEAT_EPIC_PROWESS 4056 1 -1 0
+125 FEAT_EPIC_PROWESS 584 1 -1 0
126 FAST_HEALING_1 4145 1 -1 0
127 FAST_HEALING_2 4146 1 -1 0
128 FAST_HEALING_3 4147 1 -1 0
diff --git a/nwn/nwnprc/trunk/2das/cls_feat_nights.2da b/nwn/nwnprc/trunk/2das/cls_feat_nights.2da
index 9e08f319..1fa25a7e 100644
--- a/nwn/nwnprc/trunk/2das/cls_feat_nights.2da
+++ b/nwn/nwnprc/trunk/2das/cls_feat_nights.2da
@@ -74,8 +74,8 @@
70 FEAT_MANYSHOT 3306 1 -1 1
71 FEAT_IMP_MANYSHOT 3350 1 -1 1
72 FEAT_LINGERING_DAMAGE 3099 1 -1 0
-73 FEAT_EPIC_PROWESS 4056 1 -1 0
-74 FEAT_EPIC_REFLEXES 4058 1 -1 0
+73 FEAT_EPIC_PROWESS 584 1 -1 0
+74 FEAT_EPIC_REFLEXES 585 1 -1 0
75 FEAT_EPIC_GREAT_DEXTERITY_1 784 1 -1 0
76 FEAT_EPIC_GREAT_DEXTERITY_2 785 1 -1 0
77 FEAT_EPIC_GREAT_DEXTERITY_3 786 1 -1 0
diff --git a/nwn/nwnprc/trunk/2das/cls_feat_spnmld.2da b/nwn/nwnprc/trunk/2das/cls_feat_spnmld.2da
index 21515dcd..ae823d9d 100644
--- a/nwn/nwnprc/trunk/2das/cls_feat_spnmld.2da
+++ b/nwn/nwnprc/trunk/2das/cls_feat_spnmld.2da
@@ -250,8 +250,8 @@
246 Epic_RebindSoulmeld_Heart 9011 1 -1 1
247 Epic_RebindSoulmeld_Soul 9012 1 -1 1
248 Epic_RebindSoulmeld_Totem 9013 1 -1 1
-249 FEAT_EPIC_PROWESS 4056 1 -1 0
-250 FEAT_EPIC_REFLEXES 4058 1 -1 0
+249 FEAT_EPIC_PROWESS 584 1 -1 0
+250 FEAT_EPIC_REFLEXES 585 1 -1 0
251 FEAT_EPIC_ENERGY_RESISTANCE_COLD_1 533 1 -1 0
252 FEAT_EPIC_ENERGY_RESISTANCE_COLD_2 534 1 -1 0
253 FEAT_EPIC_ENERGY_RESISTANCE_COLD_3 535 1 -1 0
diff --git a/nwn/nwnprc/trunk/2das/cls_feat_ssn.2da b/nwn/nwnprc/trunk/2das/cls_feat_ssn.2da
index c1008ce4..ffc9756a 100644
--- a/nwn/nwnprc/trunk/2das/cls_feat_ssn.2da
+++ b/nwn/nwnprc/trunk/2das/cls_feat_ssn.2da
@@ -110,7 +110,7 @@
106 FEAT_EPIC_BLINDING_SPEED 491 1 -1 1
107 FEAT_EPIC_SUPERIOR_INITIATIVE 753 1 -1 0
108 FEAT_EPIC_DODGE 856 1 -1 0
-109 FEAT_EPIC_PROWESS 4056 1 -1 0
+109 FEAT_EPIC_PROWESS 584 1 -1 0
110 FAST_HEALING_1 4145 1 -1 0
111 FAST_HEALING_2 4146 1 -1 0
112 FAST_HEALING_3 4147 1 -1 0
diff --git a/nwn/nwnprc/trunk/2das/cls_feat_umbral.2da b/nwn/nwnprc/trunk/2das/cls_feat_umbral.2da
index c9e88863..dd51b832 100644
--- a/nwn/nwnprc/trunk/2das/cls_feat_umbral.2da
+++ b/nwn/nwnprc/trunk/2das/cls_feat_umbral.2da
@@ -91,8 +91,8 @@
87 FEAT_EPIC_SKILL_FOCUS_BLUFF 917 1 -1 0
88 FEAT_EPIC_SKILL_FOCUS_INTIMIDATE 918 1 -1 0
89 FEAT_LINGERING_DAMAGE 3099 1 -1 0
-90 FEAT_EPIC_PROWESS 4056 1 -1 0
-91 FEAT_EPIC_REFLEXES 4058 1 -1 0
+90 FEAT_EPIC_PROWESS 584 1 -1 0
+91 FEAT_EPIC_REFLEXES 585 1 -1 0
92 FEAT_EPIC_SKILL_FOCUS_RIDE 3038 1 -1 0
93 FEAT_EPIC_SKILL_FOCUS_JUMP 3040 1 -1 0
94 FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE 3042 1 -1 0
diff --git a/nwn/nwnprc/trunk/2das/cls_pres_lgdr.2da b/nwn/nwnprc/trunk/2das/cls_pres_lgdr.2da
index bc390ed6..f51bba6e 100644
--- a/nwn/nwnprc/trunk/2das/cls_pres_lgdr.2da
+++ b/nwn/nwnprc/trunk/2das/cls_pres_lgdr.2da
@@ -1,49 +1,65 @@
2DA V2.0
- LABEL ReqType ReqParam1 ReqParam2
-0 AttackBonus BAB 23 ****
-1 Intimidate SKILL 24 15
-2 ImprovedBullrush FEAT 2806 ****
-3 GreatCleave FEAT 391 ****
-4 LightngRef FEAT 24 ****
-5 ImpCritDagger FEATOR 52 ****
-6 ImpCritDart FEATOR 53 ****
-7 ImpCritHXBow FEATOR 54 ****
-8 ImpCritLgXBow FEATOR 55 ****
-9 ImpCritLgMace FEATOR 56 ****
-10 ImpCritMorn FEATOR 57 ****
-11 ImpCritStaff FEATOR 58 ****
-12 ImpCritSpear FEATOR 59 ****
-13 ImpCritSickle FEATOR 60 ****
-14 ImpCritSling FEATOR 61 ****
-15 ImpCritUnArm FEATOR 62 ****
-16 ImpCritLongBow FEATOR 63 ****
-17 ImpCritShortBow FEATOR 64 ****
-18 ImpCritShortSword FEATOR 65 ****
-19 ImpCritRapier FEATOR 66 ****
-20 ImpCritScim FEATOR 67 ****
-21 ImpCritLSw FEATOR 68 ****
-22 ImpCritGSw FEATOR 69 ****
-23 ImpCritHAxe FEATOR 70 ****
-24 ImpCritTAxe FEATOR 71 ****
-25 ImpCritBAxe FEATOR 72 ****
-26 ImpCritGAxe FEATOR 73 ****
-27 ImpCritHalb FEATOR 74 ****
-28 ImpCritLgHam FEATOR 75 ****
-29 ImpCritLgFlail FEATOR 76 ****
-30 ImpCritWHam FEATOR 77 ****
-31 ImpCritHFlail FEATOR 78 ****
-32 ImpCritKama FEATOR 79 ****
-33 ImpCritKukri FEATOR 80 ****
-34 ImpCritShur FEATOR 82 ****
-35 ImpCritScy FEATOR 83 ****
-36 ImpCritKatana FEATOR 84 ****
-37 ImpCritBSw FEATOR 85 ****
-38 ImpCritDMace FEATOR 87 ****
-39 ImpCritDAxe FEATOR 88 ****
-40 ImpCrit2Sw FEATOR 89 ****
-41 ImpCrit_DwAxe FEATOR 954 ****
-42 ImpCrit_Whip FEATOR 995 ****
-43 ImpCrit_Mindblade FEATOR 3614 ****
-44 ImpCrit_Trident FEATOR 1074 ****
-45 ScriptVar VAR PRC_AllowLgDr 0
+ LABEL ReqType ReqParam1 ReqParam2
+0 AttackBonus BAB 23 ****
+1 Intimidate SKILL 24 15
+2 ImprovedBullrush FEAT 2806 ****
+3 GreatCleave FEAT 391 ****
+4 LightngRef FEAT 24 ****
+5 ImpCritDagger FEATOR 52 ****
+6 ImpCritDart FEATOR 53 ****
+7 ImpCritHXBow FEATOR 54 ****
+8 ImpCritLgXBow FEATOR 55 ****
+9 ImpCritLgMace FEATOR 56 ****
+10 ImpCritMorn FEATOR 57 ****
+11 ImpCritStaff FEATOR 58 ****
+12 ImpCritSpear FEATOR 59 ****
+13 ImpCritSickle FEATOR 60 ****
+14 ImpCritSling FEATOR 61 ****
+15 ImpCritUnArm FEATOR 62 ****
+16 ImpCritLongBow FEATOR 63 ****
+17 ImpCritShortBow FEATOR 64 ****
+18 ImpCritShortSword FEATOR 65 ****
+19 ImpCritRapier FEATOR 66 ****
+20 ImpCritScim FEATOR 67 ****
+21 ImpCritLSw FEATOR 68 ****
+22 ImpCritGSw FEATOR 69 ****
+23 ImpCritHAxe FEATOR 70 ****
+24 ImpCritTAxe FEATOR 71 ****
+25 ImpCritBAxe FEATOR 72 ****
+26 ImpCritGAxe FEATOR 73 ****
+27 ImpCritHalb FEATOR 74 ****
+28 ImpCritLgHam FEATOR 75 ****
+29 ImpCritLgFlail FEATOR 76 ****
+30 ImpCritWHam FEATOR 77 ****
+31 ImpCritHFlail FEATOR 78 ****
+32 ImpCritKama FEATOR 79 ****
+33 ImpCritKukri FEATOR 80 ****
+34 ImpCritShur FEATOR 82 ****
+35 ImpCritScy FEATOR 83 ****
+36 ImpCritKatana FEATOR 84 ****
+37 ImpCritBSw FEATOR 85 ****
+38 ImpCritDMace FEATOR 87 ****
+39 ImpCritDAxe FEATOR 88 ****
+40 ImpCrit2Sw FEATOR 89 ****
+41 ImpCrit_DwAxe FEATOR 954 ****
+42 ImpCrit_Whip FEATOR 995 ****
+43 ImpCrit_Mindblade FEATOR 3614 ****
+44 ImpCrit_Trident FEATOR 1074 ****
+45 IMP_CRIT_LIGHT_LANCE FEATOR 24649 0
+46 IMP_CRIT_HEAVY_PICK FEATOR 24650 0
+47 IMP_CRIT_LIGHT_PICK FEATOR 24651 0
+48 IMP_CRIT_SAI FEATOR 24652 0
+49 IMP_CRIT_NUNCHAKU FEATOR 24653 0
+50 IMP_CRIT_FALCHION FEATOR 24654 0
+51 IMP_CRIT_SAP FEATOR 24655 0
+52 IMP_CRIT_KATAR FEATOR 24656 0
+53 IMP_CRIT_HEAVY_MACE FEATOR 24657 0
+54 IMP_CRIT_MAUL FEATOR 24658 0
+55 IMP_CRIT_DBL_SCIMITAR FEATOR 24659 0
+56 IMP_CRIT_GOAD FEATOR 24660 0
+57 IMP_CRIT_ELVEN_LIGHTBLADE FEATOR 24701 0
+58 IMP_CRIT_ELVEN_COURTBLADE FEATOR 24717 0
+59 IMP_CRIT_EAGLE_CLAW FEATOR 24725 0
+60 IMP_CRIT_ELVEN_THINBLADE FEATOR 24709 0
+61 ScriptVar VAR PRC_AllowLgDr 0
diff --git a/nwn/nwnprc/trunk/2das/feat.2da b/nwn/nwnprc/trunk/2das/feat.2da
index 4472fb2e..8d2b458e 100644
--- a/nwn/nwnprc/trunk/2das/feat.2da
+++ b/nwn/nwnprc/trunk/2das/feat.2da
@@ -5286,7 +5286,7 @@
5282 ProfaneAgony 16834997 16834998 ife_prfnlflch **** **** **** **** **** **** **** **** 294 **** 0 0 1 **** **** 3792 **** 0.5 -1 **** **** 310 313 **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
5283 DivineIntercession 16834995 16834996 ife_telep_manag **** **** **** **** **** **** **** **** 294 **** 0 0 1 **** **** 3791 **** 0.5 -1 **** **** 324 323 **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
5284 InlindlSchool 16834993 16834994 ife_X2DCrtWhip **** **** **** 13 **** **** **** **** 389 42 **** **** 1 **** **** 2723 **** **** -1 **** 1 **** **** **** **** **** **** **** **** **** FEAT_INLINDL_SCHOOL 2 **** **** **** **** **** 0 0
-5285 VaeSchool 16834991 16834992 ife_X2WpCh 7 **** **** **** **** **** **** **** 2807 993 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SNAP_KICK **** **** **** **** **** **** **** 0
+5285 VaeSchool 16834991 16834992 ife_X2WpCh 7 **** **** **** **** **** **** **** 993 **** **** **** 1 **** **** **** **** **** **** **** **** 2807 4079 **** **** **** **** **** **** **** FEAT_SNAP_KICK **** **** **** **** **** **** **** 0
5286 ThreeMountains 16834989 16834990 ife_X2DiviWrth **** 13 **** **** **** **** **** **** 2806 6 **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** FEAT_SNAP_KICK **** **** **** **** **** **** **** 0
5287 SpinningHalberd 16834987 16834988 ife_X2CritDHalb **** **** **** **** **** **** **** **** 112 **** 0 0 1 **** **** 2724 **** 0.5 -1 **** **** 41 374 **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
5288 HighSwordLowAxe 16834985 16834986 ife_wepspec_Dax **** **** **** **** **** **** **** **** 2807 41 0 0 1 **** **** 2793 **** 0.5 -1 **** **** **** **** **** **** **** **** **** **** **** FEAT_SMITE_UNDEAD 6 1 **** **** **** **** 0 1
diff --git a/nwn/nwnprc/trunk/2das/fileends.2da b/nwn/nwnprc/trunk/2das/fileends.2da
index ce891a7e..f39e650f 100644
--- a/nwn/nwnprc/trunk/2das/fileends.2da
+++ b/nwn/nwnprc/trunk/2das/fileends.2da
@@ -6,19 +6,19 @@
2 gender 2
3 portraits 1100
4 skills 50
-5 cls_feat_* 600
+5 cls_feat_* 3090
6 cls_skill_* 50
7 cls_psipw_* 180
-8 feat 26001
-9 cls_pres_* 25
+8 feat 26500
+9 cls_pres_* 70
10 hen_familiar 20
11 hen_companion 30
12 domains 70
13 soundset 450
-14 spells 19400
+14 spells 20000
15 appearance 500
16 wingmodel 10
17 tailmodel 10
-18 race_feat_* 30
+18 race_feat_* 70
19 ireq_* 50
20 item_to_ireq 700
diff --git a/nwn/nwnprc/trunk/include/inc_newspellbook.nss b/nwn/nwnprc/trunk/include/inc_newspellbook.nss
index 93ff3f19..909b93dc 100644
--- a/nwn/nwnprc/trunk/include/inc_newspellbook.nss
+++ b/nwn/nwnprc/trunk/include/inc_newspellbook.nss
@@ -86,6 +86,7 @@ void CheckNewSpellbooks(object oPC);
void NewSpellbookSpell(int nClass, int nSpellbookType, int nMetamagic = METAMAGIC_NONE, int bInstantSpell = FALSE);
void CastSpontaneousSpell(int nClass, int bInstantSpell = FALSE);
void CastPreparedSpell(int nClass, int nMetamagic = METAMAGIC_NONE, int bInstantSpell = FALSE);
+void ProcessPreparedSpellLevel(object oPC, int nClass, int nSpellLevel, int nLevel, int nAbility, string sClass, string sFile, string sArrayName, int nSpellbookType, object oSkin);
//////////////////////////////////////////////////
/* Constants */
@@ -859,8 +860,41 @@ void SetupSpells(object oPC, int nClass)
// For spontaneous spellbooks, set up an array that tells how many spells of each level they can cast
// And add casting feats for each spell known to the caster's hide
+ if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS) //:: Fixed by TiredByFirelight
+ {
+ // Spell slots
+ int nSpellLevel, nSlots;
+ for(nSpellLevel = 0; nSpellLevel <= 9; nSpellLevel++)
+ {
+ nSlots = GetSlotCount(nLevel, nSpellLevel, nAbility, nClass, oPC);
+ persistant_array_set_int(oPC, sArrayName, nSpellLevel, nSlots);
+ }
- if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS)
+ int i;
+ for(i = 0; i < persistant_array_get_size(oPC, "Spellbook" + sClass); i++)
+ { //adding feats
+ SpontaneousSpellSetupLoop(oPC, nClass, sFile, oSkin, i);
+ }
+ }// end if - Spontaneous spellbook
+
+ // For prepared spellbooks, add spell uses and use feats according to spells memorised list
+ else if(nSpellbookType == SPELLBOOK_TYPE_PREPARED && !GetIsBioSpellCastClass(nClass))
+ {
+ int nSpellLevel, nSlot, nSlots, nSpellbookID;
+ string sArrayName2, sIDX;
+
+ // clearing existing spells
+ persistant_array_delete(oPC, sArrayName);
+
+ for(nSpellLevel = 0; nSpellLevel <= 9; nSpellLevel++)
+ {
+ //Delay of 0.01, to ensure it runs after persistant_array_delete() which is a lot of 0.0 delay commands, but before other spellbook stuff
+ DelayCommand(0.01, ProcessPreparedSpellLevel(oPC, nClass, nSpellLevel, nLevel, nAbility, sClass, sFile, sArrayName, nSpellbookType, oSkin));
+ }
+ }
+}
+
+/* if(nSpellbookType == SPELLBOOK_TYPE_SPONTANEOUS)
{
// Spell slots
int nSpellLevel, nSlots;
@@ -910,8 +944,28 @@ void SetupSpells(object oPC, int nClass)
}
}
}
+} */
+
+void ProcessPreparedSpellLevel(object oPC, int nClass, int nSpellLevel, int nLevel, int nAbility, string sClass, string sFile, string sArrayName, int nSpellbookType, object oSkin)
+{
+ string sArrayName2 = "Spellbook" + IntToString(nSpellLevel) + "_" + sClass;
+ string sIDX = "SpellbookIDX" + IntToString(nSpellLevel) + "_" + sClass;
+ int nSlots = GetSlotCount(nLevel, nSpellLevel, nAbility, nClass, oPC);
+ int nSlot;
+ for(nSlot = 0; nSlot < nSlots; nSlot++)
+ {
+ int nSpellbookID = persistant_array_get_int(oPC, sArrayName2, nSlot);
+ if(nSpellbookID != 0)
+ {
+ AddSpellUse(oPC, nSpellbookID, nClass, sFile, sArrayName, nSpellbookType, oSkin,
+ StringToInt(Get2DACache(sFile, "FeatID", nSpellbookID)),
+ StringToInt(Get2DACache(sFile, "IPFeatID", nSpellbookID)),
+ sIDX);
+ }
+ }
}
+
void CheckAndRemoveFeat(object oHide, itemproperty ipFeat)
{
int nSubType = GetItemPropertySubType(ipFeat);
diff --git a/nwn/nwnprc/trunk/newspellbook/inv_dra_endrexp.nss b/nwn/nwnprc/trunk/newspellbook/inv_dra_endrexp.nss
index bbef122e..b18899df 100644
--- a/nwn/nwnprc/trunk/newspellbook/inv_dra_endrexp.nss
+++ b/nwn/nwnprc/trunk/newspellbook/inv_dra_endrexp.nss
@@ -26,6 +26,63 @@ void main()
{
if (!PreInvocationCastCode()) return;
+ object oCaster = OBJECT_SELF;
+ object oTarget = PRCGetSpellTargetObject();
+ int nCasterLevel = GetInvokerLevel(oCaster, GetInvokingClass());
+ int bValid = FALSE;
+ int nBPIndex = 0;
+ int nBPTIndex = 0;
+
+ int bValidTarget = FALSE;
+ int bValidCaster = FALSE;
+
+ effect eVis = EffectVisualEffect(VFX_IMP_ELEMENTAL_PROTECTION);
+
+ //Add to array on target of breaths they're protected from
+
+ if(!array_exists(oTarget, "BreathProtected"))
+ array_create(oTarget, "BreathProtected");
+
+ while(!bValidTarget)
+ {
+ if(array_get_object(oTarget, "BreathProtected", nBPIndex) == OBJECT_INVALID)
+ {
+ array_set_object(oTarget, "BreathProtected", nBPIndex, oCaster);
+ bValidTarget = TRUE;
+ }
+ else
+ nBPIndex++;
+ }
+
+ if(!array_exists(oCaster, "BreathProtectTargets"))
+ array_create(oCaster, "BreathProtectTargets");
+
+ while(!bValidCaster)
+ {
+ if(array_get_object(oCaster, "BreathProtectTargets", nBPTIndex) == OBJECT_INVALID)
+ {
+ array_set_object(oCaster, "BreathProtectTargets", nBPTIndex, oTarget);
+ if(DEBUG) DoDebug("Storing target: " + GetName(oTarget));
+ bValidCaster = TRUE;
+ }
+ else
+ nBPTIndex++;
+ }
+
+ //add to array on caster of targets protected by their spell for resting cleanup
+
+ if(!array_exists(oCaster, "BreathProtectTargets"))
+ array_create(oCaster, "BreathProtectTargets");
+
+ ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
+ DispelMonitor(oCaster, oTarget, INVOKE_ENDURE_EXPOSURE);
+}
+
+
+/* void main()
+{
+ if (!PreInvocationCastCode()) return;
+
object oCaster = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
int nCasterLevel = GetInvokerLevel(oCaster, GetInvokingClass());
@@ -73,6 +130,7 @@ void main()
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
DispelMonitor(oCaster, oTarget, INVOKE_ENDURE_EXPOSURE);
}
+ */
void DispelMonitor(object oCaster, object oTarget, int nSpellID)
{
diff --git a/nwn/nwnprc/trunk/newspellbook/tob_bloodclaw.nss b/nwn/nwnprc/trunk/newspellbook/tob_bloodclaw.nss
index 59c399c8..30fe3860 100644
--- a/nwn/nwnprc/trunk/newspellbook/tob_bloodclaw.nss
+++ b/nwn/nwnprc/trunk/newspellbook/tob_bloodclaw.nss
@@ -56,6 +56,28 @@ void RendingClaws(object oInitiator, object oTarget)
}
void Scent(object oInitiator)
+{
+ effect eTest = GetFirstEffect(oInitiator);
+ while (GetIsEffectValid(eTest))
+ {
+ if (GetEffectTag(eTest) == "BCM_SCENT_ACTIVE")
+ return;
+ eTest = GetNextEffect(oInitiator);
+ }
+
+ effect eLink;
+ effect eScent;
+
+ eScent = EffectLinkEffects(EffectSkillIncrease(SKILL_SPOT, 4), EffectSkillIncrease(SKILL_LISTEN, 4));
+ eLink = EffectLinkEffects(eScent, EffectSkillIncrease(SKILL_SEARCH, 4));
+ eLink = EffectLinkEffects(eLink, EffectBonusFeat(FEAT_KEEN_SENSE));
+ eLink = TagEffect(eLink, "BCM_SCENT_ACTIVE");
+ eLink = UnyieldingEffect(eLink);
+
+ ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oInitiator);
+}
+
+/* void Scent(object oInitiator)
{
object oSkin = GetPCSkin(oInitiator);
@@ -65,7 +87,7 @@ void Scent(object oInitiator)
IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_KEEN_SENSES), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eScent, oInitiator);
-}
+} */
void main()
{
diff --git a/nwn/nwnprc/trunk/newspellbook/tob_dmnd_avlbld.nss b/nwn/nwnprc/trunk/newspellbook/tob_dmnd_avlbld.nss
index d9676cd8..97085edd 100644
--- a/nwn/nwnprc/trunk/newspellbook/tob_dmnd_avlbld.nss
+++ b/nwn/nwnprc/trunk/newspellbook/tob_dmnd_avlbld.nss
@@ -52,11 +52,37 @@ void main()
{
int nHit = 1;
int nPenalty = 0;
- DelayCommand(0.1, Owieowieowowow(oInitiator, oTarget, nHit, nPenalty));
+ DelayCommand(0.1, Owieowieowowow(oInitiator, oTarget, nHit, nPenalty));
}
}
void Owieowieowowow(object oInitiator, object oTarget, int nHit, int nPenalty)
+{
+ if (GetLocalInt(oInitiator, "SupernalAttack")) nPenalty += 1;
+
+ if (nHit == 1)
+ {
+ effect eNone;
+ PerformAttack(oTarget, oInitiator, eNone, 0.0, nPenalty, 0, 0, "Avalanche of Blades Hit", "Avalanche of Blades Miss");
+
+ // Check result of attack
+ if (GetLocalInt(oTarget, "PRCCombat_StruckByAttack"))
+ {
+ nPenalty -= 4;
+ if (GetLocalInt(oInitiator, "SupernalAttack")) nPenalty -= 1;
+
+ // Continue the loop only on hit
+ DelayCommand(0.1, Owieowieowowow(oInitiator, oTarget, 1, nPenalty));
+
+ DelayCommand(3.0, DeleteLocalInt(oTarget, "PRCCombat_StruckByAttack"));
+ }
+ // No else block: if the attack missed, don't queue another call
+ }
+}
+
+
+
+/* void Owieowieowowow(object oInitiator, object oTarget, int nHit, int nPenalty)
{
if (GetLocalInt(oInitiator, "SupernalAttack")) nPenalty += 1;
if(nHit == 1)
@@ -74,4 +100,4 @@ void Owieowieowowow(object oInitiator, object oTarget, int nHit, int nPenalty)
//Again! Again!
DelayCommand(0.1, Owieowieowowow(oInitiator, oTarget, nHit, nPenalty));
}
-}
\ No newline at end of file
+} */
\ No newline at end of file
diff --git a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk
index 4a1fede7..3fb6c2e9 100644
Binary files a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk and b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk differ
diff --git a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml
index bf7d40ae..19f4b936 100644
--- a/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml
+++ b/nwn/nwnprc/trunk/tlk/prc8_consortium.tlk.xml
@@ -25418,7 +25418,7 @@ Use: Automatic.
Aura of Menace
Type of Feat: Racial
Prerequisite: Race-Specific.
-Specifics: The creature has a righteous aura around it. Any creature that fails its will save(DC:16+Cha) is shaken.
+Specifics: The creature has a righteous aura around it. Any creature that fails its will save is shaken. THe DC of the will save is calculated as follows: 10 (Base) + 2 (Racial Bonus) + 3 (1/2 Outsider HD) + Charisma bonus.
Use: Selected.
Hound Archon Aid
Hound Archon Detect Evil
@@ -71356,7 +71356,7 @@ When within your own black labyrinth, you are immune to the last two effects (mo
Some prestige classes can advance invoking or shadowcasting instead of spellcasting.
Spellcraft doesn't provide a bonus to your save vs. spells in 3e Dungeons & Dragons. This is reflected in the PRC8.
Tumble doesn't provide a bonus to your Armor Class in 3e Dungeons & Dragons. This is reflected in the PRC8.
- Feats for Alternate Magic Systems (Psionics, Incarnum, etc) are all organized under a Masterfeat. Psionic Feats, ToB Feats, etc...
+ Feats for Alternate Magic Systems (Psionics, Incarnum, etc) are all organized under a Masterfeat. Psionic Feats, ToB Feats, etc...
Favored Mystery - Black Labyrinth
Holy Warrior
Type of Feat: Reserve
@@ -71537,8 +71537,8 @@ Special Abilities:
- Level Adjustment: +1
FcL
Plt
- ### BEGIN INVOKER MARKER FEATS#
- Sorcerous Spellcasting (Hobgoblin Warsoul)
+ ### BEGIN INVOKER MARKER FEATS#
+ Sorcerous Spellcasting (Hobgoblin Warsoul)
Sorcerous Casting: Hobgoblin Warsouls cast spells as a Sorcerer of their hit dice (9th level).
Abjurant Champion Invoking (Warlock)
Acolye of the Skin Invoking (Warlock)
diff --git a/nwn/nwnprc/trunk/tlk/prc_consortium.tlk b/nwn/nwnprc/trunk/tlk/prc_consortium.tlk
index b9b80352..4a1fede7 100644
Binary files a/nwn/nwnprc/trunk/tlk/prc_consortium.tlk and b/nwn/nwnprc/trunk/tlk/prc_consortium.tlk differ