Initial upload.
Adding base PRC 4.19a files to repository.
This commit is contained in:
176
trunk/spells/sp_claws_savage.nss
Normal file
176
trunk/spells/sp_claws_savage.nss
Normal file
@@ -0,0 +1,176 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Name Claws of the Savage
|
||||
//:: FileName sp_claws_savage.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/**@file Claws of the Savage
|
||||
Transmutation [Evil]
|
||||
Level: Bestial 4, Blk 4, Clr 4, Drd 4
|
||||
Components: V, S
|
||||
Casting Time: 1 action
|
||||
Range: Touch
|
||||
Target: One creature
|
||||
Duration: 10 minutes/level
|
||||
|
||||
The caster grants one creature two long claws that
|
||||
replace its hands, tentacle tips, or whatever
|
||||
else is appropriate. The claws deal damage based
|
||||
on the creature's size.
|
||||
|
||||
Creature Size Claw Damage
|
||||
|
||||
Fine 1
|
||||
|
||||
Diminutive ld2
|
||||
|
||||
Tiny ld3
|
||||
|
||||
Small ld4
|
||||
|
||||
Medium-size ld6
|
||||
|
||||
Large ld8
|
||||
|
||||
Huge 2d6
|
||||
|
||||
Gargantuan 2d8
|
||||
|
||||
Colossal 4d6
|
||||
|
||||
The creature can make attacks with both claws as if
|
||||
it were proficient with them. Just as with a
|
||||
creature that has natural weapons, the subject
|
||||
takes no penalty for making two claw attacks. The
|
||||
subject is treated as armed. Furthermore, these
|
||||
claws gain a +2 enhancement bonus on attack and
|
||||
damage rolls.
|
||||
|
||||
If the creature already has claws, those claws gain
|
||||
a +2 enhancement bonus on attack and damage rolls,
|
||||
and the claws' damage increases as if the creature
|
||||
were two size categories larger.
|
||||
|
||||
|
||||
Author: Tenjac
|
||||
Created:
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
object GetClawWeapon (object oCreature, string sResRef, int nInventorySlot, float fDuration);
|
||||
|
||||
#include "prc_inc_spells"
|
||||
#include "prc_inc_unarmed"
|
||||
|
||||
void main()
|
||||
{
|
||||
//Spellhook
|
||||
if (!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
||||
|
||||
//define vars
|
||||
object oPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
object oLClaw, oRClaw;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
int nClawSize = PRCGetCreatureSize(oTarget);
|
||||
int nBaseDamage;
|
||||
float fDuration = 600.0f * nCasterLvl;
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
int nBonus = 2;
|
||||
|
||||
//eval metamagic
|
||||
if (nMetaMagic & METAMAGIC_EXTEND)
|
||||
{
|
||||
fDuration = (fDuration * 2);
|
||||
}
|
||||
|
||||
if (nMetaMagic & METAMAGIC_EMPOWER)
|
||||
{
|
||||
nBonus = 3;
|
||||
}
|
||||
|
||||
// Determine base damage
|
||||
switch(nClawSize)
|
||||
{
|
||||
case 0: nBaseDamage = IP_CONST_MONSTERDAMAGE_1d3; break;
|
||||
case 1: nBaseDamage = IP_CONST_MONSTERDAMAGE_1d4; break;
|
||||
case 2: nBaseDamage = IP_CONST_MONSTERDAMAGE_1d6; break;
|
||||
case 3: nBaseDamage = IP_CONST_MONSTERDAMAGE_1d8; break;
|
||||
case 4: nBaseDamage = IP_CONST_MONSTERDAMAGE_2d6; break;
|
||||
case 5: nBaseDamage = IP_CONST_MONSTERDAMAGE_3d6; break;
|
||||
case 6: nBaseDamage = IP_CONST_MONSTERDAMAGE_4d6; break;
|
||||
case 7: nBaseDamage = IP_CONST_MONSTERDAMAGE_6d6; break;
|
||||
}
|
||||
|
||||
//Check for existing claws, if so, nBaseDamage +=2
|
||||
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTarget)))
|
||||
{
|
||||
nBaseDamage += nBonus;
|
||||
}
|
||||
|
||||
// Get the creature weapon
|
||||
oLClaw = GetClawWeapon(oPC, "PRC_UNARMED_SP", INVENTORY_SLOT_CWEAPON_L, fDuration);
|
||||
oRClaw = GetClawWeapon(oPC, "PRC_UNARMED_SP", INVENTORY_SLOT_CWEAPON_R, fDuration);
|
||||
|
||||
// Catch exceptions here
|
||||
if (nClawSize < 0) nBaseDamage = IP_CONST_MONSTERDAMAGE_1d3;
|
||||
else if (nClawSize > 7) nBaseDamage = IP_CONST_MONSTERDAMAGE_6d6;
|
||||
|
||||
// Add the base damage
|
||||
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyMonsterDamage(nBaseDamage), oLClaw, fDuration);
|
||||
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyMonsterDamage(nBaseDamage), oRClaw, fDuration);
|
||||
|
||||
//Add Enhancement Bonus
|
||||
IPSafeAddItemProperty(oLClaw, ItemPropertyEnhancementBonus(nBonus), fDuration, X2_IP_ADDPROP_POLICY_IGNORE_EXISTING, FALSE, FALSE);
|
||||
IPSafeAddItemProperty(oRClaw, ItemPropertyEnhancementBonus(nBonus), fDuration, X2_IP_ADDPROP_POLICY_IGNORE_EXISTING, FALSE, FALSE);
|
||||
|
||||
//SPEvilShift(oPC);
|
||||
PRCSetSchool();
|
||||
}
|
||||
|
||||
object GetClawWeapon (object oCreature, string sResRef, int nInventorySlot, float fDuration)
|
||||
{
|
||||
int bCreatedWeapon = FALSE;
|
||||
object oCWeapon = GetItemInSlot(nInventorySlot, oCreature);
|
||||
|
||||
RemoveUnarmedAttackEffects(oCreature);
|
||||
// Make sure they can actually equip them
|
||||
UnarmedFeats(oCreature);
|
||||
|
||||
// Determine if a creature weapon of the proper type already exists in the slot
|
||||
if(!GetIsObjectValid(oCWeapon) ||
|
||||
GetStringUpperCase(GetTag(oCWeapon)) != GetStringUpperCase(sResRef)) // Hack: The resref's and tags of the PRC creature weapons are the same
|
||||
{
|
||||
if (GetHasItem(oCreature, sResRef))
|
||||
{
|
||||
oCWeapon = GetItemPossessedBy(oCreature, sResRef);
|
||||
SetIdentified(oCWeapon, TRUE);
|
||||
ForceEquip(oCreature, oCWeapon, nInventorySlot);
|
||||
}
|
||||
else
|
||||
{
|
||||
oCWeapon = CreateItemOnObject(sResRef, oCreature);
|
||||
SetIdentified(oCWeapon, TRUE);
|
||||
ForceEquip(oCreature, oCWeapon, nInventorySlot);
|
||||
bCreatedWeapon = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
// Weapon finesse or intuitive attack?
|
||||
SetLocalInt(oCreature, "UsingCreature", TRUE);
|
||||
ExecuteScript("prc_intuiatk", oCreature);
|
||||
DelayCommand(1.0f, DeleteLocalInt(oCreature, "UsingCreature"));
|
||||
|
||||
// Add OnHitCast: Unique if necessary
|
||||
if(GetHasFeat(FEAT_REND, oCreature))
|
||||
IPSafeAddItemProperty(oCWeapon, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
||||
|
||||
// This adds creature weapon finesse
|
||||
ApplyUnarmedAttackEffects(oCreature);
|
||||
|
||||
// Destroy the weapon if it was created by this function
|
||||
if(bCreatedWeapon)
|
||||
DestroyObject(oCWeapon, (fDuration + 6.0));
|
||||
|
||||
return oCWeapon;
|
||||
}
|
Reference in New Issue
Block a user