PRC8/nwn/nwnprc/trunk/include/true_inc_metautr.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

217 lines
7.4 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Truenaming include: Metautterances
//:: true_inc_metautr
//::///////////////////////////////////////////////
/** @file
Defines functions for handling metautterances
@author Stratovarius
@date Created - 2006.7.17
@thanks to Ornedan for his work on Psionics upon which this is based.
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//////////////////////////////////////////////////
/* Constants */
//////////////////////////////////////////////////
/// No metautterances
const int METAUTTERANCE_NONE = 0x0;
/// Quicken utterance
const int METAUTTERANCE_QUICKEN = 0x2;
/// Empower utterance
const int METAUTTERANCE_EMPOWER = 0x4;
/// Extend utterance
const int METAUTTERANCE_EXTEND = 0x8;
/// Internal constant. Value is equal to the lowest metautterance constant. Used when looping over metautterance flag variables
const int METAUTTERANCE_MIN = 0x2;
/// Internal constant. Value is equal to the highest metautterance constant. Used when looping over metautterance flag variables
const int METAUTTERANCE_MAX = 0x8;
/// Empower Utterance variable name
const string METAUTTERANCE_EMPOWER_VAR = "PRC_TrueMeta_Empower";
/// Extend Utterance variable name
const string METAUTTERANCE_EXTEND_VAR = "PRC_TrueMeta_Extend";
/// Quicken Utterance variable name
const string METAUTTERANCE_QUICKEN_VAR = "PRC_TrueMeta_Quicken";
/// The name of a marker variable that tells that the Utterance being truespoken had Quicken Utterance used on it
const string PRC_UTTERANCE_IS_QUICKENED = "PRC_UtteranceIsQuickened";
//////////////////////////////////////////////////
/* Structures */
//////////////////////////////////////////////////
/**
* A structure that contains common data used during utterance.
*/
struct utterance{
/* Generic stuff */
/// The creature Truespeaking the Utterance
object oTrueSpeaker;
/// Whether the utterance is successful or not
int bCanUtter;
/// The creature's truespeaker level in regards to this utterance
int nTruespeakerLevel;
/// The utterance's spell ID
int nSpellId;
/// The DC for speaking the utterance
int nUtterDC;
// Used to mark friendly utterances
int bIgnoreSR;
/* Metautterances */
/// Whether Empower utterance was used with this utterance
int bEmpower;
/// Whether Extend utterance was used with this utterance
int bExtend;
/// Whether Quicken utterance was used with this utterance
int bQuicken;
/* Speak Unto the Masses */
// Check if the target is a friend of not
int bFriend;
// Saving Throw DC
int nSaveDC;
// Saving Throw
int nSaveThrow;
// Saving Throw Type
int nSaveType;
// Spell Pen
int nPen;
// Duration Effects
effect eLink;
// Impact Effects
effect eLink2;
// Any Item Property
itemproperty ipIProp1;
// Any Item Property
itemproperty ipIProp2;
// Any Item Property
itemproperty ipIProp3;
// Duration
float fDur;
};
//////////////////////////////////////////////////
/* Function prototypes */
//////////////////////////////////////////////////
/**
* Determines the metautterances used in this utterance of a utterance
* and the cost added by their use.
*
* @param utter The utterance data related to this particular utterance
* @param nMetaUtterFlags An integer containing a set of bitflags that determine
* which metautterance utterances may be used with the Utterance being truespoken
*
* @return The utterance data, modified to account for the metautterances
*/
struct utterance EvaluateMetautterances(struct utterance utter, int nMetaUtterFlags);
/**
* Calculates a utterance's damage based on the given dice and metautterances.
*
* @param nDieSize Size of the dice to use
* @param nNumberOfDice Amount of dice to roll
* @param manif The utterance data related to this particular utterance
* @param nBonus A bonus amount of damage to add into the total once
* @param nBonusPerDie A bonus amount of damage to add into the total for each die rolled
* @param bDoesHPDamage Whether the Utterance deals hit point damage, or some other form of point damage
* @param bIsRayOrRangedTouch Whether the utterance's use involves a ranged touch attack roll or not
* @return The amount of damage the Utterance should deal
*/
int MetautterancesDamage(struct utterance utter, int nDieSize, int nNumberOfDice, int nBonus = 0,
int nBonusPerDie = 0, int bDoesHPDamage = FALSE, int bIsRayOrRangedTouch = FALSE);
//////////////////////////////////////////////////
/* Includes */
//////////////////////////////////////////////////
#include "inc_utility"
//#include "true_inc_utter"
//////////////////////////////////////////////////
/* Internal functions */
//////////////////////////////////////////////////
//////////////////////////////////////////////////
/* Function definitions */
//////////////////////////////////////////////////
struct utterance EvaluateMetautterances(struct utterance utter, int nMetaUtterFlags)
{
// Total PP cost of metautterances used
int nUtterDC = 0;
// A debug variable to make a Utterance ignore normal use constraints
int bIgnoreConstr = (DEBUG) ? GetLocalInt(utter.oTrueSpeaker, TRUE_DEBUG_IGNORE_CONSTRAINTS) : FALSE;
/* Calculate the added DC from metautterances and set the use markers for the utterances used */
// Quicken Utterance - special handling
if(GetLocalInt(utter.oTrueSpeaker, PRC_UTTERANCE_IS_QUICKENED))
{
// Add the DC Boost and mark the utterance as quickened here
nUtterDC += 20;
utter.bQuicken = TRUE;
// Delete the marker var
DeleteLocalInt(utter.oTrueSpeaker, PRC_UTTERANCE_IS_QUICKENED);
}
if((nMetaUtterFlags & METAUTTERANCE_EMPOWER) && GetLocalInt(utter.oTrueSpeaker, METAUTTERANCE_EMPOWER_VAR))
{
// Add the DC Boost and mark the utterance as empowered here
nUtterDC += 10;
utter.bEmpower = TRUE;
}
if((nMetaUtterFlags & METAUTTERANCE_EXTEND) && GetLocalInt(utter.oTrueSpeaker, METAUTTERANCE_EXTEND_VAR))
{
// Add the DC Boost and mark the utterance as extended here
nUtterDC += 5;
utter.bExtend = TRUE;
}
// Add in the DC boost of the metautterances
utter.nUtterDC += nUtterDC;
return utter;
}
int MetautterancesDamage(struct utterance utter, int nDieSize, int nNumberOfDice, int nBonus = 0,
int nBonusPerDie = 0, int bDoesHPDamage = FALSE, int bIsRayOrRangedTouch = FALSE)
{
int nBaseDamage = 0,
nBonusDamage = nBonus + (nNumberOfDice * nBonusPerDie);
// Calculate the base damage
int i;
for (i = 0; i < nNumberOfDice; i++)
nBaseDamage += Random(nDieSize) + 1;
// Apply general modifying effects
if(bDoesHPDamage)
{
if(bIsRayOrRangedTouch)
{
// Anything that affects Ray Utterances goes here
}
}
// Apply metautterances
// Empower
if(utter.bEmpower)
nBaseDamage += nBaseDamage / 2;
return nBaseDamage + nBonusDamage;
}
// Test main
//void main(){}