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:
Jaysyn904
2026-02-21 19:25:00 -05:00
parent c1188ebb28
commit 73ce19db22
116 changed files with 4099 additions and 435 deletions

View File

@@ -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;
}

View File

@@ -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

View File

@@ -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);

View File

@@ -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)

View File

@@ -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"));

View File

@@ -21,7 +21,36 @@
/* Content Functions */
//////////////////////////////////////////////////
void BloodwarGauntlets(object oMeldshaper, object oItem, int nEvent)
void BloodwarGauntlets(object oMeldshaper, object oItem, int nEvent)
{
// Check if bound to Hands chakra (regular or double)
int nBoundToHands = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HANDS)) == MELD_BLOODWAR_GAUNTLETS ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HANDS)) == MELD_BLOODWAR_GAUNTLETS)
nBoundToHands = TRUE;
if (!nBoundToHands) return;
if(nEvent == EVENT_ONPLAYEREQUIPITEM)
{
itemproperty ip = ItemPropertyKeen();
ip = TagItemProperty(ip, "moi_BloodwarGauntletsKeen");
IPSafeAddItemProperty(oItem, ip, 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
else if(nEvent == EVENT_ONPLAYERUNEQUIPITEM)
{
// Remove only the tagged keen property
itemproperty ipCheck = GetFirstItemProperty(oItem);
while (GetIsItemPropertyValid(ipCheck))
{
if (GetItemPropertyTag(ipCheck) == "moi_BloodwarGauntletsKeen")
RemoveItemProperty(oItem, ipCheck);
ipCheck = GetNextItemProperty(oItem);
}
}
}
/* void BloodwarGauntlets(object oMeldshaper, object oItem, int nEvent)
{
if (GetIsMeldBound(oMeldshaper, MELD_BLOODWAR_GAUNTLETS) != CHAKRA_HANDS) return;
@@ -34,7 +63,7 @@ void BloodwarGauntlets(object oMeldshaper, object oItem, int nEvent)
{
RemoveSpecificProperty(oItem, ITEM_PROPERTY_KEEN, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY);
}
}
} */
void Bloodtalons(object oMeldshaper, object oItem, object oTarget)
{
@@ -74,7 +103,7 @@ void DreadCarapace(object oMeldshaper)
IPSafeAddItemProperty(oBite, ItemPropertyDamageBonus(DAMAGE_TYPE_SLASHING, IPDamageConstant((nEssentia+1)*2)), 6.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
}
if (GetIsMeldBound(oMeldshaper, MELD_DREAD_CARAPACE) == CHAKRA_ARMS)
if (GetIsMeldBound(oMeldshaper, MELD_DREAD_CARAPACE) == CHAKRA_ARMS || GetIsMeldBound(oMeldshaper, MELD_DREAD_CARAPACE) == CHAKRA_DOUBLE_ARMS)
{
if (GetIsObjectValid(oLeft)) IPSafeAddItemProperty(oLeft, ItemPropertyKeen(), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsObjectValid(oRight)) IPSafeAddItemProperty(oRight, ItemPropertyKeen(), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
@@ -243,7 +272,44 @@ void MantleOfFlameOnHit(object oMeldshaper, object oTarget)
}
}
void PhaseCloak(object oMeldshaper)
void PhaseCloak(object oMeldshaper)
{
// Check if bound to Shoulders chakra (regular or double)
int nBoundToShoulders = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == MELD_PHASE_CLOAK ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == MELD_PHASE_CLOAK)
nBoundToShoulders = TRUE;
if (!nBoundToShoulders) return;
// Check to see if the WP is valid
string sWPTag = "PhaseCloakWP_" + GetName(oMeldshaper);
object oTestWP = GetWaypointByTag(sWPTag);
if (!GetIsObjectValid(oTestWP))
{
// Create waypoint for the movement
CreateObject(OBJECT_TYPE_WAYPOINT, "nw_waypoint001", GetLocation(oMeldshaper), FALSE, sWPTag);
}
else // We have a test waypoint, now to check the distance
{
// Distance moved in the last round
float fDist = GetDistanceBetween(oMeldshaper, oTestWP);
// Distance needed to move
float fCheck = FeetToMeters(5.0);
// Now clean up the WP and create a new one for next round's check
DestroyObject(oTestWP);
CreateObject(OBJECT_TYPE_WAYPOINT, "nw_waypoint001", GetLocation(oMeldshaper), FALSE, sWPTag);
// Moved the distance
if (fDist >= fCheck)
{
SetIncorporeal(oMeldshaper, 3.0, 1);
}
}
}
/* void PhaseCloak(object oMeldshaper)
{
// Check to see if the WP is valid
string sWPTag = "PhaseCloakWP_" + GetName(oMeldshaper);
@@ -270,7 +336,7 @@ void PhaseCloak(object oMeldshaper)
SetIncorporeal(oMeldshaper, 3.0, 1);
}
}
}
} */
void PlanarWard(object oMeldshaper, object oTarget)
{
@@ -297,10 +363,10 @@ void RidingBracers(object oMeldshaper)
{
if (PRCHorseGetIsMounted(oMeldshaper))
{
if(GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_ARMS)
if(GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_ARMS || GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_DOUBLE_ARMS)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectLinkEffects(EffectACIncrease(2, AC_DODGE_BONUS), EffectDamageIncrease(DAMAGE_BONUS_2, DAMAGE_TYPE_BASE_WEAPON))), oMeldshaper, 6.0);
if(GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_TOTEM)
if(GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_DOUBLE_TOTEM)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_EVASION), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
}
@@ -430,7 +496,33 @@ void IncandescentAura(object oMeldshaper)
}
}
void NecroVestmentsAura(object oMeldshaper)
void NecroVestmentsAura(object oMeldshaper)
{
// Validate bind state (regular or double Waist)
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_VESTMENTS) != CHAKRA_WAIST &&
GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_VESTMENTS) != CHAKRA_DOUBLE_WAIST)
return;
int nClass = GetMeldShapedClass(oMeldshaper, MELD_NECROCARNUM_VESTMENTS);
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_NECROCARNUM_VESTMENTS);
location lTarget = GetLocation(oMeldshaper);
object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oAreaTarget))
{
if(oAreaTarget != oMeldshaper && // Not you
GetIsInMeleeRange(oMeldshaper, oAreaTarget) && // They must be in melee range
GetIsEnemy(oAreaTarget, oMeldshaper)) // Only enemies
{
int nDamage = d6();
if(!PRCMySavingThrow(SAVING_THROW_FORT, oAreaTarget, nDC, SAVING_THROW_TYPE_COLD))
ApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(EffectDamage(nDamage, DAMAGE_TYPE_COLD)), oAreaTarget);
}
//Select the next target within the spell shape.
oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
}
}
/* void NecroVestmentsAura(object oMeldshaper)
{
int nClass = GetMeldShapedClass(oMeldshaper, MELD_NECROCARNUM_VESTMENTS);
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_NECROCARNUM_VESTMENTS);
@@ -450,7 +542,7 @@ void NecroVestmentsAura(object oMeldshaper)
//Select the next target within the spell shape.
oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
}
}
} */
void NecrocarnumWeaponHands(object oMeldshaper, object oTarget, object oItem)
{
@@ -537,25 +629,39 @@ void main()
// Only applies to armours
if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR)
{
if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_WAIST)
if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_WAIST || GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_DOUBLE_WAIST)
HeartOfFireOnHit(oMeldshaper, oTarget);
if (GetHasSpellEffect(MELD_MANTLE_OF_FLAME, oMeldshaper))
MantleOfFlameOnHit(oMeldshaper, oTarget);
if (GetIsMeldBound(oMeldshaper, MELD_PLANAR_WARD) == CHAKRA_THROAT)
if (GetIsMeldBound(oMeldshaper, MELD_PLANAR_WARD) == CHAKRA_THROAT || GetIsMeldBound(oMeldshaper, MELD_PLANAR_WARD) == CHAKRA_DOUBLE_THROAT)
PlanarWard(oMeldshaper, oTarget);
}
// Melee weapon checks
if(IPGetIsMeleeWeapon(oItem))
{
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_WEAPON) == CHAKRA_HANDS) NecrocarnumWeaponHands(oMeldshaper, oTarget, oItem);
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_WEAPON) == CHAKRA_HANDS ||
GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_WEAPON) == CHAKRA_DOUBLE_HANDS)
NecrocarnumWeaponHands(oMeldshaper, oTarget, oItem);
}
WorgPeltOnHit(oMeldshaper, oItem, oTarget);
JaebrinOnHit(oMeldshaper, oItem, oTarget);
}// end if - Running OnHit event
else if(nEvent == EVENT_ONPLAYEREQUIPITEM)
{
oMeldshaper = GetItemLastEquippedBy();
oItem = GetItemLastEquipped();
oMeldshaper = GetItemLastEquippedBy();
oItem = GetItemLastEquipped();
if (!GetHasSpellEffect(MELD_HEART_OF_FIRE, oMeldshaper) &&
!GetHasSpellEffect(MELD_MANTLE_OF_FLAME, oMeldshaper) &&
!GetHasSpellEffect(MELD_PLANAR_WARD, oMeldshaper) &&
!GetHasSpellEffect(MELD_BLOODWAR_GAUNTLETS, oMeldshaper) &&
!GetHasSpellEffect(MELD_INCARNATE_AVATAR, oMeldshaper) &&
!GetHasSpellEffect(MELD_NECROCARNUM_WEAPON, oMeldshaper) &&
!GetHasSpellEffect(MELD_MAULING_GAUNTLETS, oMeldshaper) &&
!GetHasSpellEffect(MELD_SIGHTING_GLOVES, oMeldshaper) &&
!GetIsMeldBound(oMeldshaper, MELD_LANDSHARK_BOOTS))
return;
if(DEBUG) DoDebug("moi_events - OnEquip\n"
+ "oMeldshaper = " + DebugObject2Str(oMeldshaper) + "\n"
+ "oItem = " + DebugObject2Str(oItem) + "\n"
@@ -563,9 +669,9 @@ void main()
// Armor checks
if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR)
{
if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_WAIST ||
if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_WAIST || GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_DOUBLE_WAIST ||
GetHasSpellEffect(MELD_MANTLE_OF_FLAME, oMeldshaper) ||
GetIsMeldBound(oMeldshaper, MELD_PLANAR_WARD) == CHAKRA_THROAT )
GetIsMeldBound(oMeldshaper, MELD_PLANAR_WARD) == CHAKRA_THROAT || GetIsMeldBound(oMeldshaper, MELD_PLANAR_WARD) == CHAKRA_DOUBLE_THROAT)
{
// Add eventhook to the armor
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
@@ -594,14 +700,14 @@ void main()
{
IPSafeAddItemProperty(oItem, ItemPropertyAttackBonus(3), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
IPSafeAddItemProperty(oItem, ItemPropertyAttackPenalty(3), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_WEAPON) == CHAKRA_HANDS)
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_WEAPON) == CHAKRA_HANDS || GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_WEAPON) == CHAKRA_DOUBLE_HANDS)
{
// Add eventhook to the armor
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
AddEventScript(oItem, EVENT_ITEM_ONHIT, "moi_events", TRUE, FALSE);
}
}
if (GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_ARMS)
if (GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_ARMS || GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_DOUBLE_ARMS)
IPSafeAddItemProperty(oItem, ItemPropertyKeen(), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
// Ranged weapon checks
@@ -624,7 +730,7 @@ void main()
// Shields only
if(GetIsShield(oItem))
{
if (GetIsMeldBound(oMeldshaper, MELD_LANDSHARK_BOOTS) == CHAKRA_TOTEM)
if (GetIsMeldBound(oMeldshaper, MELD_LANDSHARK_BOOTS) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper, MELD_LANDSHARK_BOOTS) == CHAKRA_DOUBLE_TOTEM)
ForceUnequip(oMeldshaper, oItem, INVENTORY_SLOT_LEFTHAND);
}
// Ammo checks
@@ -693,8 +799,16 @@ void main()
else if(nEvent == EVENT_ONHEARTBEAT)
{
if (GetIsMeldShaped(oMeldshaper, MELD_DREAD_CARAPACE, CLASS_TYPE_TOTEMIST)) DreadCarapace(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_FEARSOME_MASK) == CHAKRA_BROW) FearsomeMask(oMeldshaper);
//if (GetIsMeldBound(oMeldshaper, MELD_FEARSOME_MASK) == CHAKRA_BROW) FearsomeMask(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_FEARSOME_MASK) == CHAKRA_BROW ||
GetIsMeldBound(oMeldshaper, MELD_FEARSOME_MASK) == CHAKRA_DOUBLE_BROW)
{
FearsomeMask(oMeldshaper);
}
//if (GetIsMeldBound(oMeldshaper, MELD_GIRALLON_ARMS) == CHAKRA_TOTEM) GirallonArms(oMeldshaper);
if (GetHasSpellEffect(MELD_HEART_OF_FIRE, oMeldshaper)) HeartOfFire(oMeldshaper);
/*if (GetHasSpellEffect(MELD_INCARNATE_AVATAR, oMeldshaper))
{
@@ -702,25 +816,95 @@ void main()
if (GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_GOOD)
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectACIncrease(nEssentia), oMeldshaper, 6.0);
}*/
// If you have the meld bound to the correct Chakra and there's nothing in your weapon hand
if (GetIsMeldBound(oMeldshaper, MELD_KRUTHIK_CLAWS) == CHAKRA_HANDS && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper)))
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_FINESSE), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_SHOULDERS) LammasuRepulsion(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_ARMS) LammasuAllies(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_HANDS && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper)))
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(GetEssentiaInvested(oMeldshaper, MELD_MAULING_GAUNTLETS)*2), DAMAGE_TYPE_BASE_WEAPON), oMeldshaper, 6.0);
if (GetIsMeldBound(oMeldshaper, MELD_PHASE_CLOAK) == CHAKRA_SHOULDERS) PhaseCloak(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_RAGECLAWS) == CHAKRA_HANDS) RageClaws(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_ARMS || GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_TOTEM) RidingBracers(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_SHOULDERS || GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_TOTEM) TotemAvatar(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_WORG_PELT) == CHAKRA_HANDS) WorgPeltHB(oMeldshaper);
// If you have the meld bound to the correct Chakra and there's nothing in your weapon hand
//if (GetIsMeldBound(oMeldshaper, MELD_KRUTHIK_CLAWS) == CHAKRA_HANDS && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper)))
//IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_FINESSE), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper, MELD_KRUTHIK_CLAWS) == CHAKRA_HANDS ||
GetIsMeldBound(oMeldshaper, MELD_KRUTHIK_CLAWS) == CHAKRA_DOUBLE_HANDS &&
!GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper)))
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_FINESSE), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
//if (GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_SHOULDERS) LammasuRepulsion(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_SHOULDERS ||
GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_DOUBLE_SHOULDERS)
{
LammasuRepulsion(oMeldshaper);
}
//if (GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_ARMS) LammasuAllies(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_ARMS ||
GetIsMeldBound(oMeldshaper, MELD_LAMMASU_MANTLE) == CHAKRA_DOUBLE_ARMS)
{
LammasuAllies(oMeldshaper);
}
//if (GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_HANDS && !GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper)))
//ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(GetEssentiaInvested(oMeldshaper, MELD_MAULING_GAUNTLETS)*2), DAMAGE_TYPE_BASE_WEAPON), oMeldshaper, 6.0);
// If you have the meld bound to the correct Chakra and there's nothing in your weapon hand
if (GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_HANDS ||
GetIsMeldBound(oMeldshaper, MELD_MAULING_GAUNTLETS) == CHAKRA_DOUBLE_HANDS &&
!GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper)))
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(GetEssentiaInvested(oMeldshaper, MELD_MAULING_GAUNTLETS)*2), DAMAGE_TYPE_BASE_WEAPON), oMeldshaper, 6.0);
}
//if (GetIsMeldBound(oMeldshaper, MELD_PHASE_CLOAK) == CHAKRA_SHOULDERS) PhaseCloak(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_PHASE_CLOAK) == CHAKRA_SHOULDERS ||
GetIsMeldBound(oMeldshaper, MELD_PHASE_CLOAK) == CHAKRA_DOUBLE_SHOULDERS)
{
PhaseCloak(oMeldshaper);
}
//if (GetIsMeldBound(oMeldshaper, MELD_RAGECLAWS) == CHAKRA_HANDS) RageClaws(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_RAGECLAWS) == CHAKRA_HANDS ||
GetIsMeldBound(oMeldshaper, MELD_RAGECLAWS) == CHAKRA_DOUBLE_HANDS)
{
RageClaws(oMeldshaper);
}
//if (GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_ARMS || GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_TOTEM) RidingBracers(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_ARMS ||
GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_DOUBLE_ARMS ||
GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_TOTEM ||
GetIsMeldBound(oMeldshaper, MELD_RIDING_BRACERS) == CHAKRA_DOUBLE_TOTEM)
{
RidingBracers(oMeldshaper);
}
//if (GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_SHOULDERS || GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_TOTEM) TotemAvatar(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_SHOULDERS ||
GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_DOUBLE_SHOULDERS ||
GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_TOTEM ||
GetIsMeldBound(oMeldshaper, MELD_TOTEM_AVATAR) == CHAKRA_DOUBLE_TOTEM)
{
TotemAvatar(oMeldshaper);
}
//if (GetIsMeldBound(oMeldshaper, MELD_WORG_PELT) == CHAKRA_HANDS) WorgPeltHB(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_WORG_PELT) == CHAKRA_HANDS ||
GetIsMeldBound(oMeldshaper, MELD_WORG_PELT) == CHAKRA_DOUBLE_HANDS)
{
WorgPeltHB(oMeldshaper);
}
if (GetRacialType(oMeldshaper) == RACIAL_TYPE_JAEBRIN) JaebrinHB(oMeldshaper);
if (GetEssentiaInvestedFeat(oMeldshaper, FEAT_COBALT_EXPERTISE)) CobaltExpertise(oMeldshaper);
//if (GetEssentiaInvestedFeat(oMeldshaper, FEAT_COBALT_POWER)) CobaltPower(oMeldshaper); Commented out so it doesn't work with Bioware PA any more.
if (GetEssentiaInvestedFeat(oMeldshaper, FEAT_MIDNIGHT_DODGE)) MidnightDodge(oMeldshaper);
if (GetEssentiaInvested(oMeldshaper, MELD_INCANDESCENT_AURA)) IncandescentAura(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_VESTMENTS) == CHAKRA_WAIST) NecroVestmentsAura(oMeldshaper);
if (GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper)) ActionCastSpellOnSelf(SPELL_DETECT_UNDEAD);
//if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_VESTMENTS) == CHAKRA_WAIST) NecroVestmentsAura(oMeldshaper);
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_VESTMENTS) == CHAKRA_WAIST ||
GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_VESTMENTS) == CHAKRA_DOUBLE_WAIST)
{
NecroVestmentsAura(oMeldshaper);
}
if (GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper)) ActionCastSpellOnSelf(SPELL_DETECT_UNDEAD);
if (GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper)) // This tells the PRC whether to check for a necrocarnate on NPC death or not. Only allows 1 necrocarnate at a time
{
SetLocalObject(GetModule(), "Necrocarnate", oMeldshaper);

View File

@@ -47,6 +47,7 @@ void main()
int nLevel = GetLevelByClass(CLASS_TYPE_INCARNATE, oMeldshaper);
int nDur = 3 + GetAbilityModifier(ABILITY_CONSTITUTION, oMeldshaper);
int nBonus = 1 + nLevel/5;
if (GetLocalInt(oMeldshaper, "PlanarChasuble_BrowBind")) nBonus += 1;
float fDur = RoundsToSeconds(nDur);
effect eLink;
if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_LAWFUL) eLink = EffectAttackIncrease(nBonus);

