Add Shadow Servant and unarmed system updates

Fixed a bunch of TLK typos.
Updated Master of Shadow's Shadow Servant.
Added Maul to the Metal Domain feat choice.
Drider is a large creature.
Added missing Eagle Claw base weapon.
Tentatively fixed NUI spell selector hang issue.
Fixed Monk / Shou / IoDM die increasing bug.
Added StepDie() function to progressively increase Monster damage constants.
Clamped Skill increases to 128 in json_AdjustCreatureSkillByID
Updated PRC8 Tester module to have new weapon types.
Added all spell focus feats to Wizard's bonus feat list.
Updated PRC8 manual.
Added notes.
This commit is contained in:
Jaysyn904
2025-11-12 19:16:17 -05:00
parent a36c854fc0
commit 8e82907d07
26 changed files with 2585 additions and 1268 deletions

View File

@@ -0,0 +1,19 @@
This is a version of prc_unarmed_dmg.2da that has been modified to show the damage amounts along with the constant
2DA V2.0
Label size1 size2 size3 size4 size5 size6 size7 size8 size9
0 **** **** **** **** **** **** **** **** **** ****
1 normal1 "1 / 1d2" "1 / 1d2" "1 / 1d2" "1 / 1d2" "2 / 1d3" "3 /1d4" "4 / 1d8" "18 / 1d8" "9 / 2d6"
2 normal2 "1 / 1d2" "1 / 1d2" "1 / 1d2" "2 / 1d3" "3 /1d4" "8 / 1d6" "18 / 1d8" "9 / 2d6" "10 / 3d6"
3 monk1 "1 / 1d2" "1 / 1d2" "2 / 1d3" "3 /1d4" "8 / 1d6" "18 / 1d8" "9 / 2d6" "10 / 3d6" "11 / 4d6"
4 monk2 "1 / 1d2" "2 / 1d3" "3 /1d4" "8 / 1d6" "18 / 1d8" "9 / 2d6" "10 / 3d6" "11 / 4d6" "13 / 2d6"
5 monk3 "2 / 1d3" "3 /1d4" "8 / 1d6" "18 / 1d8" "28 / 1d10" "19 /2d8" "20 / 3d8" "21 / 4d8" "23 / 6d8"
6 monk4 "3 /1d4" "8 / 1d6" "18 / 1d8" "28 / 1d10" "9 / 2d6" "10 / 3d6" "11 / 4d6" "13 / 2d6" "15 / 8d6"
7 monk5 "8 / 1d6" "18 / 1d8" "28 / 1d10" "9 / 2d6" "19 /2d8" "20 / 3d8" "21 / 4d8" "23 / 6d8" "25 / 8d8"
8 monk6 "18 / 1d8" "28 / 1d10" "9 / 2d6" "19 /2d8" "29 / 2d10" "21 / 4d8" "23 / 6d8" "25 / 8d8" "52 / 5d20"
9 monk7 "28 / 1d10" "9 / 2d6" "19 /2d8" "29 / 2d10" "11 / 4d6" "13 / 2d6" "15 / 8d6" "51 / 4d20" "37 / 10d10"
10 monk8 "9 / 2d6" "19 /2d8" "29 / 2d10" "11 / 4d6" "21 / 4d8" "23 / 6d8" "25 / 8d8" "52 / 5d20" "54 / 7d20"
11 brawler7 "18 / 1d8" "28 / 1d10" "5 / 3d4" "10 / 3d6" "20 / 3d8" "21 / 4d8" "23 / 6d8" "25 / 8d8" "52 / 5d20"
12 brawler8 "28 / 1d10" "5 / 3d4" "10 / 3d6" "20 / 3d8" "30 / 3d10" "23 / 6d8" "25 / 8d8" "52 / 5d20" "54 / 7d20"
13 brawler9 "5 / 3d4" "10 / 3d6" "20 / 3d8" "30 / 3d10" "13 / 6d6" "15 / 8d6" "51 / 4d20" "37 / 10d10" "55 / 8d20"

View File

@@ -0,0 +1,57 @@
Shadow Servant
Medium Elemental (Extraplanar and Incorporeal)
Initiative: +5; Senses: blindsight 60 ft., Listen +3, and Spot +4
AC: 12 (+1 Dex, +1 deflection), touch 12, flat-footed 11
Hit Dice: 4d8+8 (26 hp)
Fort +3, Ref +5, Will +1 Speed: Fly 40 ft. (perfect)
Space: 5 ft./5 ft.
Base Attack +3; Grapple +3
Attack: Incorporeal touch +4 melee
Damage: Incorporeal touch 1d6 plus 1d6 cold
Special Attacks/Actions: Shadow mastery, dusk and dawn
Abilities: Str -, Dex 12, Con 14, Int 4, Wis 11, Cha 11
Special Qualities: elemental traits, incorporeal traits
Feats: Combat Reflexes; Improved Initiative
Skills: Listen +3 and Spot +4
PC Lvl Bonus HD Dex Adj. Stat Increase Special Feat Master's Bidding
0th +0 - - Weapon Finesse Alertness# -
0th +0 - - - - -
0th +0 - - - Imp. Initiative -
0th +0 - - - - -
1st +0 - - - - Interact with corporeal, fast healing 1
2nd +1 - - Resistance to cold 5 WF: Creature (291) Extra attack
3rd +2 - +4 CON,-2 DEX Size becomes Large - -
4th +3 - +1 CON Resistance to cold 10 - Cold damage +1d8
5th +4 +2 - Deliver touch spells Dodge (10) -
6th +5 - - Resistance to cold 20 - -
7th +6 +4 - - - Reach +5 ft.
8th +7 - +1 CON - Mobility (26) DR 5/-
9th +8 +6 - - - Speed +20 ft.
10th +9 - - Immunity to cold - -
11th +10 +8 - - Spr. Attack (392) -
12th +11 - +1 CON - - -
13th +12 +10 - - - -
14th +13 - - - Iron Will (22) -
15th +14 +12 - - - -
16th +15 - +1 CON - - -
17th +16 +14 - - Lightn. Ref. (24) -
18th +17 - - - - -
19th +18 +16 - - - -
20th +19 - +1 CON - Imp. Crit (292) -
21st +20 +18 - - - -
22nd +21 - - - - -
23rd +22 +20 - - Blind-Fight (408) -
24th +23 - +1 CON - - -
25th +24 +22 - - - -
26th +25 - - - Toughness (40) -
27th +26 +24 - - - -
28th +27 - +1 CON - - -
29th +28 +26 - - Gr. Fort (14) -
30th +29 - - - - -
+1 Listen per Bonus HD
# Replaces Combat Reflexes

168
Notes/mshdw_shadserv.nss Normal file
View File

@@ -0,0 +1,168 @@
//::////////////////////////////////////////////////////////
//:: ;-. ,-. ,-. ,-.
//:: | ) | ) / ( )
//:: |-' |-< | ;-:
//:: | | \ \ ( )
//:: ' ' ' `-' `-'
//::///////////////////////////////////////////////////////
//::
/*
Impactscript for Shadow Servant.
(this is handled in the Familiar script)
Shadow Servant (Su): At 1st level, your shadow familiar permanently
transforms into a Medium shadow elemental. It loses all familiar
traits, but gains new abilities as your shadow servant.
Should your shadow servant die, you can summon a replacement after
24 hours pass. Your shadow servant cannot travel farther from you
than 30 feet + 10 feet for each of your master of shadow levels
(40 feet at 1st level and a maximum of 130 feet at 10th level). If
it is forcibly separated from you by more than this distance, the
servant dissipates instantly, and you must wait 24 hours to summon
a new one.
*/
//::
//:://////////////////////////////////////////////
//:: Script: mshadw_shadserv.nss
//:: Author: Jaysyn
//:: Created: 2025-11-11 19:25:58
//:://////////////////////////////////////////////
#include "prc_inc_json"
#include "prc_inc_spells"
const string SHADOW_SERVANT_RESREF = "prc_shadow_serv";
// Watch function: despawns Shadow Servant if master is dead or out of range
void ShadowServantWatch(object oShadow, object oPC)
{
if(DEBUG) DoDebug("mshadw_shadserv >> ShadowServantWatch: Starting function.");
int nMaster = GetLevelByClass(CLASS_TYPE_MASTER_OF_SHADOW, oPC);
float fRange = 30.0 + (nMaster * 10);
if (!GetIsObjectValid(oShadow) || !GetIsObjectValid(oPC)) return;
if (GetIsDead(oPC) ||
GetDistanceBetween(oShadow, oPC) > FeetToMeters(fRange))
{
DestroyObject(oShadow);
return;
}
DelayCommand(1.0, ShadowServantWatch(oShadow, oPC));
}
void main()
{
object oPC = OBJECT_SELF;
int nMaster = GetLevelByClass(CLASS_TYPE_MASTER_OF_SHADOW, oPC);
int nDexBonus = (nMaster >= 5 && (nMaster % 2)) ? (nMaster - 3) : 0;
float fRange = 30.0 + (nMaster * 10);
// Target location
location lTarget = GetSpellTargetLocation();
// Distance check
if (GetDistanceBetweenLocations(GetLocation(oPC), lTarget) > FeetToMeters(fRange))
{
SendMessageToPC(oPC, "That location is too far away.");
return;
}
// Load template
json jShadow = TemplateToJson(SHADOW_SERVANT_RESREF, RESTYPE_UTC);
if (jShadow == JSON_NULL)
{
SendMessageToPC(oPC, "mshdw_shadserv: TemplateToJson failed <20> bad resref or resource missing.");
return;
}
// Original HD
int nOriginalHD = json_GetCreatureHD(jShadow);
if (nOriginalHD <= 0)
{
SendMessageToPC(oPC, "mshdw_shadserv: json_GetCreatureHD failed <20> template missing HD data.");
return;
}
//:: Add Hit Dice
int nHDToAdd = nMaster -1;
if (nHDToAdd < 0) nHDToAdd = 0;
jShadow = json_AddHitDice(jShadow, nHDToAdd);
if (jShadow == JSON_NULL)
{
SendMessageToPC(oPC, "mshdw_shadserv: json_AddHitDice failed - JSON became invalid.");
return;
}
//:: Update feats
jShadow = json_AddFeatsFromCreatureVars(jShadow, nOriginalHD);
if (jShadow == JSON_NULL)
{
SendMessageToPC(oPC, "mshdw_shadserv: json_AddFeatsFromCreatureVars failed <20> JSON became invalid.");
return;
}
//:: Update stats
jShadow = json_ApplyAbilityBoostFromHD(jShadow, nOriginalHD);
if (jShadow == JSON_NULL)
{
SendMessageToPC(oPC, "mshdw_shadserv: json_ApplyAbilityBoostFromHD failed <20> JSON became invalid.");
return;
}
//:: Bonus DEX from Shadow Servant class ability
jShadow = json_UpdateTemplateStats(jShadow, 0, nDexBonus);
// Size increase
if (nMaster > 2)
{
jShadow = json_AdjustCreatureSize(jShadow, 1, TRUE);
if (jShadow == JSON_NULL)
{
SendMessageToPC(oPC, "mshdw_shadserv: json_AdjustCreatureSize failed - JSON became invalid.");
return;
}
}
object oShadow = JsonToObject(jShadow, lTarget);
effect eSummon = ExtraordinaryEffect(EffectSummonCreature("", VFX_FNF_SUMMON_UNDEAD, 0.0, 0, VFX_IMP_UNSUMMON, oShadow));
ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eSummon, lTarget);
if (!GetIsObjectValid(oShadow))
{
SendMessageToPC(oPC, "mshdw_shadserv: JsonToObject failed - could not create creature from edited template.");
return;
}
// Set faction to caster<65>s
ChangeFaction(oShadow, oPC);
SetLocalObject(oShadow, "ANIMATOR", oPC);
SetCurrentHitPoints(oShadow, GetMaxPossibleHP(oShadow));
effect eGhost = EffectVisualEffect(VFX_DUR_GHOST_TRANSPARENT);
eGhost = UnyieldingEffect(eGhost);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, oShadow);
// Full round wait then move
AssignCommand(oShadow, ClearAllActions());
AssignCommand(oShadow, ActionWait(6.0));
AssignCommand(oShadow, ActionMoveToObject(oPC));
// Start watch loop
DelayCommand(6.1, ShadowServantWatch(oShadow, oPC));
}

596
Notes/prc_inc_unarmed.nss Normal file
View File

