2026/01/11 Update
Updated PRC8 version. Added EffectIcon for EFFECT_ICON_FATIGUE to PRCEffectFatigue. Fixed Midnight Augmentation to display all known powers as well as display radial powers. Draconic Senses now grants all of the abilities that it should. (Lowlight Vision, Darkvision, Ultravision).
This commit is contained in:
@@ -498,6 +498,7 @@ effect EffectFatigue(){
|
||||
effect eReturn = EffectAbilityDecrease(ABILITY_STRENGTH, 2);
|
||||
eReturn = EffectLinkEffects(eReturn, EffectAbilityDecrease(ABILITY_DEXTERITY, 2));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectMovementSpeedDecrease(25));
|
||||
eReturn = EffectLinkEffects(eReturn, EffectIcon(EFFECT_ICON_FATIGUE));
|
||||
eReturn = TagEffect(eReturn, "PRCFatigue");
|
||||
return eReturn;
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
/* This variable MUST be updated with every new version of the PRC!!! */
|
||||
|
||||
const string PRC_VERSION = "PRC8 4.79";
|
||||
const string PRC_VERSION = "PRC8 4.80";
|
||||
|
||||
/* This variable MUST be updated every time 'assemble_spellbooks.bat' is run!!! */
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_inc_spells"
|
||||
//////////////////////////////////////////////////
|
||||
/* Constants */
|
||||
//////////////////////////////////////////////////
|
||||
@@ -572,32 +572,49 @@ int GetMaxPowerCount(object oCreature, int nList)
|
||||
|
||||
int GetHasPower(int nPower, object oCreature = OBJECT_SELF)
|
||||
{
|
||||
// Check MISC list first (for Hidden Talent and similar feats)
|
||||
if(GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_INVALID), oCreature))
|
||||
return TRUE;
|
||||
// Debug output
|
||||
if (DEBUG) DoDebug("GetHasPower: Checking power " + IntToString(nPower));
|
||||
|
||||
// Check if it's a subradial spell first
|
||||
if (GetIsSubradialSpell(nPower))
|
||||
{
|
||||
if(DEBUG) DoDebug("GetHasPower: " + IntToString(nPower) + " is a subradial");
|
||||
int nMasterSpell = GetMasterSpellFromSubradial(nPower);
|
||||
if (nMasterSpell != -1)
|
||||
{
|
||||
if(DEBUG) DoDebug("GetHasPower: Master spell is " + IntToString(nMasterSpell));
|
||||
nPower = nMasterSpell;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Check MISC list first (for Hidden Talent and similar feats)
|
||||
if(GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_INVALID), oCreature))
|
||||
return TRUE;
|
||||
|
||||
if((GetLevelByClass(CLASS_TYPE_PSION, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSION), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_PSYWAR, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYWAR), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYCHIC_ROGUE), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_WILDER, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WILDER), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_FIST_OF_ZUOKEN), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_WARMIND, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WARMIND), oCreature)
|
||||
)
|
||||
// add new psionic classes here
|
||||
)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
if((GetLevelByClass(CLASS_TYPE_PSION, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSION), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_PSYWAR, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYWAR), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_PSYCHIC_ROGUE, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_PSYCHIC_ROGUE), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_WILDER, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WILDER), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_FIST_OF_ZUOKEN), oCreature)
|
||||
) ||
|
||||
(GetLevelByClass(CLASS_TYPE_WARMIND, oCreature)
|
||||
&& GetHasFeat(GetClassFeatFromPower(nPower, CLASS_TYPE_WARMIND), oCreature)
|
||||
)
|
||||
// add new psionic classes here
|
||||
)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
string DebugListKnownPowers(object oCreature)
|
||||
|
||||
@@ -166,23 +166,36 @@ void main()
|
||||
string sFeatID;
|
||||
int added = 0;
|
||||
|
||||
for(i = 14001; i < 14260 ; i++)
|
||||
for(i = 14001; i < 14351 ; i++)
|
||||
{
|
||||
// Skip blank IDs between 14266 and 14329
|
||||
if(i >= 14266 && i < 14330)
|
||||
continue;
|
||||
|
||||
nPowerLevel = StringToInt(Get2DACache("spells", "Innate", i));
|
||||
if(nPowerLevel > nMaxLevel)
|
||||
break;
|
||||
continue;
|
||||
|
||||
string sName = GetStringByStrRef(StringToInt(Get2DACache("spells", "Name", i)));
|
||||
|
||||
if(sName != "")
|
||||
{
|
||||
if (GetHasPower(i, oMeldshaper))
|
||||
{
|
||||
if(SORT) AddToTempList(oMeldshaper, sName, i);
|
||||
else AddChoice(sName, i, oMeldshaper);
|
||||
added++;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if it's a regular power or a subradial
|
||||
int bHasPower = GetHasPower(i, oMeldshaper);
|
||||
if (!bHasPower && GetIsSubradialSpell(i))
|
||||
{
|
||||
// For subradials, check if they know the master spell
|
||||
int nMasterSpell = GetMasterSpellFromSubradial(i);
|
||||
if (nMasterSpell != -1)
|
||||
{
|
||||
bHasPower = GetHasPower(nMasterSpell, oMeldshaper);
|
||||
}
|
||||
}
|
||||
|
||||
if (bHasPower)
|
||||
{
|
||||
if(SORT) AddToTempList(oMeldshaper, sName, i);
|
||||
else AddChoice(sName, i, oMeldshaper);
|
||||
added++;
|
||||
}
|
||||
}
|
||||
|
||||
if(SORT)
|
||||
|
||||
@@ -287,16 +287,44 @@ void main()
|
||||
}
|
||||
///////////////////////////Draconic Senses//////////////////////////
|
||||
if(GetHasFeat(FEAT_DRACONIC_SENSES, oPC))
|
||||
{
|
||||
{
|
||||
effect eLow = EffectBonusFeat(FEAT_DARKVISION);
|
||||
effect eDark = EffectBonusFeat(FEAT_LOWLIGHTVISION);
|
||||
//effect eUltra = EffectUltravision();
|
||||
effect eUltra = EffectBonusFeat(FEAT_ULTRAVISION);
|
||||
effect eLink;
|
||||
|
||||
if(DEBUG) DoDebug("Entering Draconic Senses Branch. nPower is: "+IntToString(nPower)+".");
|
||||
switch(nPower)
|
||||
{
|
||||
case 1: IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
|
||||
case 2: IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
|
||||
case 3: IPSafeAddItemProperty(oSkin, ItemPropertyDarkvision(), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
|
||||
//Using Ultravision as the ability is Blindsense, not Blindsight
|
||||
default: IPSafeAddItemProperty(oSkin, ItemPropertyDarkvision(), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(EffectUltravision()), oPC); break;
|
||||
case 1:
|
||||
case 2:
|
||||
{
|
||||
if(DEBUG) DoDebug("Draconic Senses Branch Case 1 & 2: Lowlight vision");
|
||||
//IPSafeAddItemProperty(oSkin, ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
|
||||
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, UnyieldingEffect(eLow), oPC);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
if(DEBUG) DoDebug("Draconic Senses Branch Case 3: Lowlight vision + Darkvision");
|
||||
//IPSafeAddItemProperty(oSkin, ItemPropertyDarkvision(), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); break;
|
||||
eLink = EffectLinkEffects(eLow, eDark);
|
||||
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, UnyieldingEffect(eLink), oPC);
|
||||
break;
|
||||
}
|
||||
//;: Using Ultravision as the ability is Blindsense, not Blindsight
|
||||
default:
|
||||
{
|
||||
if(DEBUG) DoDebug("Draconic Senses Branch Default: Lowlight vision + Darkvision + Ultravsion");
|
||||
//IPSafeAddItemProperty(oSkin, ItemPropertyDarkvision(), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
||||
eLink = EffectLinkEffects(eLow, eDark);
|
||||
eLink = EffectLinkEffects(eUltra, eLink);
|
||||
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, UnyieldingEffect(eLink), oPC);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(DEBUG) DoDebug("Draconic Senses: Adding skill bonuses.");
|
||||
SetCompositeBonus(oSkin, "DS_Spot", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_SPOT);
|
||||
SetCompositeBonus(oSkin, "DS_Search", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_SEARCH);
|
||||
SetCompositeBonus(oSkin, "DS_Listen", nPower, ITEM_PROPERTY_SKILL_BONUS, SKILL_LISTEN);
|
||||
|
||||
Reference in New Issue
Block a user