View File

@@ -23,10 +23,39 @@ Their power to deflect blows away from vital areas is increased.
While binding adamant pauldrons, you gain immunity to critical hits.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 22:34:54
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectImmunity(IMMUNITY_TYPE_SNEAK_ATTACK);
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectDamageReduction(nEssentia, DAMAGE_POWER_PLUS_TWO));
// Shoulders bind (critical hit immunity) <20> check regular or double Shoulders
int nBoundToShoulders = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == nMeldId)
nBoundToShoulders = TRUE;
if (nBoundToShoulders) eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_CRITICAL_HIT));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ADAMANT_PAULDRONS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -37,4 +66,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ADAMANT_PAULDRONS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -29,10 +29,65 @@ and close without any conscious direction. In battle, you can use these terrible
You gain a bite attack that deals 1d8 points of damage. You can use this bite as a primary attack. Every point of essentia invested in this soulmeld adds 1d4 points of acid damage to your bite damage.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 09:17:03
//::
//:: Double Chakra Bind support added
//:: Double Totem bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 2 + nEssentia;
effect eLink = EffectACIncrease(nBonus, AC_ARMOUR_ENCHANTMENT_BONUS);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ANKHEG_BREASTPLATE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Throat bind (acid line) <20> check regular or double Throat
int nBoundToThroat = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
nBoundToThroat = TRUE;
if (nBoundToThroat)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ANKHEG_BREASTPLATE_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
// Totem bind (bite) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
string sResRef = "prc_hdarc_bite_";
int nSize = PRCGetCreatureSize(oMeldshaper);
sResRef += GetAffixForSize(nSize);
AddNaturalPrimaryWeapon(oMeldshaper, sResRef);
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackB", sResRef);
int nDamage = EssentiaToD4(nEssentia);
// All natural attacks end up here
if (nEssentia)
{
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID, nDamage), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
}
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -60,4 +115,4 @@ void main()
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID, nDamage), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
}
}
}
} */

View File

@@ -22,10 +22,43 @@ When you bind apparition ribbon to your throat chakra, you gain the ability to b
ability is a standard action, and your incorporealness lasts for 1 round plus 1 round per point of essentia invested in the soulmeld at the time
it was activated. Each day, you can spend a total number of rounds incorporeal equal to your meldshaper level.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 09:54:24
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink;
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLINDFIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (nEssentia) eLink = VersusRacialTypeEffect(EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(nEssentia)), RACIAL_TYPE_UNDEAD);
// Throat bind (incorporeal) <20> check regular or double Throat
int nBoundToThroat = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
nBoundToThroat = TRUE;
if (nBoundToThroat)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_APPARITION_RIBBON_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_APPARITION_RIBBON), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
#include "moi_inc_moifunc"
void main()
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -39,4 +72,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_APPARITION_RIBBON), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -20,10 +20,44 @@ Barely visible wisps of incarnum writhe from your arcane focus, tendrils of soul
Whenever you cast a spell that deals damage to a single living creature, that creature must succeed on a Fortitude save (using the soulmeld<6C>s save DC, not the spell<6C>s) or be dazed for 1 round.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 16:15:04
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectVisualEffect(VFX_DUR_BAELN_EYES)), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ARCANE_FOCUS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Throat bind (daze on single-target arcane damage) <20> check regular or double Throat
int nBoundToThroat = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
nBoundToThroat = TRUE;
if (nBoundToThroat)
{
int nClass = GetMeldShapedClass(oMeldshaper, MELD_ARCANE_FOCUS);
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_ARCANE_FOCUS);
SetLocalInt(oMeldshaper, "ArcaneFocusBound", nDC);
}
else
{
DeleteLocalInt(oMeldshaper, "ArcaneFocusBound");
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
@@ -38,4 +72,4 @@ void main()
SetLocalInt(oMeldshaper, "ArcaneFocusBound", nDC);
}
}
} */

View File

@@ -20,10 +20,44 @@ Incarnum flows from the bracers to envelop you and then fades into invisibility.
You gain an insight bonus to your AC and on your saving throws equal to the number of points of essentia invested in your armguards of disruption. These bonuses apply only against attacks made by undead creatures.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 16:02:34
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink;
// Arms bind (AC/save vs undead) <20> check regular or double Arms
int nBoundToArms = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
nBoundToArms = TRUE;
if (nBoundToArms)
eLink = EffectLinkEffects(
VersusRacialTypeEffect(EffectACIncrease(nEssentia), RACIAL_TYPE_UNDEAD),
VersusRacialTypeEffect(EffectSavingThrowIncrease(SAVING_THROW_ALL, nEssentia), RACIAL_TYPE_UNDEAD)
);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ARMGUARDS_OF_DISRUPTION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (nBoundToArms)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ARMGUARDS_OF_DISRUPTION_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -34,4 +68,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ARMGUARDS_OF_DISRUPTION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ARMGUARDS_OF_DISRUPTION_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -38,7 +38,14 @@ The vambraces extend down and cover your hands in ectoplasm.
You gain two slam attacks, which act as primary natural weapons. The slam attacks deal 1d4 points of damage if you are Small,
1d6 points of damage if you are Medium, or 1d8 points of damage if you are Large, plus your Strength bonus.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:44:37
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
@@ -48,7 +55,7 @@ void main()
int nBonus = (1 + nEssentia) * 2;
effect eLink = EffectDamageReduction(nBonus, DAMAGE_POWER_PLUS_ONE);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS)
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_ARMS)
{
int nChoice = GetLocalInt(oMeldshaper, "AstralVambraces");
//FloatingTextStringOnCreature("Astral Vambrace Arms Chakra nChoice "+IntToString(nChoice), oMeldshaper, FALSE);
@@ -68,7 +75,7 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ASTRAL_VAMBRACES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS)
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_HANDS)
{
string sResRef = "prc_hdarc_slam_";
int nSize = PRCGetCreatureSize(oMeldshaper);

View File

@@ -26,10 +26,49 @@ Behind the mask, your eyes glow with a pale green radiance that is clearly visib
By directing your gaze on a creature within 30 feet, you can temporarily turn that creature to stone (as the flesh to stone spell, except that the duration is only 1 round). A successful Fortitude save negates this effect.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 00:22:25
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectUltravision();
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SPOT, nEssentia * 2));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BASILISK_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Brow bind (Blind-Fight) <20> check regular or double Brow
int nBoundToBrow = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
nBoundToBrow = TRUE;
if (nBoundToBrow)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLINDFIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (petrifying gaze) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BASILISK_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -41,4 +80,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BASILISK_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLINDFIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BASILISK_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -30,10 +30,64 @@ Sharp teeth fill your mouth, allowing you to bite your foes savagely in combat.
You gain a bite attack that deals 1d8 points of damage. You can use this bite as a primary attack. Every point of essentia invested in this soulmeld adds 1d4 points of electricity damage to your bite damage.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 01:12:00
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_PROTECTION_ENERGY_ELECT);
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, 5 * nEssentia));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEHIR_GORGET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Throat bind (lightning line) <20> check regular or double Throat
int nBoundToThroat = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
nBoundToThroat = TRUE;
if (nBoundToThroat)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEHIR_GORGET_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (bite + electricity damage) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
string sResRef = "prc_hdarc_bite_";
int nSize = PRCGetCreatureSize(oMeldshaper);
sResRef += GetAffixForSize(nSize);
AddNaturalPrimaryWeapon(oMeldshaper, sResRef);
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackB", sResRef);
int nDamage = EssentiaToD4(nEssentia);
// All natural attacks end up here
if (nEssentia)
{
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL, nDamage), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
}
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -61,4 +115,4 @@ void main()
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL, nDamage), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
}
}
}
} */

View File

@@ -26,7 +26,15 @@ The skin of your hands becomes red-orange and scaly like the talons of a blood h
You can make two claw attacks that each deal 1d4 points of damage plus your Strength modifier. On the round after you hit with a claw attack, the wounds bleed for an additional 1 point of damage per point of essentia you had invested in your bloodtalons when you made the attack. Nonliving creatures are immune to this blood loss effect. Every point of essentia invested in the bloodtalons grants a +1 enhancement bonus on attack rolls made with the claw attacks.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 13:51:40
//::
//:: Double Chakra Bind support added
//:: Double Totem bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void BloodtalonsTotem(object oMeldshaper, int nEssentia)
@@ -39,7 +47,49 @@ void BloodtalonsTotem(object oMeldshaper, int nEssentia)
AddEventScript(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper), EVENT_ITEM_ONHIT, "moi_events", TRUE, FALSE);
}
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SPOT, nEssentia*2));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLOODTALONS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_DIEHARD), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Hands bind (Weapon Finesse) <20> check regular or double Hands
int nBoundToHands = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HANDS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HANDS)) == nMeldId)
nBoundToHands = TRUE;
if (nBoundToHands)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_FINESSE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (claws) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
string sResRef = "prc_claw_1d6l_";
int nSize = PRCGetCreatureSize(oMeldshaper);
sResRef += GetAffixForSize(nSize);
AddNaturalPrimaryWeapon(oMeldshaper, sResRef, 2);
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackL", sResRef);
SetLocalInt(oMeldshaper, "ClearEventTotem", TRUE);
// All natural attacks end up here
DelayCommand(3.0, BloodtalonsTotem(oMeldshaper, nEssentia));
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -63,4 +113,4 @@ void main()
// All natural attacks end up here
DelayCommand(3.0, BloodtalonsTotem(oMeldshaper, nEssentia));
}
}
} */

View File

@@ -26,10 +26,43 @@ Your bloodwar gauntlets bind themselves to your hands, shrinking to better fit t
Any weapon you equip gains the keen property
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 21:23:36
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectAttackIncrease(1);
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(nEssentia), DAMAGE_TYPE_BASE_WEAPON));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLOODWAR_GAUNTLETS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Arms bind (blast) <20> check regular or double Arms
int nBoundToArms = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
nBoundToArms = TRUE;
if (nBoundToArms)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLOODWAR_GAUNTLETS_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
}
#include "moi_inc_moifunc"
void main()
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -40,4 +73,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLOODWAR_GAUNTLETS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLOODWAR_GAUNTLETS_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -28,10 +28,49 @@ Your posture becomes slightly hunched, giving you the merest hint of a canine ap
You can use the dimension door ability of this soulmeld as a move action.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 20:55:58
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Heart bind (blink) <20> check regular or double Heart
int nBoundToHeart = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HEART)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HEART)) == nMeldId)
nBoundToHeart = TRUE;
if (nBoundToHeart)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT_HEART), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (move-action dimension door) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT_DOOR_MV), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
else
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT_DOOR_ST), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -48,4 +87,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT_DOOR_MV), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
else
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLINK_SHIRT_DOOR_ST), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -9,7 +9,14 @@ You gain the ability to teleport yourself (as dimension door) up to 10 feet at w
Essentia: For every point of essentia invested, you can teleport an additional 10 feet.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:56:13
//::
//:: Double Totem Bind support added
//::
//::////////////////////////////////////////////////////////
#include "spinc_dimdoor"
#include "moi_inc_moifunc"
@@ -21,7 +28,7 @@ void main()
float fDist = GetDistanceBetweenLocations(lTarget, GetLocation(oMeldshaper));
// It's a move action if done this way
if (GetIsMeldBound(oMeldshaper, MELD_ACROBAT_BOOTS) == CHAKRA_TOTEM)
if (GetIsMeldBound(oMeldshaper, MELD_ACROBAT_BOOTS) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper, MELD_ACROBAT_BOOTS) == CHAKRA_DOUBLE_TOTEM)
if(!TakeMoveAction(oMeldshaper)) return;
// If it's within range

View File

@@ -20,6 +20,14 @@ Your bluesteel bracers affix themselves to your arms, extending swirling pattern
All allies within 30 feet gain the +2 bonus on initiative granted by this soulmeld.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 08:43:46
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
void BluesteelBracersHB(object oMeldshaper);
@@ -46,7 +54,32 @@ void BluesteelBracersHB(object oMeldshaper)
if(GetHasSpellEffect(MELD_BLUESTEEL_BRACERS, oMeldshaper)) DelayCommand(6.0, BluesteelBracersHB(oMeldshaper));
}
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectSkillDecrease(SKILL_SPOT, 2);
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(nEssentia), DAMAGE_TYPE_BASE_WEAPON));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLUESTEEL_BRACERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLOODED), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Check if bound to Arms chakra (regular or double)
int nBoundToArms = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
nBoundToArms = TRUE;
if (nBoundToArms)
{
BluesteelBracersHB(oMeldshaper);
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -59,4 +92,5 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BLUESTEEL_BRACERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLOODED), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS) BluesteelBracersHB(oMeldshaper);
}
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
} */

View File