@@ -0,0 +1,596 @@
//:://////////////////////////////////////////////
//:: Unarmed evaluation include
//:: prc_inc_unarmed
//:://////////////////////////////////////////////
/*
Handles attack bonus, damage and itemproperties
for creature weapons created based on class
and race abilities.
*/
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//////////////////////////////////////////////////
/* Constant declarations */
//////////////////////////////////////////////////
const int ITEM_PROPERTY_WOUNDING = 69;
const string CALL_UNARMED_FEATS = "CALL_UNARMED_FEATS";
const string CALL_UNARMED_FISTS = "CALL_UNARMED_FISTS";
const string UNARMED_CALLBACK = "UNARMED_CALLBACK";
//////////////////////////////////////////////////
/* Function prototypes */
//////////////////////////////////////////////////
// Determines the amount of unarmed damage a character can do
// ==========================================================
// oCreature a creature whose unarmed damage dice are
// being evaluated
//
// Returns one of the IP_CONST_MONSTERDAMAGE_* constants
int FindUnarmedDamage(object oCreature);
// Adds appropriate unarmed feats to the skin. Goes with UnarmedFists()
// ====================================================================
// oCreature a creature whose unarmed combat feats to handle
//
// Do not call this directly from your evaluation script. Instead, set
// the local variable CALL_UNARMED_FEATS on the creature to TRUE.
// This is done to avoid bugs from redundant calls to these functions.
void UnarmedFeats(object oCreature);
// Creates/strips a creature weapon and applies bonuses. Goes with UnarmedFeats()
// ==============================================================================
// oCreature a creature whose creature weapon to handle
//
// Do not call this directly from your evaluation script. Instead, set
// the local variable CALL_UNARMED_FISTS on the creature to TRUE.
// This is done to avoid bugs from redundant calls to these functions.
//
// If you are going to add properties to the creature weapons, hook
// your script for callback after this is evaluated by calling
// AddEventScript(oPC, CALLBACKHOOK_UNARMED, "your_script", FALSE, FALSE);
// When the callback is running, a local int UNARMED_CALLBACK will be
// set on OBJECT_SELF
void UnarmedFists(object oCreature);
/**
* Determines whether the given object is one of the PRC creature weapons based
* on it's resref and tag. Resref is tested first, then tag.
*
* @param oTest Object to test
* @return TRUE if the object is a PRC creature weapon, FALSE otherwise
*/
int GetIsPRCCreatureWeapon(object oTest);
/**
* Determines the average damage of a IP_CONST_MONSTERDAMAGE_*** constant.
* Used to compare different unarmed damages.
*
* @param iDamage IP_CONST_MONSTERDAMAGE_*** constant
* @return average damage of that constant
*/
float DamageAvg(int iDamage);
//#include "prc_alterations"
//#include "pnp_shft_poly"
//#include "prc_feat_const"
//#include "prc_ipfeat_const"
//#include "prc_class_const"
//#include "prc_racial_const"
//#include "prc_spell_const"
//#include "inc_utility"
#include "prc_inc_natweap"
//////////////////////////////////////////////////
/* Function defintions */
//////////////////////////////////////////////////
// Clean up any extras in the inventory.
void CleanExtraFists(object oCreature)
{
int nItemType;
object oItem = GetFirstItemInInventory(oCreature);
object oCWPB = GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oCreature);
object oCWPL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oCreature);
object oCWPR = GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oCreature);
object oCSkin = GetItemInSlot(INVENTORY_SLOT_CARMOUR, oCreature);
while(GetIsObjectValid(oItem))
{
nItemType = GetBaseItemType(oItem);
if(nItemType == BASE_ITEM_CBLUDGWEAPON ||
nItemType == BASE_ITEM_CPIERCWEAPON ||
nItemType == BASE_ITEM_CREATUREITEM ||
nItemType == BASE_ITEM_CSLASHWEAPON ||
nItemType == BASE_ITEM_CSLSHPRCWEAP
)
{
if(oItem != oCWPB &&
oItem != oCWPL &&
oItem != oCWPR &&
oItem != oCSkin
)
MyDestroyObject(oItem);
}
oItem = GetNextItemInInventory(oCreature);
}
}
int GetIsPRCCreatureWeapon(object oTest)
{
string sTest = GetStringUpperCase(GetResRef(oTest));
return // First, test ResRef
sTest == "PRC_UNARMED_B" ||
sTest == "PRC_UNARMED_S" ||
sTest == "PRC_UNARMED_P" ||
sTest == "PRC_UNARMED_SP" ||
sTest == "NW_IT_CREWPB010" || // Legacy item, should not be used anymore
// If resref doesn't match, try tag
(sTest = GetStringUpperCase(GetTag(oTest))) == "PRC_UNARMED_B" ||
sTest == "PRC_UNARMED_S" ||
sTest == "PRC_UNARMED_P" ||
sTest == "PRC_UNARMED_SP" ||
sTest == "NW_IT_CREWPB010"
;
}
// Remove the unarmed penalty effect
void RemoveUnarmedAttackEffects(object oCreature)
{
effect e = GetFirstEffect(oCreature);
while (GetIsEffectValid(e))
{
if (GetEffectSpellId(e) == SPELL_UNARMED_ATTACK_PEN)
RemoveEffect(oCreature, e);
e = GetNextEffect(oCreature);
}
}
// Add the unarmed penalty effect -- the DR piercing property gives an unwanted
// attack bonus. This clears it up.
void ApplyUnarmedAttackEffects(object oCreature)
{
object oCastingObject = CreateObject(OBJECT_TYPE_PLACEABLE, "x0_rodwonder", GetLocation(OBJECT_SELF));
AssignCommand(oCastingObject, ActionCastSpellAtObject(SPELL_UNARMED_ATTACK_PEN, oCreature, METAMAGIC_NONE, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE));
DestroyObject(oCastingObject, 6.0);
}
// Determines the amount of damage a character can do.
// IoDM: +1 dice at level 4, +2 dice at level 8
// Sacred Fist: Levels add to monk levels, or stand alone as monk levels.
// Shou: 1d6 at level 1, 1d8 at level 2, 1d10 at level 3, 2d6 at level 5
// Monk: 1d6 at level 1, 1d8 at level 4, 1d10 at level 8, 2d6 at level 12, 2d8 at level 16, 2d10 at level 20
// Frostrager: 1d6 at level 1, 1d8 at level 4
int FindUnarmedDamage(object oCreature)
{
int iDamage = 0;
int iMonk = GetLevelByClass(CLASS_TYPE_MONK, oCreature) + GetLocalInt(oCreature, "LiPengMonk");
int iShou = GetLevelByClass(CLASS_TYPE_SHOU, oCreature);
int iBrawler = GetLevelByClass(CLASS_TYPE_BRAWLER, oCreature);
int iSacredFist = GetLevelByClass(CLASS_TYPE_SACREDFIST, oCreature);
int iEnlightenedFist = GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCreature);
int iHenshin = GetLevelByClass(CLASS_TYPE_HENSHIN_MYSTIC, oCreature);
int iZuoken = GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature);
int iShadowSunNinja = GetLevelByClass(CLASS_TYPE_SHADOW_SUN_NINJA, oCreature);
int iFrost = GetLevelByClass(CLASS_TYPE_FROSTRAGER, oCreature);
int iAscetic = GetLevelByClass(CLASS_TYPE_NINJA, oCreature);
int iRonove;
int iMonkDamage = 1;
int iShouDamage = 1;
int iBrawlerDamage = 1;
int iFrostDamage = 1;
int iSUSDamage = 1;
int iDieIncrease = 0;
int iSize;
if (GetHasSpellEffect(VESTIGE_RONOVE, oCreature) && GetLevelByClass(CLASS_TYPE_BINDER, oCreature)) iRonove = GetLocalInt(oCreature, "RonovesFists");
// if the creature is shifted, use model size
// otherwise, we want to stick to what the feats say they "should" be.
// No making pixies with Dragon Appearance for "huge" fist damage.
if( GetIsPolyMorphedOrShifted(oCreature)
|| GetPRCSwitch(PRC_APPEARANCE_SIZE))
{
iSize = PRCGetCreatureSize(oCreature) - CREATURE_SIZE_MEDIUM + 5; // medium is size 5 for us
}
else
{
// Determine creature size by feats.
iSize = 5; // medium is size 5 for us
if (GetHasFeat(FEAT_TINY, oCreature)) iSize = 3;
if (GetHasFeat(FEAT_SMALL, oCreature)) iSize = 4;
if (GetHasFeat(FEAT_LARGE, oCreature)) iSize = 6;
if (GetHasFeat(FEAT_HUGE, oCreature)) iSize = 7;
// include size changes
iSize += PRCGetCreatureSize(oCreature) - PRCGetCreatureSize(oCreature, PRC_SIZEMASK_NONE);
// cap if needed
if (iSize < 1) iSize = 1;
if (iSize > 9) iSize = 9;
}
// Sacred Fist cannot add their levels if they've broken their code.
if (GetHasFeat(FEAT_SF_CODE, oCreature)) iSacredFist = 0;
// several classes add their levels to the monk class,
// or use monk progression if the character has no monk levels
iMonk += iSacredFist + iHenshin + iEnlightenedFist + iShou + iZuoken + iShadowSunNinja;
// Superior Unarmed Strike
if (GetHasFeat(FEAT_SUPERIOR_UNARMED_STRIKE, oCreature))
{
iMonk += 4;
int nHD = GetHitDice(oCreature);
if (nHD >= 16) iSUSDamage = IP_CONST_MONSTERDAMAGE_2d6;
else if (nHD >= 12) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d10;
else if (nHD >= 8) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d8;
else if (nHD >= 4) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d6;
else if (nHD >= 3) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d4;
}
// Ascetic Stalker
if (GetHasFeat(FEAT_ASCETIC_STALKER, oCreature))
iMonk += iAscetic;
// In 3.0e, Monk progression stops after level 16:
if (iMonk > 16 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE) ) iMonk = 16;
// in 3.5e, monk progression stops at 20.
else if(iMonk > 20) iMonk = 20;
// Ronove is in place of monk, does not stack
if (iRonove > iMonk) iMonk = iRonove;
// monks damage progesses every four levels, starts at 1d6
if (iMonk > 0)
iMonkDamage = iMonk / 4 + 3;
// For medium monks in 3.0e skip 2d8 and go to 1d20
if(iSize == 5 && iMonkDamage == 7 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE) ) iMonkDamage = 8;
// Shou Disciple either adds its level to existing class or does its own damage, depending
// on which is better. Here we will determine how much damage the Shou Disciple does
// without stacking.
if (iShou > 0) iShouDamage = iShou + 2; // Lv. 1: 1d6, Lv. 2: 1d8, Lv. 3: 1d10
if (iShou > 3) iShouDamage--; // Lv. 4: 1d10, Lv. 5: 2d6
iShouDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iShouDamage));
// Frostrager does not stack with other damage types
if (iFrost > 0) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d6; // Lv. 1: 1d6
if (iFrost > 3) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d8; // Lv. 3: 1d8
// Brawler follows monk progression except for the last one (3d8)
if (iBrawler > 0) iBrawlerDamage = iBrawler / 6 + 3; // 1d6, 1d8, 1d10, 2d6, 2d8, 2d10
if (iBrawler >= 36) iBrawlerDamage += 2; // 3d8
// Monks and monk-like classes deal no additional damage when wearing any armor, at
// least in NWN. This is to reflect that. No shields too.
if (iMonkDamage > 1)
{
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature);
int bShieldEq = GetBaseItemType(oShield) == BASE_ITEM_SMALLSHIELD ||
GetBaseItemType(oShield) == BASE_ITEM_LARGESHIELD ||
GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD;
if (GetBaseAC(oArmor) > 0 || bShieldEq)
{
iMonkDamage = 1;
}
}
// Shou Disciples can wear light armor
if (iShouDamage > 1)
{
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature);
int bShieldEq = GetBaseItemType(oShield) == BASE_ITEM_SMALLSHIELD ||
GetBaseItemType(oShield) == BASE_ITEM_LARGESHIELD ||
GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD;
if (GetBaseAC(oArmor) > 3 || bShieldEq)
{
iShouDamage = 1;
}
}
// For Initiate of Draconic Mysteries
if (GetHasFeat(FEAT_INCREASE_DAMAGE2, oCreature)) iDieIncrease += 2;
else if (GetHasFeat(FEAT_INCREASE_DAMAGE1, oCreature)) iDieIncrease += 1;
/* //:: Expansion / Compression powers (Double dipping?)
int nExpansion = GetLocalInt(oCreature, "PRC_Power_Expansion_SizeIncrease");
int nCompression = GetLocalInt(oCreature, "PRC_Power_Compression_SizeReduction");
if (nExpansion)
{
iSize += nExpansion;
}
if (nCompression)
{
iSize -= nCompression;
} */
iMonkDamage += iDieIncrease;
iShouDamage += iDieIncrease;
iBrawlerDamage += iDieIncrease;
iFrostDamage += iDieIncrease;
iSUSDamage += iDieIncrease;
//FloatingTextStringOnCreature("prc_inc_unarmed: Size is: "+IntToString(iSize)+".", oCreature);
//FloatingTextStringOnCreature("prc_inc_unarmed: Pre 2DA Lookup >> iMonkDamage = "+IntToString(iMonkDamage)+".", oCreature);
// now, read the damage from the table in unarmed_dmg.2da
iMonkDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iMonkDamage));
iShouDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iShouDamage));
//FloatingTextStringOnCreature("prc_inc_unarmed: Post 2DA Lookup >> iMonkDamage = "+IntToString(iMonkDamage)+".", oCreature);
// Medium+ monks have some special values on the table in 3.0:
if (iSize >= 5 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE))
{
if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d6) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d12;
if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d10) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d20;
}
iDamage = iMonkDamage;
// Future unarmed classes: if you do your own damage, add in "comparisons" below here.
iDamage = (DamageAvg(iShouDamage ) > DamageAvg(iDamage)) ? iShouDamage : iDamage;
iDamage = (DamageAvg(iFrostDamage ) > DamageAvg(iDamage)) ? iFrostDamage : iDamage;
iDamage = (DamageAvg(iSUSDamage ) > DamageAvg(iDamage)) ? iSUSDamage : iDamage;
if (DEBUG) DoDebug("prc_inc_unarmed: iDamage "+IntToString(iDamage));
return iDamage;
}
// Adds appropriate feats to the skin. Stolen from SoulTaker + expanded with overwhelming/devastating critical.
void UnarmedFeats(object oCreature)
{
// If we are polymorphed/shifted, do not mess with the creature weapon.
if (GetIsPolyMorphedOrShifted(oCreature)) return;
object oSkin = GetPCSkin(oCreature);
if (!GetHasFeat(FEAT_WEAPON_PROFICIENCY_CREATURE, oCreature))
AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_CREATURE),oSkin);
//only roll unarmed feats into creature feats when not using natural weapons
if(!GetIsUsingPrimaryNaturalWeapons(oCreature))
{
if (GetHasFeat(FEAT_WEAPON_FOCUS_UNARMED_STRIKE, oCreature) && !GetHasFeat(FEAT_WEAPON_FOCUS_CREATURE, oCreature))
AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapFocCreature),oSkin);
if (GetHasFeat(FEAT_WEAPON_SPECIALIZATION_UNARMED_STRIKE, oCreature) && !GetHasFeat(FEAT_WEAPON_SPECIALIZATION_CREATURE, oCreature))
AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapSpecCreature),oSkin);
if (GetHasFeat(FEAT_IMPROVED_CRITICAL_UNARMED_STRIKE, oCreature) && !GetHasFeat(FEAT_IMPROVED_CRITICAL_CREATURE, oCreature))
AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_ImpCritCreature),oSkin);
if (GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_UNARMED, oCreature) && !GetHasFeat(FEAT_EPIC_WEAPON_FOCUS_CREATURE, oCreature))
AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapEpicFocCreature),oSkin);
if (GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_UNARMED, oCreature) && !GetHasFeat(FEAT_EPIC_WEAPON_SPECIALIZATION_CREATURE, oCreature))
AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_WeapEpicSpecCreature),oSkin);
if (GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_UNARMED, oCreature) && !GetHasFeat(FEAT_EPIC_OVERWHELMING_CRITICAL_CREATURE, oCreature))
AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_OVERCRITICAL_CREATURE),oSkin);
if (GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_UNARMED, oCreature) && !GetHasFeat(FEAT_EPIC_DEVASTATING_CRITICAL_CREATURE, oCreature))
AddItemProperty(DURATION_TYPE_PERMANENT,PRCItemPropertyBonusFeat(IP_CONST_FEAT_DEVCRITICAL_CREATURE),oSkin);
}
}
// Creates/strips a creature weapon and applies bonuses. Large chunks stolen from SoulTaker.
void UnarmedFists(object oCreature)
{
// If we are polymorphed/shifted, do not mess with the creature weapon.
if (GetIsPolyMorphedOrShifted(oCreature)) return;
RemoveUnarmedAttackEffects(oCreature);
object oRighthand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCreature);
object oLefthand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature);
object oWeapL = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oCreature);
// Clean up the mess of extra fists made on taking first level.
DelayCommand(6.0f, CleanExtraFists(oCreature));
// Determine the character's capacity to pierce DR.
// only applies when not using natural weapons
if(!GetIsUsingPrimaryNaturalWeapons(oCreature))
{
int iRace = GetRacialType(oCreature);
int iMonk = GetLevelByClass(CLASS_TYPE_MONK, oCreature) + GetLocalInt(oCreature, "LiPengMonk");
int iShou = GetLevelByClass(CLASS_TYPE_SHOU, oCreature);
int iSacFist = GetLevelByClass(CLASS_TYPE_SACREDFIST, oCreature);
int iHenshin = GetLevelByClass(CLASS_TYPE_HENSHIN_MYSTIC, oCreature);
int iIoDM = GetLevelByClass(CLASS_TYPE_INITIATE_DRACONIC, oCreature);
int iBrawler = GetLevelByClass(CLASS_TYPE_BRAWLER, oCreature);
int iZuoken = GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature);
int iShadowSunNinja = GetLevelByClass(CLASS_TYPE_SHADOW_SUN_NINJA, oCreature);
int iAscetic = GetLevelByClass(CLASS_TYPE_NINJA, oCreature);
// Sacred Fists who break their code get no benefits.
if (GetHasFeat(FEAT_SF_CODE,oCreature)) iSacFist = 0;
// The monk adds all these classes.
int iMonkEq = iMonk + iShou + iSacFist + iHenshin + iZuoken + iShadowSunNinja;
// Ascetic Stalker
if (GetHasFeat(FEAT_ASCETIC_STALKER, oCreature))
iMonkEq += iAscetic;
// Determine the type of damage the character should do.
string sWeapType;
if (GetHasFeat(FEAT_CLAWDRAGON, oCreature))
sWeapType = "PRC_UNARMED_S";
else
sWeapType = "PRC_UNARMED_B";
// Equip the creature weapon.
if (!GetIsObjectValid(oWeapL) || GetTag(oWeapL) != sWeapType)
{
if (GetHasItem(oCreature, sWeapType))
{
oWeapL = GetItemPossessedBy(oCreature, sWeapType);
SetIdentified(oWeapL, TRUE);
AssignCommand(oCreature, ActionEquipItem(oWeapL, INVENTORY_SLOT_CWEAPON_L));
}
else
{
oWeapL = CreateItemOnObject(sWeapType, oCreature);
SetIdentified(oWeapL, TRUE);
AssignCommand(oCreature,ActionEquipItem(oWeapL, INVENTORY_SLOT_CWEAPON_L));
}
}
int iKi = (iMonkEq > 9) ? 1 : 0;
iKi = (iMonkEq > 12) ? 2 : iKi;
iKi = (iMonkEq > 15) ? 3 : iKi;
int iDragClaw = GetHasFeat(FEAT_CLAWDRAGON,oCreature) ? 1: 0;
iDragClaw = GetHasFeat(FEAT_CLAWENH2,oCreature) ? 2: iDragClaw;
iDragClaw = GetHasFeat(FEAT_CLAWENH3,oCreature) ? 3: iDragClaw;
int iBrawlEnh = iBrawler / 6;
int iEpicKi = GetHasFeat(FEAT_EPIC_IMPROVED_KI_STRIKE_4,oCreature) ? 1 : 0 ;
iEpicKi = GetHasFeat(FEAT_EPIC_IMPROVED_KI_STRIKE_5,oCreature) ? 2 : iEpicKi ;
// The total enhancement to the fist is the sum of all the enhancements above
int iEnh = iKi + iDragClaw + iBrawlEnh + iEpicKi;
// Strip the Fist.
itemproperty ip = GetFirstItemProperty(oWeapL);
while (GetIsItemPropertyValid(ip))
{
RemoveItemProperty(oWeapL, ip);
ip = GetNextItemProperty(oWeapL);
}
// Leave the fist blank if weapons are equipped. The only way a weapon will
// be equipped on the left hand is if there is a weapon in the right hand.
if (GetIsObjectValid(oRighthand)) return;
// Add glove bonuses.
object oItem = GetItemInSlot(INVENTORY_SLOT_ARMS,oCreature);
int iGloveEnh = 0;
if (GetIsObjectValid(oItem))
{
int iType = GetBaseItemType(oItem);
if (iType == BASE_ITEM_GLOVES)
{
ip = GetFirstItemProperty(oItem);
while(GetIsItemPropertyValid(ip))
{
iType = GetItemPropertyType(ip);
switch (iType)
{
case ITEM_PROPERTY_DAMAGE_BONUS:
case ITEM_PROPERTY_DAMAGE_BONUS_VS_ALIGNMENT_GROUP:
case ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP:
case ITEM_PROPERTY_DAMAGE_BONUS_VS_SPECIFIC_ALIGNMENT:
case ITEM_PROPERTY_ON_HIT_PROPERTIES:
case ITEM_PROPERTY_ONHITCASTSPELL:
case ITEM_PROPERTY_EXTRA_MELEE_DAMAGE_TYPE:
case ITEM_PROPERTY_KEEN:
case ITEM_PROPERTY_MASSIVE_CRITICALS:
case ITEM_PROPERTY_POISON:
case ITEM_PROPERTY_REGENERATION_VAMPIRIC:
case ITEM_PROPERTY_WOUNDING:
case ITEM_PROPERTY_DECREASED_DAMAGE:
case ITEM_PROPERTY_DECREASED_ATTACK_MODIFIER:
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ip,oWeapL));
break;
case ITEM_PROPERTY_ATTACK_BONUS:
int iCost = GetItemPropertyCostTableValue(ip);
iGloveEnh = (iCost>iGloveEnh) ? iCost:iGloveEnh;
iEnh = (iCost>iEnh) ? iCost:iEnh;
break;
}
ip = GetNextItemProperty(oItem);
}
// handles these seperately so as not to create "attack penalties vs. xxxx"
ip = GetFirstItemProperty(oItem);
while(GetIsItemPropertyValid(ip))
{
iType = GetItemPropertyType(ip);
switch (iType)
{
case ITEM_PROPERTY_ATTACK_BONUS_VS_SPECIFIC_ALIGNMENT:
case ITEM_PROPERTY_ATTACK_BONUS_VS_ALIGNMENT_GROUP:
case ITEM_PROPERTY_ATTACK_BONUS_VS_RACIAL_GROUP:
if (GetItemPropertyCostTableValue(ip) > iEnh)
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ip,oWeapL));
break;
}
ip = GetNextItemProperty(oItem);
}
}
}
// Add damage resistance penetration.
DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyAttackBonus(iEnh), oWeapL));
// Cool VFX when striking unarmed
if (iMonkEq > 9)
//DelayCommand(0.1, AddItemProperty(DURATION_TYPE_PERMANENT, PRCItemPropertyBonusFeat(IP_CONST_FEAT_KI_STRIKE), oWeapL));
DelayCommand(0.1, IPSafeAddItemProperty(oWeapL, PRCItemPropertyBonusFeat(IP_CONST_FEAT_KI_STRIKE), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE));
// This adds creature weapon finesse and a penalty to offset the DR penetration attack bonus.
SetLocalInt(oCreature, "UnarmedEnhancement", iEnh);
SetLocalInt(oCreature, "UnarmedEnhancementGlove", iGloveEnh);
}
// Weapon finesse or intuitive attack?
SetLocalInt(oCreature, "UsingCreature", TRUE);
ExecuteScript("prc_intuiatk", oCreature);
DelayCommand(1.0f, DeleteLocalInt(oCreature, "UsingCreature"));
ApplyUnarmedAttackEffects(oCreature);
// Add the appropriate damage to the fist.
int iMonsterDamage = FindUnarmedDamage(oCreature);
AddItemProperty(DURATION_TYPE_PERMANENT,ItemPropertyMonsterDamage(iMonsterDamage),oWeapL);
// Add OnHitCast: Unique if necessary. Frostrager level 5 grants Rend too
if(GetHasFeat(FEAT_REND, oCreature) || GetLevelByClass(CLASS_TYPE_FROSTRAGER, oCreature) > 4)
IPSafeAddItemProperty(oWeapL,
ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1));
// Friendly message to remind players that certain things won't appear correct.
if (GetLocalInt(oCreature, "UnarmedSubSystemMessage") != TRUE
&& GetHasSpellEffect(SPELL_UNARMED_ATTACK_PEN, oCreature))
{
SetLocalInt(oCreature, "UnarmedSubSystemMessage", TRUE);
DelayCommand(3.001f, SendMessageToPC(oCreature, "This character uses the PRC's unarmed system. This system has been created to"));
DelayCommand(3.002f, SendMessageToPC(oCreature, "work around many Aurora engine bugs and limitations. Your attack roll may appear to be"));
DelayCommand(3.003f, SendMessageToPC(oCreature, "incorrect on the character's stats. However, the attack rolls should be correct in"));
DelayCommand(3.004f, SendMessageToPC(oCreature, "combat. Disregard any attack effects that seem extra: they are part of the workaround."));
DelayCommand(600.0f, DeleteLocalInt(oCreature, "UnarmedSubSystemMessage"));
}
}
float DamageAvg(int iDamage)
{
int iDie = StringToInt(Get2DACache("iprp_monstcost", "Die", iDamage));
int iNum = StringToInt(Get2DACache("iprp_monstcost", "NumDice", iDamage));
return IntToFloat(iNum * (iDie+1)) / 2;
}
//:: void main (){}

View File

@@ -6,7 +6,7 @@
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Player Resource Consortium :: Manual :: Installation :: Guide</title>
<title>Player Resource Consortium 8 :: Manual :: Installation :: Guide</title>
<link type="text/css" href="../../../styles/manual_common.css" rel="stylesheet">
<link type="text/css" href="../../../styles/manual_content_common.css" rel="stylesheet">
@@ -14,7 +14,7 @@
<body scroll="auto">
<br>
<div><h1>:: Players Guide :: Psionics ::</h1></div>
<div><h1>:: Players Guide :: Templates ::</h1></div>
<br>
<div class="div_paddedcontent">

View File

@@ -1,7 +1,7 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Player Resource Consortium :: Manual :: PrC Making :: Basics</title>
<title>Player Resource Consortium 8:: Manual :: PrC Making :: Basics</title>
<link type="text/css" href="../../../styles/manual_common.css" rel="stylesheet">
<link type="text/css" href="../../../styles/manual_content_common.css" rel="stylesheet">
</head>
@@ -10,7 +10,7 @@
<div><h1>:: PrC Making :: Basics ::</h1></div>
<br>
<div class="div_paddedcontent">
We have recived several questions on the forums about the 2da's and basic scripting.
We have received several questions on the forums about the 2DAs and basic scripting.
I felt I would try and help those new to custom content by providing links to the information.
<br><br>
For questions concerning scripting check out the

View File

@@ -1,7 +1,7 @@
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title>Player Resource Consortium :: Manual :: PrC Making :: Guide</title>
<title>Player Resource Consortium 8:: Manual :: PrC Making :: Guide</title>
<link type="text/css" href="../../../styles/manual_common.css" rel="stylesheet">
<link type="text/css" href="../../../styles/manual_content_common.css" rel="stylesheet">
</head>
@@ -42,8 +42,8 @@
</a>
<br>
I have decicided to create a tutorial on how to make a
Prestige Class and how to make it compatible with the Player Resource Consortium.
I hope this allows new custom content builders to help make their content compatible with the PRC.
Prestige Class and how to make it compatible with the Player Resource Consortium 8.
I hope this allows new custom content builders to help make their content compatible with the PRC8.
This will make it easier for them to use both their content and ours, and also make it easier on us
if they would allow us to add their content to our pack.
<br><br>
@@ -61,8 +61,8 @@ This is very useful if you script outside of the toolset as many of us in the PR
<br><br>
For information on 2da's, harcoded limitations, etc. Check the
<a href="http://ccg.dladventures.com/index.php/Main_Page" target="_blank"> Neverwinter Nights Custom Content Guide</a>.
For information on 2DAs, harcoded limitations, etc. Check the
<a href="https://nwn.wiki/display/NWN1/" target="_blank"> NWN:EE Developer Wiki</a>.
<br>
For questions concerning scripting check out the
<a href="http://www.nwnlexicon.com/" target="_blank"> NWN Lexicon</a>.
@@ -83,25 +83,36 @@ The following is a list of utility programs that are quite handy for making PrC'
<td valign="top">Another text editor. Can be found <a href="http://www.textpad.com/" target="_new"> here</a>.
This text editor can mass replace text in many files rather quickly. Excellent when making mass replaces. Syntax highlighting for NWN can be found on the internet.</td></tr>
<tr><td valign="top" align="center"> NwN Toolset </td>
<tr><td valign="top" align="center"> NotePad++ </td>
<td valign="top">Another text editor. Can be found <a href="https://notepad-plus-plus.org" target="_new"> here</a>.
This does everything Notepad & TextPad do, but more & better. Has a configurable NWN:EE IDE plug-in you can find <a href="https://neverwintervault.org/project/nwnee/other/tool/nwscript-tools-notepad"> here</a>
</td></tr>
<tr><td valign="top" align="center"> Aurora Toolset </td>
<td valign="top">Occasionally the toolset is useful. Especially, if you are making summonable critters or dialogues.</td></tr>
<tr><td valign="top" align="center">CCCH</td>
<td valign="top"> The CODI Custom Content Helper. Has a .tlk editor as well as some pretty decent 2da editing capabilities. Some use it, some do not. Definitely worth mentioning though. It can be found <a href="http://nwvault.ign.com/Files/other/data/1067993746453.shtml" target="_new"> here</a>. </td></tr>
<td valign="top"> The CODI Custom Content Helper. Has a .tlk editor as well as some pretty decent 2da editing capabilities. Some use it, some do not. Definitely worth mentioning though. It can be found <a href="https://neverwintervault.org/project/nwn1/other/tool/codi-custom-content-helper" target="_new"> here</a>. </td></tr>
<tr><td valign="top" align="center">NWN TLK Editor 1.1</td>
<td valign="top"> My preferred method of modifying the .tlk file. It can be found <a href="http://nwvault.ign.com/Files/other/data/1026158289672.shtml" target="_new"> here</a>.</td></tr>
<tr><td valign="top" align="center">Axe Murderer's Killer TLK </td>
<td valign="top"> My preferred TLK editor that isn't NotePad++. Good for merging. It can be found<a href="https://neverwintervault.org/project/nwn1/other/tool/nwn-tlk-editor-10" target="_new"> here</a>.</td></tr>
<tr><td valign="top" align="center">NwN Explorer</td>
<tr><td valign="top" align="center">NWN TLK Editor 1.0</td>
<td valign="top"> A very old TLK editor. It can be found <a href="https://neverwintervault.org/project/nwn1/other/tool/nwn-tlk-editor-10" target="_new"> here</a>.</td></tr>
<tr><td valign="top" align="center">TlkEditEE</td>
<td valign="top"> My prefered 2DA editor that isn't Excel. <a href="https://github.com/calgacus/TlkEdit-EE" target="_new"> It's on Github</a>.</td></tr>
<tr><td valign="top" align="center">NWN Explorer</td>
<td valign="top"> A good tool to look through all the standard files of the game. Great for checking out the games icon when you want to modify them to create new ones. It can be found <a href="http://nwvault.ign.com/Files/other/data/1055545441750.shtml" target="_new"> here</a>. </td></tr>
<tr><td valign="top" align="center">mIRC</td>
<td valign="top"> We use this to communicate, for more information see section below. </td></tr>
<tr><td valign="top" align="center">Discord</td>
<td valign="top"> We use this to communicate, grab it <a href="https://discord.com/" target="_new"> here</a> </td></tr>
<!--<tr><td valign="top" align="center">Tortoise CVS</td>
<td valign="top"> We use this to store and share all our scripts and data. For more information, see section below. </td></tr>
-->
https://neverwintervault.org/project/nwn1/other/tool/axe-murderers-killer-tlk-editor
</table>
<br><a href="#top">Back to Top</a>
<br><br>
@@ -109,7 +120,12 @@ This text editor can mass replace text in many files rather quickly. Excellent
<div><h2>IRC Information</h2></div>
</a>
<br>
The PrC members often use IRC (Internet Relay Chat) to communicate with eachother.
<center>
[This has been left in place for historical purposes. Use <a href="https://discord.com/" target="_new"> Discord</a> instead.]
</center>
The PrC members often use IRC (Internet Relay Chat) to communicate with each other.
For those new to IRC you need to download a program called mIRC.
(There are likely others, though I do not know them.)

