forked from Jaysyn/PRC8
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
78 lines
3.4 KiB
Plaintext
78 lines
3.4 KiB
Plaintext
//::///////////////////////////////////////////////
|
|
//:: 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
|
|
}
|