@@ -26,7 +26,14 @@ Your face blends into the mask, your jaws growing long and sprouting huge fangs.
You gain a bite attack that deals 1d8 points of damage. You can use this bite as a primary attack. Every point of essentia invested in this soulmeld grants a +1 enhancement bonus on attack rolls and damage rolls made with the bite attack.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:18:04
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
@@ -40,8 +47,10 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BRASS_MANE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BRASS_MANE_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM)
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_THROAT)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BRASS_MANE_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_TOTEM)
{
string sResRef = "prc_hdarc_bite_";
int nSize = PRCGetCreatureSize(oMeldshaper);

View File

@@ -9,10 +9,57 @@ Your voice gets louder unless you make a conscious effort to keep it quiet.
Once per minute, you can loose a devastating roar. All creatures within 10 feet must succeed on a Will save or become fatigued.
The range of this effect is extended by 10 feet for every point of essentia invested in the soulmeld.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 19:18:18
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_BRASS_MANE;
// Check if bound to Throat chakra (regular or double)
int nBoundToThroat = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
nBoundToThroat = TRUE;
if (!nBoundToThroat) return; // Exit if not bound to Throat
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_BRASS_MANE);
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_BRASS_MANE);
int nDC = GetMeldshaperDC(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_BRASS_MANE);
location lTarget = GetLocation(oMeldshaper);
float fRange = 10.0 + (10.0 * nEssentia);
effect eVis = EffectVisualEffect(VFX_IMP_SOUND_SYMBOL_STUNNING);
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(fRange), lTarget, TRUE, OBJECT_TYPE_CREATURE);
while (GetIsObjectValid(oTarget))
{
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF) && oMeldshaper != oTarget)
{
SignalEvent(oTarget, EventSpellCastAt(oMeldshaper, MELD_BRASS_MANE));
if (!PRCDoResistSpell(oMeldshaper, oTarget, nMeldshaperLevel))
{
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_SONIC))
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFatigue(), oTarget, 9999.0);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
}
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(fRange), lTarget, TRUE, OBJECT_TYPE_CREATURE);
}
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_BRASS_MANE);
@@ -42,4 +89,4 @@ void main()
//Select the next target within the spell shape.
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(fRange), lTarget, TRUE, OBJECT_TYPE_CREATURE);
}
}
} */

View File

@@ -26,10 +26,45 @@ Instead of a gleaming silver band around your head, your beast tamer circlet man
You gain the ability to use animal trance, as the spell. You can use this ability once per minute.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 19:12:16
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectSkillIncrease(SKILL_ANIMAL_EMPATHY, 2 + (nEssentia*2));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Crown bind (charm animals) <20> check regular or double Crown
int nBoundToCrown = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
nBoundToCrown = TRUE;
if (nBoundToCrown) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET_CROWN), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (animal trance) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -39,4 +74,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET_CROWN), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_BEAST_TAMER_CIRCLET_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -19,7 +19,14 @@ A dim silver glow emanates from your eyes. A brief flash, visible only to you, s
When your charming veil is bound to your brow chakra, you gain a bonus on Sense Motive checks equal to the number of points of essentia invested in the veil. You also gain this bonus on saving throws to resist charm and compulsion effects targeting you.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:20:30
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
@@ -28,7 +35,7 @@ void main()
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW && nEssentia) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SENSE_MOTIVE, nEssentia));
if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_BROW && nEssentia) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SENSE_MOTIVE, nEssentia));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CHARMING_VEIL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);

View File

@@ -26,10 +26,56 @@ The embroidered patterns formed by raw incarnum in the front of your planar chas
Once per week you can cast gate.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 12:59:00
//::
//:: Double Chakra Bind support added
//:: Fixed broken Brow bind.
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 10 + (5 * nEssentia);
int nType;
if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_CHAOTIC)
nType = DAMAGE_TYPE_ELECTRICAL;
else if (GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_EVIL)
nType = DAMAGE_TYPE_ACID;
else if (GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_GOOD)
nType = DAMAGE_TYPE_COLD;
else if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_LAWFUL)
nType = DAMAGE_TYPE_FIRE;
effect eLink = EffectDamageResistance(nType, nBonus);
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
SetLocalInt(oMeldshaper, "PlanarChasuble_BrowBind", TRUE);
else
DeleteLocalInt(oMeldshaper, "PlanarChasuble_BrowBind");
void main()
// Soul bind (gate) <20> check regular or double Soul
int nBoundToSoul = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SOUL)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SOUL)) == nMeldId)
nBoundToSoul = TRUE;
if (nBoundToSoul)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PLANAR_CHASUBLE_SOUL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PLANAR_CHASUBLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -51,4 +97,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PLANAR_CHASUBLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -8,7 +8,7 @@ Classes: Soulborn, totemist
Chakra: Arms, hands (totem)
Saving Throw: None
A pair of dragonlike units, wreathed in blue fire, hover above your own arms and mimic your actions. The arms have long, sharp talons of cerulean light.
A pair of dragonlike arms, wreathed in blue fire, hover above your own arms and mimic your actions. The arms have long, sharp talons of cerulean light.
This soulmeld draws on the most basic of draconic attack forms, granting you claws that deal damage of 1d6 points if you are Medium. 1d4 if you are Small, or 1d8 if you are Large.
@@ -32,10 +32,70 @@ The dragon arms become more fleshlike and animated, growing up toward your buck
You gain a +8 bonus to Climb checks.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 12:15:04
//::
//:: Double Chakra Bind support added
//:: Double Totem bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
string sResRef = "prc_claw_1d6m_";
int nSize = PRCGetCreatureSize(oMeldshaper);
// Hands bind (damage step up) <20> check regular or double Hands
int nBoundToHands = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HANDS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HANDS)) == nMeldId)
nBoundToHands = TRUE;
if (nBoundToHands) nSize += 1;
sResRef += GetAffixForSize(nSize);
AddNaturalPrimaryWeapon(oMeldshaper, sResRef, 2);
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackL", sResRef);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
// All natural attacks end up here
if (nEssentia)
{
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyEnhancementBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper), ItemPropertyEnhancementBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
}
// Arms bind (keen) <20> check regular or double Arms
int nBoundToArms = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
nBoundToArms = TRUE;
if (nBoundToArms)
{
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyKeen(), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper), ItemPropertyKeen(), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
}
// Totem bind (Climb bonus) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_CLIMB, 8));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CLAW_OF_THE_WYRM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -65,4 +125,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CLAW_OF_THE_WYRM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -24,19 +24,33 @@ Like the invisible power of magical force, your attacks slice through the bounda
Your melee attacks gain the force descriptor, making them useful against incorporeal foes. [Turn this into Blind-Fight]
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:33:07
//::
//:: Double Chakra Bind support added
//:; Fixed broken Brow bind
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nMeldId = PRCGetSpellId();
effect eLink = EffectSavingThrowIncrease(SAVING_THROW_WILL, 2, SAVING_THROW_TYPE_MIND_SPELLS);
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectACIncrease(nEssentia, AC_DEFLECTION_BONUS));
if (GetIsMeldBound(oMeldshaper)) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLINDFIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
//if (GetIsMeldBound(oMeldshaper)) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLINDFIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_BLINDFIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CRYSTAL_HELM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);

View File

@@ -20,12 +20,63 @@ The light from the headband becomes steady and constant, amplifying the contrast
The diadem of purelight negates any concealment within a 20 ft radius.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 00:58:50
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
void DiademHB(object oMeldshaper);
#include "moi_inc_moifunc"
void DiademHB(object oMeldshaper)
void DiademHB(object oMeldshaper)
{
// Validate Crown bind (regular or double) before processing
int nBoundToCrown = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == MELD_DIADEM_OF_PURELIGHT ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == MELD_DIADEM_OF_PURELIGHT)
nBoundToCrown = TRUE;
if (!nBoundToCrown) return;
location lTarget = GetLocation(oMeldshaper);
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(20.0), lTarget, TRUE, OBJECT_TYPE_CREATURE);
while (GetIsObjectValid(oTarget))
{
PRCRemoveSpecificEffect(EFFECT_TYPE_CONCEALMENT, oTarget);
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(20.0), lTarget, TRUE, OBJECT_TYPE_CREATURE);
}
if (GetHasSpellEffect(MELD_DIADEM_OF_PURELIGHT, oMeldshaper)) DelayCommand(1.0, DiademHB(oMeldshaper));
}
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectSkillIncrease(SKILL_SPOT, 2 + (nEssentia * 2));
SetLocalInt(oMeldshaper, "PRCInLight", GetLocalInt(oMeldshaper, "PRCInLight") + 1);
SetLocalInt(oMeldshaper, "DiademPurelight", TRUE);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DIADEM_OF_PURELIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Crown bind (negate concealment in 20 ft) <20> check regular or double Crown
int nBoundToCrown = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
nBoundToCrown = TRUE;
if (nBoundToCrown) DiademHB(oMeldshaper);
}
/* void DiademHB(object oMeldshaper)
{
location lTarget = GetLocation(oMeldshaper);
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(20.0), lTarget, TRUE, OBJECT_TYPE_CREATURE);
@@ -38,9 +89,9 @@ void DiademHB(object oMeldshaper)
}
if (GetHasSpellEffect(MELD_DIADEM_OF_PURELIGHT, oMeldshaper)) DelayCommand(1.0, DiademHB(oMeldshaper));
}
} */
void main()
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -52,4 +103,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DIADEM_OF_PURELIGHT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) DiademHB(oMeldshaper);
}
} */

View File

@@ -26,10 +26,41 @@ Your face lengthens and shapes into the mask you wear, and the dangling tongue o
You can use the long tongue of your disenchanter mask to make a melee touch attack as a standard action. If it hits, you suppress the opponent's primary weapon, if any, for ten rounds.
*/
#include "moi_inc_moifunc"
void main()
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 11:56:39
//::
//:: Double Chakra Bind support added
//:: Double Totem bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK_DETECT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (tongue attack) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -39,4 +70,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK_DETECT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISENCHANTER_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -23,7 +23,14 @@ When using this soulmeld
#include "prc_inc_s_det"
#include "moi_inc_moifunc"
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 13:18:03
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
void main()
{
object oMeldshaper = OBJECT_SELF;
@@ -31,7 +38,7 @@ void main()
int nRound = 0;
float fRange = 10 + (10.0 * GetEssentiaInvested(oMeldshaper, MELD_DISENCHANTER_MASK));
if (GetIsMeldBound(oMeldshaper, MELD_DISENCHANTER_MASK) == CHAKRA_BROW) nRound = 3;
if (GetIsMeldBound(oMeldshaper, MELD_DISENCHANTER_MASK) == CHAKRA_BROW || GetIsMeldBound(oMeldshaper, MELD_DISENCHANTER_MASK) == CHAKRA_DOUBLE_BROW) nRound = 3;
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_DETECT), oMeldshaper, fDuration);

View File

@@ -12,7 +12,15 @@ Your face lengthens and shapes into the mask you wear, and the dangling tongue o
You can use the long tongue of your disenchanter mask to make a melee touch attack as a standard action. If it hits, you suppress the opponent's primary weapon, if any, for ten rounds.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 11:56:39
//::
//:: Double Chakra Bind support added
//:: Double Totem bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
#include "prc_inc_sp_tch"
@@ -126,7 +134,29 @@ void SuppressItem(object oTrueSpeaker, object oTarget, int nBeats)
DelayCommand(6.0, SuppressItem(oTrueSpeaker, oTarget, nBeats - 1));
}
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_DISENCHANTER_MASK;
// Check if bound to Totem chakra (regular or double)
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (!nBoundToTotem) return; // Exit if not bound to Totem
object oTarget = PRCGetSpellTargetObject();
if(PRCDoMeleeTouchAttack(oTarget))
{
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
if (GetIsObjectValid(oItem))
SuppressItem(oMeldshaper, oItem, 10);
}
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
@@ -136,5 +166,5 @@ void main()
if (GetIsObjectValid(oItem))
SuppressItem(oMeldshaper, oItem, 10);
}
}
} */

View File

@@ -42,10 +42,40 @@ When you charge, your visage suggests something utterly inhuman, striking fear i
When you charge, all enemies within 60 feet who can see you become shaken for 1 round (Will negates).
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 00:30:44
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added here and in
//:: moi_events, prcsp_engine & prc_inc_combmove
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DREAD_CARAPACE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Feet bind (speed boost) <20> check regular or double Feet
int nBoundToFeet = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_FEET)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_FEET)) == nMeldId)
nBoundToFeet = TRUE;
if (nBoundToFeet)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DREAD_CARAPACE_FEET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
}
void main()
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -54,4 +84,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DREAD_CARAPACE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_FEET) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DREAD_CARAPACE_FEET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -32,10 +32,60 @@ The dragon head becomes a solid blue mask, forming a hollow shape that completel
You can emanate an aura of frightful presence once per round as a swift action. All creatures within 10 feet with fewer Hit Dice than you become shaken for 1 round. A successful Will save negates the effect and renders the creature immune to the frightful presence of this soulmeld for 24 hours. For every point of essentia you have invested in your dragonfire mask, the radius of the frightful presence increases by 10 feet, and its duration increases by 1 round.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 00:13:35
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SPOT, 2 * nEssentia));
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Brow bind (darkvision) <20> check regular or double Brow
int nBoundToBrow = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
nBoundToBrow = TRUE;
if (nBoundToBrow) eLink = EffectLinkEffects(eLink, EffectUltravision());
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (frightful presence) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Throat bind (breath weapon) <20> check regular or double Throat
int nBoundToThroat = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
nBoundToThroat = TRUE;
if (nBoundToThroat)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -48,4 +98,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGONFIRE_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -16,10 +16,91 @@ You can emanate an aura of frightful presence once per round as a swift action.
A successful Will save negates the effect and renders the creature immune to the frightful presence of this soulmeld for 24 hours. For every point of essentia you
have invested in your dragonfire mask, the radius of the frightful presence increases by 10 feet, and its duration increases by 1 round.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 23:42:43
//::
//:: Double Totem Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_DRAGONFIRE_MASK;
// Check if bound to Totem chakra (regular or double)
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (!nBoundToTotem) return;
if(!TakeSwiftAction(oMeldshaper)) return;
// Do Frightful Presence
effect eShaken = SupernaturalEffect(EffectShaken());
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_DRAGONFIRE_MASK);
float nDist = 10.0 + (10.0 * nEssentia);
float fRadius = FeetToMeters(nDist);
float fDuration = RoundsToSeconds(1+nEssentia);
int nPCHitDice = GetHitDice(oMeldshaper);
int nDC = GetMeldshaperDC(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_DRAGONFIRE_MASK);
int nTargetHitDice;
int bDoVFX = FALSE;
// The object ID for enforcing the 24h rule
string sPCOid = ObjectToString(oMeldshaper);
// Loop over creatures in range
location lTarget = GetLocation(oMeldshaper);
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE);
while (GetIsObjectValid(oTarget))
{
// Target validity check
if(oTarget != oMeldshaper && // Can't affect self
!GetLocalInt(oTarget, "DragonfireMask_SavedVs" + sPCOid) && // Hasn't saved successfully against this samurai's Frightful Presence in the last 24h
spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oMeldshaper) && // Only hostiles
nPCHitDice > GetHitDice(oTarget)) // Must have greater hit dice to affect the creature
{
// Set the marker that tells we tried to affect someone
bDoVFX = TRUE;
// Let the target know something hostile happened
SignalEvent(oTarget, EventSpellCastAt(oMeldshaper, -1, TRUE));
// Will save
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_FEAR, oMeldshaper) &&
!GetIsImmune(oTarget, IMMUNITY_TYPE_FEAR, oMeldshaper)) // Explicit immunity check, because of the fucking stupid BW immunity handling
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eShaken, oTarget, fDuration);
}
// Successfull save, set marker and queue marker deletion
else
{
SetLocalInt(oTarget, "DragonfireMask_SavedVs" + sPCOid, TRUE);
// Add variable deletion to the target's queue. That way, if the samurai logs out, it will still get cleared
AssignCommand(oTarget, DelayCommand(HoursToSeconds(24), DeleteLocalInt(oTarget, "DragonfireMask_SavedVs" + sPCOid)));
}
}// end if - Target validity check
// Get next target in area
oTarget = GetNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE);
}// end while - Loop over creatures in 30ft area
// If we tried to affect someone, do war cry VFX
if(bDoVFX)
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(GetGender(oMeldshaper) == GENDER_FEMALE ? VFX_FNF_HOWL_WAR_CRY_FEMALE : VFX_FNF_HOWL_WAR_CRY), oMeldshaper);
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
if(!TakeSwiftAction(oMeldshaper)) return;
@@ -83,3 +164,4 @@ void main()
}
*/