View File

@@ -1,6 +1,6 @@
<html>
<head>
<title>Player Resource Consortium :: Manual :: PrC Making :: Reserve 2da/tlk Slots </title>
<title>Player Resource Consortium 8:: Manual :: PrC Making :: Reserve 2da/tlk Slots </title>
<link type="text/css" href="../../../styles/manual_common.css" rel="stylesheet">
<link type="text/css" href="../../../styles/manual_content_common.css" rel="stylesheet">

View File

@@ -15,225 +15,225 @@
11 EPIC_MASTER_OF_SHADOW 25052 3 11 0
12 FEAT_MASTERSHADOW_MYSTERY_SHADOWCASTER 18076 2 1 0
13 FEAT_MASTERSHADOW_MYSTERY_SHADOWSMITH 18088 2 1 0
14 PATH_FOCUS_CLOAK_SHADOWS 23673 1 2 0
15 PATH_FOCUS_DARK_TERRAIN 23674 1 2 0
16 PATH_FOCUS_EBON_WHISPERS 23675 1 2 0
17 PATH_FOCUS_EYES_DARKNESS 23676 1 2 0
18 PATH_FOCUS_SHUTTERS_CLOUDS 23677 1 2 0
19 PATH_FOCUS_TOUCH_TWILIGHT 23678 1 2 0
20 PATH_FOCUS_UMBRAL_MIND 23679 1 2 0
21 PATH_FOCUS_BLACK_MAGIC 23680 1 2 0
22 PATH_FOCUS_BODY_SOUL 23681 1 2 0
23 PATH_FOCUS_DARK_REFLECTIONS 23682 1 2 0
24 PATH_FOCUS_EBON_ROADS 23683 1 2 0
25 PATH_FOCUS_ELEMENTAL_SHADOWS 23684 1 2 0
26 PATH_FOCUS_UNBINDING_SHADE 23685 1 2 0
27 PATH_FOCUS_VEIL_SHADOWS 23686 1 2 0
28 PATH_FOCUS_BREATH_TWILIGHT 23687 1 2 0
29 PATH_FOCUS_DARK_METAMORPHOSIS 23688 1 2 0
30 PATH_FOCUS_EBON_WALLS 23689 1 2 0
31 PATH_FOCUS_EYES_NIGHT_SKY 23690 1 2 0
32 PATH_FOCUS_HEART_SOUL 23691 1 2 0
33 PATH_FOCUS_SHADOW_CALLING 23692 1 2 0
34 GREATER_PATH_FOCUS_CLOAK_SHADOWS 23693 1 2 0
35 GREATER_PATH_FOCUS_DARK_TERRAIN 23694 1 2 0
36 GREATER_PATH_FOCUS_EBON_WHISPERS 23695 1 2 0
37 GREATER_PATH_FOCUS_EYES_DARKNESS 23696 1 2 0
38 GREATER_PATH_FOCUS_SHUTTERS_CLOUDS 23697 1 2 0
39 GREATER_PATH_FOCUS_TOUCH_TWILIGHT 23698 1 2 0
40 GREATER_PATH_FOCUS_UMBRAL_MIND 23699 1 2 0
41 GREATER_PATH_FOCUS_BLACK_MAGIC 23700 1 2 0
42 GREATER_PATH_FOCUS_BODY_SOUL 23701 1 2 0
43 GREATER_PATH_FOCUS_DARK_REFLECTIONS 23702 1 2 0
44 GREATER_PATH_FOCUS_EBON_ROADS 23703 1 2 0
45 GREATER_PATH_FOCUS_ELEMENTAL_SHADOWS 23704 1 2 0
46 GREATER_PATH_FOCUS_UNBINDING_SHADE 23705 1 2 0
47 GREATER_PATH_FOCUS_VEIL_SHADOWS 23706 1 2 0
48 GREATER_PATH_FOCUS_BREATH_TWILIGHT 23707 1 2 0
49 GREATER_PATH_FOCUS_DARK_METAMORPHOSIS 23708 1 2 0
50 GREATER_PATH_FOCUS_EBON_WALLS 23709 1 2 0
51 GREATER_PATH_FOCUS_EYES_NIGHT_SKY 23710 1 2 0
52 GREATER_PATH_FOCUS_HEART_SOUL 23711 1 2 0
53 GREATER_PATH_FOCUS_SHADOW_CALLING 23712 1 2 0
54 NOCTURNAL_CASTER_CLOAK_SHADOWS 23713 1 2 0
55 NOCTURNAL_CASTER_DARK_TERRAIN 23714 1 2 0
56 NOCTURNAL_CASTER_EBON_WHISPERS 23715 1 2 0
57 NOCTURNAL_CASTER_EYES_DARKNESS 23716 1 2 0
58 NOCTURNAL_CASTER_SHUTTERS_CLOUDS 23717 1 2 0
59 NOCTURNAL_CASTER_TOUCH_TWILIGHT 23718 1 2 0
60 NOCTURNAL_CASTER_UMBRAL_MIND 23719 1 2 0
61 NOCTURNAL_CASTER_BLACK_MAGIC 23720 1 2 0
62 NOCTURNAL_CASTER_BODY_SOUL 23721 1 2 0
63 NOCTURNAL_CASTER_DARK_REFLECTIONS 23722 1 2 0
64 NOCTURNAL_CASTER_EBON_ROADS 23723 1 2 0
65 NOCTURNAL_CASTER_ELEMENTAL_SHADOWS 23724 1 2 0
66 NOCTURNAL_CASTER_UNBINDING_SHADE 23725 1 2 0
67 NOCTURNAL_CASTER_VEIL_SHADOWS 23726 1 2 0
68 NOCTURNAL_CASTER_BREATH_TWILIGHT 23727 1 2 0
69 NOCTURNAL_CASTER_DARK_METAMORPHOSIS 23728 1 2 0
70 NOCTURNAL_CASTER_EBON_WALLS 23729 1 2 0
71 NOCTURNAL_CASTER_EYES_NIGHT_SKY 23730 1 2 0
72 NOCTURNAL_CASTER_HEART_SOUL 23731 1 2 0
73 NOCTURNAL_CASTER_SHADOW_CALLING 23732 1 2 0
74 FAV_MYST_BENDPERSPECTIVE 23733 1 2 0
75 FAV_MYST_CARPETSHADOW 23734 1 2 0
76 FAV_MYST_DUSKANDDAWN 23735 1 2 0
77 FAV_MYST_LIFEFADES 23736 1 2 0
78 FAV_MYST_MESMERIZINGSHADE 23737 1 2 0
79 FAV_MYST_STEELSHADOWS 23738 1 2 0
80 FAV_MYST_VOICEOFSHADOW 23739 1 2 0
81 FAV_MYST_BLACKFIRE 23740 1 2 0
82 FAV_MYST_CONGRESSSHADOWS 23741 1 2 0
83 FAV_MYST_FLESHFAILS 23742 1 2 0
84 FAV_MYST_PIERCINGSIGHT 23743 1 2 0
85 FAV_MYST_SHADOWSKIN 23744 1 2 0
86 FAV_MYST_SIGHTECLIPSED 23745 1 2 0
87 FAV_MYST_THOUGHTSSHADOW 23746 1 2 0
88 FAV_MYST_AFRAIDOFTHEDARK 23747 1 2 0
89 FAV_MYST_CLINGINGDARKNESS 23748 1 2 0
90 FAV_MYST_DANCINGSHADOWS 23749 1 2 0
91 FAV_MYST_FLICKER 23750 1 2 0
92 FAV_MYST_KILLINGSHADOWS 23751 1 2 0
93 FAV_MYST_SHARPSHADOWS 23752 1 2 0
94 FAV_MYST_UMBRALTOUCH 23753 1 2 0
95 FAV_MYST_AURAOFSHADE 23754 1 2 0
96 FAV_MYST_BOLSTER 23755 1 2 0
97 FAV_MYST_SHADOWEVOCATION 23756 1 2 0
98 FAV_MYST_SHADOWVISION 23757 1 2 0
99 FAV_MYST_SHADOWSFADE 23758 1 2 0
100 FAV_MYST_STEPINTOSHADOW 23759 1 2 0
101 FAV_MYST_WARPSPELL 23760 1 2 0
102 FAV_MYST_CURTAINSHADOWS 23761 1 2 0
103 FAV_MYST_DARKAIR 23762 1 2 0
104 FAV_MYST_ECHOSPELL 23763 1 2 0
105 FAV_MYST_FEIGNLIFE 23764 1 2 0
106 FAV_MYST_LANGUOR 23765 1 2 0
107 FAV_MYST_PASSINTOSHADOW 23766 1 2 0
108 FAV_MYST_UNRAVELDWEOMER 23767 1 2 0
109 FAV_MYST_FLOODSHADOWS 23768 1 2 0
110 FAV_MYST_GREATERSHADOWEVOCATION 23769 1 2 0
111 FAV_MYST_SHADOWINVESTITURE 23770 1 2 0
112 FAV_MYST_SHADOWSTORM 23771 1 2 0
113 FAV_MYST_SHADOWSFADE_GREATER 23772 1 2 0
114 FAV_MYST_UNVEIL 23773 1 2 0
115 FAV_MYST_VOYAGESHADOW 23774 1 2 0
116 FAV_MYST_DARKSOUL 23775 1 2 0
117 FAV_MYST_EPHEMERALIMAGE 23776 1 2 0
118 FAV_MYST_LIFEFADESGREATER 23777 1 2 0
119 FAV_MYST_PRISONNIGHT 23778 1 2 0
120 FAV_MYST_UMBRALSERVANT 23779 1 2 0
121 FAV_MYST_TRUTHREVEALED 23780 1 2 0
122 FAV_MYST_FARSIGHT 23781 1 2 0
123 FAV_MYST_GRFLESHFAILS 23782 1 2 0
124 FAV_MYST_SHADOWPLAGUE 23783 1 2 0
125 FAV_MYST_SOULPUPPET 23784 1 2 0
126 FAV_MYST_TOMBNIGHT 23785 1 2 0
127 FAV_MYST_UMBRALBODY 23786 1 2 0
128 FAV_MYST_ARMYSHADOW 23787 1 2 0
129 FAV_MYST_CONSUMEESSENCE 23788 1 2 0
130 FAV_MYST_EPHEMERALSTORM 23789 1 2 0
131 FAV_MYST_REFLECTIONS 23790 1 2 0
132 FAV_MYST_SHADOWSURGE 23791 1 2 0
133 FAV_MYST_SHADOWTIME 23792 1 2 0
134 ShadowCast 23793 1 2 0
135 EmpowerMystery 23794 1 2 0
136 ExtendMystery 23795 1 2 0
137 MaximizeMystery 23796 1 2 0
138 QuickenMystery 23797 1 2 0
139 StillMystery 23798 1 2 0
140 FEAT_EPIC_ARMOR_SKIN 490 1 2 0
141 FEAT_EPIC_BLINDING_SPEED 491 1 2 1
142 FEAT_EPIC_ENERGY_RESISTANCE_COLD_1 533 1 2 1
143 FEAT_EPIC_ENERGY_RESISTANCE_COLD_2 534 1 2 1
144 FEAT_EPIC_ENERGY_RESISTANCE_COLD_3 535 1 2 1
145 FEAT_EPIC_ENERGY_RESISTANCE_COLD_4 536 1 2 1
146 FEAT_EPIC_ENERGY_RESISTANCE_COLD_5 537 1 2 1
147 FEAT_EPIC_ENERGY_RESISTANCE_COLD_6 538 1 2 1
148 FEAT_EPIC_ENERGY_RESISTANCE_COLD_7 539 1 2 1
149 FEAT_EPIC_ENERGY_RESISTANCE_COLD_8 540 1 2 1
150 FEAT_EPIC_ENERGY_RESISTANCE_COLD_9 541 1 2 1
151 FEAT_EPIC_ENERGY_RESISTANCE_COLD_10 542 1 2 1
152 FEAT_EPIC_ENERGY_RESISTANCE_ACID_1 543 1 2 1
153 FEAT_EPIC_ENERGY_RESISTANCE_ACID_2 544 1 2 1
154 FEAT_EPIC_ENERGY_RESISTANCE_ACID_3 545 1 2 1
155 FEAT_EPIC_ENERGY_RESISTANCE_ACID_4 546 1 2 1
156 FEAT_EPIC_ENERGY_RESISTANCE_ACID_5 547 1 2 1
157 FEAT_EPIC_ENERGY_RESISTANCE_ACID_6 548 1 2 1
158 FEAT_EPIC_ENERGY_RESISTANCE_ACID_7 549 1 2 1
159 FEAT_EPIC_ENERGY_RESISTANCE_ACID_8 550 1 2 1
160 FEAT_EPIC_ENERGY_RESISTANCE_ACID_9 551 1 2 1
161 FEAT_EPIC_ENERGY_RESISTANCE_ACID_10 552 1 2 1
162 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_1 553 1 2 1
163 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_2 554 1 2 1
164 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_3 555 1 2 1
165 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_4 556 1 2 1
166 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_5 557 1 2 1
167 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_6 558 1 2 1
168 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_7 559 1 2 1
169 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_8 560 1 2 1
170 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_9 561 1 2 1
171 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_10 562 1 2 1
172 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_1 563 1 2 1
173 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_2 564 1 2 1
174 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_3 565 1 2 1
175 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_4 566 1 2 1
176 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_5 567 1 2 1
177 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_6 568 1 2 1
178 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_7 569 1 2 1
179 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_8 570 1 2 1
180 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_9 571 1 2 1
181 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_10 572 1 2 1
182 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_1 573 1 2 1
183 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_2 574 1 2 1
184 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_3 575 1 2 1
185 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_4 576 1 2 1
186 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_5 577 1 2 1
187 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_6 578 1 2 1
188 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_7 579 1 2 1
189 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_8 580 1 2 1
190 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_9 581 1 2 1
191 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_10 582 1 2 1
192 FEAT_EPIC_SUPERIOR_INITIATIVE 753 1 2 1
193 FEAT_EPIC_SKILL_FOCUS_RIDE 3038 1 2 1
194 FEAT_EPIC_SKILL_FOCUS_JUMP 3040 1 2 1
195 FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE 3042 1 2 1
196 FEAT_EPIC_SKILL_FOCUS_MARTIAL_LORE 3044 1 2 1
197 FEAT_EPIC_SKILL_FOCUS_BALANCE 3046 1 2 1
198 FEAT_EPIC_SKILL_FOCUS_CRAFT_POISON 3048 1 2 1
199 FEAT_EPIC_SKILL_FOCUS_PSICRAFT 3050 1 2 1
200 FEAT_EPIC_SKILL_FOCUS_CLIMB 3052 1 2 1
201 FEAT_EPIC_SKILL_FOCUS_CRAFT_GENERAL 3054 1 2 1
202 FEAT_EPIC_SKILL_FOCUS_APPRAISE 588 1 2 1
203 FEAT_EPIC_SKILL_FOCUS_CONCENTRATION 589 1 2 1
204 FEAT_EPIC_SKILL_FOCUS_CRAFT_TRAP 590 1 2 1
205 FEAT_EPIC_SKILL_FOCUS_DISABLETRAP 591 1 2 1
206 FEAT_EPIC_SKILL_FOCUS_DISCIPLINE 592 1 2 1
207 FEAT_EPIC_SKILL_FOCUS_HEAL 593 1 2 1
208 FEAT_EPIC_SKILL_FOCUS_HIDE 594 1 2 1
209 FEAT_EPIC_SKILL_FOCUS_LISTEN 595 1 2 1
210 FEAT_EPIC_SKILL_FOCUS_LORE 596 1 2 1
211 FEAT_EPIC_SKILL_FOCUS_MOVESILENTLY 597 1 2 1
212 FEAT_EPIC_SKILL_FOCUS_OPENLOCK 598 1 2 1
213 FEAT_EPIC_SKILL_FOCUS_PARRY 599 1 2 1
214 FEAT_EPIC_SKILL_FOCUS_PERSUADE 601 1 2 1
215 FEAT_EPIC_SKILL_FOCUS_PICKPOCKET 602 1 2 1
216 FEAT_EPIC_SKILL_FOCUS_SEARCH 603 1 2 1
217 FEAT_EPIC_SKILL_FOCUS_SETTRAP 604 1 2 1
218 FEAT_EPIC_SKILL_FOCUS_SPELLCRAFT 605 1 2 1
219 FEAT_EPIC_SKILL_FOCUS_SPOT 606 1 2 1
220 FEAT_EPIC_SKILL_FOCUS_TAUNT 607 1 2 1
221 FEAT_EPIC_SKILL_FOCUS_TUMBLE 608 1 2 1
222 FEAT_EPIC_SKILL_FOCUS_CRAFT_ARMOR 913 1 2 1
223 FEAT_EPIC_SKILL_FOCUS_CRAFT_WEAPON 914 1 2 1
224 FEAT_EPIC_SKILL_FOCUS_BLUFF 917 1 2 1
225 FEAT_EPIC_SKILL_FOCUS_INTIMIDATE 918 1 2 1
226 FEAT_EPIC_GREAT_CHARISMA_1 764 1 2 1
227 FEAT_EPIC_GREAT_CHARISMA_2 765 1 2 1
228 FEAT_EPIC_GREAT_CHARISMA_3 766 1 2 1
229 FEAT_EPIC_GREAT_CHARISMA_4 767 1 2 1
230 FEAT_EPIC_GREAT_CHARISMA_5 768 1 2 1
231 FEAT_EPIC_GREAT_CHARISMA_6 769 1 2 1
232 FEAT_EPIC_GREAT_CHARISMA_7 770 1 2 1
233 FEAT_EPIC_GREAT_CHARISMA_8 771 1 2 1
234 FEAT_EPIC_GREAT_CHARISMA_9 772 1 2 1
235 FEAT_EPIC_GREAT_CHARISMA_10 773 1 2 1
14 PATH_FOCUS_CLOAK_SHADOWS 23673 1 -1 0
15 PATH_FOCUS_DARK_TERRAIN 23674 1 -1 0
16 PATH_FOCUS_EBON_WHISPERS 23675 1 -1 0
17 PATH_FOCUS_EYES_DARKNESS 23676 1 -1 0
18 PATH_FOCUS_SHUTTERS_CLOUDS 23677 1 -1 0
19 PATH_FOCUS_TOUCH_TWILIGHT 23678 1 -1 0
20 PATH_FOCUS_UMBRAL_MIND 23679 1 -1 0
21 PATH_FOCUS_BLACK_MAGIC 23680 1 -1 0
22 PATH_FOCUS_BODY_SOUL 23681 1 -1 0
23 PATH_FOCUS_DARK_REFLECTIONS 23682 1 -1 0
24 PATH_FOCUS_EBON_ROADS 23683 1 -1 0
25 PATH_FOCUS_ELEMENTAL_SHADOWS 23684 1 -1 0
26 PATH_FOCUS_UNBINDING_SHADE 23685 1 -1 0
27 PATH_FOCUS_VEIL_SHADOWS 23686 1 -1 0
28 PATH_FOCUS_BREATH_TWILIGHT 23687 1 -1 0
29 PATH_FOCUS_DARK_METAMORPHOSIS 23688 1 -1 0
30 PATH_FOCUS_EBON_WALLS 23689 1 -1 0
31 PATH_FOCUS_EYES_NIGHT_SKY 23690 1 -1 0
32 PATH_FOCUS_HEART_SOUL 23691 1 -1 0
33 PATH_FOCUS_SHADOW_CALLING 23692 1 -1 0
34 GREATER_PATH_FOCUS_CLOAK_SHADOWS 23693 1 -1 0
35 GREATER_PATH_FOCUS_DARK_TERRAIN 23694 1 -1 0
36 GREATER_PATH_FOCUS_EBON_WHISPERS 23695 1 -1 0
37 GREATER_PATH_FOCUS_EYES_DARKNESS 23696 1 -1 0
38 GREATER_PATH_FOCUS_SHUTTERS_CLOUDS 23697 1 -1 0
39 GREATER_PATH_FOCUS_TOUCH_TWILIGHT 23698 1 -1 0
40 GREATER_PATH_FOCUS_UMBRAL_MIND 23699 1 -1 0
41 GREATER_PATH_FOCUS_BLACK_MAGIC 23700 1 -1 0
42 GREATER_PATH_FOCUS_BODY_SOUL 23701 1 -1 0
43 GREATER_PATH_FOCUS_DARK_REFLECTIONS 23702 1 -1 0
44 GREATER_PATH_FOCUS_EBON_ROADS 23703 1 -1 0
45 GREATER_PATH_FOCUS_ELEMENTAL_SHADOWS 23704 1 -1 0
46 GREATER_PATH_FOCUS_UNBINDING_SHADE 23705 1 -1 0
47 GREATER_PATH_FOCUS_VEIL_SHADOWS 23706 1 -1 0
48 GREATER_PATH_FOCUS_BREATH_TWILIGHT 23707 1 -1 0
49 GREATER_PATH_FOCUS_DARK_METAMORPHOSIS 23708 1 -1 0
50 GREATER_PATH_FOCUS_EBON_WALLS 23709 1 -1 0
51 GREATER_PATH_FOCUS_EYES_NIGHT_SKY 23710 1 -1 0
52 GREATER_PATH_FOCUS_HEART_SOUL 23711 1 -1 0
53 GREATER_PATH_FOCUS_SHADOW_CALLING 23712 1 -1 0
54 NOCTURNAL_CASTER_CLOAK_SHADOWS 23713 1 -1 0
55 NOCTURNAL_CASTER_DARK_TERRAIN 23714 1 -1 0
56 NOCTURNAL_CASTER_EBON_WHISPERS 23715 1 -1 0
57 NOCTURNAL_CASTER_EYES_DARKNESS 23716 1 -1 0
58 NOCTURNAL_CASTER_SHUTTERS_CLOUDS 23717 1 -1 0
59 NOCTURNAL_CASTER_TOUCH_TWILIGHT 23718 1 -1 0
60 NOCTURNAL_CASTER_UMBRAL_MIND 23719 1 -1 0
61 NOCTURNAL_CASTER_BLACK_MAGIC 23720 1 -1 0
62 NOCTURNAL_CASTER_BODY_SOUL 23721 1 -1 0
63 NOCTURNAL_CASTER_DARK_REFLECTIONS 23722 1 -1 0
64 NOCTURNAL_CASTER_EBON_ROADS 23723 1 -1 0
65 NOCTURNAL_CASTER_ELEMENTAL_SHADOWS 23724 1 -1 0
66 NOCTURNAL_CASTER_UNBINDING_SHADE 23725 1 -1 0
67 NOCTURNAL_CASTER_VEIL_SHADOWS 23726 1 -1 0
68 NOCTURNAL_CASTER_BREATH_TWILIGHT 23727 1 -1 0
69 NOCTURNAL_CASTER_DARK_METAMORPHOSIS 23728 1 -1 0
70 NOCTURNAL_CASTER_EBON_WALLS 23729 1 -1 0
71 NOCTURNAL_CASTER_EYES_NIGHT_SKY 23730 1 -1 0
72 NOCTURNAL_CASTER_HEART_SOUL 23731 1 -1 0
73 NOCTURNAL_CASTER_SHADOW_CALLING 23732 1 -1 0
74 FAV_MYST_BENDPERSPECTIVE 23733 1 -1 0
75 FAV_MYST_CARPETSHADOW 23734 1 -1 0
76 FAV_MYST_DUSKANDDAWN 23735 1 -1 0
77 FAV_MYST_LIFEFADES 23736 1 -1 0
78 FAV_MYST_MESMERIZINGSHADE 23737 1 -1 0
79 FAV_MYST_STEELSHADOWS 23738 1 -1 0
80 FAV_MYST_VOICEOFSHADOW 23739 1 -1 0
81 FAV_MYST_BLACKFIRE 23740 1 -1 0
82 FAV_MYST_CONGRESSSHADOWS 23741 1 -1 0
83 FAV_MYST_FLESHFAILS 23742 1 -1 0
84 FAV_MYST_PIERCINGSIGHT 23743 1 -1 0
85 FAV_MYST_SHADOWSKIN 23744 1 -1 0
86 FAV_MYST_SIGHTECLIPSED 23745 1 -1 0
87 FAV_MYST_THOUGHTSSHADOW 23746 1 -1 0
88 FAV_MYST_AFRAIDOFTHEDARK 23747 1 -1 0
89 FAV_MYST_CLINGINGDARKNESS 23748 1 -1 0
90 FAV_MYST_DANCINGSHADOWS 23749 1 -1 0
91 FAV_MYST_FLICKER 23750 1 -1 0
92 FAV_MYST_KILLINGSHADOWS 23751 1 -1 0
93 FAV_MYST_SHARPSHADOWS 23752 1 -1 0
94 FAV_MYST_UMBRALTOUCH 23753 1 -1 0
95 FAV_MYST_AURAOFSHADE 23754 1 -1 0
96 FAV_MYST_BOLSTER 23755 1 -1 0
97 FAV_MYST_SHADOWEVOCATION 23756 1 -1 0
98 FAV_MYST_SHADOWVISION 23757 1 -1 0
99 FAV_MYST_SHADOWSFADE 23758 1 -1 0
100 FAV_MYST_STEPINTOSHADOW 23759 1 -1 0
101 FAV_MYST_WARPSPELL 23760 1 -1 0
102 FAV_MYST_CURTAINSHADOWS 23761 1 -1 0
103 FAV_MYST_DARKAIR 23762 1 -1 0
104 FAV_MYST_ECHOSPELL 23763 1 -1 0
105 FAV_MYST_FEIGNLIFE 23764 1 -1 0
106 FAV_MYST_LANGUOR 23765 1 -1 0
107 FAV_MYST_PASSINTOSHADOW 23766 1 -1 0
108 FAV_MYST_UNRAVELDWEOMER 23767 1 -1 0
109 FAV_MYST_FLOODSHADOWS 23768 1 -1 0
110 FAV_MYST_GREATERSHADOWEVOCATION 23769 1 -1 0
111 FAV_MYST_SHADOWINVESTITURE 23770 1 -1 0
112 FAV_MYST_SHADOWSTORM 23771 1 -1 0
113 FAV_MYST_SHADOWSFADE_GREATER 23772 1 -1 0
114 FAV_MYST_UNVEIL 23773 1 -1 0
115 FAV_MYST_VOYAGESHADOW 23774 1 -1 0
116 FAV_MYST_DARKSOUL 23775 1 -1 0
117 FAV_MYST_EPHEMERALIMAGE 23776 1 -1 0
118 FAV_MYST_LIFEFADESGREATER 23777 1 -1 0
119 FAV_MYST_PRISONNIGHT 23778 1 -1 0
120 FAV_MYST_UMBRALSERVANT 23779 1 -1 0
121 FAV_MYST_TRUTHREVEALED 23780 1 -1 0
122 FAV_MYST_FARSIGHT 23781 1 -1 0
123 FAV_MYST_GRFLESHFAILS 23782 1 -1 0
124 FAV_MYST_SHADOWPLAGUE 23783 1 -1 0
125 FAV_MYST_SOULPUPPET 23784 1 -1 0
126 FAV_MYST_TOMBNIGHT 23785 1 -1 0
127 FAV_MYST_UMBRALBODY 23786 1 -1 0
128 FAV_MYST_ARMYSHADOW 23787 1 -1 0
129 FAV_MYST_CONSUMEESSENCE 23788 1 -1 0
130 FAV_MYST_EPHEMERALSTORM 23789 1 -1 0
131 FAV_MYST_REFLECTIONS 23790 1 -1 0
132 FAV_MYST_SHADOWSURGE 23791 1 -1 0
133 FAV_MYST_SHADOWTIME 23792 1 -1 0
134 ShadowCast 23793 1 -1 0
135 EmpowerMystery 23794 1 -1 0
136 ExtendMystery 23795 1 -1 0
137 MaximizeMystery 23796 1 -1 0
138 QuickenMystery 23797 1 -1 0
139 StillMystery 23798 1 -1 0
140 FEAT_EPIC_ARMOR_SKIN 490 1 -1 0
141 FEAT_EPIC_BLINDING_SPEED 491 1 -1 1
142 FEAT_EPIC_ENERGY_RESISTANCE_COLD_1 533 1 -1 1
143 FEAT_EPIC_ENERGY_RESISTANCE_COLD_2 534 1 -1 1
144 FEAT_EPIC_ENERGY_RESISTANCE_COLD_3 535 1 -1 1
145 FEAT_EPIC_ENERGY_RESISTANCE_COLD_4 536 1 -1 1
146 FEAT_EPIC_ENERGY_RESISTANCE_COLD_5 537 1 -1 1
147 FEAT_EPIC_ENERGY_RESISTANCE_COLD_6 538 1 -1 1
148 FEAT_EPIC_ENERGY_RESISTANCE_COLD_7 539 1 -1 1
149 FEAT_EPIC_ENERGY_RESISTANCE_COLD_8 540 1 -1 1
150 FEAT_EPIC_ENERGY_RESISTANCE_COLD_9 541 1 -1 1
151 FEAT_EPIC_ENERGY_RESISTANCE_COLD_10 542 1 -1 1
152 FEAT_EPIC_ENERGY_RESISTANCE_ACID_1 543 1 -1 1
153 FEAT_EPIC_ENERGY_RESISTANCE_ACID_2 544 1 -1 1
154 FEAT_EPIC_ENERGY_RESISTANCE_ACID_3 545 1 -1 1
155 FEAT_EPIC_ENERGY_RESISTANCE_ACID_4 546 1 -1 1
156 FEAT_EPIC_ENERGY_RESISTANCE_ACID_5 547 1 -1 1
157 FEAT_EPIC_ENERGY_RESISTANCE_ACID_6 548 1 -1 1
158 FEAT_EPIC_ENERGY_RESISTANCE_ACID_7 549 1 -1 1
159 FEAT_EPIC_ENERGY_RESISTANCE_ACID_8 550 1 -1 1
160 FEAT_EPIC_ENERGY_RESISTANCE_ACID_9 551 1 -1 1
161 FEAT_EPIC_ENERGY_RESISTANCE_ACID_10 552 1 -1 1
162 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_1 553 1 -1 1
163 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_2 554 1 -1 1
164 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_3 555 1 -1 1
165 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_4 556 1 -1 1
166 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_5 557 1 -1 1
167 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_6 558 1 -1 1
168 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_7 559 1 -1 1
169 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_8 560 1 -1 1
170 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_9 561 1 -1 1
171 FEAT_EPIC_ENERGY_RESISTANCE_FIRE_10 562 1 -1 1
172 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_1 563 1 -1 1
173 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_2 564 1 -1 1
174 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_3 565 1 -1 1
175 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_4 566 1 -1 1
176 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_5 567 1 -1 1
177 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_6 568 1 -1 1
178 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_7 569 1 -1 1
179 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_8 570 1 -1 1
180 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_9 571 1 -1 1
181 FEAT_EPIC_ENERGY_RESISTANCE_ELECTRICAL_10 572 1 -1 1
182 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_1 573 1 -1 1
183 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_2 574 1 -1 1
184 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_3 575 1 -1 1
185 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_4 576 1 -1 1
186 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_5 577 1 -1 1
187 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_6 578 1 -1 1
188 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_7 579 1 -1 1
189 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_8 580 1 -1 1
190 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_9 581 1 -1 1
191 FEAT_EPIC_ENERGY_RESISTANCE_SONIC_10 582 1 -1 1
192 FEAT_EPIC_SUPERIOR_INITIATIVE 753 1 -1 1
193 FEAT_EPIC_SKILL_FOCUS_RIDE 3038 1 -1 1
194 FEAT_EPIC_SKILL_FOCUS_JUMP 3040 1 -1 1
195 FEAT_EPIC_SKILL_FOCUS_SENSE_MOTIVE 3042 1 -1 1
196 FEAT_EPIC_SKILL_FOCUS_MARTIAL_LORE 3044 1 -1 1
197 FEAT_EPIC_SKILL_FOCUS_BALANCE 3046 1 -1 1
198 FEAT_EPIC_SKILL_FOCUS_CRAFT_POISON 3048 1 -1 1
199 FEAT_EPIC_SKILL_FOCUS_PSICRAFT 3050 1 -1 1
200 FEAT_EPIC_SKILL_FOCUS_CLIMB 3052 1 -1 1
201 FEAT_EPIC_SKILL_FOCUS_CRAFT_GENERAL 3054 1 -1 1
202 FEAT_EPIC_SKILL_FOCUS_APPRAISE 588 1 -1 1
203 FEAT_EPIC_SKILL_FOCUS_CONCENTRATION 589 1 -1 1
204 FEAT_EPIC_SKILL_FOCUS_CRAFT_TRAP 590 1 -1 1
205 FEAT_EPIC_SKILL_FOCUS_DISABLETRAP 591 1 -1 1
206 FEAT_EPIC_SKILL_FOCUS_DISCIPLINE 592 1 -1 1
207 FEAT_EPIC_SKILL_FOCUS_HEAL 593 1 -1 1
208 FEAT_EPIC_SKILL_FOCUS_HIDE 594 1 -1 1
209 FEAT_EPIC_SKILL_FOCUS_LISTEN 595 1 -1 1
210 FEAT_EPIC_SKILL_FOCUS_LORE 596 1 -1 1
211 FEAT_EPIC_SKILL_FOCUS_MOVESILENTLY 597 1 -1 1
212 FEAT_EPIC_SKILL_FOCUS_OPENLOCK 598 1 -1 1
213 FEAT_EPIC_SKILL_FOCUS_PARRY 599 1 -1 1
214 FEAT_EPIC_SKILL_FOCUS_PERSUADE 601 1 -1 1
215 FEAT_EPIC_SKILL_FOCUS_PICKPOCKET 602 1 -1 1
216 FEAT_EPIC_SKILL_FOCUS_SEARCH 603 1 -1 1
217 FEAT_EPIC_SKILL_FOCUS_SETTRAP 604 1 -1 1
218 FEAT_EPIC_SKILL_FOCUS_SPELLCRAFT 605 1 -1 1
219 FEAT_EPIC_SKILL_FOCUS_SPOT 606 1 -1 1
220 FEAT_EPIC_SKILL_FOCUS_TAUNT 607 1 -1 1
221 FEAT_EPIC_SKILL_FOCUS_TUMBLE 608 1 -1 1
222 FEAT_EPIC_SKILL_FOCUS_CRAFT_ARMOR 913 1 -1 1
223 FEAT_EPIC_SKILL_FOCUS_CRAFT_WEAPON 914 1 -1 1
224 FEAT_EPIC_SKILL_FOCUS_BLUFF 917 1 -1 1
225 FEAT_EPIC_SKILL_FOCUS_INTIMIDATE 918 1 -1 1
226 FEAT_EPIC_GREAT_CHARISMA_1 764 1 -1 1
227 FEAT_EPIC_GREAT_CHARISMA_2 765 1 -1 1
228 FEAT_EPIC_GREAT_CHARISMA_3 766 1 -1 1
229 FEAT_EPIC_GREAT_CHARISMA_4 767 1 -1 1
230 FEAT_EPIC_GREAT_CHARISMA_5 768 1 -1 1
231 FEAT_EPIC_GREAT_CHARISMA_6 769 1 -1 1
232 FEAT_EPIC_GREAT_CHARISMA_7 770 1 -1 1
233 FEAT_EPIC_GREAT_CHARISMA_8 771 1 -1 1
234 FEAT_EPIC_GREAT_CHARISMA_9 772 1 -1 1
235 FEAT_EPIC_GREAT_CHARISMA_10 773 1 -1 1

