Exalted update
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.
This commit is contained in:
110
Notes/PRC8 Psionics Cheatsheet.txt
Normal file
110
Notes/PRC8 Psionics Cheatsheet.txt
Normal file
@@ -0,0 +1,110 @@
|
||||
Here is a list of all the identified psionic functions along with a brief synopsis of their parameters and what they represent:
|
||||
From psi_inc_core.txt
|
||||
|
||||
- GetPowerLevel(object oManifester)
|
||||
- oManifester: The creature object manifesting power. This function retrieves the psionic power level of the creature.
|
||||
|
||||
|
||||
From psi_inc_psifunc.txt
|
||||
|
||||
- EvaluateManifestation(object oManifester, object oTarget, struct power_augment_profile pap, int nMetaPsiFlags)
|
||||
- oManifester: The creature that is attempting to manifest the power.
|
||||
- oTarget: The target of the power.
|
||||
- pap: A structure containing parameters outlining how the power may be augmented.
|
||||
- nMetaPsiFlags: Bit flags indicating which metapsionic powers might apply during this manifestation.
|
||||
|
||||
- UsePower(int nPower, int nClass, int bIsPsiLike = FALSE, int nLevelOverride = 0)
|
||||
- nPower: Identifier of the psionic power to use.
|
||||
- nClass: Class identifier from which the power is being used.
|
||||
- bIsPsiLike: Boolean flag specifying whether the power being used should be treated as a psi-like ability.
|
||||
- nLevelOverride: Optional parameter to override the default power level.
|
||||
|
||||
- DebugManifestation2Str(struct manifestation manif)
|
||||
- manif: Struct containing data about the current psionic manifestation<6F>used to generate a string for debugging purposes.
|
||||
|
||||
- SetLocalManifestation(object oObject, string sName, struct manifestation manif)
|
||||
- oObject, sName: Target object and the string name under which this data is stored.
|
||||
- manif: Data about the current psionic manifestation to store.
|
||||
|
||||
- GetLocalManifestation(object oObject, string sName)
|
||||
- oObject and sName: Retrieve stored manifestation data from the object using the given name.
|
||||
|
||||
- DebugIgnoreConstraints(object oManifester)
|
||||
- oManifester: Creature to ignore psionic constraints for debugging.
|
||||
|
||||
- EvaluateDiaDragChannel(object oManifester, object oTarget, struct power_augment_profile pap, int nPowerLevel)
|
||||
- Similar to EvaluateManifestation but tailored for specific channeling functionality in psionics.
|
||||
|
||||
|
||||
From psi_inc_metapsi.txt
|
||||
|
||||
- EvaluateMetapsionics(struct manifestation manif, int nMetaPsiFlags)
|
||||
- Describes how metapsionic modifications affect the current psionic power manifestation.
|
||||
|
||||
- PayMetapsionicsFocuses(struct manifestation manif)
|
||||
- Calculates costs in terms of psionic focuses for using metapsionic modifications.
|
||||
|
||||
- MetaPsionicsDamage(struct manifestation manif, int nDieSize, int nNumberOfDice, int nBonus = 0, int nBonusPerDie = 0, int bDoesHPDamage = FALSE, int bIsRayOrRangedTouch = FALSE)
|
||||
- Calculates how metapsionics affect the damage output of a psionic power.
|
||||
|
||||
- EvaluateWidenPower(struct manifestation manif, float fBase)
|
||||
- Determines the effect of the "Widen Power" metapsionic on the area of effect size.
|
||||
|
||||
- EvaluateChainPower(struct manifestation manif, object oPrimaryTarget, int bAutoDelete = TRUE)
|
||||
- Builds a list of secondary targets for chained psionic powers.
|
||||
|
||||
- GetSplitPsionicRayTarget(struct manifestation manif, object oPrimaryTarget)
|
||||
- Identifies an additional target for the "Split Psionic Ray" metapsionic.
|
||||
|
||||
|
||||
From psi_inc_augment.txt
|
||||
|
||||
- PowerAugmentationProfile(...)
|
||||
- Sets up a profile detailing how a psionic power can be augmented.
|
||||
|
||||
- GetUserAugmentationProfile(object oUser, int nIndex, int bQuickSelection = FALSE)
|
||||
- Retrieves a user-defined configuration of how they want their psionic power augmented.
|
||||
|
||||
- GetCurrentUserAugmentationProfile(object oUser)
|
||||
- Retrieves the current, active augmentation profile for a user.
|
||||
|
||||
- StoreUserAugmentationProfile(object oUser, int nIndex, struct user_augment_profile uap, int bQuickSelection = FALSE)
|
||||
- Stores or updates a psionic augmentation configuration.
|
||||
|
||||
- UserAugmentationProfileToString(struct user_augment_profile uap)
|
||||
- Converts an augmentation profile to a human-readable string.
|
||||
|
||||
- EvaluateAugmentation(struct manifestation manif, struct power_augment_profile pap)
|
||||
- Applies user-defined augmentations to a psionic power manifestation to adjust its effects.
|
||||
|
||||
- SetAugmentationOverride(object oCreature, struct user_augment_profile uap)
|
||||
- Allows overriding the current augmentation settings forcibly.
|
||||
|
||||
|
||||
From psi_inc_ppoints.txt
|
||||
|
||||
- GetCurrentPowerPoints(object oChar)
|
||||
- Retrieves the current power points of a character.
|
||||
|
||||
- GetMaximumPowerPoints(object oChar)
|
||||
- Calculates the maximum power points a character can have.
|
||||
|
||||
- GetPowerPointsAsString(object oChar)
|
||||
- Gets a string representation of both current and maximum power points.
|
||||
|
||||
- TellCharacterPowerPointStatus(object oChar)
|
||||
- Displays a character<65>s power points.
|
||||
|
||||
- ResetPowerPoints(object oChar)
|
||||
- Resets a character<65>s power points to maximum.
|
||||
|
||||
- GainPowerPoints(object oChar, int nGain, int bCanExceedMax = FALSE, int bInform = TRUE)
|
||||
- Increases a character<65>s power points, possibly beyond the maximum.
|
||||
|
||||
- LosePowerPoints(object oChar, int nLoss, int bInform = TRUE)
|
||||
- Deducts from a character<65>s power points without going below zero.
|
||||
|
||||
- LoseAllPowerPoints(object oChar, int bInform = TRUE)
|
||||
- Sets a character<65>s power points to zero, including notification.
|
||||
|
||||
These functions manage various aspects of psionic powers in the game, including their initialization, application, augmentation, power points management, and interactions with metapsionic abilities.
|
@@ -1,209 +0,0 @@
|
||||
int GetArcanePRCLevels(object oCaster, int nCastingClass = CLASS_TYPE_INVALID)
|
||||
{
|
||||
int nArcane;
|
||||
int nOozeMLevel = GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
|
||||
int nUM = GetLevelByClass(CLASS_TYPE_ULTIMATE_MAGUS, oCaster);
|
||||
|
||||
int nFirstClass = GetClassByPosition(1, oCaster);
|
||||
int nSecondClass = GetClassByPosition(2, oCaster);
|
||||
int nThirdClass = GetClassByPosition(3, oCaster);
|
||||
int nFourthClass = GetClassByPosition(4, oCaster);
|
||||
int nFifthClass = GetClassByPosition(5, oCaster);
|
||||
int nSixthClass = GetClassByPosition(6, oCaster);
|
||||
int nSeventhClass = GetClassByPosition(7, oCaster);
|
||||
int nEighthClass = GetClassByPosition(8, oCaster);
|
||||
|
||||
if (GetFirstArcaneClassPosition(oCaster)) nArcane += GetLevelByClass(CLASS_TYPE_SOULCASTER, oCaster);
|
||||
|
||||
nArcane += GetLevelByClass(CLASS_TYPE_ABJURANT_CHAMPION, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_ALIENIST, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_ANIMA_MAGE, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_ARCANE_HIEROPHANT, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_ARCHMAGE, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_ARCTRICK, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_CEREBREMANCER, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_DIABOLIST, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_DRAGONHEART_MAGE, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_ELDRITCH_KNIGHT, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_ELDRITCH_THEURGE, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_ELEMENTAL_SAVANT,oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_FMM, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_FROST_MAGE, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_HARPERMAGE, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_JADE_PHOENIX_MAGE, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_MAGEKILLER, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_MASTER_ALCHEMIST, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_MASTER_HARPER, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_NOCTUMANCER, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_SPELLDANCER, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_TRUENECRO, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_RED_WIZARD, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_SHADOW_ADEPT, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_SUBLIME_CHORD, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_UNSEEN_SEER, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_VIRTUOSO, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_WAR_WIZARD_OF_CORMYR, oCaster)
|
||||
|
||||
+ (GetLevelByClass(CLASS_TYPE_BLADESINGER, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_PALEMASTER, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_HAVOC_MAGE, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_SPELLSWORD, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_THRALL_OF_GRAZZT_A, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_RAGE_MAGE, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_WAYFARER_GUIDE, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
|
||||
|
||||
int nClass = GetLevelByClass(CLASS_TYPE_WILD_MAGE, oCaster);
|
||||
if (nClass)
|
||||
nArcane += nClass - 3 + d6();
|
||||
|
||||
//The following changes are to prevent a mage/invoker from gaining bonus caster levels in both base classes.
|
||||
|
||||
if(GetLocalInt(oCaster, "INV_Caster") == 1 ||
|
||||
(!GetLevelByClass(CLASS_TYPE_WARLOCK, oCaster) && !GetLevelByClass(CLASS_TYPE_DRAGONFIRE_ADEPT, oCaster)))
|
||||
nArcane += (GetLevelByClass(CLASS_TYPE_ACOLYTE, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_DISCIPLE_OF_ASMODEUS, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_TALON_OF_TIAMAT, oCaster) + 1) / 2
|
||||
+ GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_MAESTER, oCaster);
|
||||
|
||||
|
||||
/* oozemaster levels count towards arcane caster level if:
|
||||
*
|
||||
* first class slot is arcane OR
|
||||
* first class slot is NOT divine AND second class slot is arcane OR
|
||||
* first AND second class slot is NOT divine AND 3rd class slot is arcane
|
||||
*/
|
||||
if (nOozeMLevel) //:: [PRC .35] This needs marker feats.
|
||||
{
|
||||
if (GetIsArcaneClass(nFirstClass, oCaster)
|
||||
|| (!GetIsDivineClass(nFirstClass, oCaster)
|
||||
&& GetIsArcaneClass(nSecondClass, oCaster))
|
||||
|| (!GetIsDivineClass(nFirstClass, oCaster)
|
||||
&& !GetIsDivineClass(nSecondClass, oCaster)
|
||||
&& GetIsArcaneClass(nThirdClass, oCaster)))
|
||||
nArcane += nOozeMLevel / 2;
|
||||
}
|
||||
|
||||
if (nUM)
|
||||
{
|
||||
int nBoost = nUM - 1; //Prep caster always loses a level on first level of the class
|
||||
if (nUM >= 4) nBoost = nUM - 2;
|
||||
if (nUM >= 7) nBoost = nUM - 3;
|
||||
nArcane += nBoost;
|
||||
|
||||
if (nCastingClass == CLASS_TYPE_SORCERER)
|
||||
{
|
||||
int nBoost = 1; //Sorcerer gets the lost levels back
|
||||
if (nUM >= 4) nBoost = 2;
|
||||
if (nUM >= 7) nBoost = 3;
|
||||
nArcane += nBoost;
|
||||
}
|
||||
}
|
||||
if(GetLevelByClass(CLASS_TYPE_SORCERER, oCaster))
|
||||
{
|
||||
int nRace = GetRacialType(oCaster);
|
||||
|
||||
//includes RHD HD as sorc
|
||||
//if they have sorcerer levels, then it counts as a prestige class
|
||||
//otherwise its used instead of sorc levels
|
||||
if(nRace == RACIAL_TYPE_ARANEA)
|
||||
nArcane += GetLevelByClass(CLASS_TYPE_SHAPECHANGER);
|
||||
if(nRace == RACIAL_TYPE_RAKSHASA)
|
||||
nArcane += GetLevelByClass(CLASS_TYPE_OUTSIDER);
|
||||
if(nRace == RACIAL_TYPE_DRIDER)
|
||||
nArcane += GetLevelByClass(CLASS_TYPE_ABERRATION);
|
||||
if(nRace == RACIAL_TYPE_ARKAMOI)
|
||||
nArcane += GetLevelByClass(CLASS_TYPE_MONSTROUS);
|
||||
if(nRace == RACIAL_TYPE_REDSPAWN_ARCANISS)
|
||||
nArcane += GetLevelByClass(CLASS_TYPE_MONSTROUS)*3/4;
|
||||
if(nRace == RACIAL_TYPE_MARRUTACT)
|
||||
nArcane += (GetLevelByClass(CLASS_TYPE_MONSTROUS)*6/7)-1;
|
||||
}
|
||||
|
||||
if(GetLevelByClass(CLASS_TYPE_BARD, oCaster))
|
||||
{
|
||||
int nRace = GetRacialType(oCaster);
|
||||
|
||||
//includes RHD HD as bard
|
||||
//if they have bard levels, then it counts as a prestige class
|
||||
//otherwise its used instead of bard levels
|
||||
if(nRace == RACIAL_TYPE_GLOURA)
|
||||
nArcane += GetLevelByClass(CLASS_TYPE_FEY);
|
||||
}
|
||||
|
||||
return nArcane;
|
||||
}
|
||||
|
||||
int GetDivinePRCLevels(object oCaster)
|
||||
{
|
||||
int nDivine;
|
||||
int nOozeMLevel = GetLevelByClass(CLASS_TYPE_OOZEMASTER, oCaster);
|
||||
|
||||
int nFirstClass = GetClassByPosition(1, oCaster);
|
||||
int nSecondClass = GetClassByPosition(2, oCaster);
|
||||
int nThirdClass = GetClassByPosition(3, oCaster);
|
||||
int nFourthClass = GetClassByPosition(4, oCaster);
|
||||
int nFifthClass = GetClassByPosition(5, oCaster);
|
||||
int nSixthClass = GetClassByPosition(6, oCaster);
|
||||
int nSeventhClass = GetClassByPosition(7, oCaster);
|
||||
int nEighthClass = GetClassByPosition(8, oCaster);
|
||||
|
||||
// This section accounts for full progression classes
|
||||
nDivine += GetLevelByClass(CLASS_TYPE_ARCANE_HIEROPHANT, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_BLIGHTLORD, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_COMBAT_MEDIC, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_ELDRITCH_DISCIPLE, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_FORESTMASTER, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_FISTRAZIEL, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_HEARTWARDER, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_HIEROPHANT, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_HOSPITALER, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_MASTER_OF_SHROUDS, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_MORNINGLORD, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_MYSTIC_THEURGE, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_PSYCHIC_THEURGE, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_RUBY_VINDICATOR, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_RUNECASTER, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_SACREDPURIFIER, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_SAPPHIRE_HIERARCH, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_SHADOWBANE_STALKER,oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_STORMLORD, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_SWIFT_WING, oCaster)
|
||||
+ GetLevelByClass(CLASS_TYPE_TENEBROUS_APOSTATE, oCaster)
|
||||
|
||||
+ (GetLevelByClass(CLASS_TYPE_BFZ, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_BRIMSTONE_SPEAKER, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_HATHRAN, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_MIGHTY_CONTENDER_KORD, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_OLLAM, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_ORCUS, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_SHINING_BLADE, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_TEMPUS, oCaster) + 1) / 2
|
||||
+ (GetLevelByClass(CLASS_TYPE_WARPRIEST, oCaster) + 1) / 2
|
||||
|
||||
+ (GetLevelByClass(CLASS_TYPE_JUDICATOR, oCaster) + 1) / 3;
|
||||
|
||||
if (!GetHasFeat(FEAT_SF_CODE, oCaster))
|
||||
{
|
||||
nDivine += GetLevelByClass(CLASS_TYPE_SACREDFIST, oCaster);
|
||||
}
|
||||
|
||||
if (nOozeMLevel) //:: [PRC .35] This needs marker feats.
|
||||
{
|
||||
if (GetIsDivineClass(nFirstClass, oCaster)
|
||||
|| (!GetIsArcaneClass(nFirstClass, oCaster)
|
||||
&& GetIsDivineClass(nSecondClass, oCaster))
|
||||
|| (!GetIsArcaneClass(nFirstClass, oCaster)
|
||||
&& !GetIsArcaneClass(nSecondClass, oCaster)
|
||||
&& GetIsDivineClass(nThirdClass, oCaster)))
|
||||
nDivine += nOozeMLevel / 2;
|
||||
}
|
||||
|
||||
return nDivine;
|
||||
}
|
Reference in New Issue
Block a user