View File

@@ -32,10 +32,17 @@ Long, draconic wings sprout from the shoulders of your blue dragonhide plate arm
You gain +4 on Jump checks for every point of essentia invested in your dragon mantle.
Fixed by: Jaysyn
Fixed on: 2025-05-20 15:27:50
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 09:00:01
//::
//:: Double Chakra Bind support added
//:: Double Totem bind support added
//:: Fixed Dragon Mantle fast healing
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void DragonMantleHeal(object oMeldshaper);
@@ -60,7 +67,79 @@ void DragonMantleHeal(object oMeldshaper)
//DelayCommand(6.0, DragonMantleHeal(oMeldshaper));
}
void main()
void main()
{
//Declare main variables.
int nEvent = GetRunningEvent();
int flag = 0;
object oMeldshaper;
switch(nEvent)
{
case EVENT_ONHEARTBEAT: oMeldshaper = OBJECT_SELF; break;
default:
oMeldshaper = PRCGetSpellTargetObject(); //flag = 1;
}
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_DRAGON_MANTLE);
int nBonus = 3 * nEssentia;
//if(flag == 1)
if(nEvent == FALSE)
{
effect eLink = EffectSavingThrowIncrease(SAVING_THROW_FORT, 2);
if (nEssentia)
{
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ACID, nBonus));
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_COLD, nBonus));
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, nBonus));
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_FIRE, nBonus));
}
// Check for binds
int nBoundToShoulders = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == nMeldId)
nBoundToShoulders = TRUE;
if (nBoundToShoulders && nEssentia)
{
eLink = EffectLinkEffects(eLink, EffectDamageReduction(nEssentia, DAMAGE_POWER_PLUS_ONE));
}
// Check for binds
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem && nEssentia)
{
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_JUMP, nEssentia * 4));
}
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
AddEventScript(oMeldshaper, EVENT_ONHEARTBEAT, "moi_mld_drgnmntl", TRUE, FALSE);
}
else if(nEvent == EVENT_ONHEARTBEAT)
{
// Check for binds
int nBoundToHeart = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HEART)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HEART)) == nMeldId)
nBoundToHeart = TRUE;
if (GetHasSpellEffect(MELD_DRAGON_MANTLE, oMeldshaper) && nBoundToHeart)
{
DragonMantleHeal(oMeldshaper);
}
}
}
/* void main()
{
//Declare main variables.
int nEvent = GetRunningEvent();
@@ -110,4 +189,4 @@ void main()
DragonMantleHeal(oMeldshaper);
}
}
}
} */

View File

@@ -32,10 +32,54 @@ The tail takes on the appearance of flesh and bone and becomes more agile and an
As a standard action, you can make a tail sweep. All creatures adjacent to you automatically take damage as if they had been struck by your dragon tail (Reflex half).
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 09:57:55
//::
//:: Double Chakra Bind support added
//:: Double Totem bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
// Feet bind (Balance/Jump) <20> check regular or double Feet
int nBoundToFeet = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_FEET)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_FEET)) == nMeldId)
nBoundToFeet = TRUE;
if (nBoundToFeet)
{
int nBonus = 2 + (nEssentia * 2);
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_BALANCE, nBonus));
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_JUMP, nBonus));
}
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL_SLAM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (sweep) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL_SWEEP), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -52,4 +96,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL_SLAM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DRAGON_TAIL_SWEEP), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -31,10 +31,72 @@ The tail takes on the appearance of flesh and bone and becomes more agile and an
As a standard action, you can make a tail sweep. All creatures adjacent to you automatically take damage as if they had been struck by your dragon tail (Reflex half).
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 09:57:55
//::
//:: Double Chakra Bind support added
//:: Double Totem bind support added
//::
//::////////////////////////////////////////////////////////
#include "prc_inc_combat"
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_DRAGON_TAIL);
int nClass = GetMeldShapedClass(oMeldshaper, MELD_DRAGON_TAIL);
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_DRAGON_TAIL);
int nDamage;
// Helper to check if bound to Waist (regular or double)
int nBoundToWaist = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_WAIST)) == MELD_DRAGON_TAIL ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_WAIST)) == MELD_DRAGON_TAIL)
nBoundToWaist = TRUE;
if (GetSpellId() == MELD_DRAGON_TAIL_SWEEP)
{
location lTarget = GetLocation(oMeldshaper);
// Use the function to get the closest creature as a target
object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
while(GetIsObjectValid(oAreaTarget))
{
if(oAreaTarget != oMeldshaper && // Not you
GetIsInMeleeRange(oMeldshaper, oAreaTarget) && // They must be in melee range
GetIsEnemy(oAreaTarget, oMeldshaper)) // Only enemies
{
nDamage = d8() + GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper) + nEssentia;
if (nBoundToWaist) nDamage = d6(2) + FloatToInt(GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper)*1.5) + nEssentia;
nDamage = PRCGetReflexAdjustedDamage(nDamage, oAreaTarget, nDC, SAVING_THROW_TYPE_NONE);
ApplyEffectToObject(DURATION_TYPE_INSTANT, ExtraordinaryEffect(EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING)), oAreaTarget);
}
//Select the next target within the spell shape.
oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
}
}
else // SLAM
{
int nAttack = GetAttackRoll(oTarget, oMeldshaper, OBJECT_INVALID, 0, nEssentia);
if(nAttack)
{
nDamage = d8()+GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper)+nEssentia;
if (nBoundToWaist) nDamage = d6(2)+ FloatToInt(GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper)*1.5) + nEssentia;
// Critical hit
if (nAttack == 2)
{
nDamage += d8()+GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper)+nEssentia;
if (nBoundToWaist) nDamage += d6(2)+ FloatToInt(GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper)*1.5) + nEssentia;
}
ApplyEffectToObject(DURATION_TYPE_INSTANT, ExtraordinaryEffect(EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING)), oTarget);
}
}
}
void main()
/* void main()
{
object oMeldshaper = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
@@ -79,4 +141,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_INSTANT, ExtraordinaryEffect(EffectDamage(nDamage, DAMAGE_TYPE_BLUDGEONING)), oTarget);
}
}
}
} */

View File

@@ -26,7 +26,15 @@ A pair of tentacles extends from your shoulder blades. They end in pads ridged w
As a full-round action, you can make two tentacle attacks using your full base attack bonus. Each tentacle deals 1d4 points of damage plus your Strength modifier. Every point of essentia invested in the displacer mantle grants you a +1 enhancement bonus on damage rolls made with the tentacle attacks.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:12:25
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
@@ -35,9 +43,9 @@ void main()
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectSkillIncrease(SKILL_HIDE, 2 + (nEssentia*2));
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SHOULDERS) eLink = EffectLinkEffects(eLink, EffectConcealment(20));
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_CROWN) eLink = EffectLinkEffects(eLink, EffectConcealment(20));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISPLACER_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISPLACER_MANTLE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISPLACER_MANTLE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}

View File

@@ -14,11 +14,57 @@ A pair of tentacles extends from your shoulder blades. They end in pads ridged w
As a full-round action, you can make two tentacle attacks using your full base attack bonus. Each tentacle deals 1d4 points of damage plus your Strength modifier. Every point of essentia invested in the displacer mantle grants you a +1 enhancement bonus on damage rolls made with the tentacle attacks.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 19:12:16
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
#include "prc_inc_combat"
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_DISPLACER_MANTLE;
// Check if bound to Totem chakra (regular or double)
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (!nBoundToTotem) return; // Exit if not bound to Totem
object oTarget = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_DISPLACER_MANTLE);
object oWeap = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper);
// First tentacle attack
int nAtk = GetAttackRoll(oTarget, oMeldshaper, oWeap);
if (nAtk > 0)
{
int nDam = d4() + GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper) + nEssentia;
int nDamType = GetWeaponDamageType(oWeap);
effect eLink = EffectLinkEffects(EffectDamage(nDam * nAtk, nDamType), EffectVisualEffect(VFX_COM_HIT_ACID));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
}
// Second tentacle attack
nAtk = GetAttackRoll(oTarget, oMeldshaper, oWeap);
if (nAtk > 0)
{
int nDam = d4() + GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper) + nEssentia;
int nDamType = GetWeaponDamageType(oWeap);
effect eLink = EffectLinkEffects(EffectDamage(nDam * nAtk, nDamType), EffectVisualEffect(VFX_COM_HIT_ACID));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
}
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
@@ -43,4 +89,4 @@ void main()
effect eLink = EffectLinkEffects(EffectDamage(nDam * nAtk, nDamType), EffectVisualEffect(VFX_COM_HIT_ACID));
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
}
}
} */

View File

@@ -20,10 +20,38 @@ Instead of a torc around your neck, the writhing shape of a twoheaded dragon arc
When you use your ability to spit acid at an opponent, you also roll again for damage 1 round later.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 19:24:41
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISSOLVING_SPITTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISSOLVING_SPITTLE_SPIT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Throat bind (delayed second damage) <20> check regular or double Throat
int nBoundToThroat = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
nBoundToThroat = TRUE;
if (nBoundToThroat)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISSOLVING_SPITTLE_SPIT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -32,4 +60,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISSOLVING_SPITTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_DISSOLVING_SPITTLE_SPIT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -20,7 +20,14 @@ Instead of a torc around your neck, the writhing shape of a twoheaded dragon arc
When you use your ability to spit acid at an opponent, you also roll again for damage 1 round later.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 19:24:41
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
#include "prc_inc_sp_tch"
@@ -30,7 +37,41 @@ void DissolvingSpittleDelay(object oMeldshaper, object oTarget, int nAttack, int
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_ACID_L), oTarget);
}
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_DISSOLVING_SPITTLE;
// Check if bound to Throat chakra (regular or double)
int nBoundToThroat = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
nBoundToThroat = TRUE;
object oTarget = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_DISSOLVING_SPITTLE);
int nDice = 1 + nEssentia;
effect eArrow = EffectVisualEffect(VFX_IMP_MIRV_DN_LAWNGREEN);
int nAttack = PRCDoRangedTouchAttack(oTarget);
if (nAttack > 0)
{
if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oMeldshaper))
{
int nDamage = d6(nDice);
ApplyTouchAttackDamage(oMeldshaper, oTarget, nAttack, nDamage, DAMAGE_TYPE_ACID);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_ACID_L), oTarget);
if (nBoundToThroat)
{
nDamage = d6(nDice);
DelayCommand(6.0, DissolvingSpittleDelay(oMeldshaper, oTarget, nAttack, nDamage, DAMAGE_TYPE_ACID));
}
}
}
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
@@ -55,4 +96,4 @@ void main()
}
}
}
}
} */

View File

@@ -26,10 +26,55 @@ The dragon becomes a symbol on a heraldic device of blue fire that settles onto
You gain blindsense.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 20:34:20
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 4 + (2 * nEssentia);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_LORE, nBonus));
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_USE_MAGIC_DEVICE, nBonus));
// Crown bind (immunities + Intimidate) <20> check regular or double Crown
int nBoundToCrown = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
nBoundToCrown = TRUE;
if (nBoundToCrown)
{
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_INTIMIDATE, nBonus));
eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_SLEEP));
eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_PARALYSIS));
}
// Soul bind (blindsense via ultravision) <20> check regular or double Soul
int nBoundToSoul = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SOUL)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SOUL)) == nMeldId)
nBoundToSoul = TRUE;
if (nBoundToSoul)
eLink = EffectLinkEffects(eLink, EffectUltravision());
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ELDER_SPIRIT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -48,4 +93,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ELDER_SPIRIT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -20,10 +20,39 @@ Your fellmist robe draws closer to your body, at the same time growing denser an
Your fellmist robe provides its concealment against melee and ranged attackers.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 19:24:41
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nConceal = 10 + (nEssentia * 5);
if (nConceal > 50) nConceal = 50;
int nType = MISS_CHANCE_TYPE_VS_RANGED;
// Soul bind (normal concealment) <20> check regular or double Soul
int nBoundToSoul = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SOUL)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SOUL)) == nMeldId)
nBoundToSoul = TRUE;
if (nBoundToSoul) nType = MISS_CHANCE_TYPE_NORMAL;
effect eLink = EffectConcealment(nConceal, nType);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FELLMIST_ROBE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -36,4 +65,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FELLMIST_ROBE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -20,10 +20,39 @@ Energy attacks are not simply absorbed and dispersed, but instead the energy is
You can release a blast of fire from your flame cincture equal 1d6 plus 1d6 per point of essentia invested in the meld. A successful Reflex save reduces the damage by half.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 08:43:46
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nResist = 10 + (nEssentia * 5);
effect eLink = EffectDamageResistance(DAMAGE_TYPE_FIRE, nResist);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FLAME_CINCTURE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Waist bind (fire blast) <20> check regular or double Waist
int nBoundToWaist = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_WAIST)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_WAIST)) == nMeldId)
nBoundToWaist = TRUE;
if (nBoundToWaist)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FLAME_CINCTURE_WAIST), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -34,4 +63,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FLAME_CINCTURE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_WAIST) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FLAME_CINCTURE_WAIST), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -7,10 +7,55 @@ Energy attacks are not simply absorbed and dispersed, but instead the energy is
You can release a blast of fire from your flame cincture equal 1d6 plus 1d6 per point of essentia invested in the meld. A successful Reflex save reduces the damage by half.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 18:56:13
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_FLAME_CINCTURE;
// Check if bound to Waist chakra (regular or double)
int nBoundToWaist = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_WAIST)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_WAIST)) == nMeldId)
nBoundToWaist = TRUE;
if (!nBoundToWaist) return; // Exit if not bound to Waist
object oTarget = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_FLAME_CINCTURE);
int nDice = 1 + nEssentia;
int nClass = GetMeldShapedClass(oMeldshaper, MELD_FLAME_CINCTURE);
int nMeldshaperLvl = GetMeldshaperLevel(oMeldshaper, nClass, MELD_FLAME_CINCTURE);
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_FLAME_CINCTURE);
// Exclude the caster from the damage effects
if (oTarget != oMeldshaper)
{
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oMeldshaper))
{
if (!PRCDoResistSpell(oMeldshaper, oTarget, nMeldshaperLvl))
{
int nDamage = d6(nDice);
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
if(nDamage > 0)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_FIRE), oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oTarget);
}
}
}
}
}
void main()
/* void main()
{
object oMeldshaper = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
@@ -38,6 +83,5 @@ void main()
}
}
}
}
}
}
} */

View File

@@ -26,10 +26,54 @@ Your frost helm fuses to your head and seems to spread downward, changing the ap
As a standard action, you can produce a trilling sound that stuns opponents within 20 feet. You can target one creature plus one additional creature per point of essentia you invest in your frost helm. Targets must succeed on a Will save or be stunned for 1d4 rounds.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 10:13:58
//::
//:: Double Chakra Bind support added
//:: Double Totem bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_FROST_HELM);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_COLD, nEssentia * 5));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_COLD_ENDURANCE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Crown bind (cold ray) <20> check regular or double Crown
int nBoundToCrown = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
nBoundToCrown = TRUE;
if (nBoundToCrown)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM_CROWN), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
// Totem bind (stun) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_FROST_HELM);
@@ -42,4 +86,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper, MELD_FROST_HELM) == CHAKRA_CROWN) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM_CROWN), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper, MELD_FROST_HELM) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_FROST_HELM_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -32,7 +32,7 @@ You gain four claws that you can use as natural weapons, dealing 1d4 points of d
//:: Updated on: 2025-12-02 15:04:22
//::
//:: ItemPropertyTag() support added
//:: Double Chakra support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"

View File

