//:://///////////////////////////////////////////// //:: Complete Warrior Samurai Mass Staredown class ability //:: prc_cwsm_msstare //:://///////////////////////////////////////////// /** @file Mass Staredown (Ex): At 10th level, a samurai has sufficient presence that he can cow multiple foes. Using a Intimidate check, the samurai can demoralize all opponents within 30 feet with a single standard action. SRD on Intimidate - Demoralize Opponent: You can also use Intimidate to weaken an opponent's resolve in combat. To do so, make an Intimidate check opposed by the target's modified level check (1d20 + hit dice + wisdom bonus, if any). If you win, the targe becomes shaken for 1 round. A shaken character takes a -2 penalty on attack rolls, ability checks and saving throws. @date Modified - 2006.07.04 */ //::////////////////////////////////////////////// //::////////////////////////////////////////////// #include "prc_inc_spells" void main() { //Declare major variables object oPC = OBJECT_SELF; location lTarget = GetLocation(oPC); int nPCSize = PRCGetCreatureSize(oPC); int nSpellID = PRCGetSpellId(); int nDC; // Construct Intimidate effect effect eLink = EffectAttackDecrease(2); eLink = EffectLinkEffects(eLink, EffectSavingThrowDecrease(SAVING_THROW_ALL,2)); eLink = EffectLinkEffects(eLink, EffectSkillDecrease(SKILL_ALL_SKILLS,2)); eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE)); eLink = ExtraordinaryEffect(eLink); // Determine duration. Normally 2 rounds, with Improved Staredown, 5 float fDuration = RoundsToSeconds(GetHasFeat(FEAT_CWSM_IMPROVED_STAREDOWN, oPC) ? 5 : 2 ); float fRadius = FeetToMeters(30.0f); // Loop over creatures in range object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget, TRUE); while (GetIsObjectValid(oTarget)) { // Target validity check if(oTarget != oPC && // Can't stare self down spellsIsTarget(oTarget, SPELL_TARGET_SELECTIVEHOSTILE, oPC) // Only hostiles ) { // Let the target know something hostile happened SignalEvent(oTarget, EventSpellCastAt(oPC, nSpellID, TRUE)); // Determine DC for this target nDC = d20() // Die roll + GetHitDice(oTarget) // Hit dice + max(0, GetAbilityModifier(ABILITY_WISDOM, oTarget)) // Wisdom bonus, no wisdom penalty + (4 * (PRCGetCreatureSize(oTarget) - nPCSize)) // Adjust by 4 in favor of the bigger creature for each size category it is bigger than the smaller one ; // Roll and apply effect in case of success if(GetIsSkillSuccessful(oPC, SKILL_INTIMIDATE, nDC) && !GetIsImmune(oTarget, IMMUNITY_TYPE_FEAR, oPC)) ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDuration); }// 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 }