Clear out experimental .35 files
Clear out experimental .35 files
This commit is contained in:
@@ -1,298 +0,0 @@
|
||||
/*:://////////////////////////////////////////////
|
||||
//:: Spell Name Spiritual Weapon
|
||||
//:: Spell FileName PHS_S_SpiritWea
|
||||
//:://////////////////////////////////////////////
|
||||
//:: In Game Spell desctiption
|
||||
//:://////////////////////////////////////////////
|
||||
Evocation [Force]
|
||||
Level: Clr 2, War 2
|
||||
Components: V, S, DF
|
||||
Casting Time: 1 standard action
|
||||
Range: Medium (20M)
|
||||
Effect: Magic weapon of force
|
||||
Duration: 1 round/level (D)
|
||||
Saving Throw: None
|
||||
Spell Resistance: Yes
|
||||
|
||||
A weapon made of pure force springs into existence and attacks opponents at
|
||||
a distance, as you direct it, dealing 1d8 force damage per hit, +1 point per
|
||||
three caster levels (maximum +5 at 15th level). The weapon takes the shape
|
||||
of a weapon of your chosen alignment (a weapon with some spiritual
|
||||
significance or symbolism to you, see below) and has the same threat range
|
||||
and critical multipliers as a real weapon of its form.
|
||||
|
||||
It attempts to strike a single target each round. It will attack the closest
|
||||
enemy to the chosen spell location, then subsiquently any nearest enemy,
|
||||
until non remain. It uses your base attack bonus (possibly allowing it
|
||||
multiple attacks per round in subsequent rounds) plus your Wisdom modifier
|
||||
as its attack bonus. It strikes as a spell, not as a weapon, so, for example,
|
||||
it can damage creatures that have damage reduction. Your feats or combat
|
||||
actions do not affect the weapon. If the weapon goes beyond the spell range
|
||||
or if it goes out of your sight, the weapon returns to you and hovers.
|
||||
|
||||
A spiritual weapon cannot be attacked or harmed by physical attacks, but
|
||||
dispel magic, disintegrate, a sphere of annihilation, or a rod of
|
||||
cancellation affects it. A spiritual weapon<6F>s AC against touch attacks is
|
||||
12 (10 + size bonus for Tiny object).
|
||||
|
||||
If an attacked creature has spell resistance, you make a caster level check
|
||||
(1d20 + caster level) against that spell resistance the first time the
|
||||
spiritual weapon strikes it. If the weapon is successfully resisted, the
|
||||
spell is dispelled. If not, the weapon has its normal full effect on that
|
||||
creature for the duration of the spell.
|
||||
|
||||
The weapon that you get is dependant upon your alignment. A neutral cleric
|
||||
creates a spiritual weapon of a random alignment. The weapons associated
|
||||
with each alignment are as follows.
|
||||
|
||||
Chaos: Battleaxe
|
||||
Evil: Light flail
|
||||
Good: Warhammer
|
||||
Law: Longsword
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Spell Effects Applied / Notes
|
||||
//:://////////////////////////////////////////////
|
||||
Creates a spiritual weapon invisible person.
|
||||
|
||||
Then, will create one of the 4 special weapon on them. This weapon, by default,
|
||||
has the On Hit property for checking spell resistance on a target. It also
|
||||
does magical damage of the amount specified, and does "No Combat Damage" otherwise.
|
||||
|
||||
Base attack bonus is done by leveling the spiritual weapon to the right BAB,
|
||||
adding some for wisdom ETC.
|
||||
|
||||
The AI is "Attack nearest enemy with the weapon". If the spell is dispelled,
|
||||
or whatever, it goes.
|
||||
|
||||
If it moves out of the spell range (20M), or the caster cannot see it,
|
||||
it moves back to the caster.
|
||||
|
||||
No ranged weapons (using the default ones).
|
||||
|
||||
Oh, and the closest weapon is chosen. If more then 1 are appropriate, then
|
||||
it will randomise it.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Jasperre
|
||||
//::////////////////////////////////////////////*/
|
||||
|
||||
#include "PHS_INC_SPELLS"
|
||||
|
||||
const string PHS_SPIRIT_BATTLEAXE = "phs_spiritaxe";
|
||||
const string PHS_SPIRIT_FLAIL = "phs_spiritflail";
|
||||
const string PHS_SPIRIT_WARHAMMER = "phs_spirithammer";
|
||||
const string PHS_SPIRIT_LONGSWORD = "phs_spiritsword";
|
||||
|
||||
// Creates and appropriate weapon for oCaster, on oSpirit, and returns it.
|
||||
// Chaos: Battleaxe
|
||||
// Evil: Light flail
|
||||
// Good: Warhammer
|
||||
// Law: Longsword
|
||||
object WeaponToCreate(object oCaster, object oSpirit);
|
||||
|
||||
void main()
|
||||
{
|
||||
// Spell hook check.
|
||||
if(!PHS_SpellHookCheck(PHS_SPELL_SPIRITUAL_WEAPON)) return;
|
||||
|
||||
// Declare major variables
|
||||
object oCaster = OBJECT_SELF;
|
||||
location lTarget = GetSpellTargetLocation();
|
||||
int nCasterLevel = PHS_GetCasterLevel();
|
||||
int nMetaMagic = PHS_GetMetaMagicFeat();
|
||||
|
||||
// Duration - 1 round/level
|
||||
float fDuration = PHS_GetDuration(PHS_ROUNDS, nCasterLevel, nMetaMagic);
|
||||
|
||||
// Declare visual effects
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEUTRAL);
|
||||
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
|
||||
|
||||
// Signal spell cast at
|
||||
PHS_SignalSpellCastAt(oCaster, PHS_SPELL_SPIRITUAL_WEAPON, FALSE);
|
||||
|
||||
// Create the Spiritual Weapon.
|
||||
object oSpiritualWeapon = CreateObject(OBJECT_TYPE_CREATURE, PHS_CREATURE_RESREF_SPIRITUAL_WEAPON, lTarget);
|
||||
|
||||
// Assign its new master, but only to the weapon itself
|
||||
SetLocalObject(oSpiritualWeapon, "PHS_MASTER", oCaster);
|
||||
|
||||
// Add the weapon for them to use
|
||||
object oWeaponCreated = WeaponToCreate(oCaster, oSpiritualWeapon);
|
||||
|
||||
// Add the correct damage. Does up to an extra +5. 1/3 levels
|
||||
int nExtraDamage = PHS_LimitInteger(nCasterLevel/3, 5, 0);
|
||||
// Add the damage to the sword
|
||||
if(nExtraDamage > 0)
|
||||
{
|
||||
// Item property.
|
||||
itemproperty IP_Damage = ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_MAGICAL, IPGetDamageBonusConstantFromNumber(nExtraDamage));
|
||||
|
||||
// Add it.
|
||||
AddItemProperty(DURATION_TYPE_PERMANENT, IP_Damage, oWeaponCreated);
|
||||
}
|
||||
|
||||
// And add its appropriate attack bonus via using a duration effect.
|
||||
int nStat;
|
||||
// Check if it was cast from an item
|
||||
if(GetIsObjectValid(GetSpellCastItem()))
|
||||
{
|
||||
// Minimum bonus stat needed to cast the spell
|
||||
nStat = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Else normal ability
|
||||
nStat = PHS_LimitInteger(PHS_GetAppropriateAbilityBonus(), 20);
|
||||
}
|
||||
|
||||
// Apply stat bonus to attack
|
||||
if(nStat > 1)
|
||||
{
|
||||
// Link eDur (visual) and the attack bonus
|
||||
effect eAttack = EffectAttackIncrease(nStat);
|
||||
effect eLink = EffectLinkEffects(eAttack, eDur);
|
||||
|
||||
// Apply the duration VFX with attack
|
||||
PHS_ApplyDurationAndVFX(oSpiritualWeapon, eVis, eLink, fDuration);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Apply the duration VFX
|
||||
PHS_ApplyDurationAndVFX(oSpiritualWeapon, eVis, eDur, fDuration);
|
||||
}
|
||||
|
||||
// Apply level up for the BAB.
|
||||
int nBAB = GetBaseAttackBonus(oCaster);
|
||||
if(nBAB > 1)
|
||||
{
|
||||
int nCnt;
|
||||
int nPackage = GetCreatureStartingPackage(oSpiritualWeapon);
|
||||
for(nCnt = 1; nCnt < nBAB; nCnt++)
|
||||
{
|
||||
// Always stop if it doesn't work.
|
||||
if(LevelUpHenchman(oSpiritualWeapon, CLASS_TYPE_MAGICAL_FORCE, FALSE, nPackage) == 0)
|
||||
{
|
||||
// Debug
|
||||
SendMessageToPC(oCaster, "Debug: Uh-oh, Spiritual weapon didn't level...");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Creates and appropriate weapon for oCaster, on oSpirit, and returns it.
|
||||
// Chaos: Battleaxe
|
||||
// Evil: Light flail
|
||||
// Good: Warhammer
|
||||
// Law: Longsword
|
||||
object WeaponToCreate(object oCaster, object oSpirit)
|
||||
{
|
||||
object oWeapon;
|
||||
string sResRef;
|
||||
// Get ALIGNMENT_ constants to check
|
||||
int nGoodEvil = GetAlignmentGoodEvil(oCaster);
|
||||
int nLawChaos = GetAlignmentLawChaos(oCaster);
|
||||
//int nLawChaosValue = Might make less random by checking good/evil/law/chaos
|
||||
//int nGoodEvilValue = values for the "Lawful Good" ones.
|
||||
|
||||
// Check the good/evil alignments.
|
||||
if(nGoodEvil == ALIGNMENT_NEUTRAL)
|
||||
{
|
||||
// They are "Neutral" (In good/evil)
|
||||
// Check Law/Chaos
|
||||
if(nLawChaos == ALIGNMENT_NEUTRAL)
|
||||
{
|
||||
// * If *totally* neutral, randomise between them all.
|
||||
switch(Random(4))
|
||||
{
|
||||
case 0: { sResRef = PHS_SPIRIT_BATTLEAXE; } break;
|
||||
case 1: { sResRef = PHS_SPIRIT_FLAIL; } break;
|
||||
case 2: { sResRef = PHS_SPIRIT_WARHAMMER; } break;
|
||||
default: { sResRef = PHS_SPIRIT_LONGSWORD; } break;
|
||||
}
|
||||
}
|
||||
else if(nLawChaos == ALIGNMENT_LAWFUL)
|
||||
{
|
||||
// If Lawful Neutral, we create a Longsword
|
||||
sResRef = PHS_SPIRIT_LONGSWORD;
|
||||
}
|
||||
else //if(nLawChaos == ALIGNMENT_CHAOTIC)
|
||||
{
|
||||
// If Chaotic Neutral, we create a Battleaxe
|
||||
sResRef = PHS_SPIRIT_BATTLEAXE;
|
||||
}
|
||||
}
|
||||
else if(nGoodEvil == ALIGNMENT_GOOD)
|
||||
{
|
||||
// They are "Good"
|
||||
// Check Law/Chaos
|
||||
if(nLawChaos == ALIGNMENT_NEUTRAL)
|
||||
{
|
||||
// If Neutral Good, create a Warhammer
|
||||
sResRef = PHS_SPIRIT_WARHAMMER;
|
||||
}
|
||||
else if(nLawChaos == ALIGNMENT_LAWFUL)
|
||||
{
|
||||
// If Lawful Good, we will create either a Longsword or a Warhammer
|
||||
// If more lawful then more good, we create a longsword more often.
|
||||
if(d2() == 1)
|
||||
{
|
||||
sResRef = PHS_SPIRIT_LONGSWORD;
|
||||
}
|
||||
else
|
||||
{
|
||||
sResRef = PHS_SPIRIT_WARHAMMER;
|
||||
}
|
||||
}
|
||||
else //if(nLawChaos == ALIGNMENT_CHAOTIC)
|
||||
{
|
||||
// If Chaotic Good, we create a Battleaxe or a Warhammer
|
||||
if(d2() == 1)
|
||||
{
|
||||
sResRef = PHS_SPIRIT_BATTLEAXE;
|
||||
}
|
||||
else
|
||||
{
|
||||
sResRef = PHS_SPIRIT_WARHAMMER;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(nGoodEvil == ALIGNMENT_EVIL)
|
||||
{
|
||||
// They are "Evil"
|
||||
// Check Law/Chaos
|
||||
if(nLawChaos == ALIGNMENT_NEUTRAL)
|
||||
{
|
||||
// If Neutral Evil, create a Light Flail
|
||||
sResRef = PHS_SPIRIT_FLAIL;
|
||||
}
|
||||
else if(nLawChaos == ALIGNMENT_LAWFUL)
|
||||
{
|
||||
// If Lawful Evil, we will create either a Longsword or a Light Flail
|
||||
if(d2() == 1)
|
||||
{
|
||||
sResRef = PHS_SPIRIT_LONGSWORD;
|
||||
}
|
||||
else
|
||||
{
|
||||
sResRef = PHS_SPIRIT_FLAIL;
|
||||
}
|
||||
}
|
||||
else //if(nLawChaos == ALIGNMENT_CHAOTIC)
|
||||
{
|
||||
// If Chaotic Evil, we create a Battleaxe or a Light Flail
|
||||
if(d2() == 1)
|
||||
{
|
||||
sResRef = PHS_SPIRIT_BATTLEAXE;
|
||||
}
|
||||
else
|
||||
{
|
||||
sResRef = PHS_SPIRIT_FLAIL;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Create oWeapon
|
||||
oWeapon = CreateItemOnObject(sResRef, oSpirit, 1);
|
||||
|
||||
return oWeapon;
|
||||
}
|
Reference in New Issue
Block a user