@@ -22,7 +22,14 @@ The gloves merge with your hands, giving your hands a green cast. Your fingertip
When gloves of the poisoned soul are bound to your hands chakra, the poison also deals Strength damage equal to the amount of Wisdom damage dealt (one save resists both effects).
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 00:17:52
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
#include "prc_inc_sp_tch"
@@ -51,7 +58,8 @@ void main()
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POISON_S), oTarget);
DelayCommand(60.0, ApplyAbilityDamage(oTarget, ABILITY_WISDOM, nDamage, DURATION_TYPE_TEMPORARY, TRUE, -1.0));
DelayCommand(60.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_POISON_S), oTarget));
if (GetIsMeldBound(oMeldshaper, MELD_GLOVES_OF_THE_POISONED_SOUL) == CHAKRA_HANDS)
if (GetIsMeldBound(oMeldshaper, MELD_GLOVES_OF_THE_POISONED_SOUL) == CHAKRA_HANDS ||
GetIsMeldBound(oMeldshaper, MELD_GLOVES_OF_THE_POISONED_SOUL) == CHAKRA_DOUBLE_HANDS)
{
ApplyAbilityDamage(oTarget, ABILITY_STRENGTH, nDamage, DURATION_TYPE_TEMPORARY, TRUE, -1.0);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_DISENTIGRATION_SMP), oTarget);

View File

@@ -26,10 +26,46 @@ The metallic scales of your gorgon mask extend down over your shoulders, lending
You gain the ability to make a trample attack. As a full-round action, you can move up to twice your speed and literally run over any creature equal to your own size or smaller. Your trample attack deals 1d8 points of bludgeoning damage (or 1d6 points if you are Small) plus 1-1/2 times your Strength modifier. Opponents have a Reflex save for half damage.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 23:09:24
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 1 + nEssentia;
effect eLink = EffectSavingThrowIncrease(SAVING_THROW_FORT, nBonus);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Throat bind (petrifying breath) <20> check regular or double Throat
int nBoundToThroat = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
nBoundToThroat = TRUE;
if (nBoundToThroat) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (trample) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -40,4 +76,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -26,7 +26,14 @@ The heat of the blazing stone at your waist spreads through your body, lashing o
Your natural weapons or unarmed strikes deal an additional 1d4 points of fire damage per point of essentia you invest in your heart of fire.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 13:21:09
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
@@ -38,47 +45,10 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_HEART_OF_FIRE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_WAIST)
if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_WAIST || GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_DOUBLE_WAIST)
{
// Add eventhook to the armor
IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CHEST, oMeldshaper), ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
AddEventScript(GetItemInSlot(INVENTORY_SLOT_CHEST, oMeldshaper), EVENT_ITEM_ONHIT, "moi_events", TRUE, FALSE);
}
else if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_TOTEM)
{
// Add fire damage to natural weapons/unarmed strikes
object oTarget = GetItemInSlot(INVENTORY_SLOT_ARMS, oMeldshaper);
// If no gloves, apply to PC skin as fallback
if (!GetIsObjectValid(oTarget))
{
oTarget = GetPCSkin(oMeldshaper);
}
// Apply fire damage based on essentia invested
int nDamageBonus = EssentiaToD4(nEssentia);
if (nDamageBonus != -1)
{
IPSafeAddItemProperty(oTarget,
ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE, nDamageBonus),
9999.0,
X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
}
/* else if (GetIsMeldBound(oMeldshaper, MELD_HEART_OF_FIRE) == CHAKRA_TOTEM)
{
// Add fire damage to natural weapons based on essentia invested
int nDamageDice = nEssentia;
if (nDamageDice > 0)
{
effect eDamage = EffectDamageIncrease(DAMAGE_BONUS_1d4, DAMAGE_TYPE_FIRE);
// Stack the effect for each point of essentia
int i;
for (i = 1; i < nDamageDice; i++)
{
eDamage = EffectLinkEffects(eDamage, EffectDamageIncrease(DAMAGE_BONUS_1d4, DAMAGE_TYPE_FIRE));
}
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eDamage), oMeldshaper, 9999.0);
}
} */
}
}

View File

@@ -26,10 +26,52 @@ There is no change to your own appearance or that of the circlet, but from your
You gain the benefit of the Scent feature.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 09:53:28
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 2 + (nEssentia * 2);
effect eLink = EffectLinkEffects(EffectSkillIncrease(SKILL_HEAL, nBonus), EffectSkillIncrease(SKILL_SEARCH, nBonus));
// Totem bind (Spot/Listen bonuses) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SPOT, 4));
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_LISTEN, 4));
}
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_HUNTERS_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Crown bind (Track feat) <20> check regular or double Crown
int nBoundToCrown = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
nBoundToCrown = TRUE;
if (nBoundToCrown)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_TRACK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -45,4 +87,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_HUNTERS_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_TRACK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -20,7 +20,14 @@ A dim blue glow emanates from your eyes. A brief flash, visible only to you, sca
When your illusion veil is bound to your brow chakra, you can more easily perceive false reality. You can see invisibility, as the spell. You also gain an insight bonus on saves against illusion spells equal to the number of points of essentia invested in your illusion veil.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:26:09
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
@@ -29,7 +36,8 @@ void main()
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) eLink = EffectLinkEffects(eLink, EffectSeeInvisible());
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_CROWN)
eLink = EffectLinkEffects(eLink, EffectSeeInvisible());
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_ILLUSION_VEIL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);

View File

@@ -20,7 +20,14 @@ Your impulse boots merge with your feet, and extend their midnight-blue color in
You gain the evasion ability.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:33:07
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
@@ -34,5 +41,7 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_IMPULSE_BOOTS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_UNCANNY_DODGE1), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_FEET) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_EVASION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_FEET || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_FEET)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_EVASION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}

View File

@@ -28,7 +28,15 @@ Evil: You gain an enhancement bonus of +30 feet to your base land speed.
Good: You gain an enhancement bonus of +30 feet to your base land speed.
Law: You gain immunity to daze, paralysis, and stun, as well as to any magical effect that would slow you.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:21:51
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
#include "prc_inc_combmove"
@@ -69,7 +77,7 @@ void main()
if (GetAlignmentGoodEvil(oMeldshaper) == ALIGNMENT_GOOD)
eLink = EffectLinkEffects(eLink, EffectACIncrease(nEssentia));
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SOUL)
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SOUL || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_SOUL)
{
if (GetAlignmentLawChaos(oMeldshaper) == ALIGNMENT_LAWFUL)
{

View File

@@ -8,10 +8,76 @@ As a move action, you can charge the incarnate weapon with the stunning power of
the target (as long as at least one component of its alignment is opposed to your devoted alignment) must succeed on a
Fortitude saving throw or be stunned for one round.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 19:24:41
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
int nEvent = GetRunningEvent();
object oMeldshaper = OBJECT_SELF;
object oItem;
int nMeldId = MELD_INCARNATE_WEAPON;
// We aren't being called from any event, instead from EvalPRCFeats
if(nEvent == FALSE)
{
// Check if bound to Arms chakra (regular or double)
int nBoundToArms = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
nBoundToArms = TRUE;
if (!nBoundToArms) return; // Exit if not bound to Arms
if(!TakeMoveAction(oMeldshaper)) return;
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper);
itemproperty ip = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1);
ip = TagItemProperty(ip, "moi_IncarnateWeaponCharge");
IPSafeAddItemProperty(oItem, ip, 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
AddEventScript(oItem, EVENT_ITEM_ONHIT, "moi_mld_incwpnft", TRUE, FALSE);
}
else if(nEvent == EVENT_ITEM_ONHIT)
{
oItem = GetSpellCastItem();
object oTarget = PRCGetSpellTargetObject();
if(DEBUG) DoDebug("moi_mld_incwpnft: OnHit:\n"
+ "oMeldshaper = " + DebugObject2Str(oMeldshaper) + "\n"
+ "oItem = " + DebugObject2Str(oItem) + "\n"
+ "oTarget = " + DebugObject2Str(oTarget) + "\n"
);
// Validate bind state on hit as well
int nBoundToArms = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
nBoundToArms = TRUE;
if (!nBoundToArms) return;
if (GetAlignmentLawChaos(oMeldshaper) != GetAlignmentLawChaos(oTarget) || GetAlignmentGoodEvil(oMeldshaper) != GetAlignmentGoodEvil(oTarget))
{
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, GetMeldshaperDC(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_INCARNATE_WEAPON), SAVING_THROW_TYPE_NONE))
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectStunned(), oTarget, 6.0);
}
// Remove the temporary OnHitCastSpell: Unique by tag
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "moi_mld_incwpnft", TRUE, FALSE);
itemproperty ipCheck = GetFirstItemProperty(oItem);
while (GetIsItemPropertyValid(ipCheck))
{
if (GetItemPropertyTag(ipCheck) == "moi_IncarnateWeaponCharge")
RemoveItemProperty(oItem, ipCheck);
ipCheck = GetNextItemProperty(oItem);
}
}
}
/* void main()
{
int nEvent = GetRunningEvent();
object oMeldshaper = OBJECT_SELF;
@@ -43,5 +109,5 @@ void main()
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "moi_mld_incwpnft", TRUE, FALSE);
RemoveSpecificProperty(oItem, ITEM_PROPERTY_ONHITCASTSPELL, IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 0, 1, "", 1, DURATION_TYPE_TEMPORARY);
}// end if - Running OnHit event
}
} */

View File

@@ -20,7 +20,14 @@ Bands of steel form around your forearms. When you hold your incarnate weapon, a
As a move action, you can charge the incarnate weapon with the stunning power of pure conviction. If the next melee attack that you make is successful, the target (as long as at least one component of its alignment is opposed to your devoted alignment) must succeed on a Fortitude saving throw or be stunned for one round.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:17:05
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
@@ -49,5 +56,7 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_INCARNATE_WEAPON), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SOUL) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_INCARNATE_WEAPON_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SOUL || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_SOUL)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_INCARNATE_WEAPON_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}

View File

@@ -26,7 +26,14 @@ Neither your appearance nor that of your keeneye lenses changes at all, but the
You see all things as they truly are, as if you were constantly under the effect of a true seeing spell.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 20:09:46
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()

View File

@@ -26,10 +26,47 @@ Your face becomes one with your krenshar mask, so all its muscles move to match
You gain the ability to produce a loud screech (as a standard action) similar to that of a krenshar. In combination with the frightening aspect of the mask, this shriek causes one creature within 30 feet of you to become frightened for 1 round if it fails a Will save. This is a sonic, mind-affecting fear effect.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 19:13:53
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 4 + (nEssentia * 2);
effect eLink = EffectLinkEffects(EffectSkillIncrease(SKILL_JUMP, nBonus), EffectSkillIncrease(SKILL_MOVE_SILENTLY, nBonus));
// Brow bind (Intimidate) <20> check regular or double Brow
int nBoundToBrow = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
nBoundToBrow = TRUE;
if (nBoundToBrow)
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_INTIMIDATE, nBonus));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_KRENSHAR_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (screech) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_KRENSHAR_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
void main()
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -41,4 +78,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_KRENSHAR_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_KRENSHAR_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -9,10 +9,50 @@ you grow angry or enter combat, and a growling edge creeps into your voice.
You gain the ability to produce a loud screech (as a standard action) similar to that of a krenshar. In combination with the frightening aspect of the mask,
this shriek causes one creature within 30 feet of you to become frightened for 1 round if it fails a Will save. This is a sonic, mind-affecting fear effect.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 19:13:24
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_KRENSHAR_MASK;
// Check if bound to Totem chakra (regular or double)
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (!nBoundToTotem) return; // Exit if not bound to Totem
object oTarget = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_KRENSHAR_MASK);
int nMeldshaperLvl = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_KRENSHAR_MASK);
int nDC = GetMeldshaperDC(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_KRENSHAR_MASK);
// Exclude the caster from the effects
if (oTarget != oMeldshaper)
{
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oMeldshaper))
{
if (!PRCDoResistSpell(oMeldshaper, oTarget, nMeldshaperLvl))
{
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_MIND_SPELLS))
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFrightened(), oTarget, 6.0);
}
}
}
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
@@ -31,6 +71,5 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFrightened(), oTarget, 6.0);
}
}
}
}
}
} */

View File

@@ -37,9 +37,9 @@ You can use your two claws as natural weapons that deal 1d6 points of damage plu
//:: Updated by: Jaysyn
//:: Updated on: 2025-12-02 15:04:22
//::
//:: Hands / Weapon finesse added
//:: Hands / Weapon finesse fixed
//:: ItemPropertyTag() support added
//:: Double Chakra support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////

View File

@@ -26,10 +26,58 @@ The lower part of your body below your lamia belt takes on the shape of a lion,
You can make two claw attacks as natural secondary attacks after attacking with a weapon or another natural attack (such as a bite). These attacks take a <20>5 penalty from your full base attack bonus and deal 1d4 points of damage.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on:2026-02-21 00:05:42
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 4 + (nEssentia * 2);
effect eLink = EffectLinkEffects(EffectSkillIncrease(SKILL_HIDE, nBonus), EffectSkillIncrease(SKILL_BLUFF, nBonus));
// Waist bind (speed + Spring Attack) <20> check regular or double Waist
int nBoundToWaist = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_WAIST)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_WAIST)) == nMeldId)
nBoundToWaist = TRUE;
if (nBoundToWaist)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_SPRINGATTACK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
SetLocalInt(oMeldshaper, "LamiaBeltSpeed", TRUE);
}
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LAMIA_BELT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (claws) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
string sResRef = "prc_claw_1d6l_";
int nSize = PRCGetCreatureSize(oMeldshaper);
sResRef += GetAffixForSize(nSize);
AddNaturalSecondaryWeapon(oMeldshaper, sResRef, 2);
SetLocalString(oMeldshaper, "IncarnumSecondaryAttackL", sResRef);
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -52,4 +100,4 @@ void main()
AddNaturalSecondaryWeapon(oMeldshaper, sResRef, 2);
SetLocalString(oMeldshaper, "IncarnumSecondaryAttackL", sResRef);
}
}
} */

View File

@@ -26,10 +26,41 @@ Additional embroidered designs, formed not of thread but of incarnum, appear dow
You can bestow healing at will on any given creature.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 09:56:03
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIFEBOND_VESTMENTS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIFEBOND_VESTMENTS_HEAL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Arms bind (30-foot range heal) <20> check regular or double Arms
int nBoundToArms = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
nBoundToArms = TRUE;
if (nBoundToArms)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIFEBOND_VESTMENTS_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -41,4 +72,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIFEBOND_VESTMENTS_HEAL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIFEBOND_VESTMENTS_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -28,7 +28,14 @@ Additional embroidered designs, formed not of thread but of incarnum, appear dow
You can bestow healing at will on any given creature.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:48:43
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
@@ -39,7 +46,7 @@ void main()
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_LIFEBOND_VESTMENTS);
int nHeal = nMeldshaperLevel + (nEssentia * 5);
if (!GetLocalInt(oMeldshaper, "LifebondVestmentsTimer") || GetIsMeldBound(oMeldshaper, MELD_LIFEBOND_VESTMENTS) == CHAKRA_HEART)
if (!GetLocalInt(oMeldshaper, "LifebondVestmentsTimer") || GetIsMeldBound(oMeldshaper, MELD_LIFEBOND_VESTMENTS) == CHAKRA_HEART || GetIsMeldBound(oMeldshaper, MELD_LIFEBOND_VESTMENTS) == CHAKRA_DOUBLE_HEART)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nHeal), oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nHeal/2, DAMAGE_TYPE_POSITIVE), oTarget);

View File

@@ -20,10 +20,40 @@ Your lightning gauntlets settle firmly around your hands. When you grip a weapon
You can add the electricity damage dealt by lightning gauntlets to one attack per round made with a handheld weapon.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 00:25:27
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIGHTNING_GAUNTLETS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIGHTNING_GAUNTLETS_ZAP), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Hands bind (add electricity damage to weapon attacks) <20> check regular or double Hands
int nBoundToHands = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HANDS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HANDS)) == nMeldId)
nBoundToHands = TRUE;
if (nBoundToHands)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIGHTNING_GAUNTLETS_HANDS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -35,4 +65,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIGHTNING_GAUNTLETS_ZAP), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LIGHTNING_GAUNTLETS_HANDS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -32,10 +32,41 @@ The golden-brown fur around your shoulders extends upward into an impressive man
You can breathe a 15-foot cone of fire as a standard action. Creatures within the area take 1d4 points of fire damage, plus 1d4 points of fire damage per point of invested essentia (Reflex half).
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 21:30:51
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added in moi_events
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectACIncrease(2, AC_DEFLECTION_BONUS);
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, nEssentia));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(VersusAlignmentEffect(eLink, ALIGNMENT_ALL, ALIGNMENT_EVIL)), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LAMMASU_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (fire cone) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LAMMASU_MANTLE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -47,4 +78,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LAMMASU_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LAMMASU_MANTLE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -26,10 +26,55 @@ Your hands as well as your feet gain the heavy claws of a bulette, including one
You can use the claws on your hands as natural weapons that deal 1d6 points of damage. You cannot use a shield while these claws are in place. For every point of essentia you invest in your landshark boots, you gain a +1 enhancement bonus on attack rolls and damage rolls with these claws. If you achieve a Jump check result good enough to jump over an opponent, you can attack that opponent with all four claws as a standard action. You cannot make any other attacks in the same round, whether from natural weapons or manufactured weapons.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 09:08:54
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 4 + (nEssentia * 2);
effect eLink = EffectSkillIncrease(SKILL_JUMP, nBonus);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LANDSHARK_BOOTS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Feet bind (sense closest creature) <20> check regular or double Feet
int nBoundToFeet = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_FEET)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_FEET)) == nMeldId)
nBoundToFeet = TRUE;
if (nBoundToFeet)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LANDSHARK_BOOTS_FEET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (claws) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_LANDSHARK_BOOTS_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING);
string sResRef = "prc_claw_1d6m_";
int nSize = PRCGetCreatureSize(oMeldshaper);
sResRef += GetAffixForSize(nSize);
AddNaturalPrimaryWeapon(oMeldshaper, sResRef, 2);
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackL", sResRef);
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -49,4 +94,4 @@ void main()
AddNaturalPrimaryWeapon(oMeldshaper, sResRef, 2);
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackL", sResRef);
}
}
} */

