forked from Jaysyn/PRC8
Updated Vow of Poverty. Added Sanctify Ki Strike, Holy Strike, Fist of Heavens, Vow of Abstinence, Vow of Chastity & Gift of Faith. (@fenac). Turned off the Taunt & Parry skills. Re-disabled AC & save bonuses from Tumble & Spellcraft. Updated min() & max() to PRCmin() & PRCmax() to not conflict with similarly named NUI adjacent functions. Set Point Blank Shot to 30' per PnP. Added icon for Chosen of Evil. Started work on Hidden Talent. Created Psionics function cheatsheet. Updated release archive.
170 lines
6.9 KiB
Plaintext
170 lines
6.9 KiB
Plaintext
/*
|
|
----------------
|
|
Claws of the Beast
|
|
|
|
psi_pow_clwbeast
|
|
----------------
|
|
|
|
29/10/05 by Stratovarius
|
|
*/ /** @file
|
|
|
|
Claws of the Beast
|
|
|
|
Psychometabolism
|
|
Level: Psychic warrior 1
|
|
Manifesting Time: 1 swift action
|
|
Range: Personal
|
|
Target: You
|
|
Duration: 1 hour/level
|
|
Power Points: see text
|
|
Metapsionics: Extend
|
|
|
|
You call forth the aggressive nature of the beast inherent in yourself,
|
|
psionically transforming your hands into deadly claws. You gain two natural
|
|
attacks with your claws, each dealing 1d4 points of damage (1d6 if you are
|
|
Large or larger, or 1d3 if you are Small or smaller) plus your Strength
|
|
bonus.
|
|
|
|
Your claws are natural weapons, so you are considered armed when attacking
|
|
with them, and they can be affected by powers, spells, and effects that
|
|
enhance or improve natural.
|
|
|
|
Your claws work just like the natural weapons of many monsters. You can make
|
|
an attack with one claw or a full attack with two claws at your normal
|
|
attack bonus, replacing your normal attack routine. You take no penalties
|
|
for two-weapon fighting, and neither attack is a secondary attack. If your
|
|
base attack bonus is +6 or higher, you do not gain any additional attacks -
|
|
you simply have two claw attacks at your normal attack bonus.
|
|
|
|
You can manifest this power with an instant thought, quickly enough to gain
|
|
the benefit of the power on your turn before you attack. Manifesting this
|
|
power is a swift action, like manifesting a quickened power, and it counts
|
|
toward the normal limit of one quickened power per round.
|
|
|
|
You can still hold and manipulate items with your claws or cast spells just
|
|
as well as you could with your hands.
|
|
|
|
Augment: If you spend additional power points, you can create larger,
|
|
sharper, and more deadly claws, as shown on the table below.
|
|
|
|
Power Points Claw Damage
|
|
Small Medium Large
|
|
1 1d3 1d4 1d6
|
|
3 1d4 1d6 1d8
|
|
5 1d6 1d8 2d6
|
|
7 1d8 2d6 3d6
|
|
11 2d6 3d6 4d6
|
|
15 3d6 4d6 5d6
|
|
19 4d6 5d6 6d6
|
|
|
|
This augmentation is implemented as the following two augmentation options:
|
|
1. For every 2 power points spent, the size of the claws increases by one
|
|
step on the table above. This increase may be used up to 3 times.
|
|
2. For every 4 power points spent, the size of the claws increases by one
|
|
step on the table above. This increase may be used up to 3 times.
|
|
*/
|
|
|
|
#include "psi_inc_psifunc"
|
|
#include "psi_inc_pwresist"
|
|
#include "psi_spellhook"
|
|
#include "prc_inc_natweap"
|
|
|
|
|
|
void main()
|
|
{
|
|
/*
|
|
Spellcast Hook Code
|
|
Added 2004-11-02 by Stratovarius
|
|
If you want to make changes to all powers,
|
|
check psi_spellhook to find out more
|
|
|
|
*/
|
|
|
|
if (!PsiPrePowerCastCode())
|
|
{
|
|
// If code within the PrePowerCastHook (i.e. UMD) reports FALSE, do not run this spell
|
|
return;
|
|
}
|
|
|
|
// End of Spell Cast Hook
|
|
|
|
object oManifester = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
struct manifestation manif =
|
|
EvaluateManifestation(oManifester, oTarget,
|
|
PowerAugmentationProfile(PRC_NO_GENERIC_AUGMENTS,
|
|
2, 3,
|
|
4, 3
|
|
),
|
|
METAPSIONIC_EXTEND
|
|
);
|
|
|
|
if(manif.bCanManifest)
|
|
{
|
|
// {0, 1, 2}, depending on the size of the creature
|
|
int nEffectiveSize = PRCMax(PRCMin(PRCGetCreatureSize(oTarget), CREATURE_SIZE_LARGE), CREATURE_SIZE_SMALL) - CREATURE_SIZE_SMALL;
|
|
int nClawSize = nEffectiveSize + manif.nTimesAugOptUsed_1 + manif.nTimesAugOptUsed_2;
|
|
int nBaseDamage;
|
|
effect eVis = EffectVisualEffect(VFX_IMP_PULSE_FIRE);
|
|
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
|
object oLClaw, oRClaw;
|
|
float fDuration = HoursToSeconds(manif.nManifesterLevel);
|
|
if(manif.bExtend) fDuration *= 2;
|
|
|
|
// 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;
|
|
|
|
/*default:{
|
|
string sErr = "psi_pow_clwbeast: ERROR: Unknown nClawSize value: " + IntToString(nClawSize);
|
|
if(DEBUG) DoDebug(sErr);
|
|
else WriteTimestampedLogEntry(sErr);
|
|
}*/
|
|
}
|
|
// Catch exceptions here
|
|
if (nClawSize < 0) nBaseDamage = IP_CONST_MONSTERDAMAGE_1d3;
|
|
else if (nClawSize > 7) nBaseDamage = IP_CONST_MONSTERDAMAGE_6d6;
|
|
|
|
// Create the creature weapon
|
|
oLClaw = GetPsionicCreatureWeapon(oTarget, "PRC_UNARMED_SP", INVENTORY_SLOT_CWEAPON_L, fDuration);
|
|
oRClaw = GetPsionicCreatureWeapon(oTarget, "PRC_UNARMED_SP", INVENTORY_SLOT_CWEAPON_R, fDuration);
|
|
|
|
// Add the base damage
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyMonsterDamage(nBaseDamage), oLClaw, fDuration);
|
|
AddItemProperty(DURATION_TYPE_TEMPORARY, ItemPropertyMonsterDamage(nBaseDamage), oRClaw, fDuration);
|
|
|
|
// Do VFX
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
|
DelayCommand(1.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
|
DelayCommand(2.0, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
|
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, oTarget, fDuration, FALSE);
|
|
|
|
string sResRef;
|
|
switch(nClawSize)
|
|
{
|
|
case 0: sResRef = "prc_claw_1d6l_"; break;
|
|
case 1: sResRef = "prc_claw_1d6m_"; break;
|
|
case 2: sResRef = "prc_claw_1d8m_"; break;
|
|
case 3: sResRef = "prc_claw_2d6m_"; break;
|
|
case 4: sResRef = "prc_claw_3d6m_"; break;
|
|
case 5: sResRef = "prc_claw_4d6m_"; break;
|
|
case 6: sResRef = "prc_claw_5d6m_"; break;
|
|
case 7: sResRef = "prc_claw_6d6m_"; break;
|
|
}
|
|
sResRef += GetAffixForSize(PRCGetCreatureSize(oTarget));
|
|
|
|
AddNaturalPrimaryWeapon(oTarget, sResRef, 2, TRUE);
|
|
DelayCommand(6.0f,
|
|
NaturalPrimaryWeaponTempCheck(oManifester, oTarget, manif.nSpellID, FloatToInt(fDuration) / 6, sResRef));
|
|
|
|
|
|
}// end if - Successfull manifestation
|
|
} |