File diff suppressed because it is too large Load Diff

View File

@@ -223,7 +223,8 @@ json json_RecalcMaxHP(json jCreature, int iHitDieValue)
//:: Reads ABILITY_TO_INCREASE from creature's VarTable and applies stat boosts based on increased HD
json json_ApplyAbilityBoostFromHD(json jCreature, int nOriginalHD, int nModifierCap)
json json_ApplyAbilityBoostFromHD(json jCreature, int nOriginalHD)
{
if (jCreature == JsonNull())
return jCreature;
@@ -309,7 +310,7 @@ json json_ApplyAbilityBoostFromHD(json jCreature, int nOriginalHD, int nModifier
// Clamp to valid byte range
if (nNewScore < 1) nNewScore = 1;
if (nNewScore > 255) nNewScore = 255;
if (nNewScore > 250) nNewScore = 250;
if(DEBUG) DoDebug("json_ApplyAbilityBoostFromHD: Increasing " + sAbilityField + " from " + IntToString(nCurrentScore) + " to " + IntToString(nNewScore));
@@ -365,7 +366,7 @@ json json_AdjustCreatureSkillByID(json jCreature, int nSkillID, int nMod)
// Clamp to valid range
if (nNewRank < 0) nNewRank = 0;
if (nNewRank > 255) nNewRank = 255;
if (nNewRank > 127) nNewRank = 127;
// Update the rank in the skill struct
jSkill = GffReplaceByte(jSkill, "Rank", nNewRank);
@@ -679,7 +680,7 @@ json json_AddHitDice(json jCreature, int nAmount)
}
//:: Adjusts a creature's size by nSizeChange (-4 to +4) and updates ability scores accordingly.
json json_AdjustCreatureSize(json jCreature, int nSizeDelta)
json json_AdjustCreatureSize(json jCreature, int nSizeDelta, int nIncorporeal = FALSE)
{
if(DEBUG) DoDebug("prc_inc_json >> json_AdjustCreatureSize: Entering function. nSizeDelta=" + IntToString(nSizeDelta));
@@ -713,6 +714,11 @@ json json_AdjustCreatureSize(json jCreature, int nSizeDelta)
int conMod = nSteps * 2;
int naturalAC = nSteps * 1;
int dexSkillMod = nSteps * -2;
if(nIncorporeal)
{
strMod = 0;
}
if(DEBUG) DoDebug("prc_inc_json >> json_AdjustCreatureSize: Applying stat modifiers: STR=" + IntToString(strMod) +
" DEX=" + IntToString(dexMod) +

View File

@@ -91,6 +91,107 @@ float DamageAvg(int iDamage);
/* Function defintions */
//////////////////////////////////////////////////
// StepDie: increases a damage die by 'nSteps' steps according to d20 SRD progression
// Increment the unarmed damage by nSteps
int StepDie(int nDamage, int nSteps)
{
int i;
for (i = 0; i < nSteps; i++)
{
switch (nDamage)
{
// 1-dice increments
case IP_CONST_MONSTERDAMAGE_1d2: nDamage = IP_CONST_MONSTERDAMAGE_1d3; break;
case IP_CONST_MONSTERDAMAGE_1d3: nDamage = IP_CONST_MONSTERDAMAGE_1d4; break;
case IP_CONST_MONSTERDAMAGE_1d4: nDamage = IP_CONST_MONSTERDAMAGE_1d6; break;
case IP_CONST_MONSTERDAMAGE_1d6: nDamage = IP_CONST_MONSTERDAMAGE_1d8; break;
case IP_CONST_MONSTERDAMAGE_1d8: nDamage = IP_CONST_MONSTERDAMAGE_1d10; break;
case IP_CONST_MONSTERDAMAGE_1d10: nDamage = IP_CONST_MONSTERDAMAGE_1d12; break;
case IP_CONST_MONSTERDAMAGE_1d12: nDamage = IP_CONST_MONSTERDAMAGE_2d8; break;
// 2-dice increments
//case IP_CONST_MONSTERDAMAGE_2d3: nDamage = IP_CONST_MONSTERDAMAGE_2d4; break;
case IP_CONST_MONSTERDAMAGE_2d4: nDamage = IP_CONST_MONSTERDAMAGE_2d6; break;
case IP_CONST_MONSTERDAMAGE_2d6: nDamage = IP_CONST_MONSTERDAMAGE_2d8; break;
case IP_CONST_MONSTERDAMAGE_2d8: nDamage = IP_CONST_MONSTERDAMAGE_2d10; break;
case IP_CONST_MONSTERDAMAGE_2d10: nDamage = IP_CONST_MONSTERDAMAGE_2d12; break;
case IP_CONST_MONSTERDAMAGE_2d12: nDamage = IP_CONST_MONSTERDAMAGE_3d10; break;
// 3-dice increments
case IP_CONST_MONSTERDAMAGE_3d4: nDamage = IP_CONST_MONSTERDAMAGE_3d6; break;
case IP_CONST_MONSTERDAMAGE_3d6: nDamage = IP_CONST_MONSTERDAMAGE_3d8; break;
case IP_CONST_MONSTERDAMAGE_3d8: nDamage = IP_CONST_MONSTERDAMAGE_3d10; break;
case IP_CONST_MONSTERDAMAGE_3d10: nDamage = IP_CONST_MONSTERDAMAGE_3d12; break;
case IP_CONST_MONSTERDAMAGE_3d12: nDamage = IP_CONST_MONSTERDAMAGE_4d8; break;
// 4-dice increments
case IP_CONST_MONSTERDAMAGE_4d4: nDamage = IP_CONST_MONSTERDAMAGE_4d6; break;
case IP_CONST_MONSTERDAMAGE_4d6: nDamage = IP_CONST_MONSTERDAMAGE_4d8; break;
case IP_CONST_MONSTERDAMAGE_4d8: nDamage = IP_CONST_MONSTERDAMAGE_4d10; break;
case IP_CONST_MONSTERDAMAGE_4d10: nDamage = IP_CONST_MONSTERDAMAGE_4d12; break;
case IP_CONST_MONSTERDAMAGE_4d12: nDamage = IP_CONST_MONSTERDAMAGE_5d8; break;
// 5-dice increments
case IP_CONST_MONSTERDAMAGE_5d4: nDamage = IP_CONST_MONSTERDAMAGE_5d6; break;
case IP_CONST_MONSTERDAMAGE_5d6: nDamage = IP_CONST_MONSTERDAMAGE_5d8; break;
case IP_CONST_MONSTERDAMAGE_5d8: nDamage = IP_CONST_MONSTERDAMAGE_5d10; break;
case IP_CONST_MONSTERDAMAGE_5d10: nDamage = IP_CONST_MONSTERDAMAGE_5d12; break;
case IP_CONST_MONSTERDAMAGE_5d12: nDamage = IP_CONST_MONSTERDAMAGE_6d10; break;
// 6-dice increments
//case IP_CONST_MONSTERDAMAGE_6d4: nDamage = IP_CONST_MONSTERDAMAGE_6d6; break;
case IP_CONST_MONSTERDAMAGE_6d6: nDamage = IP_CONST_MONSTERDAMAGE_6d8; break;
case IP_CONST_MONSTERDAMAGE_6d8: nDamage = IP_CONST_MONSTERDAMAGE_6d10; break;
case IP_CONST_MONSTERDAMAGE_6d10: nDamage = IP_CONST_MONSTERDAMAGE_6d12; break;
case IP_CONST_MONSTERDAMAGE_6d12: nDamage = IP_CONST_MONSTERDAMAGE_7d10; break;
// 7-dice increments
case IP_CONST_MONSTERDAMAGE_7d4: nDamage = IP_CONST_MONSTERDAMAGE_7d6; break;
case IP_CONST_MONSTERDAMAGE_7d6: nDamage = IP_CONST_MONSTERDAMAGE_7d8; break;
case IP_CONST_MONSTERDAMAGE_7d8: nDamage = IP_CONST_MONSTERDAMAGE_7d10; break;
case IP_CONST_MONSTERDAMAGE_7d10: nDamage = IP_CONST_MONSTERDAMAGE_7d12; break;
case IP_CONST_MONSTERDAMAGE_7d12: nDamage = IP_CONST_MONSTERDAMAGE_9d10; break;
// 8-dice increments
//case IP_CONST_MONSTERDAMAGE_8d4: nDamage = IP_CONST_MONSTERDAMAGE_8d6; break;
case IP_CONST_MONSTERDAMAGE_8d6: nDamage = IP_CONST_MONSTERDAMAGE_8d8; break;
case IP_CONST_MONSTERDAMAGE_8d8: nDamage = IP_CONST_MONSTERDAMAGE_8d10; break;
case IP_CONST_MONSTERDAMAGE_8d10: nDamage = IP_CONST_MONSTERDAMAGE_8d12; break;
case IP_CONST_MONSTERDAMAGE_8d12: nDamage = IP_CONST_MONSTERDAMAGE_10d10; break;
// 9-dice increments
//case IP_CONST_MONSTERDAMAGE_9d4: nDamage = IP_CONST_MONSTERDAMAGE_9d6; break;
case IP_CONST_MONSTERDAMAGE_9d6: nDamage = IP_CONST_MONSTERDAMAGE_9d8; break;
case IP_CONST_MONSTERDAMAGE_9d8: nDamage = IP_CONST_MONSTERDAMAGE_9d10; break;
case IP_CONST_MONSTERDAMAGE_9d10: nDamage = IP_CONST_MONSTERDAMAGE_9d12; break;
case IP_CONST_MONSTERDAMAGE_9d12: nDamage = IP_CONST_MONSTERDAMAGE_6d20; break;
// 10-dice increments
//case IP_CONST_MONSTERDAMAGE_10d4: nDamage = IP_CONST_MONSTERDAMAGE_10d6; break;
case IP_CONST_MONSTERDAMAGE_10d6: nDamage = IP_CONST_MONSTERDAMAGE_10d8; break;
case IP_CONST_MONSTERDAMAGE_10d8: nDamage = IP_CONST_MONSTERDAMAGE_10d10; break;
case IP_CONST_MONSTERDAMAGE_10d10: nDamage = IP_CONST_MONSTERDAMAGE_10d12; break;
case IP_CONST_MONSTERDAMAGE_10d12: nDamage = IP_CONST_MONSTERDAMAGE_7d20; break;
// d20 increments
case IP_CONST_MONSTERDAMAGE_1d20: nDamage = IP_CONST_MONSTERDAMAGE_3d8; break;
case IP_CONST_MONSTERDAMAGE_2d20: nDamage = IP_CONST_MONSTERDAMAGE_4d12; break;
case IP_CONST_MONSTERDAMAGE_3d20: nDamage = IP_CONST_MONSTERDAMAGE_8d8; break;
case IP_CONST_MONSTERDAMAGE_4d20: nDamage = IP_CONST_MONSTERDAMAGE_8d12; break;
case IP_CONST_MONSTERDAMAGE_5d20: nDamage = IP_CONST_MONSTERDAMAGE_9d12; break; //:: Everything breaks down here
case IP_CONST_MONSTERDAMAGE_6d20: nDamage = IP_CONST_MONSTERDAMAGE_1d20; break;
case IP_CONST_MONSTERDAMAGE_7d20: nDamage = IP_CONST_MONSTERDAMAGE_8d20; break;
case IP_CONST_MONSTERDAMAGE_8d20: nDamage = IP_CONST_MONSTERDAMAGE_9d20; break;
case IP_CONST_MONSTERDAMAGE_9d20: nDamage = IP_CONST_MONSTERDAMAGE_10d20; break;
default: break; // top tier or unknown
}
}
return nDamage;
}
// Clean up any extras in the inventory.
void CleanExtraFists(object oCreature)
{
@@ -168,12 +269,169 @@ void ApplyUnarmedAttackEffects(object oCreature)
}
// Determines the amount of damage a character can do.
// IoDM: +1 dice at level 4, +2 dice at level 8
// IoDM: +1 die at level 4, +2 dice at level 8
// Sacred Fist: Levels add to monk levels, or stand alone as monk levels.
// Shou: 1d6 at level 1, 1d8 at level 2, 1d10 at level 3, 2d6 at level 5
// Monk: 1d6 at level 1, 1d8 at level 4, 1d10 at level 8, 2d6 at level 12, 2d8 at level 16, 2d10 at level 20
// Frostrager: 1d6 at level 1, 1d8 at level 4
int FindUnarmedDamage(object oCreature)
{
int iDamage = 0;
int iMonk = GetLevelByClass(CLASS_TYPE_MONK, oCreature) + GetLocalInt(oCreature, "LiPengMonk");
int iShou = GetLevelByClass(CLASS_TYPE_SHOU, oCreature);
int iBrawler = GetLevelByClass(CLASS_TYPE_BRAWLER, oCreature);
int iSacredFist = GetLevelByClass(CLASS_TYPE_SACREDFIST, oCreature);
int iEnlightenedFist = GetLevelByClass(CLASS_TYPE_ENLIGHTENEDFIST, oCreature);
int iHenshin = GetLevelByClass(CLASS_TYPE_HENSHIN_MYSTIC, oCreature);
int iZuoken = GetLevelByClass(CLASS_TYPE_FIST_OF_ZUOKEN, oCreature);
int iShadowSunNinja = GetLevelByClass(CLASS_TYPE_SHADOW_SUN_NINJA, oCreature);
int iFrost = GetLevelByClass(CLASS_TYPE_FROSTRAGER, oCreature);
int iAscetic = GetLevelByClass(CLASS_TYPE_NINJA, oCreature);
int iRonove = 0;
int iMonkDamage = 1;
int iShouDamage = 1;
int iBrawlerDamage = 1;
int iFrostDamage = 1;
int iSUSDamage = 1;
int iDieIncrease = 0;
int iSize;
if (GetHasSpellEffect(VESTIGE_RONOVE, oCreature) && GetLevelByClass(CLASS_TYPE_BINDER, oCreature))
iRonove = GetLocalInt(oCreature, "RonovesFists");
//:: Determine creature size
if( GetIsPolyMorphedOrShifted(oCreature) || GetPRCSwitch(PRC_APPEARANCE_SIZE))
{
iSize = PRCGetCreatureSize(oCreature) - CREATURE_SIZE_MEDIUM + 5;
}
else
{
iSize = 5; // medium
if (GetHasFeat(FEAT_TINY, oCreature)) iSize = 3;
if (GetHasFeat(FEAT_SMALL, oCreature)) iSize = 4;
if (GetHasFeat(FEAT_LARGE, oCreature)) iSize = 6;
if (GetHasFeat(FEAT_HUGE, oCreature)) iSize = 7;
iSize += PRCGetCreatureSize(oCreature) - PRCGetCreatureSize(oCreature, PRC_SIZEMASK_NONE);
if (iSize < 1) iSize = 1;
if (iSize > 9) iSize = 9;
}
// Sacred Fist code break protection
if (GetHasFeat(FEAT_SF_CODE, oCreature)) iSacredFist = 0;
// Combine monk-like levels
iMonk += iSacredFist + iHenshin + iEnlightenedFist + iShou + iZuoken + iShadowSunNinja;
// Superior Unarmed Strike
if (GetHasFeat(FEAT_SUPERIOR_UNARMED_STRIKE, oCreature))
{
iMonk += 4;
int nHD = GetHitDice(oCreature);
if (nHD >= 16) iSUSDamage = IP_CONST_MONSTERDAMAGE_2d6;
else if (nHD >= 12) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d10;
else if (nHD >= 8) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d8;
else if (nHD >= 4) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d6;
else if (nHD >= 3) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d4;
}
// Ascetic Stalker
if (GetHasFeat(FEAT_ASCETIC_STALKER, oCreature))
iMonk += iAscetic;
// Cap monk progression
if (iMonk > 16 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE)) iMonk = 16;
else if (iMonk > 20) iMonk = 20;
// Ronove replacement
if (iRonove > iMonk) iMonk = iRonove;
// Monk damage calculation (2DA row)
if (iMonk > 0) iMonkDamage = iMonk / 4 + 3;
if (iSize == 5 && iMonkDamage == 7 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE))
iMonkDamage = 8;
// Shou Disciple base damage
if (iShou > 0)
{
int nRow;
if (iShou == 1) nRow = 3;
else if (iShou == 2) nRow = 4;
else if (iShou == 3) nRow = 5;
else if (iShou == 4) nRow = 5;
else if (iShou == 5) nRow = 6;
else nRow = 3;
if (nRow > 6) nRow = 6;
iShouDamage = StringToInt(Get2DACache("unarmed_dmg", "size" + IntToString(iSize), nRow));
}
// Frostrager
if (iFrost > 0) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d6;
if (iFrost > 3) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d8;
// Brawler
if (iBrawler > 0) iBrawlerDamage = iBrawler / 6 + 3;
if (iBrawler >= 36) iBrawlerDamage += 2;
// Armor/shield penalties
if (iMonkDamage > 1)
{
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature);
int bShieldEq = GetBaseItemType(oShield) == BASE_ITEM_SMALLSHIELD ||
GetBaseItemType(oShield) == BASE_ITEM_LARGESHIELD ||
GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD;
if (GetBaseAC(oArmor) > 0 || bShieldEq)
iMonkDamage = 1;
}
if (iShouDamage > 1)
{
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature);
int bShieldEq = GetBaseItemType(oShield) == BASE_ITEM_SMALLSHIELD ||
GetBaseItemType(oShield) == BASE_ITEM_LARGESHIELD ||
GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD;
if (GetBaseAC(oArmor) > 3 || bShieldEq)
iShouDamage = 1;
}
// Determine IoDM die increase
if (GetHasFeat(FEAT_INCREASE_DAMAGE2, oCreature)) iDieIncrease = 2;
else if (GetHasFeat(FEAT_INCREASE_DAMAGE1, oCreature)) iDieIncrease = 1;
// Lookup monk damage in 2DA
iMonkDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iMonkDamage));
// 3.0e monk special cases
if (iSize <= 5 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE))
{
if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d6) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d12;
if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d10) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d20;
}
// Apply IoDM die increase last, after 2DA lookups
if (iMonkDamage > 0) iMonkDamage = StepDie(iMonkDamage, iDieIncrease);
if (iShouDamage > 0) iShouDamage = StepDie(iShouDamage, iDieIncrease);
if (iBrawlerDamage > 0) iBrawlerDamage = StepDie(iBrawlerDamage, iDieIncrease);
if (iFrostDamage > 0) iFrostDamage = StepDie(iFrostDamage, iDieIncrease);
if (iSUSDamage > 0) iSUSDamage = StepDie(iSUSDamage, iDieIncrease);
// Select best damage
iDamage = iMonkDamage;
iDamage = (DamageAvg(iShouDamage ) > DamageAvg(iDamage)) ? iShouDamage : iDamage;
iDamage = (DamageAvg(iFrostDamage ) > DamageAvg(iDamage)) ? iFrostDamage : iDamage;
iDamage = (DamageAvg(iSUSDamage ) > DamageAvg(iDamage)) ? iSUSDamage : iDamage;
iDamage = (DamageAvg(iBrawlerDamage) > DamageAvg(iDamage)) ? iBrawlerDamage : iDamage;
if (DEBUG) DoDebug("prc_inc_unarmed: iDamage "+IntToString(iDamage));
return iDamage;
}
/* int FindUnarmedDamage(object oCreature)
{
int iDamage = 0;
int iMonk = GetLevelByClass(CLASS_TYPE_MONK, oCreature) + GetLocalInt(oCreature, "LiPengMonk");
@@ -195,36 +453,30 @@ int FindUnarmedDamage(object oCreature)
int iDieIncrease = 0;
int iSize;
if (GetHasSpellEffect(VESTIGE_RONOVE, oCreature) && GetLevelByClass(CLASS_TYPE_BINDER, oCreature)) iRonove = GetLocalInt(oCreature, "RonovesFists");
if (GetHasSpellEffect(VESTIGE_RONOVE, oCreature) && GetLevelByClass(CLASS_TYPE_BINDER, oCreature))
iRonove = GetLocalInt(oCreature, "RonovesFists");
// if the creature is shifted, use model size
// otherwise, we want to stick to what the feats say they "should" be.
// No making pixies with Dragon Appearance for "huge" fist damage.
if( GetIsPolyMorphedOrShifted(oCreature)
|| GetPRCSwitch(PRC_APPEARANCE_SIZE))
// Determine creature size
if( GetIsPolyMorphedOrShifted(oCreature) || GetPRCSwitch(PRC_APPEARANCE_SIZE))
{
iSize = PRCGetCreatureSize(oCreature) - CREATURE_SIZE_MEDIUM + 5; // medium is size 5 for us
iSize = PRCGetCreatureSize(oCreature) - CREATURE_SIZE_MEDIUM + 5;
}
else
{
// Determine creature size by feats.
iSize = 5; // medium is size 5 for us
iSize = 5; // medium
if (GetHasFeat(FEAT_TINY, oCreature)) iSize = 3;
if (GetHasFeat(FEAT_SMALL, oCreature)) iSize = 4;
if (GetHasFeat(FEAT_LARGE, oCreature)) iSize = 6;
if (GetHasFeat(FEAT_HUGE, oCreature)) iSize = 7;
// include size changes
iSize += PRCGetCreatureSize(oCreature) - PRCGetCreatureSize(oCreature, PRC_SIZEMASK_NONE);
// cap if needed
if (iSize < 1) iSize = 1;
if (iSize > 9) iSize = 9;
}
// Sacred Fist cannot add their levels if they've broken their code.
// Sacred Fist code break protection
if (GetHasFeat(FEAT_SF_CODE, oCreature)) iSacredFist = 0;
// several classes add their levels to the monk class,
// or use monk progression if the character has no monk levels
// Combine monk-like levels
iMonk += iSacredFist + iHenshin + iEnlightenedFist + iShou + iZuoken + iShadowSunNinja;
// Superior Unarmed Strike
@@ -232,49 +484,66 @@ int FindUnarmedDamage(object oCreature)
{
iMonk += 4;
int nHD = GetHitDice(oCreature);
if (nHD >= 16) iSUSDamage = IP_CONST_MONSTERDAMAGE_2d6;
if (nHD >= 16) iSUSDamage = IP_CONST_MONSTERDAMAGE_2d6;
else if (nHD >= 12) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d10;
else if (nHD >= 8) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d8;
else if (nHD >= 4) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d6;
else if (nHD >= 3) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d4;
else if (nHD >= 8) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d8;
else if (nHD >= 4) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d6;
else if (nHD >= 3) iSUSDamage = IP_CONST_MONSTERDAMAGE_1d4;
}
// Ascetic Stalker
if (GetHasFeat(FEAT_ASCETIC_STALKER, oCreature))
iMonk += iAscetic;
// In 3.0e, Monk progression stops after level 16:
if (iMonk > 16 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE) ) iMonk = 16;
// in 3.5e, monk progression stops at 20.
else if(iMonk > 20) iMonk = 20;
// Cap monk progression
if (iMonk > 16 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE)) iMonk = 16;
else if (iMonk > 20) iMonk = 20;
// Ronove is in place of monk, does not stack
// Ronove replacement
if (iRonove > iMonk) iMonk = iRonove;
// monks damage progesses every four levels, starts at 1d6
if (iMonk > 0)
iMonkDamage = iMonk / 4 + 3;
// Monk damage calculation
if (iMonk > 0) iMonkDamage = iMonk / 4 + 3;
// For medium monks in 3.0e skip 2d8 and go to 1d20
if(iSize == 5 && iMonkDamage == 7 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE) ) iMonkDamage = 8;
if(iSize == 5 && iMonkDamage == 7 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE))
iMonkDamage = 8;
// Shou Disciple either adds its level to existing class or does its own damage, depending
// on which is better. Here we will determine how much damage the Shou Disciple does
// without stacking.
if (iShou > 0) iShouDamage = iShou + 2; // Lv. 1: 1d6, Lv. 2: 1d8, Lv. 3: 1d10
if (iShou > 3) iShouDamage--; // Lv. 4: 1d10, Lv. 5: 2d6
iShouDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iShouDamage));
// Frostrager does not stack with other damage types
if (iFrost > 0) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d6; // Lv. 1: 1d6
if (iFrost > 3) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d8; // Lv. 3: 1d8
//if (iShou > 0) iShouDamage = iShou + 2; // Lv. 1: 1d6, Lv. 2: 1d8, Lv. 3: 1d10
//if (iShou > 3) iShouDamage--; // Lv. 4: 1d10, Lv. 5: 2d6
//iShouDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iShouDamage));
if (iShou > 0)
{
// Determine 2DA row for Shou progression
int nRow;
if (iShou == 1) nRow = 3; // monk1
else if (iShou == 2) nRow = 4; // monk2
else if (iShou == 3) nRow = 5; // monk3
else if (iShou == 4) nRow = 6; // monk4
else if (iShou == 5) nRow = 7; // monk5
else if (iShou == 6) nRow = 8; // monk6
else if (iShou == 7) nRow = 9; // monk7
else nRow = 10; // monk8+
nRow += iDieIncrease;
if (nRow > 10) nRow = 10; // clamp to max row
// Brawler follows monk progression except for the last one (3d8)
if (iBrawler > 0) iBrawlerDamage = iBrawler / 6 + 3; // 1d6, 1d8, 1d10, 2d6, 2d8, 2d10
if (iBrawler >= 36) iBrawlerDamage += 2; // 3d8
// Lookup damage in unarmed_damage.2da using size column
iShouDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), nRow));
}
// Monks and monk-like classes deal no additional damage when wearing any armor, at
// least in NWN. This is to reflect that. No shields too.
// Frostrager
if (iFrost > 0) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d6;
if (iFrost > 3) iFrostDamage = IP_CONST_MONSTERDAMAGE_1d8;
// Brawler
if (iBrawler > 0) iBrawlerDamage = iBrawler / 6 + 3;
if (iBrawler >= 36) iBrawlerDamage += 2;
// Armor/shield penalties
if (iMonkDamage > 1)
{
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
@@ -284,13 +553,10 @@ int FindUnarmedDamage(object oCreature)
GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD;
if (GetBaseAC(oArmor) > 0 || bShieldEq)
{
iMonkDamage = 1;
}
}
// Shou Disciples can wear light armor
if (iShouDamage > 1)
if (iShouDamage > 1)
{
object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature);
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCreature);
@@ -299,53 +565,31 @@ int FindUnarmedDamage(object oCreature)
GetBaseItemType(oShield) == BASE_ITEM_TOWERSHIELD;
if (GetBaseAC(oArmor) > 3 || bShieldEq)
{
iShouDamage = 1;
}
iShouDamage = 1;
}
// For Initiate of Draconic Mysteries
if (GetHasFeat(FEAT_INCREASE_DAMAGE2, oCreature)) iDieIncrease = 2;
else if (GetHasFeat(FEAT_INCREASE_DAMAGE1, oCreature)) iDieIncrease = 1;
/* //:: Expansion / Compression powers (Double dipping?)
int nExpansion = GetLocalInt(oCreature, "PRC_Power_Expansion_SizeIncrease");
int nCompression = GetLocalInt(oCreature, "PRC_Power_Compression_SizeReduction");
if (nExpansion)
{
iSize += nExpansion;
}
if (nCompression)
{
iSize -= nCompression;
} */
// IoDM die increase
if (GetHasFeat(FEAT_INCREASE_DAMAGE2, oCreature)) iDieIncrease += 2;
else if (GetHasFeat(FEAT_INCREASE_DAMAGE1, oCreature)) iDieIncrease += 1;
iMonkDamage += iDieIncrease;
iShouDamage += iDieIncrease;
iBrawlerDamage += iDieIncrease;
iFrostDamage += iDieIncrease;
iSUSDamage += iDieIncrease;
//FloatingTextStringOnCreature("prc_inc_unarmed: Size is: "+IntToString(iSize)+".", oCreature);
//FloatingTextStringOnCreature("prc_inc_unarmed: Pre 2DA Lookup >> iMonkDamage = "+IntToString(iMonkDamage)+".", oCreature);
// now, read the damage from the table in unarmed_dmg.2da
// Lookup final monk damage in 2DA
iMonkDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iMonkDamage));
iShouDamage = StringToInt(Get2DACache("unarmed_dmg","size" + IntToString(iSize), iShouDamage));
//FloatingTextStringOnCreature("prc_inc_unarmed: Post 2DA Lookup >> iMonkDamage = "+IntToString(iMonkDamage)+".", oCreature);
// Medium+ monks have some special values on the table in 3.0:
// 3.0e monk special cases
if (iSize >= 5 && !GetPRCSwitch(PRC_3_5e_FIST_DAMAGE))
{
if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d6) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d12;
if (iMonkDamage == IP_CONST_MONSTERDAMAGE_2d10) iMonkDamage = IP_CONST_MONSTERDAMAGE_1d20;
}
// Select best damage
iDamage = iMonkDamage;
// Future unarmed classes: if you do your own damage, add in "comparisons" below here.
iDamage = (DamageAvg(iShouDamage ) > DamageAvg(iDamage)) ? iShouDamage : iDamage;
iDamage = (DamageAvg(iFrostDamage ) > DamageAvg(iDamage)) ? iFrostDamage : iDamage;
iDamage = (DamageAvg(iSUSDamage ) > DamageAvg(iDamage)) ? iSUSDamage : iDamage;
@@ -354,6 +598,8 @@ int FindUnarmedDamage(object oCreature)
return iDamage;
}
*/
// Adds appropriate feats to the skin. Stolen from SoulTaker + expanded with overwhelming/devastating critical.
void UnarmedFeats(object oCreature)

