Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
93 lines
3.4 KiB
Plaintext
93 lines
3.4 KiB
Plaintext
|
|
//::///////////////////////////////////////////////
|
|
//:: [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);
|
|
|
|
} |