forked from Jaysyn/PRC8
94 lines
3.7 KiB
Plaintext
94 lines
3.7 KiB
Plaintext
#include "tob_inc_move"
|
|
#include "tob_movehook"
|
|
////#include "prc_alterations"
|
|
#include "inc_newspellbook"
|
|
|
|
// Helper functions
|
|
void DoDamage(object oInitiator, int nDice, int nClass)
|
|
{
|
|
location lTarget = GetLocation(oInitiator);
|
|
float fRange = FeetToMeters(10.0);
|
|
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRange, lTarget, FALSE, OBJECT_TYPE_CREATURE, GetPosition(oInitiator));
|
|
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
if(oTarget != oInitiator)
|
|
{
|
|
int nDamage = d6(nDice);
|
|
int nDC = 14 + GetDCAbilityModForClass(nClass, oInitiator);
|
|
|
|
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
|
|
|
|
effect eLink = EffectDamage(nDamage/2, DAMAGE_TYPE_FIRE);
|
|
eLink = EffectLinkEffects(eLink, EffectDamage(nDamage/2, DAMAGE_TYPE_MAGICAL));
|
|
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_IMP_FLAME_M));
|
|
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
|
}
|
|
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRange, lTarget, FALSE, OBJECT_TYPE_CREATURE, GetPosition(oInitiator));
|
|
}
|
|
}
|
|
|
|
void DoLoop(object oInitiator, int nDice, int nClass)
|
|
{
|
|
if(DEBUG) DoDebug("Dice: " + IntToString(nDice));
|
|
DelayCommand(RoundsToSeconds(9), DoDamage(oInitiator, nDice, nClass));
|
|
DelayCommand(RoundsToSeconds(8), DoDamage(oInitiator, nDice, nClass));
|
|
DelayCommand(RoundsToSeconds(7), DoDamage(oInitiator, nDice, nClass));
|
|
DelayCommand(RoundsToSeconds(6), DoDamage(oInitiator, nDice, nClass));
|
|
DelayCommand(RoundsToSeconds(5), DoDamage(oInitiator, nDice, nClass));
|
|
DelayCommand(RoundsToSeconds(4), DoDamage(oInitiator, nDice, nClass));
|
|
DelayCommand(RoundsToSeconds(3), DoDamage(oInitiator, nDice, nClass));
|
|
DelayCommand(RoundsToSeconds(2), DoDamage(oInitiator, nDice, nClass));
|
|
DelayCommand(RoundsToSeconds(1), DoDamage(oInitiator, nDice, nClass));
|
|
DoDamage(oInitiator, nDice, nClass);
|
|
}
|
|
|
|
void main()
|
|
{
|
|
if(!PreManeuverCastCode()) return;
|
|
|
|
object oInitiator = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
|
|
|
|
if(move.bCanManeuver)
|
|
{
|
|
// See if they want augmented stance
|
|
if(GetSpellId() == JPM_SPELL_FIREBIRD_AUGMENTED)
|
|
{
|
|
int nSpellID = GetLocalInt(oInitiator, "JPM_SPELL_CURRENT");
|
|
string sArray = GetLocalString(oInitiator, "JPM_SPELL_CURRENT");
|
|
|
|
int nUses = sArray == "" ? GetHasSpell(nSpellID, oInitiator) :
|
|
persistant_array_get_int(oInitiator, sArray, nSpellID);
|
|
|
|
if(nUses)
|
|
{
|
|
int nClass = GetPrimaryArcaneClass(oInitiator);
|
|
int nLevel = GetLocalInt(oInitiator, "JPM_SPELL_CURRENT_LVL");
|
|
|
|
if(sArray == "")
|
|
{
|
|
DecrementRemainingSpellUses(oInitiator, nSpellID);
|
|
}
|
|
else
|
|
{
|
|
nUses--;
|
|
persistant_array_set_int(oInitiator, sArray, nSpellID, nUses);
|
|
}
|
|
|
|
DoLoop(oInitiator, nLevel, nClass);
|
|
}
|
|
}
|
|
// This adds 3 caster levels when using a fire spell
|
|
SetLocalInt(oInitiator, "ToB_JPM_FireB", TRUE);
|
|
|
|
if(GetLocalInt(oInitiator, "ReserveFeatsRunning"))
|
|
DelayCommand(0.1f, ExecuteScript("prc_reservefeat", oInitiator));
|
|
|
|
effect eLink = EffectLinkEffects(EffectDamageResistance(DAMAGE_TYPE_FIRE, 10), EffectVisualEffect(VFX_DUR_ELEMENTAL_SHIELD));
|
|
eLink = ExtraordinaryEffect(eLink);
|
|
|
|
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget);
|
|
}
|
|
} |