View File

@@ -975,7 +975,8 @@ void RemoveSpellFromChosenList(int nClass, int spellbookId, int spellCircle, obj
// for psionics we need to check if the removed spell was a expanded knowledge choice
// or not. The id of the list is -1 or -2.
int i;
for (i == -1; i >= -2; i--)
//for (i == -1; i >= -2; i--)
for (i = -1; i >= -2; i--)
{
json expList = (i == -1) ? GetExpandedChoicesList(nClass, oPC) :
GetEpicExpandedChoicesList(nClass, oPC);
@@ -1558,6 +1559,19 @@ int GetRemainingSpellChoices(int nClass, int circleLevel, object oPC=OBJECT_SELF
}
void FinishLevelUp(int nClass, object oPC=OBJECT_SELF)
{
RemoveSpells(nClass, oPC);
LearnSpells(nClass, oPC);
if (nClass == CLASS_TYPE_ARCHIVIST)
{
int nLevel = GetLevelByClass(nClass, oPC);
SetPersistantLocalInt(oPC, "LastSpellGainLevel", nLevel);
}
CloseNUILevelUpWindow(oPC); // Close while selected-class var is still set
ClearLevelUpNUICaches(nClass, oPC);
}
/* void FinishLevelUp(int nClass, object oPC=OBJECT_SELF)
{
RemoveSpells(nClass, oPC);
LearnSpells(nClass, oPC);
@@ -1567,7 +1581,7 @@ void FinishLevelUp(int nClass, object oPC=OBJECT_SELF)
SetPersistantLocalInt(oPC, "LastSpellGainLevel", nLevel);
}
ClearLevelUpNUICaches(nClass, oPC);
}
} */
void ClearLevelUpNUICaches(int nClass, object oPC=OBJECT_SELF)
{

View File

@@ -28,11 +28,17 @@ void CreateSpellDescriptionNUI(object oPlayer, int featID, int spellId=0, int re
void CreateSpellDescriptionNUI(object oPlayer, int featID, int spellId=0, int realSpellId=0)
{
// look for existing window and destroy
int nPreviousToken = NuiFindWindow(OBJECT_SELF, NUI_SPELL_DESCRIPTION_WINDOW_ID);
int nPreviousToken = NuiFindWindow(oPlayer, NUI_SPELL_DESCRIPTION_WINDOW_ID);
if(nPreviousToken != 0)
{
NuiDestroy(oPlayer, nPreviousToken);
}
/* int nPreviousToken = NuiFindWindow(OBJECT_SELF, NUI_SPELL_DESCRIPTION_WINDOW_ID);
if(nPreviousToken != 0)
{
NuiDestroy(OBJECT_SELF, nPreviousToken);
}
} */
// in order of accuracy for names it goes RealSpellID > SpellID > FeatID
string spellName;

View File

@@ -47,12 +47,10 @@ int GetWeaponFocusFeatItemProperty(int nFeatNumber)
if(nItemProperty != -1) return nItemProperty;
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_TRIDENT, IP_CONST_FEAT_WEAPON_FOCUS_TRIDENT);
if(nItemProperty != -1) return nItemProperty;
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_LIGHT_LANCE, IP_CONST_FEAT_WEAPON_FOCUS_GOAD);
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_EAGLE_CLAW, IP_CONST_FEAT_WEAPON_FOCUS_GOAD);
if(nItemProperty != -1) return nItemProperty;
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_LIGHTBLADE);
if(nItemProperty != -1) return nItemProperty;
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_EAGLE_CLAW, IP_CONST_FEAT_WEAPON_FOCUS_EAGLE_CLAW);
if(nItemProperty != -1) return nItemProperty;
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_THINBLADE, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_THINBLADE);
if(nItemProperty != -1) return nItemProperty;
nItemProperty = GetFeatItemProperty(nFeatNumber, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE, IP_CONST_FEAT_WEAPON_FOCUS_ELVEN_COURTBLADE);

