2026/02/21 Update
Updated all soulmelds to allow double chakra binds. Updated Totemist soulmelds to allow double totem binds. Pearl of Black Doubt should play nice with Vow of Poverty.
This commit is contained in:
@@ -6474,9 +6474,12 @@ int TherapeuticMantle(object oCaster, int nSpellID)
|
||||
{
|
||||
int nReturn;
|
||||
// Boosts Caster level with healing spells
|
||||
if (GetIsMeldBound(oCaster, MELD_THERAPEUTIC_MANTLE) == CHAKRA_SHOULDERS && GetIsOfSubschool(nSpellID, SUBSCHOOL_HEALING))
|
||||
if (GetIsMeldBound(oCaster, MELD_THERAPEUTIC_MANTLE) == CHAKRA_SHOULDERS ||
|
||||
GetIsMeldBound(oCaster, MELD_THERAPEUTIC_MANTLE) == CHAKRA_DOUBLE_SHOULDERS &&
|
||||
GetIsOfSubschool(nSpellID, SUBSCHOOL_HEALING))
|
||||
{
|
||||
nReturn = GetEssentiaInvested(oCaster, MELD_THERAPEUTIC_MANTLE);
|
||||
|
||||
}
|
||||
return nReturn;
|
||||
}
|
||||
|
||||
|
||||
@@ -797,8 +797,27 @@ void _PostCharge(object oPC, object oTarget)
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectStunned()), oTarget, 6.0);
|
||||
}
|
||||
// Applies to all charges, Thunderstep Boots meld
|
||||
if (GetHasSpellEffect(MELD_THUNDERSTEP_BOOTS, oPC) && nSucceed)
|
||||
|
||||
// Applies to all charges, Thunderstep Boots meld
|
||||
if (GetHasSpellEffect(MELD_THUNDERSTEP_BOOTS, oPC) && nSucceed)
|
||||
{
|
||||
int nDice = GetEssentiaInvested(oPC, MELD_THUNDERSTEP_BOOTS) + 1;
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(d4(nDice), DAMAGE_TYPE_SONIC)), oTarget);
|
||||
// Check Feet bind (regular or double)
|
||||
int nBoundToFeet = FALSE;
|
||||
if (GetIsMeldBound(oTarget, MELD_THUNDERSTEP_BOOTS) == CHAKRA_FEET ||
|
||||
GetIsMeldBound(oTarget, MELD_THUNDERSTEP_BOOTS) == CHAKRA_DOUBLE_FEET)
|
||||
nBoundToFeet = TRUE;
|
||||
|
||||
if (nBoundToFeet)
|
||||
{
|
||||
int nDC = GetMeldshaperDC(oPC, CLASS_TYPE_SOULBORN, MELD_THUNDERSTEP_BOOTS);
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, 6.0);
|
||||
}
|
||||
}
|
||||
|
||||
/* if (GetHasSpellEffect(MELD_THUNDERSTEP_BOOTS, oPC) && nSucceed)
|
||||
{
|
||||
int nDice = GetEssentiaInvested(oPC, MELD_STRONGHEART_VEST) + 1;
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(d4(nDice), DAMAGE_TYPE_SONIC)), oTarget);
|
||||
@@ -808,12 +827,12 @@ void _PostCharge(object oPC, object oTarget)
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NONE))
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, 6.0);
|
||||
}
|
||||
}
|
||||
} */
|
||||
// Applies to all charges, Urskan Greaves meld
|
||||
if (GetHasSpellEffect(MELD_URSKAN_GREAVES, oPC) && nSucceed)
|
||||
{
|
||||
int nDice = GetEssentiaInvested(oPC, MELD_URSKAN_GREAVES);
|
||||
if (GetIsMeldBound(oTarget, MELD_URSKAN_GREAVES) == CHAKRA_FEET)
|
||||
if (GetIsMeldBound(oTarget, MELD_URSKAN_GREAVES) == CHAKRA_FEET || GetIsMeldBound(oTarget, MELD_URSKAN_GREAVES) == CHAKRA_DOUBLE_FEET)
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(d4(nDice), DAMAGE_TYPE_BLUDGEONING)), oTarget);
|
||||
}
|
||||
}
|
||||
@@ -840,7 +859,7 @@ void _DoTrampleDamage(object oPC, object oTarget)
|
||||
|
||||
void _HeartOfFireGrapple(object oPC, object oTarget)
|
||||
{
|
||||
if (GetIsMeldBound(oTarget, MELD_HEART_OF_FIRE) == CHAKRA_WAIST)
|
||||
if (GetIsMeldBound(oTarget, MELD_HEART_OF_FIRE) == CHAKRA_WAIST || GetIsMeldBound(oTarget, MELD_HEART_OF_FIRE) == CHAKRA_DOUBLE_WAIST)
|
||||
{
|
||||
int nEssentia = GetEssentiaInvested(oPC, MELD_HEART_OF_FIRE);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(nEssentia), DAMAGE_TYPE_FIRE), oTarget);
|
||||
@@ -851,7 +870,7 @@ int _TotemAvatar(object oPC, int nCombatMove)
|
||||
{
|
||||
int nReturn;
|
||||
|
||||
if (GetIsMeldBound(oPC, MELD_HEART_OF_FIRE) == CHAKRA_FEET && nCombatMove != COMBAT_MOVE_GRAPPLE)
|
||||
if (GetIsMeldBound(oPC, MELD_HEART_OF_FIRE) == CHAKRA_FEET || GetIsMeldBound(oPC, MELD_HEART_OF_FIRE) == CHAKRA_DOUBLE_FEET && nCombatMove != COMBAT_MOVE_GRAPPLE)
|
||||
nReturn = 4;
|
||||
|
||||
if (nCombatMove == COMBAT_MOVE_GRAPPLE ||
|
||||
@@ -867,7 +886,7 @@ int _UrskanGreaves(object oPC)
|
||||
{
|
||||
int nReturn;
|
||||
|
||||
if (GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_TOTEM)
|
||||
if (GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_TOTEM || GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_DOUBLE_TOTEM)
|
||||
nReturn = 2 + GetEssentiaInvested(oPC, MELD_URSKAN_GREAVES);
|
||||
|
||||
return nReturn;
|
||||
@@ -1129,7 +1148,7 @@ void DoCharge(object oPC, object oTarget, int nDoAttack = TRUE, int nGenerateAoO
|
||||
// Dread Carapace Totem Bind
|
||||
if(GetIsIncarnumUser(oPC))
|
||||
{
|
||||
if (GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_TOTEM) // CHAKRA_TOTEM
|
||||
if (GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_TOTEM || GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_DOUBLE_TOTEM) // CHAKRA_TOTEM
|
||||
{
|
||||
location lTargetLocation = GetLocation(oPC);
|
||||
int nSaveDC = GetMeldshaperDC(oPC, CLASS_TYPE_TOTEMIST, MELD_DREAD_CARAPACE); // MELD_DREAD_CARAPACE
|
||||
@@ -1148,7 +1167,8 @@ void DoCharge(object oPC, object oTarget, int nDoAttack = TRUE, int nGenerateAoO
|
||||
}
|
||||
}
|
||||
|
||||
if (GetIsMeldBound(oPC, MELD_SPHINX_CLAWS) == CHAKRA_HANDS && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))) // CHAKRA_HANDS, empty hand
|
||||
if (GetIsMeldBound(oPC, MELD_SPHINX_CLAWS) == CHAKRA_HANDS || GetIsMeldBound(oPC, MELD_SPHINX_CLAWS) == CHAKRA_DOUBLE_HANDS &&
|
||||
!GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))) // CHAKRA_HANDS, empty hand
|
||||
nPounce = TRUE;
|
||||
}
|
||||
|
||||
@@ -1981,7 +2001,7 @@ void DoOverrun(object oPC, object oTarget, location lTarget, int nGenerateAoO =
|
||||
float fLength = GetDistanceBetweenLocations(GetLocation(oPC), lTarget);
|
||||
vector vOrigin = GetPosition(oPC);
|
||||
|
||||
if (GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_TOTEM)
|
||||
if (GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_TOTEM || GetIsMeldBound(oPC, MELD_URSKAN_GREAVES) == CHAKRA_DOUBLE_TOTEM)
|
||||
nAvoid = FALSE;
|
||||
if (GetHasFeat(FEAT_CENTAUR_TRAMPLE, oPC))
|
||||
nAvoid = FALSE;
|
||||
@@ -2435,7 +2455,7 @@ void DoShieldCharge(object oPC, object oTarget, int nSlam = FALSE)
|
||||
// Dread Carapace Totem Bind
|
||||
if(GetIsIncarnumUser(oPC))
|
||||
{
|
||||
if (GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_TOTEM) // CHAKRA_TOTEM
|
||||
if (GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_TOTEM || GetIsMeldBound(oPC, MELD_DREAD_CARAPACE) == CHAKRA_DOUBLE_TOTEM) // CHAKRA_TOTEM
|
||||
{
|
||||
location lTargetLocation = GetLocation(oPC);
|
||||
int nSaveDC = GetMeldshaperDC(oPC, CLASS_TYPE_TOTEMIST, MELD_DREAD_CARAPACE); // MELD_DREAD_CARAPACE
|
||||
|
||||
@@ -102,7 +102,7 @@ void ApplyAbilityDamage(object oTarget, int nAbility, int nAmount, int nDuration
|
||||
if (GetLocalInt(oTarget, "IncarnumDefenseCE") && nAbility == ABILITY_STRENGTH)
|
||||
return;
|
||||
|
||||
if (GetIsMeldBound(oTarget, MELD_VITALITY_BELT) == CHAKRA_WAIST && nAbility == ABILITY_CONSTITUTION)
|
||||
if (GetIsMeldBound(oTarget, MELD_VITALITY_BELT) == CHAKRA_WAIST || GetIsMeldBound(oTarget, MELD_VITALITY_BELT) == CHAKRA_DOUBLE_WAIST && nAbility == ABILITY_CONSTITUTION)
|
||||
return;
|
||||
|
||||
if (GetHasSpellEffect(VESTIGE_DAHLVERNAR, oTarget) && nAbility == ABILITY_WISDOM && GetLocalInt(oTarget, "ExploitVestige") != VESTIGE_DAHLVERNAR_MAD_SOUL)
|
||||
@@ -116,7 +116,7 @@ void ApplyAbilityDamage(object oTarget, int nAbility, int nAmount, int nDuration
|
||||
// If there's no damage, jump out.
|
||||
if (0 >= nAmount) return;
|
||||
}
|
||||
else if (GetIsMeldBound(oTarget, MELD_STRONGHEART_VEST) == CHAKRA_WAIST && !bHealable)
|
||||
else if (GetIsMeldBound(oTarget, MELD_STRONGHEART_VEST) == CHAKRA_WAIST || GetIsMeldBound(oTarget, MELD_STRONGHEART_VEST) == CHAKRA_DOUBLE_WAIST && !bHealable)
|
||||
{
|
||||
int nEssentia = GetEssentiaInvested(oTarget, MELD_STRONGHEART_VEST);
|
||||
nAmount = nAmount - (nEssentia + 1);
|
||||
|
||||
@@ -171,7 +171,7 @@ int PRCGetSpellResistance(object oTarget, object oCaster)
|
||||
// Dread Carapace Heart Bind
|
||||
if(GetIsIncarnumUser(oTarget))
|
||||
{
|
||||
if (GetIsMeldBound(oTarget, MELD_DREAD_CARAPACE) == CHAKRA_CROWN)
|
||||
if (GetIsMeldBound(oTarget, MELD_DREAD_CARAPACE) == CHAKRA_CROWN || GetIsMeldBound(oTarget, MELD_DREAD_CARAPACE) == CHAKRA_DOUBLE_CROWN)
|
||||
{
|
||||
int nCont = 5 + (4 * GetEssentiaInvested(oTarget, MELD_DREAD_CARAPACE));
|
||||
if(nCont > iSpellRes)
|
||||
|
||||
@@ -894,7 +894,7 @@ int GetTargetSpecificChangesToDamage(object oTarget, object oManifester, int nDa
|
||||
// Reasonable return values only
|
||||
if(nDamage < 0) nDamage = 0;
|
||||
|
||||
if (GetIsMeldBound(oManifester, MELD_PSYCHIC_FOCUS) == CHAKRA_THROAT && nDamage > 0 && !GetLocalInt(oManifester, "PsychicFocusMeld") && bIsHitPointDamage)
|
||||
if (GetIsMeldBound(oManifester, MELD_PSYCHIC_FOCUS) == CHAKRA_THROAT || GetIsMeldBound(oManifester, MELD_PSYCHIC_FOCUS) == CHAKRA_DOUBLE_THROAT && nDamage > 0 && !GetLocalInt(oManifester, "PsychicFocusMeld") && bIsHitPointDamage)
|
||||
{
|
||||
SetLocalInt(oManifester, "PsychicFocusMeld", TRUE);
|
||||
DelayCommand(6.0, DeleteLocalInt(oManifester, "PsychicFocusMeld"));
|
||||
|
||||
Reference in New Issue
Block a user