View File

@@ -26,10 +26,62 @@ Rather than actual gauntlets, this soulmeld transforms your hands into hard blue
You gain a morale bonus on unarmed strike damage equal to the morale bonus on Strength checks granted by the mauling gauntlets. You also gain the benefit of the Improved Unarmed Strike feat.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 14:57:34
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAULING_GAUNTLETS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Hands bind (IUS) <20> check regular or double Hands
int nBoundToHands = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HANDS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HANDS)) == nMeldId)
nBoundToHands = TRUE;
if (nBoundToHands)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_IMPROVED_UNARMED_STRIKE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Arms bind (keen) <20> check regular or double Arms
int nBoundToArms = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
nBoundToArms = TRUE;
if (nBoundToArms)
{
// Apply keen to equipped melee weapons with a tag for future use
object oWeapR = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMeldshaper);
if (GetIsObjectValid(oWeapR) && IPGetIsMeleeWeapon(oWeapR))
{
itemproperty ipKeen = ItemPropertyKeen();
ipKeen = TagItemProperty(ipKeen, "moi_MaulingGauntletsKeen");
IPSafeAddItemProperty(oWeapR, ipKeen, 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
}
object oWeapL = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oMeldshaper);
if (GetIsObjectValid(oWeapL) && IPGetIsMeleeWeapon(oWeapL))
{
itemproperty ipKeen = ItemPropertyKeen();
ipKeen = TagItemProperty(ipKeen, "moi_MaulingGauntletsKeen");
IPSafeAddItemProperty(oWeapL, ipKeen, 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE);
}
}
}
#include "moi_inc_moifunc"
void main()
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -39,4 +91,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAULING_GAUNTLETS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_IMPROVED_UNARMED_STRIKE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -20,10 +20,39 @@ Instead of spectacles perched on your nose, your mage
You can cast read magic at will.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 13:11:35
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 4 + (nEssentia * 2);
effect eLink = EffectLinkEffects(EffectSkillIncrease(SKILL_SPELLCRAFT, nBonus), EffectSkillIncrease(SKILL_USE_MAGIC_DEVICE, nBonus));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAGES_SPECTACLES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Brow bind (read magic at will) <20> check regular or double Brow
int nBoundToBrow = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
nBoundToBrow = TRUE;
if (nBoundToBrow)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAGES_SPECTACLES_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -33,4 +62,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAGES_SPECTACLES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MAGES_SPECTACLES_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -7,13 +7,38 @@ Instead of spectacles perched on your nose, your mage
You can cast read magic at will.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 14:54:47
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_MAGES_SPECTACLES;
// Check if bound to Brow chakra (regular or double)
int nBoundToBrow = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
nBoundToBrow = TRUE;
if (!nBoundToBrow) return; // Exit if not bound to Brow
ActionDoCommand(SetLocalInt(oMeldshaper, "SpellIsSLA", TRUE));
ActionCastSpell(SPELL_READ_MAGIC, GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_MAGES_SPECTACLES), 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, FALSE, OBJECT_INVALID, FALSE);
ActionDoCommand(DeleteLocalInt(oMeldshaper, "SpellIsSLA"));
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
ActionDoCommand(SetLocalInt(oMeldshaper, "SpellIsSLA", TRUE));
ActionCastSpell(SPELL_READ_MAGIC, GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_MAGES_SPECTACLES), 0, 0, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, FALSE, OBJECT_INVALID, FALSE);
ActionDoCommand(DeleteLocalInt(oMeldshaper, "SpellIsSLA"));
}
} */

View File

@@ -26,10 +26,52 @@ A long, thick tail emerges from the back of your manticore belt, writhing and la
As a standard action, you can snap your tail to loose a volley of spikes equal to the number of points of essentia you invest in your manticore belt. Make a ranged attack roll for each spike using your full base attack bonus. A successful hit deals 1d6 points of damage plus one-half your Strength modifier.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 12:21:10
//::
//:: Double Chakra Bind support added
//:: Double Totem bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 2 + (nEssentia * 2);
effect eLink = EffectLinkEffects(EffectSkillIncrease(SKILL_SPOT, nBonus), EffectSkillIncrease(SKILL_JUMP, nBonus));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTICORE_BELT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Waist bind (Spring Attack) <20> check regular or double Waist
int nBoundToWaist = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_WAIST)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_WAIST)) == nMeldId)
nBoundToWaist = TRUE;
if (nBoundToWaist)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_SPRINGATTACK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
// Totem bind (spike volley) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTICORE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -40,4 +82,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTICORE_BELT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_WAIST) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_SPRINGATTACK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTICORE_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -7,11 +7,44 @@ A long, thick tail emerges from the back of your manticore belt, writhing and la
As a standard action, you can snap your tail to loose a volley of spikes equal to the number of points of essentia you invest in your manticore belt. Make a ranged attack roll for each spike using your full base attack bonus. A successful hit deals 1d6 points of damage plus one-half your Strength modifier.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 14:50:10
//::
//:: Double Totem bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
#include "prc_inc_combat"
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_MANTICORE_BELT;
// Check if bound to Totem chakra (regular or double)
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (!nBoundToTotem) return; // Exit if not bound to Totem
object oTarget = PRCGetSpellTargetObject();
int nStr = GetAbilityModifier(ABILITY_STRENGTH, oMeldshaper);
int nBonus = GetAbilityModifier(ABILITY_DEXTERITY, oMeldshaper) - nStr; // It's a ranged attack
int nTotal = GetEssentiaInvested(oMeldshaper, MELD_MANTICORE_BELT);
int i;
for (i = 0; i < nTotal; i++)
{
int nAttack = GetAttackRoll(oTarget, oMeldshaper, OBJECT_INVALID, 0, nBonus);
if (nAttack)
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage((d6() + nStr / 2) * nAttack, DAMAGE_TYPE_PIERCING), oTarget);
}
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
@@ -25,4 +58,4 @@ void main()
if (nAttack)
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage((d6()+nStr/2)*nAttack, DAMAGE_TYPE_PIERCING), oTarget);
}
}
} */

View File

@@ -20,10 +20,42 @@ Your mantle of flame burns particularly brightly around your shoulders, forming
As a standard action, you can briefly expand the mantle of flame to encompass all adjacent squares. Any creatures in those squares take damage as if they had attacked you with a handheld weapon (Reflex half).
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 14:48:04
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_ELEMENTAL_SHIELD);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTLE_OF_FLAME), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Add eventhook to the armor
object oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oMeldshaper);
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 99999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
AddEventScript(oItem, EVENT_ITEM_ONHIT, "moi_events", TRUE, FALSE);
// Shoulders bind (fire burst) <20> check regular or double Shoulders
int nBoundToShoulders = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == nMeldId)
nBoundToShoulders = TRUE;
if (nBoundToShoulders)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTLE_OF_FLAME_SHOULDERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -38,4 +70,4 @@ void main()
AddEventScript(oItem, EVENT_ITEM_ONHIT, "moi_events", TRUE, FALSE);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SHOULDERS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_MANTLE_OF_FLAME_SHOULDERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -20,9 +20,70 @@ Your mantle of flame burns particularly brightly around your shoulders, forming
As a standard action, you can briefly expand the mantle of flame to encompass all adjacent squares. Any creatures in those squares take damage as if they had attacked you with a handheld weapon (Reflex half).
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 14:32:51
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_MANTLE_OF_FLAME;
// Check if bound to Shoulders chakra (regular or double)
int nBoundToShoulders = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == nMeldId)
nBoundToShoulders = TRUE;
if (!nBoundToShoulders) return; // Exit if not bound to Shoulders
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_MANTLE_OF_FLAME);
int nDice = GetEssentiaInvested(oMeldshaper, MELD_MANTLE_OF_FLAME) + 1;
int nDC = GetMeldshaperDC(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_MANTLE_OF_FLAME);
location lTarget = PRCGetSpellTargetLocation();
int nDamage;
float fDelay;
effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL);
effect eDam;
//Apply the fireball explosion at the location captured above.
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
//Declare the spell shape, size and the location. Capture the first target object in the shape.
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
//Cycle through the targets within the spell shape until an invalid object is captured.
while (GetIsObjectValid(oTarget))
{
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF) && oMeldshaper != oTarget)
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(oMeldshaper, MELD_MANTLE_OF_FLAME));
//Get the distance between the explosion and the target to calculate delay
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
if (!PRCDoResistSpell(oMeldshaper, oTarget, nMeldshaperLevel, fDelay))
{
nDamage = d6(nDice);
//Adjust damage based on Reflex Save, Evasion and Improved Evasion
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
if(nDamage > 0)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_FIRE), oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oTarget);
}
}
}
//Select the next target within the spell shape.
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
}
/*
void main()
{
object oMeldshaper = OBJECT_SELF;
@@ -63,4 +124,4 @@ void main()
//Select the next target within the spell shape.
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
}
} */

View File

@@ -21,11 +21,69 @@ Chakra Bind (Arms)
While necrocarnum touch is bound to your arms chakra, you can fire a ray of pure necrocarnum as a standard action. This ray requires a ranged touch attack to hit and has a range of
30 feet. If it strikes a living creature, it deals 1d8 points of damage for every point of essentia that you invest in the soulmeld (Fortitude half).
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 14:32:51
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
#include "prc_inc_sp_tch"
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_NECROCARNUM_TOUCH;
// Check if bound to Arms chakra (regular or double)
int nBoundToArms = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
nBoundToArms = TRUE;
if (!nBoundToArms) return; // Exit if not bound to Arms
object oTarget = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_NECROCARNUM_TOUCH);
int nClass = GetMeldShapedClass(oMeldshaper, MELD_NECROCARNUM_TOUCH);
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_NECROCARNUM_TOUCH);
int nAttack;
int nRanged = FALSE;
if (GetSpellId() == 18955) // MELD_NECROCARNUM_TOUCH_ARMS
{
nRanged = TRUE;
nAttack = PRCDoRangedTouchAttack(oTarget);
}
else
nAttack = PRCDoMeleeTouchAttack(oTarget);
if (nAttack > 0)
{
// Only living creatures, and PvP check.
if(spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oMeldshaper) && PRCGetIsAliveCreature(oTarget))
{
int nDamage = d8(nEssentia);
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_NEGATIVE))
{
nDamage /= 2;
if (GetHasMettle(oTarget, SAVING_THROW_FORT)) // Ignores partial effects
nDamage = 0;
}
if(nDamage)
{
ApplyTouchAttackDamage(oMeldshaper, oTarget, nAttack, nDamage, DAMAGE_TYPE_NEGATIVE);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY), oTarget);
}
}
}
if (nRanged)
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_EVIL, OBJECT_SELF, BODY_NODE_HAND), oTarget, 1.7, FALSE);
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
@@ -64,4 +122,4 @@ void main()
}
if (nRanged)
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectBeam(VFX_BEAM_EVIL, OBJECT_SELF, BODY_NODE_HAND), oTarget, 1.7, FALSE);
}
} */

View File

@@ -22,10 +22,42 @@ When you have necrocarnum vestments bound to your heart chakra, you are immune t
Chakra Bind (Waist)
When you have necrocarnum vestments bound to your waist chakra, any living creature adjacent to you at the end of your turn takes 1d6 points of cold damage (Fortitude negates).
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 13:54:11
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_NECROCARNUM_VESTMENTS);
effect eLink = EffectDamageResistance(DAMAGE_TYPE_COLD, 5);
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectTemporaryHitpoints(nEssentia * 3));
// Heart bind (stun/death immunity) <20> check regular or double Heart
int nBoundToHeart = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HEART)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HEART)) == nMeldId)
nBoundToHeart = TRUE;
if (nBoundToHeart)
{
eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_STUN));
eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_DEATH));
}
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_VESTMENTS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper, MELD_NECROCARNUM_VESTMENTS);
@@ -41,4 +73,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_VESTMENTS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -1,4 +1,4 @@
/**
/*
Necrocarnum Circlet
Chakra Bind (Crown)
@@ -6,12 +6,118 @@ Chakra Bind (Crown)
A matching coil of necrocarnum forms around the head of a corpse. Filled with the dark power of necrocarnum, the corpse shambles to its feet, its flesh and mind overtaken by the curse of undeath.
When you shape this soulmeld and bind it to your crown chakra, you can animate an undead creature. This requires a full-round action and provokes attacks of opportunity; in addition, you take
damage equal to the necrocarnum zombie<EFBFBD>s Hit Dice, which may not be healed as long as the zombie remains animated. You may only have one zombie.
damage equal to the necrocarnum zombie's Hit Dice, which may not be healed as long as the zombie remains animated. You may only have one zombie.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 14:03:39
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void NecroCircletHB(object oMeldshaper, object oCreature)
void NecroCircletHB(object oMeldshaper, object oCreature)
{
int nCurHP = GetCurrentHitPoints(oMeldshaper);
int nMaxHP = GetMaxHitPoints(oMeldshaper);
int nPen = GetLocalInt(oMeldshaper, "NecrocarnumCircletPen");
// Does the PC have too many hit points?
if (nCurHP > (nMaxHP - nPen))
{
int nHP = nMaxHP - nPen;
if (!GetIsResting(oMeldshaper)) SetCurrentHitPoints(oMeldshaper, nHP);
}
// Keep it going or...
int nBoundToCrown = FALSE;
if (GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_CIRCLET) == CHAKRA_CROWN ||
GetIsMeldBound(oMeldshaper, MELD_NECROCARNUM_CIRCLET) == CHAKRA_DOUBLE_CROWN)
nBoundToCrown = TRUE;
if (GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper) && nBoundToCrown)
DelayCommand(0.25, NecroCircletHB(oMeldshaper, oCreature));
else
DestroyObject(oCreature);
}
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_NECROCARNUM_CIRCLET;
// Check if bound to Crown chakra (regular or double)
int nBoundToCrown = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
nBoundToCrown = TRUE;
if (!nBoundToCrown) return; // Exit if not bound to Crown
int nClass = GetMeldShapedClass(oMeldshaper, MELD_NECROCARNUM_CIRCLET);
int nLevel = GetMeldshaperLevel(oMeldshaper, nClass, MELD_NECROCARNUM_CIRCLET);
int nNecro = GetLevelByClass(CLASS_TYPE_NECROCARNATE, oMeldshaper);
int i, nCount;
for(i = 1; i <= 10; i++)
{
object oHench = GetAssociate(ASSOCIATE_TYPE_HENCHMAN, OBJECT_SELF, i);
if (GetResRef(oHench) == "prc_sum_dbl" ||
GetResRef(oHench) == "prc_sum_dk" ||
GetResRef(oHench) == "prc_sum_vamp2" ||
GetResRef(oHench) == "prc_sum_bonet" ||
GetResRef(oHench) == "prc_sum_wight" ||
GetResRef(oHench) == "prc_sum_vamp1" ||
GetResRef(oHench) == "prc_sum_grav" ||
GetResRef(oHench) == "prc_sum_sklch" ||
GetResRef(oHench) == "prc_sum_zlord" ||
GetResRef(oHench) == "prc_sum_mohrg" ||
GetResRef(oHench) == "prc_tn_fthug")
{
nCount += 1;
if (nCount == 1 && nNecro >= 13) // Do nothing
{
}
else
{
FloatingTextStringOnCreature("You already the maximum number of necrocarnum zombies", oMeldshaper, FALSE);
return;
}
}
}
string sSummon;
effect eSummonB = EffectVisualEffect(VFX_FNF_LOS_EVIL_30);
object oCreature;
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);
if (nLevel > 37) sSummon = "prc_sum_dbl";
else if (nLevel > 34) sSummon = "prc_sum_dk";
else if (nLevel > 31) sSummon = "prc_sum_vamp2";
else if (nLevel > 28) sSummon = "prc_sum_bonet";
else if (nLevel > 25) sSummon = "prc_sum_wight";
else if (nLevel > 22) sSummon = "prc_sum_vamp1";
else if (nLevel > 19) sSummon = "prc_sum_grav";
else if (nLevel > 16) sSummon = "prc_tn_fthug";
else if (nLevel > 13) sSummon = "prc_sum_sklch";
else if (nLevel > 10) sSummon = "prc_sum_zlord";
else sSummon = "prc_sum_mohrg";
oCreature = CreateObject(OBJECT_TYPE_CREATURE, sSummon, GetSpellTargetLocation());
int nMaxHenchmen = GetMaxHenchmen();
SetMaxHenchmen(99);
AddHenchman(oMeldshaper, oCreature);
int nHP = GetHitDice(oCreature);
if (nNecro >= 6) nHP /= 2;
SetLocalInt(oMeldshaper, "NecrocarnumCircletPen", nHP + GetLocalInt(oMeldshaper, "NecrocarnumCircletPen"));
NecroCircletHB(oMeldshaper, oCreature);
SetMaxHenchmen(nMaxHenchmen);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation());
}
/* void NecroCircletHB(object oMeldshaper, object oCreature)
{
int nCurHP = GetCurrentHitPoints(oMeldshaper);
int nMaxHP = GetMaxHitPoints(oMeldshaper);
@@ -90,4 +196,4 @@ void main()
NecroCircletHB(oMeldshaper, oCreature);
SetMaxHenchmen(nMaxHenchmen);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetSpellTargetLocation());
}
} */