Binary file not shown.

Binary file not shown.

View File

@@ -29,3 +29,4 @@
25 WeapProfSim_Club 7955
26 WeapProfMar_Shortbow 7910
27 FEAT_ABERRATION_SPELLCASTING_DRIDER 18201
28 Large_Creature 4760

View File

@@ -68,10 +68,12 @@ void main()
sHeader1 += "This will grant you proficiency and weapon focus in that weapon.";
// Set the header
SetHeader(sHeader1);
// Add responses for the PC
// Response numbers are baseitems.2da row
AddChoice("Warhammer", 5, oPC);
AddChoice("Light Hammer", 37, oPC);
// Add responses for the PC
// Response numbers are baseitems.2da row
AddChoice("Warhammer", 5, oPC);
AddChoice("Light Hammer", 37, oPC);
AddChoice("Maul", 123, oPC);
MarkStageSetUp(STAGE_WEAPON_CHOICE, oPC); // This prevents the setup being run for this stage again until MarkStageNotSetUp is called for it
SetDefaultTokens(); // Set the next, previous, exit and wait tokens to default values

View File

@@ -122,7 +122,7 @@ void main()
}
//:: Update stats
jTree = json_ApplyAbilityBoostFromHD(jTree, nOriginalHD, nVerdant);
jTree = json_ApplyAbilityBoostFromHD(jTree, nOriginalHD);
if (jTree == JSON_NULL)
{
SendMessageToPC(oPC, "json_ApplyAbilityBoostFromHD failed <20> JSON became invalid.");

View File

@@ -15,6 +15,7 @@
//#include "inc_dispel"
#include "prc_inc_assoc"
#include "prc_inc_template"
#include "prc_inc_json"
const int PACKAGE_ELEMENTAL_STR = PACKAGE_ELEMENTAL;
const int PACKAGE_ELEMENTAL_DEX = PACKAGE_FEY;
@@ -32,7 +33,7 @@ void main()
if(GetLevelByClass(CLASS_TYPE_MASTER_OF_SHADOW, oPC))
{
//handles summoning of shadow familiar
MasterShadow(oPC);
DelayCommand(0.0f, MasterShadow(oPC));
}
else if(GetLevelByClass(CLASS_TYPE_BONDED_SUMMONNER, oPC))
{
@@ -299,7 +300,185 @@ void SummonPRCFamiliar(object oPC)
SetName(oFam, sName);
}
// Watch function: despawns Shadow Servant if master is dead or out of range
void ShadowServantWatch(object oShadow, object oPC)
{
if(DEBUG) DoDebug("nw_s2_familiar >> ShadowServantWatch: Starting function.");
int nMaster = GetLevelByClass(CLASS_TYPE_MASTER_OF_SHADOW, oPC);
float fRange = 30.0 + (nMaster * 10);
if (!GetIsObjectValid(oShadow) || !GetIsObjectValid(oPC)) return;
if (GetIsDead(oPC) ||
GetDistanceBetween(oShadow, oPC) > FeetToMeters(fRange))
{
DestroyObject(oShadow);
return;
}
DelayCommand(1.0, ShadowServantWatch(oShadow, oPC));
}
void MasterShadow(object oPC)
{
object oShadow = GetAssociateNPC(ASSOCIATE_TYPE_FAMILIAR, oPC, NPC_MS_ELEMENTAL);
//remove previously summoned familiar
if(GetIsObjectValid(oShadow))
DestroyAssociate(oShadow);
int nMaster = GetLevelByClass(CLASS_TYPE_MASTER_OF_SHADOW, oPC);
int nDexBonus = (nMaster >= 5 && (nMaster % 2)) ? (nMaster - 3) : 0;
float fRange = 30.0 + (nMaster * 10);
string SHADOW_SERVANT_RESREF = "prc_shadow_serv";
// Target location
location lTarget = GetLocation(oPC);
// Distance check
if (GetDistanceBetweenLocations(GetLocation(oPC), lTarget) > FeetToMeters(fRange))
{
SendMessageToPC(oPC, "That location is too far away.");
return;
}
// Load template
json jShadow = TemplateToJson(SHADOW_SERVANT_RESREF, RESTYPE_UTC);
if (jShadow == JSON_NULL)
{
SendMessageToPC(oPC, "nw_s2_familiar: TemplateToJson failed <20> bad resref or resource missing.");
return;
}
// Original HD
int nOriginalHD = json_GetCreatureHD(jShadow);
if (nOriginalHD <= 0)
{
SendMessageToPC(oPC, "nw_s2_familiar: json_GetCreatureHD failed <20> template missing HD data.");
return;
}
//:: Add Hit Dice
int nHDToAdd = nMaster -1;
if (nHDToAdd < 0) nHDToAdd = 0;
jShadow = json_AddHitDice(jShadow, nHDToAdd);
if (jShadow == JSON_NULL)
{
SendMessageToPC(oPC, "nw_s2_familiar: json_AddHitDice failed - JSON became invalid.");
return;
}
//:: Update feats
jShadow = json_AddFeatsFromCreatureVars(jShadow, nOriginalHD);
if (jShadow == JSON_NULL)
{
SendMessageToPC(oPC, "nw_s2_familiar: json_AddFeatsFromCreatureVars failed <20> JSON became invalid.");
return;
}
//:: Update Skills
jShadow = json_AdjustCreatureSkillByID(jShadow, SKILL_LISTEN, nHDToAdd);
if(jShadow == JSON_NULL)
{
SendMessageToPC(oPC, "nw_s2_familiar: json_AdjustCreatureSkillByID failed <20> JSON became invalid.");
return;
}
//:: Update stats
jShadow = json_ApplyAbilityBoostFromHD(jShadow, nOriginalHD);
if (jShadow == JSON_NULL)
{
SendMessageToPC(oPC, "nw_s2_familiar: json_ApplyAbilityBoostFromHD failed <20> JSON became invalid.");
return;
}
//:: Bonus DEX from Shadow Servant class ability
jShadow = json_UpdateTemplateStats(jShadow, 0, nDexBonus);
// Size increase
if (nMaster > 2)
{
jShadow = json_AdjustCreatureSize(jShadow, 1, TRUE);
if (jShadow == JSON_NULL)
{
SendMessageToPC(oPC, "nw_s2_familiar: json_AdjustCreatureSize failed - JSON became invalid.");
return;
}
}
//string sNewResRef = GetPCPublicCDKey(oPC, TRUE)+"SHSERV";
//if(DEBUG) DoDebug("New resref is: "+sNewResRef+".");
//JsonToTemplate(jShadow, "shadowservant", RESTYPE_UTC);
oShadow = JsonToObject(jShadow, lTarget);
effect eSummon = ExtraordinaryEffect(EffectSummonCreature("", VFX_FNF_SUMMON_UNDEAD, 0.0, 0, VFX_IMP_UNSUMMON, oShadow));
ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eSummon, lTarget);
//oShadow = CreateLocalNPC(oPC, ASSOCIATE_TYPE_FAMILIAR, sNewResRef, lTarget, NPC_MS_ELEMENTAL);
//oShadow = CreateObject(OBJECT_TYPE_CREATURE, "shadowservant", GetLocation(oPC));
object oSummon = GetAssociate(ASSOCIATE_TYPE_SUMMONED, OBJECT_SELF);
if(GetIsObjectValid(oSummon))
{
if(GetResRef(oSummon) == SHADOW_SERVANT_RESREF)
{
SetLocalNPC(oPC, oShadow, ASSOCIATE_TYPE_FAMILIAR, 1);
SetAssociateState(NW_ASC_HAVE_MASTER, TRUE, oShadow);
SetAssociateState(NW_ASC_DISTANCE_2_METERS);
SetAssociateState(NW_ASC_DISTANCE_4_METERS, FALSE);
SetAssociateState(NW_ASC_DISTANCE_6_METERS, FALSE);
SetLocalInt(oPC, "FamiliarToTheDeath", 100);
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, GetLocation(oShadow));
}
}
if(DEBUG) DoDebug("MasterShadow: Creature object created.");
AddAssociate(oPC, oShadow);
if(DEBUG) DoDebug("MasterShadow: Associate Added.");
if (nMaster >= 3) // Grow to size large
SetCreatureAppearanceType(oShadow, APPEARANCE_TYPE_SHADOW_FIEND);
//set its name
string sName = GetFamiliarName(oPC);
if(sName == "")
sName = GetName(oPC)+ "'s Shadow Servant";
SetName(oShadow, sName);
itemproperty ipIP;
object oSkin = GetPCSkin(oShadow);
if (nMaster >= 10)
ipIP =ItemPropertyDamageImmunity(IP_CONST_DAMAGETYPE_COLD,IP_CONST_DAMAGEIMMUNITY_100_PERCENT);
else if (nMaster >= 6)
ipIP =ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD, IP_CONST_DAMAGERESIST_20);
else if (nMaster >= 4)
ipIP =ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD, IP_CONST_DAMAGERESIST_10);
else if (nMaster >= 2)
ipIP =ItemPropertyDamageResistance(IP_CONST_DAMAGETYPE_COLD, IP_CONST_DAMAGERESIST_5);
IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);
}
/* void MasterShadow(object oPC)
{
object oFam = GetAssociateNPC(ASSOCIATE_TYPE_FAMILIAR, oPC, NPC_MS_ELEMENTAL);
@@ -321,7 +500,7 @@ void MasterShadow(object oPC)
//set its name
string sName = GetFamiliarName(oPC);
if(sName == "")
sName = GetName(oPC)+ "'s Shadow Elemental";
sName = GetName(oPC)+ "'s Shadow Servant";
SetName(oFam, sName);
itemproperty ipIP;
@@ -339,4 +518,4 @@ void MasterShadow(object oPC)
if (nLevel >= 3) // Grow to size large
SetCreatureAppearanceType(oFam, APPEARANCE_TYPE_SHADOW_FIEND);
}
} */

View File

