From 355815c64f05ca3f0e100a693fe9ab2058f99cd5 Mon Sep 17 00:00:00 2001 From: Jaysyn904 <68194417+Jaysyn904@users.noreply.github.com> Date: Fri, 30 May 2025 13:26:12 -0400 Subject: [PATCH] 2025/05/30 Afternoon Update Fixed copy/paste bug with EWS & new weapons. Added documentation for DoCharge and DoGrapple. Bloodwar Gauntlets should provide keen now. Strength of Stone should provide Immunity from Critical Hits now. Shadowbane Stalker should be enterable now. --- nwn/nwnprc/trunk/2das/feat.2da | 24 +++++----- nwn/nwnprc/trunk/include/prc_inc_combmove.nss | 44 +++++++++++++++++++ nwn/nwnprc/trunk/newspellbook/moi_events.nss | 11 ++++- .../trunk/newspellbook/tob_stdr_strston.nss | 6 ++- nwn/nwnprc/trunk/scripts/prc_prereq.nss | 21 ++++++++- 5 files changed, 88 insertions(+), 18 deletions(-) diff --git a/nwn/nwnprc/trunk/2das/feat.2da b/nwn/nwnprc/trunk/2das/feat.2da index 1589c9dc..46173858 100644 --- a/nwn/nwnprc/trunk/2das/feat.2da +++ b/nwn/nwnprc/trunk/2das/feat.2da @@ -24638,18 +24638,18 @@ 24634 WEAP_SPEC_MAUL 16834192 444 ife_wepspec_mau 4 **** **** **** **** **** **** **** 24610 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_DBL_SCIMITAR 1 **** **** **** **** **** 0 1 24635 WEAP_SPEC_DBL_SCIMITAR 16834201 444 ife_wepspec_dsc 4 **** **** **** **** **** **** **** 24611 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_LIGHT_LANCE 1 **** **** **** **** **** 0 1 24636 WEAP_SPEC_GOAD 16834210 444 ife_wepspec_goa 4 **** **** **** **** **** **** **** 24612 24423 0 0 0 **** **** **** **** 1 **** 2 **** **** **** **** **** **** **** **** **** **** FEAT_WEAPON_SPECIALIZATION_GOAD 1 **** **** **** **** **** 0 1 -24637 EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE 16834112 8456 ife_ews_lnc **** **** **** **** **** **** **** **** 24625 24601 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE 1 **** **** **** **** **** 1 1 -24638 EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK 16834121 8456 ife_ews_hpck **** **** **** **** **** **** **** **** 24626 24602 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK 1 **** **** **** **** **** 1 1 -24639 EPIC_WEAPON_SPECIALIZATION_LIGHT_PICK 16834130 8456 ife_ews_lpck **** **** **** **** **** **** **** **** 24627 24603 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_PICK 1 **** **** **** **** **** 1 1 -24640 EPIC_WEAPON_SPECIALIZATION_SAI 16834139 8456 ife_ews_sai **** **** **** **** **** **** **** **** 24628 24604 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_SAI 1 **** **** **** **** **** 1 1 -24641 EPIC_WEAPON_SPECIALIZATION_NUNCHAKU 16834148 8456 ife_ews_nun **** **** **** **** **** **** **** **** 24629 24605 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_NUNCHAKU 1 **** **** **** **** **** 1 1 -24642 EPIC_WEAPON_SPECIALIZATION_FALCHION 16834157 8456 ife_ews_fal **** **** **** **** **** **** **** **** 24630 24606 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_FALCHION 1 **** **** **** **** **** 1 1 -24643 EPIC_WEAPON_SPECIALIZATION_SAP 16834166 8456 ife_ews_sap **** **** **** **** **** **** **** **** 24631 24607 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_SAP 1 **** **** **** **** **** 1 1 -24644 EPIC_WEAPON_SPECIALIZATION_KATAR 16834175 8456 ife_ews_ktr **** **** **** **** **** **** **** **** 24632 24608 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_KATAR 1 **** **** **** **** **** 1 1 -24645 EPIC_WEAPON_SPECIALIZATION_HEAVY_MACE 16834184 8456 ife_ews_hmc **** **** **** **** **** **** **** **** 24633 24609 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_MACE 1 **** **** **** **** **** 1 1 -24646 EPIC_WEAPON_SPECIALIZATION_MAUL 16835193 8456 ife_ews_mau **** **** **** **** **** **** **** **** 24634 24610 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_MAUL 1 **** **** **** **** **** 1 1 -24647 EPIC_WEAPON_SPECIALIZATION_DBL_SCIMITAR 16834202 8456 ife_ews_dsc **** **** **** **** **** **** **** **** 24635 24611 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_DBL_SCIMITAR 1 **** **** **** **** **** 1 1 -24648 EPIC_WEAPON_SPECIALIZATION_GOAD 16834211 8456 ife_ews_goa **** **** **** **** **** **** **** **** 24636 24612 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_GOAD 1 **** **** **** **** **** 1 1 +24637 EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE 16834112 8456 ife_ews_lnc **** **** **** **** **** **** **** **** 24625 24613 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_LANCE 1 **** **** **** **** **** 1 1 +24638 EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK 16834121 8456 ife_ews_hpck **** **** **** **** **** **** **** **** 24626 24614 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_PICK 1 **** **** **** **** **** 1 1 +24639 EPIC_WEAPON_SPECIALIZATION_LIGHT_PICK 16834130 8456 ife_ews_lpck **** **** **** **** **** **** **** **** 24627 24615 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_LIGHT_PICK 1 **** **** **** **** **** 1 1 +24640 EPIC_WEAPON_SPECIALIZATION_SAI 16834139 8456 ife_ews_sai **** **** **** **** **** **** **** **** 24628 24616 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_SAI 1 **** **** **** **** **** 1 1 +24641 EPIC_WEAPON_SPECIALIZATION_NUNCHAKU 16834148 8456 ife_ews_nun **** **** **** **** **** **** **** **** 24629 24617 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_NUNCHAKU 1 **** **** **** **** **** 1 1 +24642 EPIC_WEAPON_SPECIALIZATION_FALCHION 16834157 8456 ife_ews_fal **** **** **** **** **** **** **** **** 24630 24618 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_FALCHION 1 **** **** **** **** **** 1 1 +24643 EPIC_WEAPON_SPECIALIZATION_SAP 16834166 8456 ife_ews_sap **** **** **** **** **** **** **** **** 24631 24619 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_SAP 1 **** **** **** **** **** 1 1 +24644 EPIC_WEAPON_SPECIALIZATION_KATAR 16834175 8456 ife_ews_ktr **** **** **** **** **** **** **** **** 24632 24620 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_KATAR 1 **** **** **** **** **** 1 1 +24645 EPIC_WEAPON_SPECIALIZATION_HEAVY_MACE 16834184 8456 ife_ews_hmc **** **** **** **** **** **** **** **** 24633 24621 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_HEAVY_MACE 1 **** **** **** **** **** 1 1 +24646 EPIC_WEAPON_SPECIALIZATION_MAUL 16835193 8456 ife_ews_mau **** **** **** **** **** **** **** **** 24634 24622 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_MAUL 1 **** **** **** **** **** 1 1 +24647 EPIC_WEAPON_SPECIALIZATION_DBL_SCIMITAR 16834202 8456 ife_ews_dsc **** **** **** **** **** **** **** **** 24635 24623 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_DBL_SCIMITAR 1 **** **** **** **** **** 1 1 +24648 EPIC_WEAPON_SPECIALIZATION_GOAD 16834211 8456 ife_ews_goa **** **** **** **** **** **** **** **** 24636 24624 0 0 0 **** **** **** **** 0.5 **** 11 **** **** **** **** **** **** **** **** **** **** FEAT_EPIC_WEAPON_SPECIALIZATION_GOAD 1 **** **** **** **** **** 1 1 24649 IMP_CRIT_LIGHT_LANCE 16834113 228 ife_impcrit_lnc 8 **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 0 **** 45 7938 **** **** **** **** **** **** **** FEAT_IMPROVED_CRITICAL_LIGHT_LANCE 1 **** **** **** **** **** 0 1 24650 IMP_CRIT_HEAVY_PICK 16834122 228 ife_impcrit_hpk 8 **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 0 **** 45 7939 **** **** **** **** **** **** **** FEAT_IMPROVED_CRITICAL_HEAVY_PICK 1 **** **** **** **** **** 0 1 24651 IMP_CRIT_LIGHT_PICK 16834131 228 ife_impcrit_lpk 8 **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** 0 **** 45 7940 **** **** **** **** **** **** **** FEAT_IMPROVED_CRITICAL_LIGHT_PICK 1 **** **** **** **** **** 0 1 diff --git a/nwn/nwnprc/trunk/include/prc_inc_combmove.nss b/nwn/nwnprc/trunk/include/prc_inc_combmove.nss index 7e863924..b81aab41 100644 --- a/nwn/nwnprc/trunk/include/prc_inc_combmove.nss +++ b/nwn/nwnprc/trunk/include/prc_inc_combmove.nss @@ -1041,6 +1041,37 @@ int GetIsCharging(object oPC) return GetLocalInt(oPC, "PCIsCharging"); } +/** + * @brief Initiates a charge action by the player character (PC) toward a target. + * + * This function handles movement, potential attack resolution, damage calculations, + * bull rush attempts, and special feat/ability conditions such as Pounce or Flying Kick. + * + * @param oPC The creature performing the charge (usually the player character). + + * @param oTarget The target of the charge. + + * @param nDoAttack If TRUE (default), the PC will perform an attack after charging. + + * @param nGenerateAoO If TRUE (default), movement may provoke attacks of opportunity (AoOs). + * If FALSE, a high temporary Tumble bonus is applied to prevent AoOs. + + * @param nDamage Initial base damage to apply on a successful hit. Modified by feats or abilities. + + * @param nDamageType The type of damage to apply. Set to -1 (default) to use weapon damage type. + + * @param nBullRush If TRUE, attempt to initiate a Bull Rush after the attack. + + * @param nExtraBonus Additional bonus damage or attack modifiers. Defaults to 0. + + * @param nBullAoO If TRUE (default), allows AoOs triggered during Bull Rush resolution. + + * @param nMustFollow If TRUE (default), the PC will always move toward the target even if it's invalid later. + + * @param nAttack Attack bonus override for the charge attack. 0 = use default or calculate. + + * @param nPounce If TRUE, the PC can perform a full attack on the charge. Determined automatically if not set. + */ void DoCharge(object oPC, object oTarget, int nDoAttack = TRUE, int nGenerateAoO = TRUE, int nDamage = 0, int nDamageType = -1, int nBullRush = FALSE, int nExtraBonus = 0, int nBullAoO = TRUE, int nMustFollow = TRUE, int nAttack = 0, int nPounce = FALSE) { if(!nGenerateAoO) @@ -1377,6 +1408,19 @@ int GetIntToDamage(int nCheck) return -1; } +/** + * @brief Attempts to initiate a grapple between the PC and the target creature. + * + * @param oPC The player character initiating the grapple attempt. + * @param oTarget The target creature to be grappled. + * @param nExtraBonus Additional bonus added to the grapple check (e.g., from feats, spells, items). + * @param nGenerateAoO If TRUE, the target is allowed an Attack of Opportunity unless the PC has Improved Grapple. + * Defaults to TRUE. + * @param nSkipTouch If TRUE, the melee touch attack step is skipped (assumes auto-hit). + * Useful when a touch attack was already resolved elsewhere. + * + * @return TRUE if the grapple attempt succeeds, FALSE otherwise. + */ int DoGrapple(object oPC, object oTarget, int nExtraBonus, int nGenerateAoO = TRUE, int nSkipTouch = FALSE) { if (GetGrapple(oTarget)) diff --git a/nwn/nwnprc/trunk/newspellbook/moi_events.nss b/nwn/nwnprc/trunk/newspellbook/moi_events.nss index 7e25039f..08e58e53 100644 --- a/nwn/nwnprc/trunk/newspellbook/moi_events.nss +++ b/nwn/nwnprc/trunk/newspellbook/moi_events.nss @@ -576,6 +576,11 @@ void main() if(IPGetIsMeleeWeapon(oItem)) { int nBonus = IPGetWeaponEnhancementBonus(oItem); + + if (GetHasSpellEffect(MELD_BLOODWAR_GAUNTLETS, oMeldshaper)) + { + BloodwarGauntlets(oMeldshaper, oItem, nEvent); + } if (GetHasSpellEffect(MELD_INCARNATE_AVATAR, oMeldshaper)) { @@ -646,7 +651,7 @@ void main() + "oMeldshaper = " + DebugObject2Str(oMeldshaper) + "\n" + "oItem = " + DebugObject2Str(oItem) + "\n" ); - + if (GetTag(oItem) == "moi_incarnatewpn") ForceEquip(oMeldshaper, oItem, INVENTORY_SLOT_RIGHTHAND); // No unequipping this weapon // Only applies to armours @@ -659,7 +664,9 @@ void main() // Melee weapon if(IPGetIsMeleeWeapon(oItem)) { - // Remove the attack bonus + BloodwarGauntlets(oMeldshaper, oItem, nEvent); + + // Remove the attack bonus RemoveSpecificProperty(oItem, ITEM_PROPERTY_ATTACK_BONUS, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY); RemoveSpecificProperty(oItem, ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY); RemoveSpecificProperty(oItem, ITEM_PROPERTY_DAMAGE_BONUS, -1, -1, 1, "", -1, DURATION_TYPE_TEMPORARY); diff --git a/nwn/nwnprc/trunk/newspellbook/tob_stdr_strston.nss b/nwn/nwnprc/trunk/newspellbook/tob_stdr_strston.nss index ddc76661..d365dcc8 100644 --- a/nwn/nwnprc/trunk/newspellbook/tob_stdr_strston.nss +++ b/nwn/nwnprc/trunk/newspellbook/tob_stdr_strston.nss @@ -41,13 +41,15 @@ void main() if(move.bCanManeuver) { - effect eLink =EffectVisualEffect(VFX_DUR_ROOTED_TO_SPOT); + effect eLink = EffectVisualEffect(VFX_DUR_ROOTED_TO_SPOT); if (GetHasDefensiveStance(oInitiator, DISCIPLINE_STONE_DRAGON)) { - eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_CRITICAL_HIT)); + eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, 2)); } + eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_CRITICAL_HIT)); + eLink = ExtraordinaryEffect(eLink); InitiatorMovementCheck(oInitiator, move.nMoveId, 5.0); diff --git a/nwn/nwnprc/trunk/scripts/prc_prereq.nss b/nwn/nwnprc/trunk/scripts/prc_prereq.nss index 856bd5c3..3131baab 100644 --- a/nwn/nwnprc/trunk/scripts/prc_prereq.nss +++ b/nwn/nwnprc/trunk/scripts/prc_prereq.nss @@ -1383,14 +1383,31 @@ void WarlockPrCs(object oPC) void Shadowbane(object oPC) { SetLocalInt(oPC, "PRC_PrereqShadowbane", 1); - if(GetLevelByClass(CLASS_TYPE_CLERIC, oPC) || + + int nPreStalker = GetLevelByClass(CLASS_TYPE_CLERIC, oPC) + + GetLevelByClass(CLASS_TYPE_ARCHIVIST, oPC) + + GetLevelByClass(CLASS_TYPE_PALADIN, oPC) + + GetLevelByClass(CLASS_TYPE_FAVOURED_SOUL, oPC) + + GetLevelByClass(CLASS_TYPE_KNIGHT_CHALICE, oPC) + + GetLevelByClass(CLASS_TYPE_SOLDIER_OF_LIGHT, oPC) + + GetLevelByClass(CLASS_TYPE_SHAMAN, oPC) + + GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oPC); + + if (nPreStalker) + { + SetLocalInt(oPC, "PRC_PrereqShadowbane", 0); + } + + +/* if(GetLevelByClass(CLASS_TYPE_CLERIC, oPC) || GetLevelByClass(CLASS_TYPE_ARCHIVIST, oPC) || GetLevelByClass(CLASS_TYPE_PALADIN, oPC) || + GetLevelByClass(CLASS_TYPE_FAVOURED_SOUL, oPC) || GetLevelByClass(CLASS_TYPE_KNIGHT_CHALICE, oPC) || GetLevelByClass(CLASS_TYPE_SOLDIER_OF_LIGHT, oPC) || GetLevelByClass(CLASS_TYPE_SHAMAN, oPC) || GetLevelByClass(CLASS_TYPE_SLAYER_OF_DOMIEL, oPC)) - SetLocalInt(oPC, "PRC_PrereqShadowbane", 0); + SetLocalInt(oPC, "PRC_PrereqShadowbane", 0); */ } void KnightWeave(object oPC)