View File

@@ -21,34 +21,20 @@ A matching coil of necrocarnum forms around the head of a corpse. Filled with th
When you shape this soulmeld and bind it to your crown chakra, you can animate an undead creature. This requires a full-round action and provokes attacks of opportunity; in addition, you take
damage equal to the necrocarnum zombie<69>s Hit Dice, which may not be healed as long as the zombie remains animated. You may only have one zombie.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 13:54:11
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
#include "prc_inc_s_det"
void NecroDetect(object oMeldshaper, int bFirstRun = FALSE);
void NecroDetect(object oMeldshaper);
void CircTurnRes(object oMeldshaper);
void NecroDetect(object oMeldshaper, int bFirstRun = FALSE)
{
if (!GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper))
return;
if (bFirstRun)
{
// First activation: show detection cone VFX briefly
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_DETECT), oMeldshaper, 3.0f);
}
// Always apply ioun stone VFX for continuous effect
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_IOUN_STONE_RED), oMeldshaper, 6.0);
// Run the actual detection logic
DetectRaceAura(0, RACIAL_TYPE_UNDEAD, GetLocation(oMeldshaper), VFX_BEAM_ODD, FeetToMeters(60.0));
// Schedule next run with bFirstRun = FALSE
DelayCommand(6.0, NecroDetect(oMeldshaper, FALSE));
}
/* void NecroDetect(object oMeldshaper)
void NecroDetect(object oMeldshaper)
{
if (GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper))
{
@@ -56,7 +42,7 @@ void NecroDetect(object oMeldshaper, int bFirstRun = FALSE)
DelayCommand(6.0, NecroDetect(oMeldshaper));
}
}
*/
void CircTurnRes(object oMeldshaper)
{
if (GetHasSpellEffect(MELD_NECROCARNUM_CIRCLET, oMeldshaper))
@@ -81,7 +67,31 @@ void CircTurnRes(object oMeldshaper)
}
}
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_GR_AURA_UNDEAD);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
if (nEssentia) CircTurnRes(oMeldshaper);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Crown bind (zombie animation) <20> check regular or double Crown
int nBoundToCrown = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_CROWN)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_CROWN)) == nMeldId)
nBoundToCrown = TRUE;
if (nBoundToCrown)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECRO_CIRCLET_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -94,4 +104,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_CIRCLET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECRO_CIRCLET_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -19,10 +19,38 @@ Chakra Bind (Throat)
As long as the necrocarnum mantle is bound to your throat chakra, you gain immunity to poison.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 21:08:02
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectLinkEffects(EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE), EffectImmunity(IMMUNITY_TYPE_DISEASE));
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, nEssentia, SAVING_THROW_TYPE_MIND_SPELLS));
// Throat bind (poison immunity) <20> check regular or double Throat
int nBoundToThroat = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
nBoundToThroat = TRUE;
if (nBoundToThroat) eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_POISON));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -32,4 +60,4 @@ void main()
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_POISON));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -10,19 +10,30 @@ Saving Throw: See text
A deadening field of necrocarnum radiates from you, filling the air around you with faint, shadowy tendrils.
You gain a +1 profane bonus on attack rolls and damage rolls any time a living creature takes damage while adjacent to you. This bonus lasts for 1 round. If a living creature dies while adjacent to you, the bonus instead lasts for a number of rounds equal to the creature<72>s Hit Dice.
You gain a +1 profane bonus on attack rolls and damage rolls any time a living creature takes damage while adjacent to you. This bonus lasts for 1 round. If a living creature dies while adjacent to you, the
bonus instead lasts for a number of rounds equal to the creature<72>s Hit Dice.
Essentia: If you invest essentia in the necrocarnum shroud, the area encompassed by the life-draining field expands. Any living creature who takes damage (or dies) within 5 feet plus 5 feet per point of essentia invested triggers the bonus.
Essentia: If you invest essentia in the necrocarnum shroud, the area encompassed by the life-draining field expands. Any living creature who takes damage (or dies) within 5 feet plus 5 feet per point of
essentia invested triggers the bonus.
Chakra Bind (Soul)
While you have necrocarnum shroud bound to your soul chakra, you can take a standard action to strike a living foe with the raw evil of necrocarnum. When you use this ability, you must make a successful melee touch attack against the intended victim. If successful, your touch bestows 1d4 negative levels on the target (Fortitude half). For each negative level bestowed, you gain 1 temporary point of essentia and 5 temporary hit points. The temporary essentia lasts until the end of your next turn. The temporary hit points fade after 1 hour.
While you have necrocarnum shroud bound to your soul chakra, you can take a standard action to strike a living foe with the raw evil of necrocarnum. When you use this ability, you must make a
successful melee touch attack against the intended victim. If successful, your touch bestows 1d4 negative levels on the target (Fortitude half). For each negative level bestowed, you gain 1 temporary point of essentia
and 5 temporary hit points. The temporary essentia lasts until the end of your next turn. The temporary hit points fade after 1 hour.
Chakra Bind (Waist)
At the beginning of your turn, any creature within the area of your life-draining field becomes shaken for 1 round (Will negates).
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 13:20:18
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void ShroudPulse(object oMeldshaper);
@@ -82,6 +93,9 @@ void main()
ShroudPulse(oMeldshaper);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_SHROUD), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SOUL) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_SHROUD_SOUL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_WAIST) ShroudShaken(oMeldshaper);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SOUL || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_SOUL)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_SHROUD_SOUL), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_WAIST || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_WAIST)
ShroudShaken(oMeldshaper);
}

View File

@@ -21,10 +21,42 @@ Chakra Bind (Arms)
While necrocarnum touch is bound to your arms chakra, you can fire a ray of pure necrocarnum as a standard action. This ray requires a ranged touch attack to hit and has a range of
30 feet. If it strikes a living creature, it deals 1d8 points of damage for every point of essentia that you invest in the soulmeld (Fortitude half).
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 08:44:53
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectLinkEffects(EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE), EffectSkillIncrease(SKILL_PICK_POCKET, 4));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
if (nEssentia) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH_ESS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Check if bound to Arms chakra (regular or double)
int nBoundToArms = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_ARMS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_ARMS)) == nMeldId)
nBoundToArms = TRUE;
if (nBoundToArms)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
#include "moi_inc_moifunc"
void main()
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -35,4 +67,4 @@ void main()
if (nEssentia) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH_ESS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_ARMS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH_ARMS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_NECROCARNUM_TOUCH), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -20,10 +20,38 @@ Settled directly on your shoulders, your incarnate pauldrons glow with a faint b
You gain immunity to energy drain.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 23:13:51
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectImmunity(IMMUNITY_TYPE_DISEASE);
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_FORT, nEssentia));
// Shoulders bind (energy drain immunity) <20> check regular or double Shoulders
int nBoundToShoulders = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == nMeldId)
nBoundToShoulders = TRUE;
if (nBoundToShoulders) eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_NEGATIVE_LEVEL));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PAULDRONS_OF_HEALTH), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
void main()
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -34,4 +62,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PAULDRONS_OF_HEALTH), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -26,10 +26,53 @@ A terrible spidery head extends like a hood from your phase cloak, covering your
You gain a bite attack that deals 1d4 points of damage and injects a mild poison (Fortitude negates, damage 1d2 Con). Every point of essentia invested in this soulmeld grants a +1 enhancement bonus on attack rolls made with the bite attack.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 21:15:45
//::
//:: Double Totem Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 4 + nEssentia;
effect eLink = EffectSkillIncrease(SKILL_CLIMB, nBonus);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PHASE_CLOAK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (bite attack) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
string sResRef = "prc_lizf_bite_";
int nSize = PRCGetCreatureSize(oMeldshaper);
sResRef += GetAffixForSize(nSize);
AddNaturalPrimaryWeapon(oMeldshaper, sResRef);
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackB", sResRef);
int nDC = GetMeldshaperDC(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_PHASE_CLOAK);
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyOnHitProps(IP_CONST_ONHIT_ITEMPOISON, IPOnHitSaveDC(nDC), IP_CONST_POISON_1D2_CONDAMAGE), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
if (nEssentia)
{
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyAttackBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
}
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -55,4 +98,4 @@ void main()
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyAttackBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
}
}
}
} */

View File

@@ -26,7 +26,14 @@ Your frost helm fuses to your head and seems to spread downward, changing the ap
As a standard action, you can create a momentary ring of fire that surrounds you. Creatures adjacent to you take 1d6 points of fire damage per point of essentia you invest in your phoenix belt. A successful Reflex save reduces this damage by half.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:25:19
//::
//:: Double Totem Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
@@ -40,5 +47,7 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_HEAT_ENDURANCE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PHOENIX_BELT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PHOENIX_BELT_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_TOTEM)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PHOENIX_BELT_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}

View File

@@ -27,10 +27,71 @@ Your frost helm fuses to your head and seems to spread downward, changing the ap
As a standard action, you can create a momentary ring of fire that surrounds you. Creatures adjacent to you take 1d6 points of fire damage per point of essentia
you invest in your phoenix belt. A successful Reflex save reduces this damage by half.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 21:30:51
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_PHOENIX_BELT;
// Check if bound to Totem chakra (regular or double)
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (!nBoundToTotem) return;
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_PHOENIX_BELT);
int nDice = GetEssentiaInvested(oMeldshaper, MELD_PHOENIX_BELT);
int nDC = GetMeldshaperDC(oMeldshaper, CLASS_TYPE_INCARNATE, MELD_PHOENIX_BELT);
location lTarget = PRCGetSpellTargetLocation();
int nDamage;
float fDelay;
effect eExplode = EffectVisualEffect(VFX_FNF_FIREBALL);
effect eDam;
//Apply the fireball explosion at the location captured above.
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
//Declare the spell shape, size and the location. Capture the first target object in the shape.
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
//Cycle through the targets within the spell shape until an invalid object is captured.
while (GetIsObjectValid(oTarget))
{
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF) && oMeldshaper != oTarget)
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(oMeldshaper, MELD_PHOENIX_BELT));
//Get the distance between the explosion and the target to calculate delay
fDelay = GetDistanceBetweenLocations(lTarget, GetLocation(oTarget))/20;
if (!PRCDoResistSpell(oMeldshaper, oTarget, nMeldshaperLevel, fDelay))
{
nDamage = d6(nDice);
//Adjust damage based on Reflex Save, Evasion and Improved Evasion
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
if(nDamage > 0)
{
ApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDamage, DAMAGE_TYPE_FIRE), oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oTarget);
}
}
}
//Select the next target within the spell shape.
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldshaperLevel = GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_PHOENIX_BELT);
@@ -71,3 +132,4 @@ void main()
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(7.0), lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
}
*/

View File

@@ -27,9 +27,41 @@ You can emit a crimson ray from the mouth of your psion-killer mask to make a ra
If you hit with the ray, you deal no damage but temporarily suppress the opponent's primary weapon, if any, for ten rounds.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 08:43:46
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK_DETECT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Check if bound to Totem chakra (regular or double)
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
}
/* #include "moi_inc_moifunc"
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
@@ -40,4 +72,4 @@ void main()
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK_DETECT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONKILLER_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -19,7 +19,14 @@ Your psion-killer mask binds to your forehead, and your eyes replace the red glo
When using this soulmeld's detect psionics ability, you can instantly determine the number, strength, and location of each psionic aura present as if you had been concentrating for 3 rounds.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 08:43:46
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "prc_inc_s_det"
#include "moi_inc_moifunc"
@@ -30,7 +37,14 @@ void main()
int nRound = 0;
float fRange = 10 + (10.0 * GetEssentiaInvested(oMeldshaper, MELD_PSIONKILLER_MASK));
if (GetIsMeldBound(oMeldshaper, MELD_PSIONKILLER_MASK) == CHAKRA_BROW) nRound = 3;
//if (GetIsMeldBound(oMeldshaper, MELD_PSIONKILLER_MASK) == CHAKRA_BROW) nRound = 3;
int nBoundToBrow = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == MELD_PSIONKILLER_MASK ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == MELD_PSIONKILLER_MASK)
nBoundToBrow = TRUE;
if (nBoundToBrow) nRound = 3;
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_DETECT), oMeldshaper, fDuration);

View File

@@ -15,7 +15,15 @@ You can emit a crimson ray from the mouth of your psion-killer mask to make a ra
If you hit with the ray, you deal no damage but temporarily suppress the opponent's primary weapon, if any, for ten rounds.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 20:53:41
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
#include "prc_inc_sp_tch"
@@ -112,7 +120,26 @@ void RestoreAllProperties(object oItem, object oPC, int nSlot = -1)
}
}
void SuppressItem(object oTrueSpeaker, object oTarget, int nBeats)
void SuppressItem(object oTrueSpeaker, object oTarget, int nBeats)
{
int nMeldId = MELD_PSIONKILLER_MASK;
int nBoundToTotem = (GetLocalInt(oTrueSpeaker, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oTrueSpeaker, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId);
if (!nBoundToTotem || GetBreakConcentrationCheck(oTrueSpeaker) || nBeats == 0) return;
// Remove and restore the properties
RemoveAllProperties(oTarget, GetItemPossessor(oTarget));
DelayCommand(5.8, RestoreAllProperties(oTarget, GetItemPossessor(oTarget)));
// Apply VFX
effect eImp = EffectVisualEffect(VFX_IMP_PULSE_BOMB);
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eImp, GetItemPossessor(oTarget));
DelayCommand(6.0, SuppressItem(oTrueSpeaker, oTarget, nBeats - 1));
}
/* void SuppressItem(object oTrueSpeaker, object oTarget, int nBeats)
{
// Break if they fail concentration or it runs out
if (GetBreakConcentrationCheck(oTrueSpeaker) || nBeats == 0) return;
@@ -127,9 +154,31 @@ void SuppressItem(object oTrueSpeaker, object oTarget, int nBeats)
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eImp, GetItemPossessor(oTarget));
DelayCommand(6.0, SuppressItem(oTrueSpeaker, oTarget, nBeats - 1));
}
} */
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_PSIONKILLER_MASK;
// Check if bound to Totem chakra (regular or double)
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (!nBoundToTotem) return;
object oTarget = PRCGetSpellTargetObject();
if(PRCDoRangedTouchAttack(oTarget))
{
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
if (GetIsObjectValid(oItem))
SuppressItem(oMeldshaper, oItem, 10);
}
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
@@ -139,5 +188,5 @@ void main()
if (GetIsObjectValid(oItem))
SuppressItem(oMeldshaper, oItem, 10);
}
}
} */