@@ -71128,17 +71128,17 @@ Special Abilities:
<entry id="75568" lang="en" sex="m">Spellcasting: Upon reaching levels 2, 3, 4, 5, 6 the Sanctified Mind gains new spells as if he had also gained a level in his highest level divine spellcasting class.</entry>
<entry id="75569" lang="en" sex="m">Spellcasting: Each level, the Soulmanifester gains new spells per day as if they had also gained a level in their highest level arcane spellcasting class.</entry>
<entry id="75679" lang="en" sex="m">### BEGIN SPELLCASTER MARKER FEATS#</entry>
<entry id="75680" lang="en" sex="m">Aberration Spellcasting (Sublime Chord)</entry>
<entry id="75681" lang="en" sex="m">Fey Spellcasting (Sublime Chord)</entry>
<entry id="75682" lang="en" sex="m">Monstrous Spellcasting (Sublime Chord)</entry>
<entry id="75683" lang="en" sex="m">Outsider Spellcasting (Sublime Chord)</entry>
<entry id="75684" lang="en" sex="m">Shapechanger Spellcasting (Sublime Chord)</entry>
<entry id="75685" lang="en" sex="m">Bard Spellcasting (Sublime Chord)</entry>
<entry id="75686" lang="en" sex="m">Beguiler Spellcasting (Sublime Chord)</entry>
<entry id="75687" lang="en" sex="m">Duskblade Spellcasting (Sublime Chord)</entry>
<entry id="75688" lang="en" sex="m">Sorcerer Spellcasting (Sublime Chord)</entry>
<entry id="75689" lang="en" sex="m">Warmage Spellcasting (Sublime Chord)</entry>
<entry id="75690" lang="en" sex="m">Wizard Spellcasting (Sublime Chord)</entry>
<entry id="75680" lang="en" sex="m">Sublime Chord Spellcasting (Aberration)</entry>
<entry id="75681" lang="en" sex="m">Sublime Chord Spellcasting (Fey)</entry>
<entry id="75682" lang="en" sex="m">Sublime Chord Spellcasting (Monstrous)</entry>
<entry id="75683" lang="en" sex="m">Sublime Chord Spellcasting (Outsider)</entry>
<entry id="75684" lang="en" sex="m">Sublime Chord Spellcasting (Shapechanger)</entry>
<entry id="75685" lang="en" sex="m">Sublime Chord Spellcasting (Bard)</entry>
<entry id="75686" lang="en" sex="m">Sublime Chord Spellcasting (Beguiler)</entry>
<entry id="75687" lang="en" sex="m">Sublime Chord Spellcasting (Duskblade)</entry>
<entry id="75688" lang="en" sex="m">Sublime Chord Spellcasting (Sorcerer)</entry>
<entry id="75689" lang="en" sex="m">Sublime Chord Spellcasting (Warmage)</entry>
<entry id="75690" lang="en" sex="m">Sublime Chord Spellcasting (Wizard)</entry>
<entry id="75691" lang="en" sex="m">Spellcasting: A sublime chord's caster level for both her sublime chord spells and the spells she gains from other arcane spellcasting classes is determined by adding her sublime chord level to her level in another arcane spellcasting class. If she had more than one arcane spellcasting class before becoming a sublime chord, she must choose which class to add her sublime chord levels for the purpose of determining her sublime chord spellcaster level.</entry>
<entry id="75700" lang="en" sex="m">Bardic Spellcasting (Gloura)</entry>
<entry id="75701" lang="en" sex="m">Sorcerous Spellcasting (Drider)</entry>
@@ -71211,7 +71211,7 @@ Special Abilities:
<entry id="75768" lang="en" sex="m">Elemental Savant Spellcasting (Aberration)</entry>
<entry id="75769" lang="en" sex="m">Eldritch Theurge Spellcasting (Aberration)</entry>
<entry id="75770" lang="en" sex="m">Force Missile Mage Spellcasting (Aberration)</entry>
<entry id="75771" lang="en" sex="m">Fochulan Lyrist Spellcasting (Aberration)</entry>
<entry id="75771" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Aberration)</entry>
<entry id="75772" lang="en" sex="m">Frost Mage Spellcasting (Aberration)</entry>
<entry id="75773" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Aberration)</entry>
<entry id="75774" lang="en" sex="m">Harper Mage Spellcasting (Aberration)</entry>
@@ -71258,7 +71258,7 @@ Special Abilities:
<entry id="75815" lang="en" sex="m">Elemental Savant Spellcasting (Monstrous Humaniod)</entry>
<entry id="75816" lang="en" sex="m">Eldritch Theurge Spellcasting (Monstrous Humaniod)</entry>
<entry id="75817" lang="en" sex="m">Force Missile Mage Spellcasting (Monstrous Humaniod)</entry>
<entry id="75818" lang="en" sex="m">Fochulan Lyrist Spellcasting (Monstrous Humaniod)</entry>
<entry id="75818" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Monstrous Humaniod)</entry>
<entry id="75819" lang="en" sex="m">Frost Mage Spellcasting (Monstrous Humaniod)</entry>
<entry id="75820" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Monstrous Humaniod)</entry>
<entry id="75821" lang="en" sex="m">Harper Mage Spellcasting (Monstrous Humaniod)</entry>
@@ -71305,7 +71305,7 @@ Special Abilities:
<entry id="75862" lang="en" sex="m">Elemental Savant Spellcasting (Outsider)</entry>
<entry id="75863" lang="en" sex="m">Eldritch Theurge Spellcasting (Outsider)</entry>
<entry id="75864" lang="en" sex="m">Force Missile Mage Spellcasting (Outsider)</entry>
<entry id="75865" lang="en" sex="m">Fochulan Lyrist Spellcasting (Outsider)</entry>
<entry id="75865" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Outsider)</entry>
<entry id="75866" lang="en" sex="m">Frost Mage Spellcasting (Outsider)</entry>
<entry id="75867" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Outsider)</entry>
<entry id="75868" lang="en" sex="m">Harper Mage Spellcasting (Outsider)</entry>
@@ -71352,7 +71352,7 @@ Special Abilities:
<entry id="75909" lang="en" sex="m">Elemental Savant Spellcasting (Shapechanger)</entry>
<entry id="75910" lang="en" sex="m">Eldritch Theurge Spellcasting (Shapechanger)</entry>
<entry id="75911" lang="en" sex="m">Force Missile Mage Spellcasting (Shapechanger)</entry>
<entry id="75912" lang="en" sex="m">Fochulan Lyrist Spellcasting (Shapechanger)</entry>
<entry id="75912" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Shapechanger)</entry>
<entry id="75913" lang="en" sex="m">Frost Mage Spellcasting (Shapechanger)</entry>
<entry id="75914" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Shapechanger)</entry>
<entry id="75915" lang="en" sex="m">Harper Mage Spellcasting (Shapechanger)</entry>
@@ -71394,7 +71394,7 @@ Special Abilities:
<entry id="75951" lang="en" sex="m">Enlightened Fist Spellcasting (Assassin)</entry>
<entry id="75952" lang="en" sex="m">Elemental Savant Spellcasting (Assassin)</entry>
<entry id="75953" lang="en" sex="m">Eldritch Theurge Spellcasting (Assassin)</entry>
<entry id="75954" lang="en" sex="m">Fochulan Lyrist Spellcasting (Assassin)</entry>
<entry id="75954" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Assassin)</entry>
<entry id="75955" lang="en" sex="m">Frost Mage Spellcasting (Assassin)</entry>
<entry id="75956" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Assassin)</entry>
<entry id="75957" lang="en" sex="m">Havoc Mage Spellcasting (Assassin)</entry>
@@ -71412,7 +71412,7 @@ Special Abilities:
<entry id="75969" lang="en" sex="m">Ultimate Magus Spellcasting (Assassin)</entry>
<entry id="75970" lang="en" sex="m">Unseen Seer Spellcasting (Assassin)</entry>
<entry id="75971" lang="en" sex="m">Wild Mage Spellcasting (Assassin)</entry>
<entry id="75972" lang="en" sex="m">Abjurant Championon Spellcasting (Bard)</entry>
<entry id="75972" lang="en" sex="m">Abjurant Champion Spellcasting (Bard)</entry>
<entry id="75973" lang="en" sex="m">Acolyte of the Skin Spellcasting (Bard)</entry>
<entry id="75974" lang="en" sex="m">Master Alchemist Spellcasting (Bard)</entry>
<entry id="75975" lang="en" sex="m">Alienist Spellcasting (Bard)</entry>
@@ -71472,8 +71472,8 @@ Special Abilities:
<entry id="76029" lang="en" sex="m">Eldritch Knight Spellcasting (Beguiler)</entry>
<entry id="76030" lang="en" sex="m">Enlightened Fist Spellcasting (Beguiler)</entry>
<entry id="76031" lang="en" sex="m">Elemental Savant Spellcasting (Beguiler)</entry>
<entry id="76032" lang="en" sex="m">Eldritch Theurge Adept Spellcasting (Beguiler)</entry>
<entry id="76033" lang="en" sex="m">Fochulan Lyrist Spellcasting (Beguiler)</entry>
<entry id="76032" lang="en" sex="m">Eldritch Theurge Spellcasting (Beguiler)</entry>
<entry id="76033" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Beguiler)</entry>
<entry id="76034" lang="en" sex="m">Frost Mage Spellcasting (Beguiler)</entry>
<entry id="76035" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Beguiler)</entry>
<entry id="76036" lang="en" sex="m">Harper Mage Spellcasting (Beguiler)</entry>
@@ -71541,8 +71541,8 @@ Special Abilities:
<entry id="76098" lang="en" sex="m">Eldritch Knight Spellcasting (Cultist of the Shattered Peaks)</entry>
<entry id="76099" lang="en" sex="m">Enlightened Fist Spellcasting (Cultist of the Shattered Peaks)</entry>
<entry id="76100" lang="en" sex="m">Elemental Savant Spellcasting (Cultist of the Shattered Peaks)</entry>
<entry id="76101" lang="en" sex="m">Eldritch Theurge Adept Spellcasting (Cultist of the Shattered Peaks)</entry>
<entry id="76102" lang="en" sex="m">Fochulan Lyrist Spellcasting (Cultist of the Shattered Peaks)</entry>
<entry id="76101" lang="en" sex="m">Eldritch Theurge Spellcasting (Cultist of the Shattered Peaks)</entry>
<entry id="76102" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Cultist of the Shattered Peaks)</entry>
<entry id="76103" lang="en" sex="m">Frost Mage Spellcasting (Cultist of the Shattered Peaks)</entry>
<entry id="76104" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Cultist of the Shattered Peaks)</entry>
<entry id="76105" lang="en" sex="m">Harper Mage Spellcasting (Cultist of the Shattered Peaks)</entry>
@@ -71580,8 +71580,8 @@ Special Abilities:
<entry id="76137" lang="en" sex="m">Eldritch Knight Spellcasting (Dread Necromancer)</entry>
<entry id="76138" lang="en" sex="m">Enlightened Fist Spellcasting (Dread Necromancer)</entry>
<entry id="76139" lang="en" sex="m">Elemental Savant Spellcasting (Dread Necromancer)</entry>
<entry id="76140" lang="en" sex="m">Eldritch Theurge Adept Spellcasting (Dread Necromancer)</entry>
<entry id="76141" lang="en" sex="m">Fochulan Lyrist Spellcasting (Dread Necromancer)</entry>
<entry id="76140" lang="en" sex="m">Eldritch Theurge Spellcasting (Dread Necromancer)</entry>
<entry id="76141" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Dread Necromancer)</entry>
<entry id="76142" lang="en" sex="m">Frost Mage Spellcasting (Dread Necromancer)</entry>
<entry id="76143" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Dread Necromancer)</entry>
<entry id="76144" lang="en" sex="m">Harper Mage Spellcasting (Dread Necromancer)</entry>
@@ -71623,7 +71623,7 @@ Special Abilities:
<entry id="76180" lang="en" sex="m">Enlightened Fist Spellcasting (Duskblade)</entry>
<entry id="76181" lang="en" sex="m">Elemental Savant Spellcasting (Duskblade)</entry>
<entry id="76182" lang="en" sex="m">Eldritch Theurge Spellcasting (Duskblade)</entry>
<entry id="76183" lang="en" sex="m">Fochulan Lyrist Spellcasting (Duskblade)</entry>
<entry id="76183" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Duskblade)</entry>
<entry id="76184" lang="en" sex="m">Frost Mage Spellcasting (Duskblade)</entry>
<entry id="76185" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Duskblade)</entry>
<entry id="76186" lang="en" sex="m">Harper Mage Spellcasting (Duskblade)</entry>
@@ -71661,7 +71661,7 @@ Special Abilities:
<entry id="76218" lang="en" sex="m">Enlightened Fist Spellcasting (Harper Scout)</entry>
<entry id="76219" lang="en" sex="m">Elemental Savant Spellcasting (Harper Scout)</entry>
<entry id="76220" lang="en" sex="m">Eldritch Theurge Spellcasting (Harper Scout)</entry>
<entry id="76221" lang="en" sex="m">Fochulan Lyrist Spellcasting (Harper Scout)</entry>
<entry id="76221" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Harper Scout)</entry>
<entry id="76222" lang="en" sex="m">Frost Mage Spellcasting (Harper Scout)</entry>
<entry id="76223" lang="en" sex="m">Harper Mage Spellcasting (Harper Scout)</entry>
<entry id="76224" lang="en" sex="m">Hathran Spellcasting (Harper Scout)</entry>
@@ -71696,7 +71696,7 @@ Special Abilities:
<entry id="76253" lang="en" sex="m">Enlightened Fist Spellcasting (Hexblade)</entry>
<entry id="76254" lang="en" sex="m">Elemental Savant Spellcasting (Hexblade)</entry>
<entry id="76255" lang="en" sex="m">Eldritch Theurge Spellcasting (Hexblade)</entry>
<entry id="76256" lang="en" sex="m">Fochulan Lyrist Spellcasting (Hexblade)</entry>
<entry id="76256" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Hexblade)</entry>
<entry id="76257" lang="en" sex="m">Frost Mage Spellcasting (Hexblade)</entry>
<entry id="76258" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Hexblade)</entry>
<entry id="76259" lang="en" sex="m">Harper Mage Spellcasting (Hexblade)</entry>
@@ -71714,7 +71714,7 @@ Special Abilities:
<entry id="76271" lang="en" sex="m">Soulcaster Spellcasting (Hexblade)</entry>
<entry id="76272" lang="en" sex="m">Spelldancer Spellcasting (Hexblade)</entry>
<entry id="76273" lang="en" sex="m">Spellsword Spellcasting (Hexblade)</entry>
<entry id="76274" lang="en" sex="m">Talont of Talon of Tiamat Spellcasting (Hexblade)</entry>
<entry id="76274" lang="en" sex="m">Talon of Tiamat Spellcasting (Hexblade)</entry>
<entry id="76275" lang="en" sex="m">True Necromancer Spellcasting (Hexblade)</entry>
<entry id="76276" lang="en" sex="m">Ultimate Magus Spellcasting (Hexblade)</entry>
<entry id="76277" lang="en" sex="m">Unseen Seer Spellcasting (Hexblade)</entry>
@@ -71734,7 +71734,7 @@ Special Abilities:
<entry id="76291" lang="en" sex="m">Elemental Savant Spellcasting (Knight of the Weave)</entry>
<entry id="76292" lang="en" sex="m">Eldritch Theurge Spellcasting (Knight of the Weave)</entry>
<entry id="76293" lang="en" sex="m">Force Missile Mage Spellcasting (Knight of the Weave)</entry>
<entry id="76294" lang="en" sex="m">Fochulan Lyrist Spellcasting (Knight of the Weave)</entry>
<entry id="76294" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Knight of the Weave)</entry>
<entry id="76295" lang="en" sex="m">Frost Mage Spellcasting (Knight of the Weave)</entry>
<entry id="76296" lang="en" sex="m">Harper Mage Spellcasting (Knight of the Weave)</entry>
<entry id="76297" lang="en" sex="m">Hathran Spellcasting (Knight of the Weave)</entry>
@@ -71771,7 +71771,7 @@ Special Abilities:
<entry id="76328" lang="en" sex="m">Enlightened Fist Spellcasting (Telflammar Shadowlord)</entry>
<entry id="76329" lang="en" sex="m">Elemental Savant Spellcasting (Telflammar Shadowlord)</entry>
<entry id="76330" lang="en" sex="m">Eldritch Theurge Spellcasting (Telflammar Shadowlord)</entry>
<entry id="76331" lang="en" sex="m">Fochulan Lyrist Spellcasting (Telflammar Shadowlord)</entry>
<entry id="76331" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Telflammar Shadowlord)</entry>
<entry id="76332" lang="en" sex="m">Frost Mage Spellcasting (Telflammar Shadowlord)</entry>
<entry id="76333" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Telflammar Shadowlord)</entry>
<entry id="76334" lang="en" sex="m">Harper Mage Spellcasting (Telflammar Shadowlord)</entry>
@@ -71815,7 +71815,7 @@ Special Abilities:
<entry id="76372" lang="en" sex="m">Elemental Savant Spellcasting (Sorcerer)</entry>
<entry id="76373" lang="en" sex="m">Eldritch Theurge Spellcasting (Sorcerer)</entry>
<entry id="76374" lang="en" sex="m">Force Missile Mage Spellcasting (Sorcerer)</entry>
<entry id="76375" lang="en" sex="m">Fochulan Lyrist Spellcasting (Sorcerer)</entry>
<entry id="76375" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Sorcerer)</entry>
<entry id="76376" lang="en" sex="m">Frost Mage Spellcasting (Sorcerer)</entry>
<entry id="76377" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Sorcerer)</entry>
<entry id="76378" lang="en" sex="m">Harper Mage Spellcasting (Sorcerer)</entry>
@@ -71861,7 +71861,7 @@ Special Abilities:
<entry id="76418" lang="en" sex="m">Enlightened Fist Spellcasting (Sublime Chord)</entry>
<entry id="76419" lang="en" sex="m">Elemental Savant Spellcasting (Sublime Chord)</entry>
<entry id="76420" lang="en" sex="m">Eldritch Theurge Spellcasting (Sublime Chord)</entry>
<entry id="76421" lang="en" sex="m">Fochulan Lyrist Spellcasting (Sublime Chord)</entry>
<entry id="76421" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Sublime Chord)</entry>
<entry id="76422" lang="en" sex="m">Frost Mage Spellcasting (Sublime Chord)</entry>
<entry id="76423" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Sublime Chord)</entry>
<entry id="76424" lang="en" sex="m">Harper Mage Spellcasting (Sublime Chord)</entry>
@@ -71904,7 +71904,7 @@ Special Abilities:
<entry id="76461" lang="en" sex="m">Enlightened Fist Spellcasting (Suel Archanamach)</entry>
<entry id="76462" lang="en" sex="m">Elemental Savant Spellcasting (Suel Archanamach)</entry>
<entry id="76463" lang="en" sex="m">Eldritch Theurge Spellcasting (Suel Archanamach)</entry>
<entry id="76464" lang="en" sex="m">Fochulan Lyrist Spellcasting (Suel Archanamach)</entry>
<entry id="76464" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Suel Archanamach)</entry>
<entry id="76465" lang="en" sex="m">Frost Mage Spellcasting (Suel Archanamach)</entry>
<entry id="76466" lang="en" sex="m">Thrall of Graz'zt Spellcasting (Suel Archanamach)</entry>
<entry id="76467" lang="en" sex="m">Harper Mage Spellcasting (Suel Archanamach)</entry>
@@ -71954,7 +71954,7 @@ Special Abilities:
<entry id="76511" lang="en" sex="m">Hathran Spellcasting (Warmage)</entry>
<entry id="76512" lang="en" sex="m">Havoc Mage Spellcasting (Warmage)</entry>
<entry id="76513" lang="en" sex="m">Jade Phoenix Mage Spellcasting (Warmage)</entry>
<entry id="76514" lang="en" sex="m">Judicator Spellcasting (Warmage)</entry>
<entry id="76514" lang="en" sex="m">Drow Judicator Spellcasting (Warmage)</entry>
<entry id="76515" lang="en" sex="m">Maester Spellcasting (Warmage)</entry>
<entry id="76516" lang="en" sex="m">Mage Killer Spellcasting (Warmage)</entry>
<entry id="76517" lang="en" sex="m">Master Harper Spellcasting (Warmage)</entry>
@@ -72022,14 +72022,14 @@ Special Abilities:
<entry id="76579" lang="en" sex="m">Wild Mage Spellcasting (Wizard)</entry>
<entry id="76580" lang="en" sex="m">War Wizard of Cormyr Spellcasting (Wizard)</entry>
<entry id="76581" lang="en" sex="m">Black Flame Zealot Spellcasting (Archivist)</entry>
<entry id="76582" lang="en" sex="m">Blightlord Spellcasting (Archivist)</entry>
<entry id="76582" lang="en" sex="m">Talontar Blightlord Spellcasting (Archivist)</entry>
<entry id="76583" lang="en" sex="m">Brimstone Speaker Spellcasting (Archivist)</entry>
<entry id="76584" lang="en" sex="m">Combat Medic Spellcasting (Archivist)</entry>
<entry id="76585" lang="en" sex="m">Contemplative Spellcasting (Archivist)</entry>
<entry id="76586" lang="en" sex="m">Eldritch Disciple Spellcasting (Archivist)</entry>
<entry id="76587" lang="en" sex="m">Fist of Raziel Spellcasting (Archivist)</entry>
<entry id="76588" lang="en" sex="m">Forest Master Spellcasting (Archivist)</entry>
<entry id="76589" lang="en" sex="m">Fochulan Lyrist Spellcasting (Archivist)</entry>
<entry id="76589" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Archivist)</entry>
<entry id="76590" lang="en" sex="m">Hathran Spellcasting (Archivist)</entry>
<entry id="76591" lang="en" sex="m">Heartwarder Spellcasting (Archivist)</entry>
<entry id="76592" lang="en" sex="m">Hierophant Spellcasting (Archivist)</entry>
@@ -72056,12 +72056,12 @@ Special Abilities:
<entry id="76613" lang="en" sex="m">True Necromancer Spellcasting (Archivist)</entry>
<entry id="76614" lang="en" sex="m">Warpriest Spellcasting (Archivist)</entry>
<entry id="76615" lang="en" sex="m">Black Flame Zealot Spellcasting (Blackguard)</entry>
<entry id="76616" lang="en" sex="m">Blightlord Spellcasting (Blackguard)</entry>
<entry id="76616" lang="en" sex="m">Talontar Blightlord Spellcasting (Blackguard)</entry>
<entry id="76617" lang="en" sex="m">Contemplative Spellcasting (Blackguard)</entry>
<entry id="76618" lang="en" sex="m">Eldritch Disciple Spellcasting (Blackguard)</entry>
<entry id="76619" lang="en" sex="m">Fochulan Lyrist Spellcasting (Blackguard)</entry>
<entry id="76619" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Blackguard)</entry>
<entry id="76620" lang="en" sex="m">Hospitaler Spellcasting (Blackguard)</entry>
<entry id="76621" lang="en" sex="m">Judicator Spellcasting (Blackguard)</entry>
<entry id="76621" lang="en" sex="m">Drow Judicator Spellcasting (Blackguard)</entry>
<entry id="76622" lang="en" sex="m">Mystic Theurge Spellcasting (Blackguard)</entry>
<entry id="76623" lang="en" sex="m">Oozemaster Spellcasting (Blackguard)</entry>
<entry id="76624" lang="en" sex="m">Thrall of Orcus Spellcasting (Blackguard)</entry>
@@ -72076,13 +72076,13 @@ Special Abilities:
<entry id="76633" lang="en" sex="m">Battleguard of Tempus Spellcasting (Blackguard)</entry>
<entry id="76634" lang="en" sex="m">Warpriest Spellcasting (Blackguard)</entry>
<entry id="76635" lang="en" sex="m">Black Flame Zealot Spellcasting (Blighter)</entry>
<entry id="76636" lang="en" sex="m">Blightlord Spellcasting (Blighter)</entry>
<entry id="76636" lang="en" sex="m">Talontar Blightlord Spellcasting (Blighter)</entry>
<entry id="76637" lang="en" sex="m">Contemplative Spellcasting (Blighter)</entry>
<entry id="76638" lang="en" sex="m">Eldritch Disciple Spellcasting (Blighter)</entry>
<entry id="76639" lang="en" sex="m">Fochulan Lyrist Spellcasting (Blighter)</entry>
<entry id="76639" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Blighter)</entry>
<entry id="76640" lang="en" sex="m">Hierophant Spellcasting (Blighter)</entry>
<entry id="76641" lang="en" sex="m">Hospitaler Spellcasting (Blighter)</entry>
<entry id="76642" lang="en" sex="m">Judicator Spellcasting (Blighter)</entry>
<entry id="76642" lang="en" sex="m">Drow Judicator Spellcasting (Blighter)</entry>
<entry id="76643" lang="en" sex="m">Master of Shrouds Spellcasting (Blighter)</entry>
<entry id="76644" lang="en" sex="m">Mystic Theurge Spellcasting (Blighter)</entry>
<entry id="76645" lang="en" sex="m">Oozemaster Spellcasting (Blighter)</entry>
@@ -72098,13 +72098,13 @@ Special Abilities:
<entry id="76655" lang="en" sex="m">True Necromancer Spellcasting (Blighter)</entry>
<entry id="76656" lang="en" sex="m">Warpriest Spellcasting (Blighter)</entry>
<entry id="76657" lang="en" sex="m">Black Flame Zealot Spellcasting (Cleric)</entry>
<entry id="76658" lang="en" sex="m">Blightlord Spellcasting (Cleric)</entry>
<entry id="76658" lang="en" sex="m">Talontar Blightlord Spellcasting (Cleric)</entry>
<entry id="76659" lang="en" sex="m">Brimstone Speaker Spellcasting (Cleric)</entry>
<entry id="76660" lang="en" sex="m">Combat Medic Spellcasting (Cleric)</entry>
<entry id="76661" lang="en" sex="m">Contemplative Spellcasting (Cleric)</entry>
<entry id="76662" lang="en" sex="m">Eldritch Disciple Spellcasting (Cleric)</entry>
<entry id="76663" lang="en" sex="m">Fist of Raziel Spellcasting (Cleric)</entry>
<entry id="76664" lang="en" sex="m">Fochulan Lyrist Spellcasting (Cleric)</entry>
<entry id="76664" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Cleric)</entry>
<entry id="76665" lang="en" sex="m">Forest Master Spellcasting (Cleric)</entry>
<entry id="76666" lang="en" sex="m">Hathran Spellcasting (Cleric)</entry>
<entry id="76667" lang="en" sex="m">Heartwarder Spellcasting (Cleric)</entry>
@@ -72156,12 +72156,12 @@ Special Abilities:
<entry id="76713" lang="en" sex="m">Combat Medic Spellcasting (Druid)</entry>
<entry id="76714" lang="en" sex="m">Contemplative Spellcasting (Druid)</entry>
<entry id="76715" lang="en" sex="m">Eldritch Disciple Spellcasting (Druid)</entry>
<entry id="76716" lang="en" sex="m">Fochulan Lyrist Spellcasting (Druid)</entry>
<entry id="76716" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Druid)</entry>
<entry id="76717" lang="en" sex="m">Forest Master Spellcasting (Druid)</entry>
<entry id="76718" lang="en" sex="m">Hathran Spellcasting (Druid)</entry>
<entry id="76719" lang="en" sex="m">Hierophant Spellcasting (Druid)</entry>
<entry id="76720" lang="en" sex="m">Hospitaler Spellcasting (Druid)</entry>
<entry id="76721" lang="en" sex="m">Judicator Spellcasting (Druid)</entry>
<entry id="76721" lang="en" sex="m">Drow Judicator Spellcasting (Druid)</entry>
<entry id="76722" lang="en" sex="m">Mystic Theurge Spellcasting (Druid)</entry>
<entry id="76723" lang="en" sex="m">Oozemaster Spellcasting (Druid)</entry>
<entry id="76724" lang="en" sex="m">Psychic Theurge Spellcasting (Druid)</entry>
@@ -72174,14 +72174,14 @@ Special Abilities:
<entry id="76731" lang="en" sex="m">Swift Wing Spellcasting (Druid)</entry>
<entry id="76732" lang="en" sex="m">Warpriest Spellcasting (Druid)</entry>
<entry id="76733" lang="en" sex="m">Black Flame Zealot Spellcasting (Favoured Soul)</entry>
<entry id="76734" lang="en" sex="m">Blightlord Spellcasting (Favoured Soul)</entry>
<entry id="76734" lang="en" sex="m">Talontar Blightlord Spellcasting (Favoured Soul)</entry>
<entry id="76735" lang="en" sex="m">Brimstone Speaker Spellcasting (Favoured Soul)</entry>
<entry id="76736" lang="en" sex="m">Combat Medic Spellcasting (Favoured Soul)</entry>
<entry id="76737" lang="en" sex="m">Contemplative Spellcasting (Favoured Soul)</entry>
<entry id="76738" lang="en" sex="m">Eldritch Disciple Spellcasting (Favoured Soul)</entry>
<entry id="76739" lang="en" sex="m">Fist of Raziel Spellcasting (Favoured Soul)</entry>
<entry id="76740" lang="en" sex="m">Forest Master Spellcasting (Favoured Soul)</entry>
<entry id="76741" lang="en" sex="m">Fochulan Lyrist Spellcasting (Favoured Soul)</entry>
<entry id="76741" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Favoured Soul)</entry>
<entry id="76742" lang="en" sex="m">Hathran Spellcasting (Favoured Soul)</entry>
<entry id="76743" lang="en" sex="m">Heartwarder Spellcasting (Favoured Soul)</entry>
<entry id="76744" lang="en" sex="m">Hierophant Spellcasting (Favoured Soul)</entry>
@@ -72212,7 +72212,7 @@ Special Abilities:
<entry id="76769" lang="en" sex="m">Combat Medic Spellcasting (Healer)</entry>
<entry id="76770" lang="en" sex="m">Contemplative Spellcasting (Healer)</entry>
<entry id="76771" lang="en" sex="m">Eldritch Disciple Spellcasting (Healer)</entry>
<entry id="76772" lang="en" sex="m">Fochulan Lyrist Spellcasting (Healer)</entry>
<entry id="76772" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Healer)</entry>
<entry id="76773" lang="en" sex="m">Hathran Spellcasting (Healer)</entry>
<entry id="76774" lang="en" sex="m">Heartwarder Spellcasting (Healer)</entry>
<entry id="76775" lang="en" sex="m">Hierophant Spellcasting (Healer)</entry>
@@ -72229,16 +72229,16 @@ Special Abilities:
<entry id="76786" lang="en" sex="m">Sanctified Mind Spellcasting (Healer)</entry>
<entry id="76787" lang="en" sex="m">Sapphire Hierarch Spellcasting (Healer)</entry>
<entry id="76788" lang="en" sex="m">Shadowbane Stalker Spellcasting (Healer)</entry>
<entry id="76789" lang="en" sex="m">Shining Blade Spellcasting (Healer)</entry>
<entry id="76789" lang="en" sex="m">Shining Blade of Heironeous Spellcasting (Healer)</entry>
<entry id="76790" lang="en" sex="m">Swift Wing Spellcasting (Healer)</entry>
<entry id="76791" lang="en" sex="m">Warpriest Spellcasting (Healer)</entry>
<entry id="76792" lang="en" sex="m">Black Flame Zealot Spellcasting (Justice of Weald and Woe)</entry>
<entry id="76793" lang="en" sex="m">Blightlord Spellcasting (Justice of Weald and Woe)</entry>
<entry id="76793" lang="en" sex="m">Talontar Blightlord Spellcasting (Justice of Weald and Woe)</entry>
<entry id="76794" lang="en" sex="m">Brimstone Speaker Spellcasting (Justice of Weald and Woe)</entry>
<entry id="76795" lang="en" sex="m">Combat Medic Spellcasting (Justice of Weald and Woe)</entry>
<entry id="76796" lang="en" sex="m">Contemplative Spellcasting (Justice of Weald and Woe)</entry>
<entry id="76797" lang="en" sex="m">Eldritch Disciple Spellcasting (Justice of Weald and Woe)</entry>
<entry id="76798" lang="en" sex="m">Fochulan Lyrist Spellcasting (Justice of Weald and Woe)</entry>
<entry id="76798" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Justice of Weald and Woe)</entry>
<entry id="76799" lang="en" sex="m">Hathran Spellcasting (Justice of Weald and Woe)</entry>
<entry id="76800" lang="en" sex="m">Heartwarder Spellcasting (Justice of Weald and Woe)</entry>
<entry id="76801" lang="en" sex="m">Hospitaler Spellcasting (Justice of Weald and Woe)</entry>
@@ -72266,7 +72266,7 @@ Special Abilities:
<entry id="76823" lang="en" sex="m">Contemplative Spellcasting (Knight of the Chalice)</entry>
<entry id="76824" lang="en" sex="m">Eldritch Disciple Spellcasting (Knight of the Chalice)</entry>
<entry id="76825" lang="en" sex="m">Fist of Raziel Spellcasting (Knight of the Chalice)</entry>
<entry id="76826" lang="en" sex="m">Fochulan Lyrist Spellcasting (Knight of the Chalice)</entry>
<entry id="76826" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Knight of the Chalice)</entry>
<entry id="76827" lang="en" sex="m">Hathran Spellcasting (Knight of the Chalice)</entry>
<entry id="76828" lang="en" sex="m">Hospitaler Spellcasting (Knight of the Chalice)</entry>
<entry id="76829" lang="en" sex="m">Mystic Theurge Spellcasting (Knight of the Chalice)</entry>
@@ -72278,7 +72278,7 @@ Special Abilities:
<entry id="76835" lang="en" sex="m">Sanctified Mind Spellcasting (Knight of the Chalice)</entry>
<entry id="76836" lang="en" sex="m">Sapphire Hierarch Spellcasting (Knight of the Chalice)</entry>
<entry id="76837" lang="en" sex="m">Shadowbane Stalker Spellcasting (Knight of the Chalice)</entry>
<entry id="76838" lang="en" sex="m">Shining Blade Spellcasting (Knight of the Chalice)</entry>
<entry id="76838" lang="en" sex="m">Shining Blade of Heironeous Spellcasting (Knight of the Chalice)</entry>
<entry id="76839" lang="en" sex="m">Swift Wing Spellcasting (Knight of the Chalice)</entry>
<entry id="76840" lang="en" sex="m">Warpriest Spellcasting (Knight of the Chalice)</entry>
<entry id="76841" lang="en" sex="m">Brimstone Speaker Spellcasting (Knight of the Middle Circle)</entry>
@@ -72286,7 +72286,7 @@ Special Abilities:
<entry id="76843" lang="en" sex="m">Contemplative Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76844" lang="en" sex="m">Eldritch Disciple Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76845" lang="en" sex="m">Fist of Raziel Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76846" lang="en" sex="m">Fochulan Lyrist Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76846" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76847" lang="en" sex="m">Hathran Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76848" lang="en" sex="m">Heartwarder Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76849" lang="en" sex="m">Hospitaler Spellcasting (Knight of the Middle Circle)</entry>
@@ -72301,7 +72301,7 @@ Special Abilities:
<entry id="76858" lang="en" sex="m">Sanctified Mind Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76859" lang="en" sex="m">Sapphire Hierarch Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76860" lang="en" sex="m">Shadowbane Stalker Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76861" lang="en" sex="m">Shining Blade Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76861" lang="en" sex="m">Shining Blade of Heironeous Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76862" lang="en" sex="m">Swift Wing Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76863" lang="en" sex="m">Warpriest Spellcasting (Knight of the Middle Circle)</entry>
<entry id="76864" lang="en" sex="m">Brimstone Speaker Spellcasting (Nentyar Hunter)</entry>
@@ -72309,7 +72309,7 @@ Special Abilities:
<entry id="76866" lang="en" sex="m">Contemplative Spellcasting (Nentyar Hunter)</entry>
<entry id="76867" lang="en" sex="m">Eldritch Disciple Spellcasting (Nentyar Hunter)</entry>
<entry id="76868" lang="en" sex="m">Forest Master Spellcasting (Nentyar Hunter)</entry>
<entry id="76869" lang="en" sex="m">Fochulan Lyrist Spellcasting (Nentyar Hunter)</entry>
<entry id="76869" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Nentyar Hunter)</entry>
<entry id="76870" lang="en" sex="m">Hathran Spellcasting (Nentyar Hunter)</entry>
<entry id="76871" lang="en" sex="m">Hospitaler Spellcasting (Nentyar Hunter)</entry>
<entry id="76872" lang="en" sex="m">Mighty Contender of Kord Spellcasting (Nentyar Hunter)</entry>
@@ -72323,11 +72323,11 @@ Special Abilities:
<entry id="76880" lang="en" sex="m">Sanctified Mind Spellcasting (Nentyar Hunter)</entry>
<entry id="76881" lang="en" sex="m">Sapphire Hierarch Spellcasting (Nentyar Hunter)</entry>
<entry id="76882" lang="en" sex="m">Shadowbane Stalker Spellcasting (Nentyar Hunter)</entry>
<entry id="76883" lang="en" sex="m">Shining Blade Spellcasting (Nentyar Hunter)</entry>
<entry id="76883" lang="en" sex="m">Shining Blade of Heironeous Spellcasting (Nentyar Hunter)</entry>
<entry id="76884" lang="en" sex="m">Swift Wing Spellcasting (Nentyar Hunter)</entry>
<entry id="76885" lang="en" sex="m">Warpriest Spellcasting (Nentyar Hunter)</entry>
<entry id="76886" lang="en" sex="m">Black Flame Zealot Spellcasting (Ocular Adept)</entry>
<entry id="76887" lang="en" sex="m">Blightlord Spellcasting (Ocular Adept)</entry>
<entry id="76887" lang="en" sex="m">Talontar Blightlord Spellcasting (Ocular Adept)</entry>
<entry id="76888" lang="en" sex="m">Eldritch Disciple Spellcasting (Ocular Adept)</entry>
<entry id="76889" lang="en" sex="m">Hierophant Spellcasting (Ocular Adept)</entry>
<entry id="76890" lang="en" sex="m">Hospitaler Spellcasting (Ocular Adept)</entry>
@@ -72356,17 +72356,17 @@ Special Abilities:
<entry id="76913" lang="en" sex="m">Sanctified Mind Spellcasting (Paladin)</entry>
<entry id="76914" lang="en" sex="m">Sapphire Hierarch Spellcasting (Paladin)</entry>
<entry id="76915" lang="en" sex="m">Shadowbane Stalker Spellcasting (Paladin)</entry>
<entry id="76916" lang="en" sex="m">Shining Blade Spellcasting (Paladin)</entry>
<entry id="76916" lang="en" sex="m">Shining Blade of Heironeous Spellcasting (Paladin)</entry>
<entry id="76917" lang="en" sex="m">Swift Wing Spellcasting (Paladin)</entry>
<entry id="76918" lang="en" sex="m">Warpriest Spellcasting (Paladin)</entry>
<entry id="76919" lang="en" sex="m">Black Flame Zealot Spellcasting (Ranger)</entry>
<entry id="76920" lang="en" sex="m">Blightlord Spellcasting (Ranger)</entry>
<entry id="76920" lang="en" sex="m">Talontar Blightlord Spellcasting (Ranger)</entry>
<entry id="76921" lang="en" sex="m">Brimstone Speaker Spellcasting (Ranger)</entry>
<entry id="76922" lang="en" sex="m">Combat Medic Spellcasting (Ranger)</entry>
<entry id="76923" lang="en" sex="m">Contemplative Spellcasting (Ranger)</entry>
<entry id="76924" lang="en" sex="m">Eldritch Disciple Spellcasting (Ranger)</entry>
<entry id="76925" lang="en" sex="m">Forest Master Spellcasting (Ranger)</entry>
<entry id="76926" lang="en" sex="m">Fochulan Lyrist Spellcasting (Ranger)</entry>
<entry id="76926" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Ranger)</entry>
<entry id="76927" lang="en" sex="m">Hathran Spellcasting (Ranger)</entry>
<entry id="76928" lang="en" sex="m">Heartwarder Spellcasting (Ranger)</entry>
<entry id="76929" lang="en" sex="m">Hospitaler Spellcasting (Ranger)</entry>
@@ -72384,19 +72384,19 @@ Special Abilities:
<entry id="76941" lang="en" sex="m">Sanctified Mind Spellcasting (Ranger)</entry>
<entry id="76942" lang="en" sex="m">Sapphire Hierarch Spellcasting (Ranger)</entry>
<entry id="76943" lang="en" sex="m">Shadowbane Stalker Spellcasting (Ranger)</entry>
<entry id="76944" lang="en" sex="m">Shining Blade Spellcasting (Ranger)</entry>
<entry id="76944" lang="en" sex="m">Shining Blade of Heironeous Spellcasting (Ranger)</entry>
<entry id="76945" lang="en" sex="m">Stormlord Spellcasting (Ranger)</entry>
<entry id="76946" lang="en" sex="m">Swift Wing Spellcasting (Ranger)</entry>
<entry id="76947" lang="en" sex="m">Battleguard of Tempus Spellcasting (Ranger)</entry>
<entry id="76948" lang="en" sex="m">Tenebrous Apostate Spellcasting (Ranger)</entry>
<entry id="76949" lang="en" sex="m">Warpriest Spellcasting (Ranger)</entry>
<entry id="76950" lang="en" sex="m">Black Flame Zealot Spellcasting (Shaman)</entry>
<entry id="76951" lang="en" sex="m">Blightlord Spellcasting (Shaman)</entry>
<entry id="76951" lang="en" sex="m">Talontar Blightlord Spellcasting (Shaman)</entry>
<entry id="76952" lang="en" sex="m">Brimstone Speaker Spellcasting (Shaman)</entry>
<entry id="76953" lang="en" sex="m">Combat Medic Spellcasting (Shaman)</entry>
<entry id="76954" lang="en" sex="m">Contemplative Spellcasting (Shaman)</entry>
<entry id="76955" lang="en" sex="m">Eldritch Disciple Spellcasting (Shaman)</entry>
<entry id="76956" lang="en" sex="m">Fochulan Lyrist Spellcasting (Shaman)</entry>
<entry id="76956" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Shaman)</entry>
<entry id="76957" lang="en" sex="m">Forest Master Spellcasting (Shaman)</entry>
<entry id="76958" lang="en" sex="m">Hathran Spellcasting (Shaman)</entry>
<entry id="76959" lang="en" sex="m">Heartwarder Spellcasting (Shaman)</entry>
@@ -72418,7 +72418,7 @@ Special Abilities:
<entry id="76975" lang="en" sex="m">Sanctified Mind Spellcasting (Shaman)</entry>
<entry id="76976" lang="en" sex="m">Sapphire Hierarch Spellcasting (Shaman)</entry>
<entry id="76977" lang="en" sex="m">Shadowbane Stalker Spellcasting (Shaman)</entry>
<entry id="76978" lang="en" sex="m">Shining Blade Spellcasting (Shaman)</entry>
<entry id="76978" lang="en" sex="m">Shining Blade of Heironeous Spellcasting (Shaman)</entry>
<entry id="76979" lang="en" sex="m">Stormlord Spellcasting (Shaman)</entry>
<entry id="76980" lang="en" sex="m">Swift Wing Spellcasting (Shaman)</entry>
<entry id="76981" lang="en" sex="m">Tenebrous Apostate Spellcasting (Shaman)</entry>
@@ -72426,12 +72426,12 @@ Special Abilities:
<entry id="76983" lang="en" sex="m">True Necromancer Spellcasting (Shaman)</entry>
<entry id="76984" lang="en" sex="m">Warpriest Spellcasting (Shaman)</entry>
<entry id="76985" lang="en" sex="m">Black Flame Zealot Spellcasting (Sohei)</entry>
<entry id="76986" lang="en" sex="m">Blightlord Spellcasting (Sohei)</entry>
<entry id="76986" lang="en" sex="m">Talontar Blightlord Spellcasting (Sohei)</entry>
<entry id="76987" lang="en" sex="m">Brimstone Speaker Spellcasting (Sohei)</entry>
<entry id="76988" lang="en" sex="m">Contemplative Spellcasting (Sohei)</entry>
<entry id="76989" lang="en" sex="m">Eldritch Disciple Spellcasting (Sohei)</entry>
<entry id="76990" lang="en" sex="m">Fist of Raziel Spellcasting (Sohei)</entry>
<entry id="76991" lang="en" sex="m">Fochulan Lyrist Spellcasting (Sohei)</entry>
<entry id="76991" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Sohei)</entry>
<entry id="76992" lang="en" sex="m">Hathran Spellcasting (Sohei)</entry>
<entry id="76993" lang="en" sex="m">Hospitaler Spellcasting (Sohei)</entry>
<entry id="76994" lang="en" sex="m">Drow Judicator Spellcasting (Sohei)</entry>
@@ -72445,7 +72445,7 @@ Special Abilities:
<entry id="77002" lang="en" sex="m">Sacred Purifier Spellcasting (Sohei)</entry>
<entry id="77003" lang="en" sex="m">Sanctified Mind Spellcasting (Sohei)</entry>
<entry id="77004" lang="en" sex="m">Sapphire Hierarch Spellcasting (Sohei)</entry>
<entry id="77005" lang="en" sex="m">Shining Blade Spellcasting (Sohei)</entry>
<entry id="77005" lang="en" sex="m">Shining Blade of Heironeous Spellcasting (Sohei)</entry>
<entry id="77006" lang="en" sex="m">Swift Wing Spellcasting (Sohei)</entry>
<entry id="77007" lang="en" sex="m">Tenebrous Apostate Spellcasting (Sohei)</entry>
<entry id="77008" lang="en" sex="m">Warpriest Spellcasting (Sohei)</entry>
@@ -72453,7 +72453,7 @@ Special Abilities:
<entry id="77010" lang="en" sex="m">Combat Medic Spellcasting (Soldier of Light)</entry>
<entry id="77011" lang="en" sex="m">Contemplative Spellcasting (Soldier of Light)</entry>
<entry id="77012" lang="en" sex="m">Eldritch Disciple Spellcasting (Soldier of Light)</entry>
<entry id="77013" lang="en" sex="m">Fochulan Lyrist Spellcasting (Soldier of Light)</entry>
<entry id="77013" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Soldier of Light)</entry>
<entry id="77014" lang="en" sex="m">Hathran Spellcasting (Soldier of Light)</entry>
<entry id="77015" lang="en" sex="m">Hospitaler Spellcasting (Soldier of Light)</entry>
<entry id="77016" lang="en" sex="m">Morninglord of Lathander Spellcasting (Soldier of Light)</entry>
@@ -72467,12 +72467,12 @@ Special Abilities:
<entry id="77024" lang="en" sex="m">Swift Wing Spellcasting (Soldier of Light)</entry>
<entry id="77025" lang="en" sex="m">Warpriest Spellcasting (Soldier of Light)</entry>
<entry id="77026" lang="en" sex="m">Black Flame Zealot Spellcasting (Spirit Shaman)</entry>
<entry id="77027" lang="en" sex="m">Blightlord Spellcasting (Spirit Shaman)</entry>
<entry id="77027" lang="en" sex="m">Talontar Blightlord Spellcasting (Spirit Shaman)</entry>
<entry id="77028" lang="en" sex="m">Brimstone Speaker Spellcasting (Spirit Shaman)</entry>
<entry id="77029" lang="en" sex="m">Combat Medic Spellcasting (Spirit Shaman)</entry>
<entry id="77030" lang="en" sex="m">Contemplative Spellcasting (Spirit Shaman)</entry>
<entry id="77031" lang="en" sex="m">Eldritch Disciple Spellcasting (Spirit Shaman)</entry>
<entry id="77032" lang="en" sex="m">Fochulan Lyrist Spellcasting (Spirit Shaman)</entry>
<entry id="77032" lang="en" sex="m">Fochlucan Lyrist Spellcasting (Spirit Shaman)</entry>
<entry id="77033" lang="en" sex="m">Forest Master Spellcasting (Spirit Shaman)</entry>
<entry id="77034" lang="en" sex="m">Hathran Spellcasting (Spirit Shaman)</entry>
<entry id="77035" lang="en" sex="m">Heartwarder Spellcasting (Spirit Shaman)</entry>
@@ -72490,10 +72490,10 @@ Special Abilities:
<entry id="77047" lang="en" sex="m">Sanctified Mind Spellcasting (Spirit Shaman)</entry>
<entry id="77048" lang="en" sex="m">Sapphire Hierarch Spellcasting (Spirit Shaman)</entry>
<entry id="77049" lang="en" sex="m">Shadowbane Stalker Spellcasting (Spirit Shaman)</entry>
<entry id="77050" lang="en" sex="m">Shining Blade Spellcasting (Spirit Shaman)</entry>
<entry id="77050" lang="en" sex="m">Shining Blade of Heironeous Spellcasting (Spirit Shaman)</entry>
<entry id="77051" lang="en" sex="m">Stormlord Spellcasting (Spirit Shaman)</entry>
<entry id="77052" lang="en" sex="m">Swift Wing Spellcasting (Spirit Shaman)</entry>
<entry id="77053" lang="en" sex="m">Battleguard Tempus Spellcasting (Spirit Shaman)</entry>
<entry id="77053" lang="en" sex="m">Battleguard of Tempus Spellcasting (Spirit Shaman)</entry>
<entry id="77054" lang="en" sex="m">Tenebrous Apostate Spellcasting (Spirit Shaman)</entry>
<entry id="77055" lang="en" sex="m">Warpriest Spellcasting (Spirit Shaman)</entry>
<entry id="77056" lang="en" sex="m">Black Flame Zealot Spellcasting (Ur-Priest)</entry>
@@ -72514,7 +72514,7 @@ Special Abilities:
<entry id="77071" lang="en" sex="m">Warpriest Spellcasting (Ur-Priest)</entry>
<entry id="77072" lang="en" sex="m">Brimstone Speaker Spellcasting (Vassal of Bahamut)</entry>
<entry id="77073" lang="en" sex="m">Contemplative Spellcasting (Vassal of Bahamut)</entry>
<entry id="77074" lang="en" sex="m">Fist of Raziel (Vassal of Bahamut)</entry>
<entry id="77074" lang="en" sex="m">Fist of Raziel Spellcasting (Vassal of Bahamut)</entry>
<entry id="77075" lang="en" sex="m">Hathran Spellcasting (Vassal of Bahamut)</entry>
<entry id="77076" lang="en" sex="m">Hospitaler Spellcasting (Vassal of Bahamut)</entry>
<entry id="77077" lang="en" sex="m">Mystic Theurge Spellcasting (Vassal of Bahamut)</entry>
@@ -72527,7 +72527,7 @@ Special Abilities:
<entry id="77084" lang="en" sex="m">Sanctified Mind Spellcasting (Vassal of Bahamut)</entry>
<entry id="77085" lang="en" sex="m">Sapphire Hierarch Spellcasting (Vassal of Bahamut)</entry>
<entry id="77086" lang="en" sex="m">Shadowbane Stalker Spellcasting (Vassal of Bahamut)</entry>
<entry id="77087" lang="en" sex="m">Shining Blade Spellcasting (Vassal of Bahamut)</entry>
<entry id="77087" lang="en" sex="m">Shining Blade of Heironeous Spellcasting (Vassal of Bahamut)</entry>
<entry id="77088" lang="en" sex="m">Swift Wing Spellcasting (Vassal of Bahamut)</entry>
<entry id="77089" lang="en" sex="m">Warpriest Spellcasting (Vassal of Bahamut)</entry>
<entry id="77090" lang="en" sex="m">Disciple of Asmodeus Spellcasting (N/A)</entry>
@@ -72536,6 +72536,7 @@ Special Abilities:
<entry id="77093" lang="en" sex="m">Ollam Spellcasting (N/A)</entry>
<entry id="77094" lang="en" sex="m">Combat Medic Spellcasting (Paladin)</entry>
<entry id="77095" lang="en" sex="m">Morninglord of Lathander Spellcasting (Sohei)</entry>
<entry id="77096" lang="en" sex="m">Thrall of Orcus Spellcasting (Ur-Priest)</entry>
<entry id="77100" lang="en" sex="m">Bardic Casting: Gloura cast spells as a Bard of their hit dice (7th level).</entry>
<entry id="77101" lang="en" sex="m">Sorcerous Casting: Driders cast spells as a Sorcerer of their hit dice (6th level).</entry>
<entry id="77102" lang="en" sex="m">Sorcerous Casting: Arkamoi cast spells as a Sorcerer of their hit dice (4th level).</entry>
@@ -72625,14 +72626,14 @@ Special Abilities:
<entry id="77190" lang="en" sex="m">Spellcasting isn't required to take the Talon of Tiamat prestige class. If you currently have an arcane spellcasting, shadowcasting or invoking class, do not pick this marker feat.</entry>
<entry id="77191" lang="en" sex="m">Spellcasting isn't required to take the Dragonsong Lyrist prestige class. If you currently have an arcane spellcasting or shadowcasting class, do not pick this marker feat.</entry>
<entry id="77192" lang="en" sex="m">Spellcasting isn't required to take the Ollam prestige class. If you currently have an arcane spellcasting or shadowcasting class, do not pick this marker feat.</entry>
<entry id="77200" lang="en" sex="m">Archivist Spellcasting (Master of Shrouds)</entry>
<entry id="77201" lang="en" sex="m">Blackguard Spellcasting (Master of Shrouds)</entry>
<entry id="77202" lang="en" sex="m">Druid Spellcasting (Master of Shrouds)</entry>
<entry id="77203" lang="en" sex="m">Favoured Soul Spellcasting (Master of Shrouds)</entry>
<entry id="77204" lang="en" sex="m">Justice of Weald and Woe Spellcasting (Master of Shrouds)</entry>
<entry id="77205" lang="en" sex="m">Ranger Spellcasting (Master of Shrouds)</entry>
<entry id="77206" lang="en" sex="m">Sohei Spellcasting (Master of Shrouds)</entry>
<entry id="77207" lang="en" sex="m">Ur-Priest Spellcasting (Master of Shrouds)</entry>
<entry id="77200" lang="en" sex="m">Master of Shrouds Spellcasting (Archivist)</entry>
<entry id="77201" lang="en" sex="m">Master of Shrouds Spellcasting (Blackguard)</entry>
<entry id="77202" lang="en" sex="m">Master of Shrouds Spellcasting (Druid)</entry>
<entry id="77203" lang="en" sex="m">Master of Shrouds Spellcasting (Favoured Soul)</entry>
<entry id="77204" lang="en" sex="m">Master of Shrouds Spellcasting (Justice of Weald and Woe)</entry>
<entry id="77205" lang="en" sex="m">Master of Shrouds Spellcasting (Ranger)</entry>
<entry id="77206" lang="en" sex="m">Master of Shrouds Spellcasting (Sohei)</entry>
<entry id="77207" lang="en" sex="m">Master of Shrouds Spellcasting (Ur-Priest)</entry>
<entry id="77208" lang="en" sex="m">Sorcerous Spellcasting (Hobgoblin Warsoul)</entry>
<entry id="77209" lang="en" sex="m">Sorcerous Casting: Hobgoblin Warsoul's cast spells as a Sorcerer of their hit dice (10th level).</entry>
<entry id="77210" lang="en" sex="m">&lt;cÿÿÿ&gt;Pick a spellcasting feat (1st lvl)&lt;/c&gt;</entry>