diff --git a/nwn/nwnprc/trunk/include/inc_epicspellfnc.nss b/nwn/nwnprc/trunk/include/inc_epicspellfnc.nss index 7fb60540..4537d45c 100644 --- a/nwn/nwnprc/trunk/include/inc_epicspellfnc.nss +++ b/nwn/nwnprc/trunk/include/inc_epicspellfnc.nss @@ -26,7 +26,7 @@ int GetSpellFromAbrev(string sAbrev); ////////////////////////////////////////////////// #include "inc_utility" -//#include "inc_epicspelldef" +#include "inc_epicspells" // SEED FUNCTIONS diff --git a/nwn/nwnprc/trunk/include/inc_newspellbook.nss b/nwn/nwnprc/trunk/include/inc_newspellbook.nss index 2e2e2a54..5a06b4d3 100644 --- a/nwn/nwnprc/trunk/include/inc_newspellbook.nss +++ b/nwn/nwnprc/trunk/include/inc_newspellbook.nss @@ -108,11 +108,10 @@ void ProcessPreparedSpellLevel(object oPC, int nClass, int nSpellLevel, int nLev //#include "prc_effect_inc" //access via prc_inc_core //#include "inc_lookups" //access via prc_inc_core #include "prc_inc_core" -#include "inc_sp_gain_mem" //providing child access to prc_inc_core - //Must load in this order. +#include "inc_sp_gain_mem" //#include "prc_inc_castlvl" //access via prc_inc_core //#include "prc_inc_descrptr" //access via prc_inc_core -#include "inc_item_props" +#include "inc_item_props" ////////////////////////////////////////////////// /* Function definitions */ @@ -1622,6 +1621,3 @@ void DoCleanUp(int nMetamagic) DeleteLocalInt(OBJECT_SELF, "NSB_SpellLevel"); DeleteLocalInt(OBJECT_SELF, "NSB_SpellbookID"); } - -//:: Test Void -//:: void main (){} \ No newline at end of file diff --git a/nwn/nwnprc/trunk/include/inc_rend.nss b/nwn/nwnprc/trunk/include/inc_rend.nss index 06e2b2f1..07ae6b34 100644 --- a/nwn/nwnprc/trunk/include/inc_rend.nss +++ b/nwn/nwnprc/trunk/include/inc_rend.nss @@ -30,6 +30,7 @@ int GetDamageFromConstant(int nIPConst); void DoFrostRend(object oTarget, object oAttacker, object oWeapon); #include "moi_inc_moifunc" +#include "prc_inc_combat" ////////////////////////////////////////////////// /* Function defintions */ diff --git a/nwn/nwnprc/trunk/include/inc_sp_gain_mem.nss b/nwn/nwnprc/trunk/include/inc_sp_gain_mem.nss index d994896b..b3981be9 100644 --- a/nwn/nwnprc/trunk/include/inc_sp_gain_mem.nss +++ b/nwn/nwnprc/trunk/include/inc_sp_gain_mem.nss @@ -17,9 +17,6 @@ Created: May 1, 2008 //:: Updated for .35 by Jaysyn 2023/03/11 -//:: Test Void -//void main (){} - //::////////////////////////////////////////////// //:: Constants //::////////////////////////////////////////////// @@ -63,6 +60,14 @@ string GetMetaMagicString(int nMetaMagic); int GetMetaMagicFromFeat(int nFeat); int GetMetaMagicOfCaster(object oPC = OBJECT_SELF); +string GetFileForClass(int nClass); +int GetSpellslotLevel(int nClass, object oPC); +int GetSpellKnownMaxCount(int nLevel, int nSpellLevel, int nClass, object oPC); +int GetSpellbookTypeForClass(int nClass); + +#include "inc_pers_array" +#include "inc_2dacache" + // name of the new spellbook file (cls_spell_*) string GetNSBDefinitionFileName(int nClass) { diff --git a/nwn/nwnprc/trunk/include/inc_switch_setup.nss b/nwn/nwnprc/trunk/include/inc_switch_setup.nss index bd72d23c..e5a3c03c 100644 --- a/nwn/nwnprc/trunk/include/inc_switch_setup.nss +++ b/nwn/nwnprc/trunk/include/inc_switch_setup.nss @@ -44,6 +44,7 @@ void CreateSwitchNameArray(); #include "prc_inc_array" // Needs direct include instead of inc_utility #include "prc_inc_switch" +#include "inc_2dacache" ////////////////////////////////////////////////// /* Function definitions */ diff --git a/nwn/nwnprc/trunk/include/inv_inc_blast.nss b/nwn/nwnprc/trunk/include/inv_inc_blast.nss index 683b9cd5..94709f6f 100644 --- a/nwn/nwnprc/trunk/include/inv_inc_blast.nss +++ b/nwn/nwnprc/trunk/include/inv_inc_blast.nss @@ -1,4 +1,5 @@ #include "prc_inc_clsfunc" +#include "prc_inc_sp_tch" int GetBlastDamageDices(object oInvoker, int nInvokerLevel) { diff --git a/nwn/nwnprc/trunk/include/inv_inc_invknown.nss b/nwn/nwnprc/trunk/include/inv_inc_invknown.nss index dbd7acba..95800ad7 100644 --- a/nwn/nwnprc/trunk/include/inv_inc_invknown.nss +++ b/nwn/nwnprc/trunk/include/inv_inc_invknown.nss @@ -135,6 +135,9 @@ int GetHasInvocation(int nInvocation, object oCreature = OBJECT_SELF); /* Includes */ ////////////////////////////////////////////////// +int GetPrimaryInvocationClass(object oCreature = OBJECT_SELF); +int GetInvocationPRCLevels(object oCaster); + #include "inc_item_props" #include "prc_x2_itemprop" #include "inc_lookups" diff --git a/nwn/nwnprc/trunk/include/inv_inc_invoke.nss b/nwn/nwnprc/trunk/include/inv_inc_invoke.nss index 0abd1e14..da674444 100644 --- a/nwn/nwnprc/trunk/include/inv_inc_invoke.nss +++ b/nwn/nwnprc/trunk/include/inv_inc_invoke.nss @@ -123,7 +123,7 @@ void DeleteLocalInvocation(object oObject, string sName); /* Includes */ ////////////////////////////////////////////////// -//#include "inv_inc_invfunc" //Access in parent +#include "inv_inc_invfunc" //Access in parent #include "prc_spellf_inc" ////////////////////////////////////////////////// diff --git a/nwn/nwnprc/trunk/include/prc_add_spl_pen.nss b/nwn/nwnprc/trunk/include/prc_add_spl_pen.nss index 646cab40..d7ca3d61 100644 --- a/nwn/nwnprc/trunk/include/prc_add_spl_pen.nss +++ b/nwn/nwnprc/trunk/include/prc_add_spl_pen.nss @@ -54,7 +54,7 @@ int SPGetPenetrAOE(object oCaster = OBJECT_SELF, int nCasterLvl = 0); /* Includes */ ////////////////////////////////////////////////// -//#include "prc_inc_spells" +#include "prc_inc_spells" //#include "prc_alterations" //#include "prcsp_archmaginc" //#include "prc_inc_racial" diff --git a/nwn/nwnprc/trunk/include/prc_inc_breath.nss b/nwn/nwnprc/trunk/include/prc_inc_breath.nss index 0d439f91..094029c5 100644 --- a/nwn/nwnprc/trunk/include/prc_inc_breath.nss +++ b/nwn/nwnprc/trunk/include/prc_inc_breath.nss @@ -124,6 +124,8 @@ void ApplyBreath(struct breath BreathUsed, location lTargetArea, int bLinger = F ////////////////////////////////////////////////// #include "prc_alterations" +#include "prcsp_archmaginc" +#include "prc_inc_spells" ////////////////////////////////////////////////// /* Internal functions */ diff --git a/nwn/nwnprc/trunk/include/prc_inc_chat_pow.nss b/nwn/nwnprc/trunk/include/prc_inc_chat_pow.nss index aced79a7..f1c1b64b 100644 --- a/nwn/nwnprc/trunk/include/prc_inc_chat_pow.nss +++ b/nwn/nwnprc/trunk/include/prc_inc_chat_pow.nss @@ -16,6 +16,7 @@ Command summary: */ #include "prc_inc_chat" +#include "inc_persist_loca" const string CMD_POWER_ATTACK = "pow-erattack"; diff --git a/nwn/nwnprc/trunk/include/prc_inc_core.nss b/nwn/nwnprc/trunk/include/prc_inc_core.nss index 91c5ba12..df734512 100644 --- a/nwn/nwnprc/trunk/include/prc_inc_core.nss +++ b/nwn/nwnprc/trunk/include/prc_inc_core.nss @@ -133,6 +133,7 @@ const int METAMAGIC_QUICKEN_LEVEL = 4; #include "prc_inc_damage" #include "prc_inc_sb_const" // Spell Book Constants #include "x0_i0_position" +#include "inc_newspellbook" /* access to prc_inc_nwscript via prc_inc_damage diff --git a/nwn/nwnprc/trunk/include/prc_inc_descrptr.nss b/nwn/nwnprc/trunk/include/prc_inc_descrptr.nss index bbee255f..d814a6cf 100644 --- a/nwn/nwnprc/trunk/include/prc_inc_descrptr.nss +++ b/nwn/nwnprc/trunk/include/prc_inc_descrptr.nss @@ -169,8 +169,8 @@ int GetSubschoolFlags(int nSpellID); /* Includes */ ////////////////////////////////////////////////// -#include "inc_2dacache" // already has access via inc_utility -//#include "inc_utility" +#include "inc_2dacache" +#include "inc_utility" ////////////////////////////////////////////////// /* Function definitions */ diff --git a/nwn/nwnprc/trunk/include/prc_inc_hextor.nss b/nwn/nwnprc/trunk/include/prc_inc_hextor.nss index affe3608..531ba9a8 100644 --- a/nwn/nwnprc/trunk/include/prc_inc_hextor.nss +++ b/nwn/nwnprc/trunk/include/prc_inc_hextor.nss @@ -1,4 +1,6 @@ #include "prc_feat_const" +#include "inc_item_props" +#include "prc_inc_spells" const string BRUTAL_STRIKE_MODE_VAR = "PRC_BRUTAL_STRIKE_MODE"; diff --git a/nwn/nwnprc/trunk/include/prc_inc_itmrstr.nss b/nwn/nwnprc/trunk/include/prc_inc_itmrstr.nss index 156f530c..dd852f0b 100644 --- a/nwn/nwnprc/trunk/include/prc_inc_itmrstr.nss +++ b/nwn/nwnprc/trunk/include/prc_inc_itmrstr.nss @@ -36,6 +36,8 @@ void CheckForPnPHolyAvenger(object oItem); #include "inc_utility" #include "prc_inc_newip" +#include "prc_inc_castlvl" +#include "inc_newspellbook" ////////////////////////////////////////////////// diff --git a/nwn/nwnprc/trunk/include/prc_inc_turning.nss b/nwn/nwnprc/trunk/include/prc_inc_turning.nss index 6c819d45..2b6852f7 100644 --- a/nwn/nwnprc/trunk/include/prc_inc_turning.nss +++ b/nwn/nwnprc/trunk/include/prc_inc_turning.nss @@ -10,6 +10,8 @@ //::////////////////////////////////////////////// //::////////////////////////////////////////////// +#include "prc_spell_const" + ////////////////////////////////////////////////// /* Function prototypes */ ////////////////////////////////////////////////// diff --git a/nwn/nwnprc/trunk/include/prcsp_archmaginc.nss b/nwn/nwnprc/trunk/include/prcsp_archmaginc.nss index 4287a19d..72e5d442 100644 --- a/nwn/nwnprc/trunk/include/prcsp_archmaginc.nss +++ b/nwn/nwnprc/trunk/include/prcsp_archmaginc.nss @@ -73,6 +73,7 @@ void SetMasteryOfElements(); //#include "lookup_2da_spell" #include "prcsp_reputation" +#include "prc_inc_core" //#include "prc_inc_spells" diff --git a/nwn/nwnprc/trunk/include/psi_inc_ac_spawn.nss b/nwn/nwnprc/trunk/include/psi_inc_ac_spawn.nss index 5b3947e5..43765dd4 100644 --- a/nwn/nwnprc/trunk/include/psi_inc_ac_spawn.nss +++ b/nwn/nwnprc/trunk/include/psi_inc_ac_spawn.nss @@ -11,6 +11,7 @@ #include "prc_ipfeat_const" #include "prc_feat_const" #include "inc_vfx_const" +#include "prc_inc_nwscript" ////////////////////////////////////////////////// diff --git a/nwn/nwnprc/trunk/include/psi_inc_metapsi.nss b/nwn/nwnprc/trunk/include/psi_inc_metapsi.nss index c005f0c1..31487184 100644 --- a/nwn/nwnprc/trunk/include/psi_inc_metapsi.nss +++ b/nwn/nwnprc/trunk/include/psi_inc_metapsi.nss @@ -110,6 +110,7 @@ object GetSplitPsionicRayTarget(struct manifestation manif, object oPrimaryTarge ////////////////////////////////////////////////// #include "psi_inc_core" +#include "psi_inc_psifunc" ////////////////////////////////////////////////// /* Internal functions */ diff --git a/nwn/nwnprc/trunk/include/psi_inc_psicraft.nss b/nwn/nwnprc/trunk/include/psi_inc_psicraft.nss index 058ba59a..e5e244d6 100644 --- a/nwn/nwnprc/trunk/include/psi_inc_psicraft.nss +++ b/nwn/nwnprc/trunk/include/psi_inc_psicraft.nss @@ -40,7 +40,8 @@ void IdentifyPower(object oManifester, int nPowerId); // Always access via psi_inc_psifunc. -//#include "psi_inc_core" +#include "psi_inc_core" +#include "inc_2dacache" ////////////////////////////////////////////////// /* Internal functions */ diff --git a/nwn/nwnprc/trunk/include/psi_inc_pwresist.nss b/nwn/nwnprc/trunk/include/psi_inc_pwresist.nss index e1c5a96f..447c917c 100644 --- a/nwn/nwnprc/trunk/include/psi_inc_pwresist.nss +++ b/nwn/nwnprc/trunk/include/psi_inc_pwresist.nss @@ -14,6 +14,7 @@ #include "prc_class_const" */ #include "prc_alterations" +#include "prcsp_engine" // Constants that dictate ResistPower results const int POWER_RESIST_FAIL = 1; diff --git a/nwn/nwnprc/trunk/include/shd_inc_mystknwn.nss b/nwn/nwnprc/trunk/include/shd_inc_mystknwn.nss index b3354850..0189d050 100644 --- a/nwn/nwnprc/trunk/include/shd_inc_mystknwn.nss +++ b/nwn/nwnprc/trunk/include/shd_inc_mystknwn.nss @@ -192,7 +192,8 @@ int PathFeatToIPFeat(int nFeat); /* Includes */ ////////////////////////////////////////////////// - +#include "inc_lookups" +#include "inc_pers_array" ////////////////////////////////////////////////// /* Internal functions */ @@ -519,7 +520,7 @@ int GetMaxMysteryLevelLearnable(object oShadow, int nClass, int nType) if(DEBUG) DoDebug("GetMaxMysteryLevelLearnable nType: " + IntToString(nType)); // Rules Quote: - // Within a category—Apprentice, Initiate, Master—you must have at least two mysteries of any given level + // Within a category�Apprentice, Initiate, Master�you must have at least two mysteries of any given level // before you can take any mysteries of the next higher level. For instance, you must have two 1st-level // mysteries before you can take any 2nds, and at least two 2nds before you can take any 3rds. int nMaxLrn, i, nMystLevel, nCount1, nCount2; diff --git a/nwn/nwnprc/trunk/include/shd_inc_shdfunc.nss b/nwn/nwnprc/trunk/include/shd_inc_shdfunc.nss index 6ae4f631..2d19e9fa 100644 --- a/nwn/nwnprc/trunk/include/shd_inc_shdfunc.nss +++ b/nwn/nwnprc/trunk/include/shd_inc_shdfunc.nss @@ -210,6 +210,7 @@ int GetHasNocturnal(object oShadow, int nPath); #include "prc_alterations" #include "shd_inc_myst" #include "shd_inc_mystknwn" +#include "lookup_2da_spell" ////////////////////////////////////////////////// /* Internal functions */ diff --git a/nwn/nwnprc/trunk/include/shd_mysthook.nss b/nwn/nwnprc/trunk/include/shd_mysthook.nss index 44f15c31..dc9ad899 100644 --- a/nwn/nwnprc/trunk/include/shd_mysthook.nss +++ b/nwn/nwnprc/trunk/include/shd_mysthook.nss @@ -17,6 +17,8 @@ #include "prc_inc_spells" #include "inc_utility" #include "prc_inc_itmrstr" +#include "shd_inc_shdfunc" +#include "lookup_2da_spell" // This function holds all functions that are supposed to run before the actual // spellscript gets run. If this functions returns FALSE, the spell is aborted diff --git a/nwn/nwnprc/trunk/include/tob_movehook.nss b/nwn/nwnprc/trunk/include/tob_movehook.nss index 40d3c42a..614e2a88 100644 --- a/nwn/nwnprc/trunk/include/tob_movehook.nss +++ b/nwn/nwnprc/trunk/include/tob_movehook.nss @@ -14,6 +14,7 @@ #include "prc_inc_spells" #include "inc_utility" #include "x2_inc_spellhook" +#include "tob_inc_tobfunc" // This function holds all functions that are supposed to run before the actual // spellscript gets run. If this functions returns FALSE, the spell is aborted diff --git a/nwn/nwnprc/trunk/include/true_inc_truespk.nss b/nwn/nwnprc/trunk/include/true_inc_truespk.nss index 7523024c..47876838 100644 --- a/nwn/nwnprc/trunk/include/true_inc_truespk.nss +++ b/nwn/nwnprc/trunk/include/true_inc_truespk.nss @@ -109,11 +109,14 @@ int GetIsSyllable(int nSpellId); */ int DoSpellTruenameCheck(object oTrueSpeaker, object oTarget, int nPersonal = FALSE); +string GetNormalUtterSpellId(int nSpellId); + ////////////////////////////////////////////////// /* Includes */ ////////////////////////////////////////////////// #include "prc_inc_spells" +#include "true_inc_trufunc" ////////////////////////////////////////////////// /* Internal functions */ diff --git a/nwn/nwnprc/trunk/include/true_inc_trufunc.nss b/nwn/nwnprc/trunk/include/true_inc_trufunc.nss index 355783a8..ad010b35 100644 --- a/nwn/nwnprc/trunk/include/true_inc_trufunc.nss +++ b/nwn/nwnprc/trunk/include/true_inc_trufunc.nss @@ -260,6 +260,7 @@ int GetCadenceCount(object oTrueSpeaker); #include "prc_alterations" #include "true_inc_utter" #include "true_inc_truknwn" +#include "true_inc_truespk" ////////////////////////////////////////////////// /* Function definitions */ diff --git a/nwn/nwnprc/trunk/include/true_inc_truknwn.nss b/nwn/nwnprc/trunk/include/true_inc_truknwn.nss index 22fbea0c..9f9a6065 100644 --- a/nwn/nwnprc/trunk/include/true_inc_truknwn.nss +++ b/nwn/nwnprc/trunk/include/true_inc_truknwn.nss @@ -141,6 +141,7 @@ int GetHasUtterance(int nUtter, object oCreature = OBJECT_SELF); #include "inc_pers_array" #include "prc_inc_nwscript" #include "inc_lookups" +#include "prc_x2_itemprop" ////////////////////////////////////////////////// /* Internal functions */ diff --git a/nwn/nwnprc/trunk/include/true_utterhook.nss b/nwn/nwnprc/trunk/include/true_utterhook.nss index 9a03774e..dfb36711 100644 --- a/nwn/nwnprc/trunk/include/true_utterhook.nss +++ b/nwn/nwnprc/trunk/include/true_utterhook.nss @@ -18,6 +18,7 @@ #include "prc_inc_spells" #include "inc_utility" #include "prc_inc_itmrstr" +#include "true_inc_trufunc" // This function holds all functions that are supposed to run before the actual diff --git a/nwn/nwnprc/trunk/scripts/PRC_S_spellb.nss b/nwn/nwnprc/trunk/scripts/PRC_S_spellb.nss index 5596d238..df781f81 100644 --- a/nwn/nwnprc/trunk/scripts/PRC_S_spellb.nss +++ b/nwn/nwnprc/trunk/scripts/PRC_S_spellb.nss @@ -89,7 +89,7 @@ The array is indexed by a counter (the i-th spell of a given level in the class #include "x2_inc_spellhook" #include "inc_dynconv" -#include "inc_sp_gain_mem" +#include "inc_newspellbook" ////////////////////////////////////////////////// /* Constant defintions */ diff --git a/nwn/nwnprc/trunk/scripts/prc_burnselect.nss b/nwn/nwnprc/trunk/scripts/prc_burnselect.nss index 55a8b981..0daadbb9 100644 --- a/nwn/nwnprc/trunk/scripts/prc_burnselect.nss +++ b/nwn/nwnprc/trunk/scripts/prc_burnselect.nss @@ -11,7 +11,7 @@ //::////////////////////////////////////////////// #include "prc_inc_spells" -#include "inc_sp_gain_mem" +#include "inc_newspellbook" void main() { diff --git a/nwn/nwnprc/trunk/scripts/prc_s_spellgain.nss b/nwn/nwnprc/trunk/scripts/prc_s_spellgain.nss index d239221c..e114d91d 100644 --- a/nwn/nwnprc/trunk/scripts/prc_s_spellgain.nss +++ b/nwn/nwnprc/trunk/scripts/prc_s_spellgain.nss @@ -31,8 +31,8 @@ Sorcerer: Upon reaching 4th level, and at every even-numbered sorcerer level after that (6th, 8th, and so on), a sorcerer can choose to learn a new spell in place of one he already knows. In effect, the -sorcerer “loses” the old spell in exchange for the new one. -The new spell’s level must be the same as that of the spell +sorcerer �loses� the old spell in exchange for the new one. +The new spell�s level must be the same as that of the spell being exchanged, and it must be at least two levels lower than the highest-level sorcerer spell the sorcerer can cast. A sorcerer may swap only a single spell at any given level, and @@ -42,8 +42,8 @@ that he gains new spells known for the level. Bard: Upon reaching 5th level, and at every third bard level after that (8th, 11th, and so on), a bard can choose to learn a new spell in -place of one he already knows. In effect, the bard “loses” the -old spell in exchange for the new one. The new spell’s level must be +place of one he already knows. In effect, the bard �loses� the +old spell in exchange for the new one. The new spell�s level must be the same as that of the spell being exchanged, and it must be at least two levels lower than the highest-level bard spell the bard can cast. A bard may swap only a single spell at any given level, and must choose @@ -54,8 +54,8 @@ Favored Soul: Upon reaching 4th level, and at every even-numbered favored soul level after that (6th, 8th, and so on), a favored soul can choose to learn a new spell in place of one she -already knows. In effect, the favored soul “loses” the old -spell in exchange for the new one. The new spell’s level +already knows. In effect, the favored soul �loses� the old +spell in exchange for the new one. The new spell�s level must be the same as that of the spell being exchanged, and it must be at least two levels lower than the highest-level favored soul spell the favored soul can cast. A favored soul @@ -66,11 +66,11 @@ that she gains new spells known for the level. Warmage: When a warmage gains access to a new level of spells, he automatically knows all the spells for -that level listed on the warmage’s spell list. Essentially, his +that level listed on the warmage�s spell list. Essentially, his spell list is the same as his spells known list. Warmages also have the option of adding to their existing spell list through their advanced learning ability as they increase in level (see -below). See page 90 for the warmage’s spell list. +below). See page 90 for the warmage�s spell list. Advanced Learning (Ex): At 3rd, 6th, 11th, and 16th level, a warmage can add a new spell to his list, representing @@ -78,14 +78,14 @@ the result of personal study and experimentation. The spell must be a wizard spell of the evocation school, and of a level no higher than that of the highest-level spell the warmage already knows. Once a new spell is selected, it is forever added -to that warmage’s spell list and can be cast just like any other -spell on the warmage’s list. +to that warmage�s spell list and can be cast just like any other +spell on the warmage�s list. Hexblade: Upon reaching 12th level, and at every third hexblade level after that (15th and 18th), a hexblade can choose to learn a new spell in place of one he -already knows. In effect, the hexblade “loses” the -old spell in exchange for the new one. The new spell’s +already knows. In effect, the hexblade �loses� the +old spell in exchange for the new one. The new spell�s level must be the same as that of the spell being exchanged, and it must be at least two levels lower than the highest-level hexblade spell the hexblade can cast. For instance, upon @@ -105,8 +105,8 @@ Duskblade: Upon reaching 5th level, and at every odd-numbered Duskblade level after that (7th, 9th, and so on), a Duskblade can choose to learn a new spell in place of one she -already knows. In effect, the Duskblade “loses” the old -spell in exchange for the new one. The new spell’s level +already knows. In effect, the Duskblade �loses� the old +spell in exchange for the new one. The new spell�s level must be the same as that of the spell being exchanged, and it must be at least two levels lower than the highest-level Duskblade spell the Duskblade can cast. A Duskblade @@ -126,7 +126,6 @@ class level beginning at 4th #include "prc_inc_function" #include "inc_dynconv" #include "inc_newspellbook" -#include "inc_sp_gain_mem" #include "x3_inc_string" //////////////////////////////////////////////////