View File

@@ -21,10 +21,42 @@ Instead of spectacles perched on your nose, your psion's eyes appear as a third
You can use the call to mind power at will for the duration of this soulmeld.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 13:16:34
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 4 + (nEssentia * 2);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_CONCENTRATION, nBonus));
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_PSICRAFT, nBonus));
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_USE_MAGIC_DEVICE, nBonus));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONS_EYES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Brow bind (call to mind at will) <20> check regular or double Brow
int nBoundToBrow = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
nBoundToBrow = TRUE;
if (nBoundToBrow)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONS_EYES_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -38,4 +70,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONS_EYES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_PSIONS_EYES_BROW), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -26,10 +26,50 @@ The fur of your rageclaws merges into your hands, and your fingers become tipped
You can use your rageclaws as a pair of natural weapons that deal 1d6 points of damage plus your Strength modifier. When you grapple an opponent, you can attack with both claws; these attacks are not subject to the usual <20>4 penalty for attacking with a natural weapon in a grapple. You gain a +1 enhancement bonus on attack rolls and damage rolls with your claws for every point of essentia invested in this soulmeld.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 21:30:51
//::
//:: Double Totem Bind support added in moi_events
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_RAGECLAWS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (claws) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
string sResRef = "prc_claw_1d6m_";
int nSize = PRCGetCreatureSize(oMeldshaper);
sResRef += GetAffixForSize(nSize);
AddNaturalPrimaryWeapon(oMeldshaper, sResRef, 2);
SetLocalString(oMeldshaper, "IncarnumPrimaryAttackL", sResRef);
if (nEssentia)
{
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMeldshaper), ItemPropertyEnhancementBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper), ItemPropertyEnhancementBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
}
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -52,4 +92,4 @@ void main()
DelayCommand(3.0, IPSafeAddItemProperty(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMeldshaper), ItemPropertyEnhancementBonus(nEssentia), 9999.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE));
}
}
}
} */

View File

@@ -24,10 +24,45 @@ Chakra Bind (Totem) Your head transforms to take on the appearance of a giant ea
You gain evasion.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 23:20:37
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectSkillIncrease(SKILL_SPOT, 2 + (nEssentia * 2));
// Brow bind (darkvision) <20> check regular or double Brow
int nBoundToBrow = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
nBoundToBrow = TRUE;
if (nBoundToBrow) eLink = EffectLinkEffects(eLink, EffectUltravision());
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GREAT_RAPTOR_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Totem bind (evasion) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_EVASION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -38,4 +73,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GREAT_RAPTOR_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_EVASION), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -20,7 +20,14 @@ Your feet and lower legs are encased in a sheath of blue-gray energy. This subst
You can use dimension door as the spell, up to a total distance of 10 feet per meldshaper level. You can use this ability (in increments of 10 feet) any number of times, until the total distance has been traversed, at which point the soulmeld unshapes. This requires a standard action to activate.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:28:00
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
@@ -31,5 +38,7 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CERULEAN_SANDALS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_FEET) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CERULEAN_SANDALS_FEET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_FEET || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_FEET)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_CERULEAN_SANDALS_FEET), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}

View File

@@ -1,16 +1,75 @@
/*
Cerulean Sandals Feet Bind
Cerulean Sandals
Descriptors: None
Classes: Incarnate, Soulborn
Chakra: Feet
Saving Throw: None
Incarnum forms into a pair of sandals that surround your feet and any other footwear you might have on. The sandals resemble blue crystal ice, but just beneath the surface, they seem to flow like water.
Your cerulean sandals make you immune to movement speed decreases.
Essentia: Every point of essentia invested in this soulmeld grants an enhancement bonus of +5 feet to your base land speed.
Chakra Bind (Feet)
Your feet and lower legs are encased in a sheath of blue-gray energy. This substance resembles ice, but motes of light like tiny stars drift through it as well.
You can use dimension door as the spell, up to a total distance of 10 feet per meldshaper level. You can use this ability (in increments of 10 feet) any number of times,
until the total distance has been traversed, at which point the soulmeld unshapes. This requires a standard action to activate.
You can use dimension door as the spell, up to a total distance of 10 feet per meldshaper level. You can use this ability (in increments of 10 feet) any number of times, until the total distance has been traversed, at which point the soulmeld unshapes. This requires a standard action to activate.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 09:50:29
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "spinc_dimdoor"
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
location lTarget = PRCGetSpellTargetLocation();
float fTraveled = GetLocalFloat(oMeldshaper, "CeruleanSandalsDist");
float fDist = GetDistanceBetweenLocations(lTarget, GetLocation(oMeldshaper));
// We know it's bound, now to check which class bound it
int nClass = GetMeldShapedClass(oMeldshaper, MELD_CERULEAN_SANDALS);
int nLevel = GetMeldshaperLevel(oMeldshaper, nClass, MELD_CERULEAN_SANDALS);
float fMax = 10.0 * nLevel;
// Check if bound to Feet chakra (regular or double)
int nMeldId = MELD_CERULEAN_SANDALS;
int nBoundToFeet = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_FEET)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_FEET)) == nMeldId)
nBoundToFeet = TRUE;
if (!nBoundToFeet)
{
FloatingTextStringOnCreature("Cerulean Sandals must be bound to Feet to use this ability.", oMeldshaper, FALSE);
return;
}
// If it's within range
if (fMax >= (fDist+fTraveled))
{
DimensionDoor(oMeldshaper, nLevel);
SetLocalFloat(oMeldshaper, "CeruleanSandalsDist", (fDist+fTraveled));
FloatingTextStringOnCreature("You have "+FloatToString(fMax - (fDist+fTraveled))+" of distance left in your Cerulean Sandals", oMeldshaper, FALSE);
}
else
{
// Using this ability ends the meld until tomorrow.
PRCRemoveSpellEffects(MELD_CERULEAN_SANDALS, oMeldshaper, oMeldshaper);
FloatingTextStringOnCreature("Cerulean Sandals unshaped", oMeldshaper, FALSE);
ExecuteScript("prc_speed", oMeldshaper); // This will remove any speed bonus from the spell
}
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
location lTarget = PRCGetSpellTargetLocation();
@@ -34,5 +93,5 @@ void main()
FloatingTextStringOnCreature("Cerulean Sandals unshaped", oMeldshaper, FALSE);
ExecuteScript("prc_speed", oMeldshaper); // This will remove any speed bonus from the spell
}
}
} */

View File

@@ -26,10 +26,57 @@ Your hair grows into a bushy mane beneath your crown. If you are male, your bear
You gain the ability to make a trample attack. As a full-round action, you can move up to twice your speed and literally run over any creature equal to your own size or smaller. Your trample attack deals 1d8 points of bludgeoning damage (or 1d6 points if you are Small) plus 1-1/2 times your Strength modifier. Opponents have a Reflex save for half damage.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 10:25:22
//::
//:: Double Chakra Bind support added
//:: Double Totem bind support added
//:; Added missing essentia based will save bonus
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
effect eLink = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
// Apply essentia-based mind-affecting save bonus
if (nEssentia) eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, nEssentia, SAVING_THROW_TYPE_MIND_SPELLS));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHEDU_CROWN), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Heart bind (ethereal) <20> check regular or double Heart
int nBoundToHeart = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HEART)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HEART)) == nMeldId)
nBoundToHeart = TRUE;
if (nBoundToHeart)
{
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHEDU_CROWN_HEART), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
// Totem bind (trample) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem)
{
// Reuses Gorgon Mask's trample feat; no dedicated constant exists
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -42,4 +89,4 @@ void main()
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HEART) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHEDU_CROWN_HEART), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// This is correct, it's identical to the Shedu Crown ability for trample
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_GORGON_MASK_TOTEM), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -26,11 +26,35 @@ Your hair grows into a bushy mane beneath your crown. If you are male, your bear
You gain the ability to make a trample attack. As a full-round action, you can move up to twice your speed and literally run over any creature equal to your own size or smaller. Your trample attack deals 1d8 points of bludgeoning damage (or 1d6 points if you are Small) plus 1-1/2 times your Strength modifier. Opponents have a Reflex save for half damage.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 10:25:22
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_SHEDU_CROWN;
// Check if bound to Heart chakra (regular or double)
int nBoundToHeart = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_HEART)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_HEART)) == nMeldId)
nBoundToHeart = TRUE;
if (nBoundToHeart)
{
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectEthereal()), oMeldshaper, RoundsToSeconds(GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_SHEDU_CROWN)));
}
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectEthereal()), oMeldshaper, RoundsToSeconds(GetMeldshaperLevel(oMeldshaper, CLASS_TYPE_TOTEMIST, MELD_SHEDU_CROWN)));
}
} */

View File

@@ -26,10 +26,46 @@ Your shadow mantle literally draws shadows to itself, and it changes color to ma
You gain a competence bonus on Hide checks equal to the bonus the soulmeld grants on Listen checks (+4 plus an additional +2 per point of invested essentia).
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 23:20:37
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 4 + (nEssentia * 2);
effect eLink = EffectSkillIncrease(SKILL_LISTEN, nBonus);
// Totem bind (Hide bonus) <20> check regular or double Totem
int nBoundToTotem = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_TOTEM)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_TOTEM)) == nMeldId)
nBoundToTotem = TRUE;
if (nBoundToTotem) eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_HIDE, nBonus));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHADOW_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Shoulders bind (darkness + ultravision) <20> check regular or double Shoulders
int nBoundToShoulders = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_SHOULDERS)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_SHOULDERS)) == nMeldId)
nBoundToShoulders = TRUE;
if (nBoundToShoulders) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHADOW_MANTLE_SHOULDERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -41,4 +77,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHADOW_MANTLE), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_SHOULDERS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SHADOW_MANTLE_SHOULDERS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -20,7 +20,14 @@ Your grip on your ranged weapon is as light as can be, requiring only the slight
When you bind sighting gloves to your hands chakra, you gain the Point Blank Shot feat.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:43:25
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
@@ -31,5 +38,7 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SIGHTING_GLOVES), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_POINTBLANK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_HANDS || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_HANDS)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_FEAT_POINTBLANK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}

View File

@@ -33,7 +33,14 @@ Chakra Bind (Throat)
Your soulspark burns with a fierce blue-white light.
If you bind soulspark familiar to your throat chakra, you create a greater soulspark.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:53:41
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void AugmentSoulspark(object oMeldshaper, string sSummon, int nEssentia)
@@ -79,9 +86,9 @@ void main()
int nEssentia = GetEssentiaInvested(oMeldshaper);
string sSummon = "moi_slspk_least";
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN) sSummon = "moi_slspk_lesser";
else if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW) sSummon = "moi_slspk_medium";
else if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) sSummon = "moi_slspk_greatr";
if (GetIsMeldBound(oMeldshaper) == CHAKRA_CROWN || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_CROWN) sSummon = "moi_slspk_lesser";
else if (GetIsMeldBound(oMeldshaper) == CHAKRA_BROW || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_BROW) sSummon = "moi_slspk_medium";
else if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_THROAT) sSummon = "moi_slspk_greatr";
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(EffectSummonCreature(sSummon)), oMeldshaper, 9999.0);
DelayCommand(0.5, AugmentSoulspark(oMeldshaper, sSummon, nEssentia));

View File

@@ -26,10 +26,46 @@ The silver mask melds into your face and neck, from your cheekbones down to your
When bound to the throat chakra, the silvertongue mask allows you to cast charm person at will. A creature targeted by this ability, regardless of whether or not it succeeds on its save, can<61>t be targeted again by the same ability for 24 hours.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 12:23:13
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = OBJECT_SELF;
int nMeldId = MELD_SILVERTONGUE_MASK;
// Check if bound to Throat chakra (regular or double)
int nBoundToThroat = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
nBoundToThroat = TRUE;
if (!nBoundToThroat) return; // Exit if not bound to Throat
object oTarget = PRCGetSpellTargetObject();
if (!GetLocalInt(oTarget, "SilvertongueLimit"))
{
// Which class created this
int nClass = GetMeldShapedClass(oMeldshaper, MELD_SILVERTONGUE_MASK);
int nMeldshaperLvl = GetMeldshaperLevel(oMeldshaper, nClass, MELD_SILVERTONGUE_MASK);
int nDC = GetMeldshaperDC(oMeldshaper, nClass, MELD_SILVERTONGUE_MASK);
ActionDoCommand(SetLocalInt(oMeldshaper, "SpellIsSLA", TRUE));
ActionCastSpell(SPELL_CHARM_PERSON, nMeldshaperLvl, 0, nDC, METAMAGIC_NONE, CLASS_TYPE_INVALID, FALSE, FALSE, OBJECT_INVALID, FALSE);
ActionDoCommand(DeleteLocalInt(oMeldshaper, "SpellIsSLA"));
SetLocalInt(oTarget, "SilvertongueLimit", TRUE);
}
}
/* void main()
{
object oMeldshaper = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
@@ -46,4 +82,4 @@ void main()
SetLocalInt(oTarget, "SilvertongueLimit", TRUE);
}
}
} */

View File

@@ -26,10 +26,47 @@ The silver mask melds into your face and neck, from your cheekbones down to your
When bound to the throat chakra, the silvertongue mask allows you to cast charm person at will. A creature targeted by this ability, regardless of whether or not it succeeds on its save, can<61>t be targeted again by the same ability for 24 hours.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-20 12:23:13
//::
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nMeldId = PRCGetSpellId();
int nEssentia = GetEssentiaInvested(oMeldshaper);
int nBonus = 2 + (nEssentia * 2);
effect eLink = EffectLinkEffects(EffectSkillIncrease(SKILL_BLUFF, nBonus), EffectSkillIncrease(SKILL_PERSUADE, nBonus));
// Brow bind (Sense Motive) <20> check regular or double Brow
int nBoundToBrow = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_BROW)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_BROW)) == nMeldId)
nBoundToBrow = TRUE;
if (nBoundToBrow)
eLink = EffectLinkEffects(eLink, EffectSkillIncrease(SKILL_SENSE_MOTIVE, nBonus));
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SILVERTONGUE_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
// Throat bind (charm person) <20> check regular or double Throat
int nBoundToThroat = FALSE;
if (GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_THROAT)) == nMeldId ||
GetLocalInt(oMeldshaper, "BoundMeld" + IntToString(CHAKRA_DOUBLE_THROAT)) == nMeldId)
nBoundToThroat = TRUE;
if (nBoundToThroat)
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SILVERTONGUE_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
/* void main()
{
object oMeldshaper = PRCGetSpellTargetObject();
int nEssentia = GetEssentiaInvested(oMeldshaper);
@@ -41,4 +78,4 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SILVERTONGUE_MASK), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_THROAT) IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SILVERTONGUE_MASK_THROAT), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
}
} */

View File

@@ -26,7 +26,15 @@ Your hands become one with the claws that surround them, overlarge for your size
You can use your sphinx claws as natural weapons that deal 1d8 points of damage plus your Strength modifier. For every point of essentia you invest in your sphinx claws, you gain a +1 enhancement bonus on your attack rolls and damage rolls with the claws.
*/
//::////////////////////////////////////////////////////////
//::
//:: Updated by: Jaysyn
//:: Updated on: 2026-02-21 15:18:04
//::
//:: Double Totem Bind support added
//:: Double Chakra Bind support added
//::
//::////////////////////////////////////////////////////////
#include "moi_inc_moifunc"
void main()
@@ -38,7 +46,7 @@ void main()
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eLink), oMeldshaper, 9999.0);
IPSafeAddItemProperty(GetPCSkin(oMeldshaper), ItemPropertyBonusFeat(IP_CONST_MELD_SPHINX_CLAWS), 9999.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM)
if (GetIsMeldBound(oMeldshaper) == CHAKRA_TOTEM || GetIsMeldBound(oMeldshaper) == CHAKRA_DOUBLE_TOTEM)
{
string sResRef = "prc_claw_1d8m_";
int nSize = PRCGetCreatureSize(oMeldshaper);

Some files were not shown because too many files have changed in this diff Show More