2026/02/08 Update

Archived Spellman's Project content.
Added missing Diamond Dragon stat feats.
Hospitaler's should be able to take Extra Turning.
Dodge proxies should allow entry into Champion of Corellon.
Mounted Combat is a prereq for Champion of Corellon.
Only Clerics have Domain reqs to enter Morninglord.
Verdant Lord was missing BAB 4 entry requirement.
Diamond Dragons don't get spellcraft.
Re-added Korobokuru race.
Added .ltr tables for Korobokuru.
Capped Blood in the Water at +20.
Capped Pearl of Black Doubt at +20.
Added json_GetFirstKnownSpell() and json_GetNextKnownSpell().
Updated all old NWNx functions to work with NWNxEE.
Added new switch to enable optional PRCX / NWNxEE shims.
Commented out ConvoCC switches on inc_switch_setup.nss
Diamond Dragon's stat increases are intrinsic when using NWNxEE.
Forsaker's stat increases are intrinsic when using NWNxEE.
Vow of Poverty's stat increases are intrinsic when using NWNxEE.
Cloud Dragon summon should be Neutral Good.
Fixed Verdant Lord's regen.
Fixed Forest Master's regen.
Morninglord's Creative Fire should affect Alchemy.
Added yes/no dialog when choosing Vow of Poverty bonus Exalted Feats.
Racial natural AC should be intrinsic when NWNxEE is enabled.
Transcendent Vitality's CON bonus is intrinsic when NWNxEE is enabled.
This commit is contained in:
Jaysyn904
2026-02-08 00:44:28 -05:00
parent 875f00c88f
commit 4026b6af2c
899 changed files with 2189 additions and 83980 deletions

View File

@@ -51,7 +51,7 @@ const int STRREF_NO = 4753; // "No"
object oSkin = GetPCSkin(oPC);
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
int nStage = GetStage(oPC);
int bFuncs = GetPRCSwitch(PRC_NWNX_FUNCS);
int bFuncs = GetPRCSwitch(PRC_NWNXEE_ENABLED);
// Check which of the conversation scripts called the scripts
if(nValue == 0) // All of them set the DynConv_Var to non-zero value, so something is wrong -> abort

View File

@@ -54,11 +54,15 @@ const int WINTERHIDE = 8;
void main()
{
object oPC = GetPCSpeaker();
object oSkin = GetPCSkin(oPC);
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
int nStage = GetStage(oPC);
int bFuncs = GetPRCSwitch(PRC_NWNX_FUNCS);
object oPC = GetPCSpeaker();
object oSkin = GetPCSkin(oPC);
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
int nStage = GetStage(oPC);
int nNWNxEE = GetPRCSwitch(PRC_NWNXEE_ENABLED);
int nPRCX = GetPRCSwitch(PRC_PRCX_ENABLED);
int bFuncs = (nNWNxEE && nPRCX);
// Check which of the conversation scripts called the scripts
if(nValue == 0) // All of them set the DynConv_Var to non-zero value, so something is wrong -> abort

View File

@@ -12,8 +12,12 @@ void main()
{
object oPC = OBJECT_SELF;
object oSkin = GetPCSkin(oPC);
int bFuncs = GetPRCSwitch(PRC_NWNX_FUNCS);
itemproperty ipIP;
int nNWNxEE = GetPRCSwitch(PRC_NWNXEE_ENABLED);
int nPRCx = GetPRCSwitch(PRC_PRCX_ENABLED);
int bFuncs = (nNWNxEE && nPRCx);
itemproperty ipIP;
if(DEBUG) DoDebug("race_skin >> Entering main function");
@@ -171,9 +175,45 @@ void main()
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
}
//natural armor 1-10
// Note: This bonus will be Dodge bonus no matter what IP_CONST you specify.
int nAC;
//:: Natural Armor feats 1<>19
int nAC = 0;
if (GetHasFeat(FEAT_NATARM_19)) nAC = 19;
else if (GetHasFeat(FEAT_NATARM_18)) nAC = 18;
else if (GetHasFeat(FEAT_NATARM_17)) nAC = 17;
else if (GetHasFeat(FEAT_NATARM_16)) nAC = 16;
else if (GetHasFeat(FEAT_NATARM_15)) nAC = 15;
else if (GetHasFeat(FEAT_NATARM_14)) nAC = 14;
else if (GetHasFeat(FEAT_NATARM_13)) nAC = 13;
else if (GetHasFeat(FEAT_NATARM_12)) nAC = 12;
else if (GetHasFeat(FEAT_NATARM_11)) nAC = 11;
else if (GetHasFeat(FEAT_NATARM_10)) nAC = 10;
else if (GetHasFeat(FEAT_NATARM_9)) nAC = 9;
else if (GetHasFeat(FEAT_NATARM_8)) nAC = 8;
else if (GetHasFeat(FEAT_NATARM_7)) nAC = 7;
else if (GetHasFeat(FEAT_NATARM_6)) nAC = 6;
else if (GetHasFeat(FEAT_NATARM_5)) nAC = 5;
else if (GetHasFeat(FEAT_NATARM_4)) nAC = 4;
else if (GetHasFeat(FEAT_NATARM_3)) nAC = 3;
else if (GetHasFeat(FEAT_NATARM_2)) nAC = 2;
else if (GetHasFeat(FEAT_NATARM_1)) nAC = 1;
if (nAC > 0)
{
if (bFuncs)
{
//:: Fire NWNxEE shim to set base AC
SetLocalInt(oPC, "PRC_EE_BASEAC", nAC);
ExecuteScript("prcx_set_ac", oPC);
}
else
{
//:: Vanilla fallback
SetCompositeBonus(oSkin, "RacialNaturalArmor", nAC, ITEM_PROPERTY_AC_BONUS);
}
}
/* int nAC;
if(GetHasFeat(FEAT_NATARM_19)) nAC = 19;
else if(GetHasFeat(FEAT_NATARM_18)) nAC = 18;
else if(GetHasFeat(FEAT_NATARM_17)) nAC = 17;
@@ -194,7 +234,7 @@ void main()
else if(GetHasFeat(FEAT_NATARM_2)) nAC = 2;
else if(GetHasFeat(FEAT_NATARM_1)) nAC = 1;
if(nAC) SetCompositeBonus(oSkin, "RacialNaturalArmor", nAC, ITEM_PROPERTY_AC_BONUS);
if(nAC) SetCompositeBonus(oSkin, "RacialNaturalArmor", nAC, ITEM_PROPERTY_AC_BONUS); */
if (GetHasFeat(FEAT_ABERRANT_DEEPSPAWN, oPC))

View File

@@ -49,9 +49,13 @@ void main()
{
object oPC = GetPCSpeaker();
object oSkin = GetPCSkin(oPC);
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
int nStage = GetStage(oPC);
int bFuncs = GetPRCSwitch(PRC_NWNX_FUNCS);
int nNWNxEE = GetPRCSwitch(PRC_NWNXEE_ENABLED);
int nPRCx = GetPRCSwitch(PRC_PRCX_ENABLED);
int bFuncs = (nNWNxEE && nPRCx);
// Check which of the conversation scripts called the scripts
if(nValue == 0) // All of them set the DynConv_Var to non-zero value, so something is wrong -> abort