Further file organization
Further file organization
This commit is contained in:
93
nwn/nwnprc/trunk/racescripts/race_mephbreath.nss
Normal file
93
nwn/nwnprc/trunk/racescripts/race_mephbreath.nss
Normal file
@@ -0,0 +1,93 @@
|
||||
|
||||
//::///////////////////////////////////////////////
|
||||
//:: [Mephling Breath Weapon]
|
||||
//:: [prc_mephbreath.nss]
|
||||
//:: [Jaysyn / PRC 20220428]
|
||||
//::///////////////////////////////////////////////
|
||||
/**@file Each mephling has a breath weapon, the effect of which varies by the
|
||||
mephling's heritage. An air mephling's breath weapon is a cone of dust and grit
|
||||
(piercing damage), an earth mephling's breath weapon is a cone of rock shards
|
||||
and pebbles (bludgeoning damage), a fire mephling's breath weapon is a cone of
|
||||
flame (fire damage), and a water mephling's breath weapon is a cone of caustic
|
||||
liquid (acid damage). Regardless of the effect, a mephling's breath weapon fills
|
||||
a 15-foot cone, deals 1d8 points of damage to each target, and allows a Reflex
|
||||
save (10 + 1/2 mephling's Hit Dice + mephling's Con modifier) for half damage.
|
||||
A 1st level mephling can use his breath weapon once per day; a higher-level
|
||||
mephling gains one additional use per day for every four levels he has attained.
|
||||
If a mephling can use his breath weapon more than once per day, 1d4 rounds
|
||||
must pass between consecutive uses of the breath weapon.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#include "prc_inc_spells"
|
||||
#include "prc_inc_breath"
|
||||
#include "prc_inc_combat"
|
||||
|
||||
|
||||
//:: Returns range in feet for breath struct. Conversion to meters is
|
||||
//:: handled internally in the include
|
||||
float GetRangeFromSize(int nSize)
|
||||
{
|
||||
float fRange = 15.0;
|
||||
switch(nSize)
|
||||
{
|
||||
case CREATURE_SIZE_FINE:
|
||||
case CREATURE_SIZE_DIMINUTIVE:
|
||||
case CREATURE_SIZE_TINY: fRange = 10.0; break;
|
||||
case CREATURE_SIZE_SMALL: fRange = 15.0; break;
|
||||
case CREATURE_SIZE_MEDIUM: fRange = 20.0; break;
|
||||
case CREATURE_SIZE_LARGE: fRange = 30.0; break;
|
||||
case CREATURE_SIZE_HUGE: fRange = 40.0; break;
|
||||
case CREATURE_SIZE_GARGANTUAN: fRange = 50.0; break;
|
||||
case CREATURE_SIZE_COLOSSAL: fRange = 60.0; break;
|
||||
}
|
||||
return fRange;
|
||||
}
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
//:: Declare major variables.
|
||||
object oPC = OBJECT_SELF;
|
||||
|
||||
int nHD = GetHitDice(oPC);
|
||||
int nSaveDCBonus = (nHD/2);
|
||||
int nVis;
|
||||
|
||||
location lTarget = PRCGetSpellTargetLocation();
|
||||
|
||||
struct breath MephBreath;
|
||||
|
||||
//:: Range calculation
|
||||
float fRange = GetRangeFromSize(PRCGetCreatureSize(oPC));
|
||||
|
||||
//:: Flat 1d8 damage breath weapon
|
||||
int nDice = 1;
|
||||
|
||||
//:: Sanity check, mephlings only.
|
||||
int nMephType = GetHasFeat(FEAT_AIR_MEPHLING, oPC) ? DAMAGE_TYPE_PIERCING :
|
||||
GetHasFeat(FEAT_EARTH_MEPHLING, oPC) ? DAMAGE_TYPE_BLUDGEONING :
|
||||
GetHasFeat(FEAT_FIRE_MEPHLING, oPC) ? DAMAGE_TYPE_FIRE :
|
||||
GetHasFeat(FEAT_WATER_MEPHLING, oPC) ? DAMAGE_TYPE_ACID :
|
||||
-1;
|
||||
|
||||
//:: Assemble breath weapon struct.
|
||||
MephBreath = CreateBreath(oPC, 0, fRange, nMephType, 10, nDice, ABILITY_CONSTITUTION, nSaveDCBonus);
|
||||
|
||||
//:: Set breath weapon VFX.
|
||||
switch(nMephType)
|
||||
{
|
||||
case DAMAGE_TYPE_FIRE: nVis = VFX_FNF_DRAGBREATHGROUND; break;
|
||||
case DAMAGE_TYPE_ACID: nVis = VFX_FNF_DRAGBREATHACID; break;
|
||||
case DAMAGE_TYPE_PIERCING: nVis = VFX_FNF_DRAGBREATHSONIC; break;
|
||||
case DAMAGE_TYPE_BLUDGEONING: nVis = VFX_FNF_DRAGBREATHODD; break;
|
||||
default: nVis = VFX_FNF_DRAGBREATHODD; break;
|
||||
}
|
||||
|
||||
//:: Actual breath effect
|
||||
ApplyBreath(MephBreath, lTarget);
|
||||
|
||||
//:: Breath weapon VFX
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(nVis), lTarget);
|
||||
|
||||
}
|
Reference in New Issue
Block a user