Further file organization
Further file organization
This commit is contained in:
170
nwn/nwnprc/trunk/psionics/psi_pow_clwbeast.nss
Normal file
170
nwn/nwnprc/trunk/psionics/psi_pow_clwbeast.nss
Normal file
@@ -0,0 +1,170 @@
|
||||
/*
|
||||
----------------
|
||||
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 = max(min(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
|
||||
}
|
Reference in New Issue
Block a user