diff --git a/TemplePlus/ai.cpp b/TemplePlus/ai.cpp index c757f9c6b..889d4e43d 100644 --- a/TemplePlus/ai.cpp +++ b/TemplePlus/ai.cpp @@ -156,18 +156,22 @@ uint32_t AiSystem::AiStrategyParse(objHndl objHnd, objHndl target) actSeq->sequencePerform(); return 1; } - logger->info("AiStrategy: \t Default FAILED. Attempting to find pathable party member as target..."); - objHndl pathablePartyMember = pathfindingSys.CanPathToParty(objHnd); - if (pathablePartyMember) - { - aiTac.target = pathablePartyMember; - if (aiTac.aiTac->aiFunc(&aiTac)) + + if (!aiTac.target || !combatSys.IsWithinReach(objHnd, aiTac.target)){ + logger->info("AiStrategy: \t Default FAILED. Attempting to find pathable party member as target..."); + objHndl pathablePartyMember = pathfindingSys.CanPathToParty(objHnd); + if (pathablePartyMember) { - logger->info("AiStrategy: \t Default tactic succeeded; performing."); - actSeq->sequencePerform(); - return 1; + aiTac.target = pathablePartyMember; + if (aiTac.aiTac->aiFunc(&aiTac)) + { + logger->info("AiStrategy: \t Default tactic succeeded; performing."); + actSeq->sequencePerform(); + return 1; + } } } + // if that doesn't work either, try to Break Free (NPC might be held back by Web / Entangle) if (d20Sys.d20Query(aiTac.performer, DK_QUE_Is_BreakFree_Possible)) diff --git a/TemplePlus/condition.cpp b/TemplePlus/condition.cpp index 3a35d53e8..47d899156 100644 --- a/TemplePlus/condition.cpp +++ b/TemplePlus/condition.cpp @@ -373,6 +373,8 @@ class ConditionFunctionReplacement : public TempleFix { // Sneak Attack damage generalization replaceFunction(0x100F9A10, classAbilityCallbacks.SneakAttackDamage); + SubDispDefNew sdd(dispTypeDealingDamageWeaponlikeSpell, 0, classAbilityCallbacks.SneakAttackDamage, 0u,0u); // Weapon-like spell damage hook + write(0x102ED2A8, &sdd, sizeof(SubDispDefNew)); // D20Mods countdown handler replaceFunction(0x100EC9B0, genericCallbacks.D20ModCountdownHandler); diff --git a/TemplePlus/damage.cpp b/TemplePlus/damage.cpp index 93343822b..afadee80a 100644 --- a/TemplePlus/damage.cpp +++ b/TemplePlus/damage.cpp @@ -375,6 +375,9 @@ int Damage::DealWeaponlikeSpellDamage(objHndl tgt, objHndl attacker, const Dice if (critterSys.IsDeadNullDestroyed(tgt)) return -1; + if (combatSys.IsFlankedBy(tgt, attacker)) + *(int*)&flags |= D20CAF_FLANKED; + DispIoDamage evtObjDam; evtObjDam.attackPacket.d20ActnType = actionType; evtObjDam.attackPacket.attacker = attacker; @@ -402,8 +405,7 @@ int Damage::DealWeaponlikeSpellDamage(objHndl tgt, objHndl attacker, const Dice if (damFactor != 100) { addresses.AddDamageModFactor(&evtObjDam.damage, damFactor * 0.01f, type, damageDescId); } - - + if (flags & D20CAF_CONCEALMENT_MISS) { histSys.CreateRollHistoryLineFromMesfile(11, attacker, tgt); floatSys.FloatCombatLine(attacker, 45); // Miss (Concealment)! @@ -421,6 +423,8 @@ int Damage::DealWeaponlikeSpellDamage(objHndl tgt, objHndl attacker, const Dice return -1; } + temple::GetRef(0x10BCA8AC) = 0; // is weapon damage + // get damage dice evtObjDam.damage.AddDamageDice(dice.ToPacked(), type, 103); evtObjDam.damage.AddAttackPower(attackPower); @@ -429,10 +433,9 @@ int Damage::DealWeaponlikeSpellDamage(objHndl tgt, objHndl attacker, const Dice evtObjDam.damage.flags |= 2; // empowered if (mmData.metaMagicFlags & 1) evtObjDam.damage.flags |= 1; // maximized - dispatch.DispatchDamage(attacker, &evtObjDam, dispTypeDealingDamageWeaponlikeSpell, DK_NONE); if (evtObjDam.attackPacket.flags & D20CAF_CRITICAL) { - auto extraHitDice = dice.GetCount(); + auto extraHitDice = 1; auto critMultiplierApply = temple::GetRef(0x100E1640); // damagepacket, multiplier, damage.mes line critMultiplierApply(evtObjDam.damage, extraHitDice + 1, 102); floatSys.FloatCombatLine(attacker, 12); @@ -445,8 +448,12 @@ int Damage::DealWeaponlikeSpellDamage(objHndl tgt, objHndl attacker, const Dice uiLogbook.IncreaseCritHits(attacker); } + + + dispatch.DispatchDamage(attacker, &evtObjDam, dispTypeDealingDamageWeaponlikeSpell, DK_NONE); + - temple::GetRef(0x10BCA8AC) = 0; // is weapon damage + DamageCritter(attacker, tgt, evtObjDam); diff --git a/TemplePlus/python/python_object.cpp b/TemplePlus/python/python_object.cpp index f9dce85ff..58f445e62 100644 --- a/TemplePlus/python/python_object.cpp +++ b/TemplePlus/python/python_object.cpp @@ -1323,7 +1323,7 @@ static PyObject* PyObjHandle_FloatTextLine(PyObject* obj, PyObject* args) { auto self = GetSelf(obj); PyObject* line; auto colorId = FloatLineColor::White; - if (!PyArg_ParseTuple(args, "O|i:", &line, &colorId)) { + if (!PyArg_ParseTuple(args, "O|i:objhndl.float_text_line", &line, &colorId)) { return 0; } diff --git a/TemplePlus/spell.cpp b/TemplePlus/spell.cpp index 2f116c2ef..b8604e611 100644 --- a/TemplePlus/spell.cpp +++ b/TemplePlus/spell.cpp @@ -2020,8 +2020,8 @@ uint32_t LegacySpellSystem::pickerArgsFromSpellEntry(SpellEntry* spEntry, Picker auto rem = maxTgts % 100; auto b = rem / 10; auto c = rem % 10; - auto nom = b + casterLvl - lvlOffset; - auto denom = c + 1; + auto nom = c + casterLvl - lvlOffset; + auto denom = b + 1; maxTgts = nom / denom; diff --git a/TemplePlus/spell_condition.cpp b/TemplePlus/spell_condition.cpp index a4ec755f0..5c2e7b78b 100644 --- a/TemplePlus/spell_condition.cpp +++ b/TemplePlus/spell_condition.cpp @@ -30,7 +30,8 @@ class SpellConditionFixes : public TempleFix { #define SPFIX(fname) static int fname ## (DispatcherCallbackArgs args); void VampiricTouchFix(); void enlargePersonModelScaleFix(); // fixes ambiguous float point calculations that resulted in cumulative roundoff errors - + static void SpellDamageWeaponlikeHook(objHndl tgt, objHndl caster, int dicePacked, DamageType damType, int attackPower, D20ActionType actionType, int spellId, D20CAF flags ); // allows for sneak attack damage on chill touch + static int ImmunityCheckHandler(DispatcherCallbackArgs args); static int StinkingCloudObjEvent(DispatcherCallbackArgs args); @@ -41,9 +42,17 @@ class SpellConditionFixes : public TempleFix { static int BlinkDefenderMissChance(DispatcherCallbackArgs args); static int WebOnMoveSpeed(DispatcherCallbackArgs args); + static int MelfsAcidArrowDamage(DispatcherCallbackArgs args); void apply() override { + // Spell damage conversion to Weapon-like spell damage (to support Sneak Attack with spells) + redirectCall(0x100DCDC4, SpellDamageWeaponlikeHook); // Chill Touch + redirectCall(0x100C94F3, SpellDamageWeaponlikeHook); // Produce Flame + redirectCall(0x100DDA04, SpellDamageWeaponlikeHook); // Shocking Grasp + redirectCall(0x100DDEB4, SpellDamageWeaponlikeHook); // Vampiric Touch + replaceFunction(0x100CE940, MelfsAcidArrowDamage); + VampiricTouchFix(); enlargePersonModelScaleFix(); @@ -176,6 +185,11 @@ void SpellConditionFixes::enlargePersonModelScaleFix() } +void SpellConditionFixes::SpellDamageWeaponlikeHook(objHndl tgt, objHndl caster, int dicePacked, DamageType damType, int attackPower, D20ActionType actionType, int spellId, D20CAF flags){ + *(int*)&flags |= D20CAF_HIT; + damage.DealWeaponlikeSpellDamage(tgt, caster, Dice::FromPacked(dicePacked), damType, attackPower, 100, 103, actionType, spellId, flags); +} + int SpellConditionFixes::ImmunityCheckHandler(DispatcherCallbackArgs args) { /* @@ -467,3 +481,23 @@ int SpellConditionFixes::WebOnMoveSpeed(DispatcherCallbackArgs args){ return 0; } + +int SpellConditionFixes::MelfsAcidArrowDamage(DispatcherCallbackArgs args){ + auto isCritical = args.GetCondArg(2); + auto spellId = args.GetCondArg(0); + SpellPacketBody spPkt(spellId); + floatSys.FloatCombatLine(args.objHndCaller, 46); // acid damage + Dice damDice(2, 4, 0); + int flags = D20CAF_HIT; + + if (isCritical){ + flags |= D20CAF_CRITICAL; + args.SetCondArg(2, 0); + } + if (spPkt.durationRemaining < spPkt.duration ) // only the first shot gets sneak attack damage + flags |= D20CAF_NO_PRECISION_DAMAGE; + + damage.DealWeaponlikeSpellDamage(spPkt.targetListHandles[0], spPkt.caster, damDice, DamageType::Acid, 1, 100, 103, D20A_CAST_SPELL, spellId, (D20CAF)flags); + + return 0; +} diff --git a/tpdata/tpmes/help_extensions.tab b/tpdata/tpmes/help_extensions.tab index a5bf81266..ae00bafb6 100644 --- a/tpdata/tpmes/help_extensions.tab +++ b/tpdata/tpmes/help_extensions.tab @@ -16,8 +16,10 @@ TAG_CLASS_FEATURES_BARD_INSPIRE_GREATNESS TAG_BARDS Inspire Greatness A bard TAG_CLASS_FEATURES_BARD_INSPIRE_HEROICS TAG_BARDS Inspire Heroics A bard of 15th level or greater with 18 or more ranks in a ~Perform~[TAG_PERFORM] skill can use music or poetics to inspire tremendous heroism in himself or a single willing ally within 30 feet. To inspire heroics, a bard must sing and an ally must hear the bard sing for a full round. A creature so inspired gains a +4 morale bonus on saving throws and a +4 dodge bonus to AC. The effect lasts for as long as the ally hears the bard sing and for up to 5 rounds thereafter. Inspire heroics is a mind-affecting ability. TAG_CLASSES Classes ~Barbarians~[TAG_BARBARIANS] ~Bards~[TAG_BARDS] ~Clerics~[TAG_CLERICS] ~Druids~[TAG_DRUIDS] ~Fighters~[TAG_FIGHTERS] ~Monks~[TAG_MONKS] ~Paladins~[TAG_PALADINS] ~Rangers~[TAG_RANGERS] ~Rogues~[TAG_ROGUES] ~Sorcerers~[TAG_SORCERERS] ~Wizards~[TAG_WIZARDS] ~Prestige Classes~[TAG_PRESTIGE_CLASSES] Other Information about Classes: ~Class and Level Bonuses~[TAG_LEVEL_BONUSES] ~Saving Throws~[TAG_SAVING_THROW_DESC] ~Level-Dependent Benefits~[TAG_CLASS_BENEFITS] ~Experience and Levels~[TAG_EXPERIENCE_AND_LEVELS] ~Multiclass Characters~[TAG_MULTICLASS] ~Favored Class~[TAG_FAVORED_CLASS] TAG_PRESTIGE_CLASSES TAG_CLASSES Prestige Classes Prestige classes offer a new form of multiclassing. Unlike the ~basic classes~[TAG_CLASSES], characters must meet requirements before they can take their first level of a prestige class. [CMD_CHILDREN_SORTED] -TAG_ARCANE_TRICKSTERS TAG_PRESTIGE_CLASSES Arcane Tricksters TBD Note: weapon-like spells are not yet implemented in ToEE, so sneak attack won't work with spells. -TAG_ASSASSINS TAG_PRESTIGE_CLASSES Assassins The assassin is the master of dealing quick, lethal blows. Assassins also excel at infiltration and disguise. Assassins often function as spies, informants, killers for hire, or agents of vengeance. Their training in anatomy, stealth, poison, and the dark arts allows them to carry out missions of death with shocking, terrifying precision. Most rogues, monks, and bards who choose this class become examples of the classic assassin skulking in the shadows with a blade carrying certain death. Fighters, ex-paladins, rangers, druids, and barbarians operate as warrior assassins, with as much ability to kill in combat as from the shadows. Sorcerers, wizards, and clerics may be the most terrifying assassins of all, for with their spells they can infiltrate and slay with even greater impunity. Hit Die: d6 Requirements: To qualify to become an assassin, a character must fulfill all the following criteria. Alignment: Any evil. Skills: Hide 8 ranks, Move Silently 8 ranks. Base Attack and Base Save Bonuses: see ~table~[TAG_CLASS_FEATURES_ASSASSIN] Class Skills: ~Bluff~[TAG_BLUFF], ~Diplomacy~[TAG_DIPLOMACY], ~Gather Information~[TAG_GATHER_INFORMATION], ~Hide~[TAG_HIDE], ~Intimidate~[TAG_INTIMIDATE], ~Listen~[TAG_LISTEN], ~Move Silently~[TAG_MOVE_SILENTLY], ~Open Lock~[TAG_OPEN_LOCK], ~Search~[TAG_SEARCH], ~Sense Motive~[TAG_SENSE_MOTIVE], ~Sleight of Hand~[TAG_SLEIGHT], ~Spot~[TAG_SPOT], ~Tumble~[TAG_TUMBLE], ~Use Magic Device~[TAG_UMD]. Skill Points at Each Level: 4 + Int modifier Class Features: ~Assassin Weapon and Armor Proficiency~[TAG_CLASS_FEATURES_ASSASSIN_WEAP_PROF] ~Death Attack~[TAG_CLASS_FEATURES_ASSASSIN_DEATH_ATTACK] ~Sneak Attack~[TAG_CLASS_FEATURES_ASSASSIN_SNEAK_ATTACK] ~Spells~[TAG_CLASS_FEATURES_ASSASSIN_SPELLS] ~Save Bonus against Poison~[TAG_CLASS_FEATURES_ASSASSIN_SAVE_VS_POISON] Uncanny Dodge (Ex): Starting at 2nd level, an assassin gains the ability to react to danger before his senses would normally allow him to even be aware of it. He retains his Dexterity bonus to AC (if any) regardless of being caught flat-footed or struck by an invisible attacker. (He still loses any Dexterity bonus to AC if immobilized.) @tIf a character gains uncanny dodge from a second class (such as a barbarian/rogue), the character automatically gains improved uncanny dodge Improved Uncanny Dodge (Ex): At 5th level, an assassin can no longer be flanked, since he can react to opponents on opposite sides of him as easily as he can react to a single attacker. This defense denies rogues the ability to use flank attacks to sneak attack the assassin. The exception to this defense is that a rogue at least four levels higher than the assassin can flank him (and thus sneak attack him). @tIf a character gains uncanny dodge (see above) from a second class (such as a barbarian/rogue), the character automatically gains improved uncanny dodge, and the levels from those classes stack to determine the minimum rogue level required to flank the character. ~Hide in Plain Sight~[TAG_CLASS_FEATURES_ASSASSIN_HIPS] +TAG_ARCANE_TRICKSTERS TAG_PRESTIGE_CLASSES Arcane Tricksters Arcane tricksters combine their knowledge of spells with a taste for intrigue, larceny, or just plain mischief. They are among the most adaptable of adventurers. Arcane spellcasting and the sneak attack ability are needed to qualify for this class, making it a natural choice for multiclass wizard/rogues or sorcerer/rogues. Assassins occasionally opt for this class, but usually only if they already have wizard or sorcerer levels. Arcane tricksters tend to use a seat-of-the-pants approach to adventuring, loading up on spells that improve their stealth and mobility. Hit Die: d4 Requirements: To qualify to become an arcane trickster, a character must fulfill all the following criteria. Alignment: Any nonlawful. Skills: Disable Device 7 ranks. Spells: Ability to cast at least one arcane spell of 3rd level or higher. Special: Sneak attack +2d6. Base Attack and Base Save Bonuses: see ~table~[TAG_CLASS_FEATURES_ARCANE_TRICKSTER]. Class Skills: ~Appraise~[TAG_APPRAISE], ~Bluff~[TAG_BLUFF], ~Concentration~[TAG_CONCENTRATION], ~Diplomacy~[TAG_DIPLOMACY], ~Disable Device~[TAG_DISABLE_DEVICE], ~Gather Information~[TAG_GATHER_INFORMATION], ~Hide~[TAG_HIDE], ~Listen~[TAG_LISTEN], ~Move Silently~[TAG_MOVE_SILENTLY], ~Open Lock~[TAG_OPEN_LOCK], ~Search~[TAG_SEARCH], ~Sense Motive~[TAG_SENSE_MOTIVE], ~Sleight of Hand~[TAG_SLEIGHT], ~Spot~[TAG_SPOT], ~Spellcraft~[TAG_SPELLCRAFT], ~Spot~[TAG_SPOT], ~Tumble~[TAG_TUMBLE], ~Use Magic Device~[TAG_UMD]. Skill Points at Each Level: 4 + Int modifier Class Features: Weapon and Armor Proficiency: Arcane tricksters gain no proficiency with ayn weapon or armor. Spells per Day: When a new arcane trickster level is gained, the character gains new spells per day as if he had also gained a level in a spellcasting class he belonged to before adding the prestige class. He does not, however, gain any other benefit a character of that class would have gained (improved chance of controlling or rebuking undead, metamagic or item creation feats, and so on), except for an increased effective level of spellcasting. If a character had more than one spellcasting class before becoming an arcane trickster, the highest one is chosen for adding the new level for the purposes of determining spells per day. Note: Spells that require an attack roll, such as Chill Touch, are considered weapon-like spells and as such benefit from Sneak Attack damage. Ranged Legerdemain: not implemented. Sneak Attack: This is exactly like the rogue ability of the same name. The Extra damage dealt increases by +1d6 every other level (2nd, 4th, 6th, 8th and 10th). If an arcane trickster gets a sneak attack bonus from another source (such as rogue levels), the bonuses on damage stack. ~Impromptu Sneak Attack~[TAG_CLASS_FEATURES_ARCANE_TRICKSTER_IMPROMPTU_SNEAK_ATTACK] +TAG_CLASS_FEATURES_ARCANE_TRICKSTER TAG_ARCANE_TRICKSTERS Arcane Trickster +TAG_CLASS_FEATURES_ARCANE_TRICKSTER_IMPROMPTU_SNEAK_ATTACK TAG_ARCANE_TRICKSTERS Arcane Trickster Impromptu Sneak Attack Beginning at 3rd level, once per day an arcane trickster can declare one melee or ranged attack he makes to be a sneak attack (the target can be no more than 30 feet distant if the impromptu sneak attack is a ranged attack). The target of an impromptu sneak attack loses any Dexterity bonus to AC, but only against that attack. The power can be used against any target, but creatures that are not subject to critical hits take no extra damage (though they still lose any Dexterity bonus to AC against the attack). At 7th level, an arcane trickster can use this ability twice per day. +TAG_ASSASSINS TAG_PRESTIGE_CLASSES Assassins The assassin is the master of dealing quick, lethal blows. Assassins also excel at infiltration and disguise. Assassins often function as spies, informants, killers for hire, or agents of vengeance. Their training in anatomy, stealth, poison, and the dark arts allows them to carry out missions of death with shocking, terrifying precision. Most rogues, monks, and bards who choose this class become examples of the classic assassin skulking in the shadows with a blade carrying certain death. Fighters, ex-paladins, rangers, druids, and barbarians operate as warrior assassins, with as much ability to kill in combat as from the shadows. Sorcerers, wizards, and clerics may be the most terrifying assassins of all, for with their spells they can infiltrate and slay with even greater impunity. Hit Die: d6 Requirements: To qualify to become an assassin, a character must fulfill all the following criteria. Alignment: Any evil. Skills: Hide 8 ranks, Move Silently 8 ranks. Base Attack and Base Save Bonuses: see ~table~[TAG_CLASS_FEATURES_ASSASSIN] Class Skills: ~Bluff~[TAG_BLUFF], ~Diplomacy~[TAG_DIPLOMACY], ~Gather Information~[TAG_GATHER_INFORMATION], ~Hide~[TAG_HIDE], ~Intimidate~[TAG_INTIMIDATE], ~Listen~[TAG_LISTEN], ~Move Silently~[TAG_MOVE_SILENTLY], ~Open Lock~[TAG_OPEN_LOCK], ~Search~[TAG_SEARCH], ~Sense Motive~[TAG_SENSE_MOTIVE], ~Sleight of Hand~[TAG_SLEIGHT], ~Spot~[TAG_SPOT], ~Tumble~[TAG_TUMBLE], ~Use Magic Device~[TAG_UMD]. Skill Points at Each Level: 4 + Int modifier Class Features: ~Assassin Weapon and Armor Proficiency~[TAG_CLASS_FEATURES_ASSASSIN_WEAP_PROF] ~Death Attack~[TAG_CLASS_FEATURES_ASSASSIN_DEATH_ATTACK] ~Sneak Attack~[TAG_CLASS_FEATURES_ASSASSIN_SNEAK_ATTACK] ~Spells~[TAG_CLASS_FEATURES_ASSASSIN_SPELLS] ~Save Bonus against Poison~[TAG_CLASS_FEATURES_ASSASSIN_SAVE_VS_POISON] Uncanny Dodge (Ex): Starting at 2nd level, an assassin gains the ability to react to danger before his senses would normally allow him to even be aware of it. He retains his Dexterity bonus to AC (if any) regardless of being caught flat-footed or struck by an invisible attacker. (He still loses any Dexterity bonus to AC if immobilized.) @tIf a character gains uncanny dodge from a second class (such as a barbarian/rogue), the character automatically gains improved uncanny dodge. Improved Uncanny Dodge (Ex): At 5th level, an assassin can no longer be flanked, since he can react to opponents on opposite sides of him as easily as he can react to a single attacker. This defense denies rogues the ability to use flank attacks to sneak attack the assassin. The exception to this defense is that a rogue at least four levels higher than the assassin can flank him (and thus sneak attack him). @tIf a character gains uncanny dodge (see above) from a second class (such as a barbarian/rogue), the character automatically gains improved uncanny dodge, and the levels from those classes stack to determine the minimum rogue level required to flank the character. ~Hide in Plain Sight~[TAG_CLASS_FEATURES_ASSASSIN_HIPS] TAG_CLASS_FEATURES_ASSASSIN_WEAP_PROF TAG_ASSASSINS Assassin Weapon and Armor Proficiency An assassin's weapon training focuses on weapons suitable for stealth and sneak attacks. Assassins are proficient with the crossbow (hand, light, or heavy), dagger (any type), dart, rapier, sap, shortbow (normal and composite), and short sword. Assassins are proficient with light armor but not with shields. TAG_CLASS_FEATURES_ASSASSIN_SNEAK_ATTACK TAG_ASSASSINS Assassin Sneak Attack This is exactly like the ~rogue ability~[TAG_CLASS_FEATURES_ROGUE_SNEAK_ATTACK] of the same name. The extra damage dealt increases by +1d6 every other level (2nd, 4th, 6th, 8th, and 10th). If an assassin gets a sneak attack bonus from another source (such as ~rogue~[TAG_ROGUES] levels), the bonuses on damage stack. TAG_CLASS_FEATURES_ASSASSIN_DEATH_ATTACK TAG_ASSASSINS Death Attack If an assassin studies his victim for 3 rounds and then makes a sneak attack with a melee weapon that successfully deals damage, the sneak attack has the additional effect of possibly either paralyzing or killing the target (assassin's choice). While studying the victim, the assassin can undertake other actions so long as his attention stays focused on the target and the target does not detect the assassin or recognize the assassin as an enemy. If the victim of such an attack fails a Fortitude save (DC 10 + the assassin's class level + the assassin's Int modifier) against the kill effect, she dies. If the saving throw fails against the paralysis effect, the victim's mind and body become enervated, rendering her helpless and unable to act for 1d6 rounds plus 1 round per level of the assassin. If the victim's saving throw succeeds, the attack is just a normal sneak attack. Once the assassin has completed the 3 rounds of study, he must make the death attack within the next 3 rounds. If a death attack is attempted and fails (the victim makes her save) or if the assassin does not launch the attack within 3 rounds of completing the study, 3 new rounds of study are required before he can attempt another death attack. @@ -26,9 +28,12 @@ TAG_CLASS_FEATURES_ASSASSIN_SPELLS TAG_ASSASSINS Assassin Spells Beginning at TAG_CLASS_FEATURES_ASSASSIN_SAVE_VS_POISON TAG_ASSASSINS Assassin Save vs. Poison Assassins train with poisons of all types and slowly grow more and more resistant to their effects. This is reflected by a natural saving throw bonus to all poisons gained at 2nd level that increases by +1 for every two additional levels the assassin gains (+2 at 4th level, +3 at 6th level, and so on). TAG_BLACKGUARDS TAG_PRESTIGE_CLASSES Blackguards The blackguard epitomizes evil. He is nothing short of a mortal fiend. The quintessential black knight, this villain carries a reputation of the foulest sort that is very well deserved. Consorting with demons and devils and serving dark deities, the blackguard is hated and feared by all. Some people call these villains antipaladins due to their completely evil nature. The blackguard has many options available to him-sending forth dark minions and servants to do his bidding, attacking with stealth and honorless guile, or straightforward smiting of the forces of good that stand in his way. Fighters, ex-paladins, rangers, monks, druids, and barbarians make for indomitable combat-oriented blackguards, while rogues and bards who become blackguards are likely to stress the subtle aspects of their abilities and spells. Sorcerers, wizards, and clerics who become blackguards are sometimes called diabolists and favor dealing with fiends even more than other blackguards do. Hit Die: d10 Requirements: To qualify to become a blackguard, a character must fulfill all the following criteria. @tAlignment: Any evil. @tBase Attack Bonus:+6. @tSkills: Hide 5 ranks @tFeats: Cleave, Power Attack. Base Attack and Base Save Bonuses: see ~table~[TAG_CLASS_FEATURES_BLACKGUARD] Class Skills: ~Concentration~[TAG_CONCENTRATION], ~Diplomacy~[TAG_DIPLOMACY], ~Heal~[TAG_HEAL], ~Hide~[TAG_HIDE], ~Intimidate~[TAG_INTIMIDATE] Skill Points at Each Level: 2 + Int modifier Class Features: Weapon and Armor Proficiency: Blackguards are proficient with all simple and martial weapons, with all types of armor, and with shields. Dark Blessing (Su): A blackguard applies his Charisma modifier (if positive) as a bonus on all saving throws. Spells: A blackguard has the ability to cast a small number of divine spells. To cast a blackguard spell, a blackguard must have a Wisdom score of at least 10 + the spell's level, so a blackguard with a Wisdom of 10 or lower cannot cast these spells. Blackguard bonus spells are based on Wisdom, and saving throws against these spells have a DC of 10 + spell level + the blackguard's Wisdom modifier. When the blackguard gets 0 spells per day of a given spell level (for instance, 1st-level spells for a 1st-level blackguard), he gains only the bonus spells he would be entitled to based on his Wisdom score for that spell level. The blackguard's spell list appears below. A blackguard has access to any spell on the list and can freely choose which to prepare, just as a cleric. A blackguard prepares and casts spells just as a cleric does (though a blackguard cannot spontaneously cast cure or inflictspells). Smite Good (Su): Once a day, a blackguard of 2nd level or higher may attempt to smite good with one normal melee attack. He adds his Charisma modifier (if positive) to his attack roll and deals 1 extra point of damage per class level. For example, a 9th-level blackguard armed with a longsword would deal 1d8+9 points of damage, plus any additional bonuses from high Strength or magical effects that normally apply. If a blackguard accidentally smites a creature that is not good, the smite has no effect but it is still used up for that day. At 5th level, and again at 10th level, a blackguard may smite good one additional time per day. Aura of Despair (Su):Beginning at 3rd level, the blackguard radiates a malign aura that causes enemies within 10 feet of him to take a –2 penalty on all saving throws. Command Undead (Su): When a blackguard reaches 3rd level, he gains the supernatural ability to command and rebuke undead. He commands undead as would a cleric of two levels lower. Sneak Attack: This ability, gained at 4th level, is like the rogue ability of the same name. The extra damage increases by +1d6 every third level beyond 4th (7th and 10th). If a blackguard gets a sneak attack bonus from another source (such as rogue levels), the bonuses on damage stack. Fallen Paladins @tBlackguards who have levels in the paladin class (that is to say, are now ex-paladins) gain extra abilities the more levels of paladin they have. @tLevel 1+: Smite good 1/day @tLevel 5+: Sneak attack damage increased by +1d6. Smite good 2/day. @tLevel 9+: Smite good 3/day @tThe rest of the Fallen Paladin bonuses are yet to be implemented. Fiendish Servant: like the Paladin's mount, this class feature is not implemented. TAG_DUELISTS TAG_PRESTIGE_CLASSES Duelists TBD -TAG_DWARVEN_DEFENDERS TAG_PRESTIGE_CLASSES Dwarven Defenders TBD +TAG_DWARVEN_DEFENDERS TAG_PRESTIGE_CLASSES Dwarven Defenders The defender is a sponsored champion of a dwarven cause, a dwarf aristocrat, a dwarven deity, or the dwarven way of life. As the name might imply, this character is a skilled combatant trained in the arts of defense. A line of dwarven defenders is a far better defense than a 10-foot-thick wall of stone, and much more dangerous. Most dwarven defenders are fighters, paladins, rangers, or clerics, although ex-barbarians, sorcerers, wizards and druids can certainly all benefit from the defensive capabilities of this prestige class. Rogues, bards and monks usually depend too heavily on mobility to use the abilities of the dwarven defender class to their fullest. Hit Die: d12. Requirements: To qualify to become a defender, a character must fulfill all the following criteria. @tRace: Dwarf. @tAlignment: Any lawful. @tBase Attack Bonus: +7 @tFeats:Dodge, Toughness. Base Attack and Base Save Bonuses: see ~table~[TAG_CLASS_FEATURES_DWARVEN_DEFENDER]. Class Skills: ~Listen~[TAG_LISTEN], ~Sense Motive~[TAG_SENSE_MOTIVE], and ~Spot~[TAG_SPOT]. Skill Points at Each Level: 2 + Int modifier. Class Features: AC Bonus (Ex): The dwarven defender receives a dodge bonus to Armor Class that starts at +1 and improves as the defender gains levels, until it reaches +4 at 10th level. Weapon and Armor Proficiency: A dwarven defender is proficient with all simple and martial weapons, all types of armor, and shields. ~Defensive Stance~[TAG_CLASS_FEATURES_DWARVEN_DEFENDER_DEFENSIVE_STANCE] Uncanny Dodge (Ex): Starting at 2nd level, a dwarven defender gains the extraordinary ability to react to danger before his senses would normally allow him to even be aware of it. At 2nd level and above, he retains his Dexterity bonus to AC (if any) regardless of being caught flat-footed or struck by an invisible attacker. (He still loses any Dexterity bonus to AC if immobilized.) @tIf a character gains uncanny dodge from a second class (such as a barbarian/rogue), the character automatically gains improved uncanny dodge. Trap Sense (Ex): At 4th level, a dwarven defender gains an intuitive sense that alerts him to danger from traps, giving him a +1 bonus on Reflex saves made to avoid traps and a +1 dodge bonus to AC against attacks by traps. At 8th level, these bonuses rise to +2. These bonuses stack with trap sense bonuses gained from other classes. Damage Reduction (Ex): At 6th level, a dwarven defender gains the ability to shrug off some amount of injury from each blow or attack. Subtract 3 points from the damage the dwarven defender takes each time he is dealt damage. At 10th level, this damage reduction rises to 6/-. Damage reduction can reduce damage to 0 but not below 0. (That is, the defender cannot actually gain hit points in this manner.) Improved Uncanny Dodge (Ex): At 6th level, a dwarven defender can no longer be ~flanked~[TAG_FLANKING]. This defense denies rogues the ability to use flank attacks to sneak attack the dwarven defender. @tThe exception to this defense is that a rogue at least four levels higher than the dwarven defender can flank him (and thus sneak attack him). @tIf a character gains uncanny dodge (see above) from a second class the character automatically gains improved uncanny dodge, and the levels from those classes stack to determine the minimum rogue level required to flank the character. Mobile Defense (Ex): At 8th level, a dwarven defender can adjust his position while maintaining a defensive stance. While in a defensive stance, he can take one 5-foot step each round without losing the benefit of the stance. +TAG_CLASS_FEATURES_DWARVEN_DEFENDER_DEFENSIVE_STANCE TAG_DWARVEN_DEFENDERS Dwarven Defender Defensive Stance When he needs to, a defender can become a stalwart bastion of defense. In this defensive stance, a defender gains phenomenal strength and durability, but he cannot move from the spot he is defending. He gains +2 to Strength, +4 to Constitution, a +2 resistance bonus on all saves, and a +4 dodge bonus to AC. The increase in constitution increases the defender's hit points by 2 per level, but these hit points go away at the end of the defensive stance when the Constitution score drops back 4 points. These extra hit points are not lost first the way temporary hit points are. While in a defensive stance, a defender cannot use skills or abilities that would require him to shift his position, such as Move Silently or Jump. A defensive stance lasts for a number of rounds equal to 3 + the character's (newly improved) Constitution modifier. A defender may end his defensive stance voluntarily prior to this limit. At the end of the defensive stance, the defender is winded and takes a -2 penalty to Strength for the duration of that encounter. A defender can only use his defensive stance a certain number of times per day as determined by his level (once at 1st level, increasing by 1 for every other level beyond the 1st). Using the defensive stance takes no time itself, but a defender can only do so during his action. (A defender can't, for example, use the stance when struck down by an arrow in order to get the extra hit points from the increased Constitution.) TAG_ELDRITCH_KNIGHTS TAG_PRESTIGE_CLASSES Eldritch Knights Studying the martial and arcane arts to equal degree, the eldritch knight is a versatile combatant who can cast a fireball on her foes or charge them with sword drawn. The eldritch knight takes pride in her ability to use the right technique for the job: spells against physically tough foes and force of arms against spellcasting enemies. Eldritch knights split their time between physical training to become better soldiers and arcane study to learn more powerful spells. They tend to be driven individuals, because simultaneously perfecting their spellcasting and combat prowess requires immense time and effort. Eldritch knights are never truly at home among arcane spellcasters or elite soldiers, so many drift from wizard school to mercenary unit to band of adventurers. Every would-be eldritch knight must demonstrate both skill with a broad array of weapons and mastery of the basics of arcane spellcasting. Thus, almost all eldritch knights are multiclass characters already, with fighter/wizard the most common combination. A few eldritch knights were once bards, and even paladin/sorcerers aren't unheard of. Eldritch knights can be found wherever there's a good fight or the promise of arcane lore. They find higher level fighters and wizards particularly interesting, and some eldritch knights apprentice themselves for a time to learn the finer points of arcane technique or weapons prowess. Hit Die: d6 Requirements: To qualify to become an eldritch knight, a character must fulfill all the following criteria. @tWeapon Proficiency: Must be proficient with all martial weapons. @tSpells:Able to cast 3rd-level arcane spells. Base Attack and Base Save Bonuses: see ~table~[TAG_CLASS_FEATURES_ELDRITCH_KNIGHT]. Class Skills: ~Concentration~[TAG_CONCENTRATION], ~Sense Motive~[TAG_SENSE_MOTIVE], ~Spellcraft~[TAG_SPELLCRAFT] Skill Points at Each Level: 2 + Int modifier Class Features: Weapon and Armor Proficiency: Eldritch knights gain no proficiency with any weapon or armor. Bonus Feat: At 1st level, an eldritch knight may choose a bonus feat from the list of feats available to fighters. This is in addition to the feats that a character of any class normally gets every three levels. The character must still meet any prerequisites for these bonus feats, including four levels of fighter for the Weapon Specialization feat. Spells per Day:From 2nd level on, when a new eldritch knight level is gained, the character gains new spells per day as if she had also gained a level in whatever arcane spellcasting class she belonged to before she added the prestige class. She does not, however, gain any other benefit a character of that class would have gained (bonus metamagic or item creation feats, bard or assassin abilities, and so on). This essentially means that she adds the level of eldritch knight to the level of whatever other arcane spellcasting class the character has, then determines spells per day and caster level accordingly. Known spells will also advance accordingly. @tIf a character had more than one arcane spellcasting class before she became an eldritch knight, the one with the higher level will be chosen for the purpose of adding spells per day. TAG_CLASS_FEATURES_ELDRITCH_KNIGHT TAG_DUMMY Eldritch Knight Base Attack & Base Save Bonuses Level ~Base Attack Bonus~[TAG_LEVEL_BONUSES] ~Fortitude~[TAG_FORTITUDE] ~Save~[TAG_LEVEL_BONUSES] ~Reflex~[TAG_REFLEX] ~Save~[TAG_LEVEL_BONUSES] ~Will~[TAG_WILL] ~Save~[TAG_LEVEL_BONUSES] 1 @t+1 @t+2 @t+0 @t+0 2 @t+2 @t+3 @t+0 @t+0 3 @t+3 @t+3 @t+1 @t+1 4 @t+4 @t+4 @t+1 @t+1 5 @t+5 @t+4 @t+1 @t+1 6 @t+6 @t+5 @t+2 @t+2 7 @t+7 @t+5 @t+2 @t+2 8 @t+8 @t+6 @t+2 @t+2 9 @t+9 @t+6 @t+3 @t+3 10 @t+10 @t+7 @t+3 @t+3 -TAG_CLASS_FEATURES_BLACKGUARD TAG_DUMMY Blackguard Base Attack & Base Save Bonuses Level ~Base Attack Bonus~[TAG_LEVEL_BONUSES] ~Fortitude~[TAG_FORTITUDE] ~Save~[TAG_LEVEL_BONUSES] ~Reflex~[TAG_REFLEX] ~Save~[TAG_LEVEL_BONUSES] ~Will~[TAG_WILL] ~Save~[TAG_LEVEL_BONUSES] 1 @t+1 @t+2 @t+0 @t+0 2 @t+2 @t+3 @t+0 @t+0 3 @t+3 @t+3 @t+1 @t+1 4 @t+4 @t+4 @t+1 @t+1 5 @t+5 @t+4 @t+1 @t+1 6 @t+6 @t+5 @t+2 @t+2 7 @t+7 @t+5 @t+2 @t+2 8 @t+8 @t+6 @t+2 @t+2 9 @t+9 @t+6 @t+3 @t+3 10 @t+10 @t+7 @t+3 @t+3 -TAG_CLASS_FEATURES_ASSASSIN TAG_DUMMY Assassin Base Attack & Base Save Bonuses Level ~Base Attack Bonus~[TAG_LEVEL_BONUSES] ~Fortitude~[TAG_FORTITUDE] ~Save~[TAG_LEVEL_BONUSES] ~Reflex~[TAG_REFLEX] ~Save~[TAG_LEVEL_BONUSES] ~Will~[TAG_WILL] ~Save~[TAG_LEVEL_BONUSES] 1 @t+0 @t+0 @t+2 @t+0 2 @t+1 @t+0 @t+3 @t+0 3 @t+2 @t+1 @t+3 @t+1 4 @t+3 @t+1 @t+4 @t+1 5 @t+3 @t+1 @t+4 @t+1 6 @t+4 @t+2 @t+5 @t+2 7 @t+5 @t+2 @t+5 @t+2 8 @t+6 @t+2 @t+6 @t+2 9 @t+6 @t+3 @t+6 @t+3 10 @t+7 @t+3 @t+7 @t+3 +TAG_CLASS_FEATURES_BLACKGUARD TAG_BLACKGUARDS Blackguard Base Attack & Base Save Bonuses Level ~Base Attack Bonus~[TAG_LEVEL_BONUSES] ~Fortitude~[TAG_FORTITUDE] ~Save~[TAG_LEVEL_BONUSES] ~Reflex~[TAG_REFLEX] ~Save~[TAG_LEVEL_BONUSES] ~Will~[TAG_WILL] ~Save~[TAG_LEVEL_BONUSES] 1 @t+1 @t+2 @t+0 @t+0 2 @t+2 @t+3 @t+0 @t+0 3 @t+3 @t+3 @t+1 @t+1 4 @t+4 @t+4 @t+1 @t+1 5 @t+5 @t+4 @t+1 @t+1 6 @t+6 @t+5 @t+2 @t+2 7 @t+7 @t+5 @t+2 @t+2 8 @t+8 @t+6 @t+2 @t+2 9 @t+9 @t+6 @t+3 @t+3 10 @t+10 @t+7 @t+3 @t+3 +TAG_CLASS_FEATURES_ARCANE_TRICKSTER TAG_ARCANE_TRICKSTERS Arcane Trickster Base Attack & Base Save Bonuses Level ~Base Attack Bonus~[TAG_LEVEL_BONUSES] ~Fortitude~[TAG_FORTITUDE] ~Save~[TAG_LEVEL_BONUSES] ~Reflex~[TAG_REFLEX] ~Save~[TAG_LEVEL_BONUSES] ~Will~[TAG_WILL] ~Save~[TAG_LEVEL_BONUSES] 1 @t+0 @t+0 @t+2 @t+2 2 @t+1 @t+0 @t+3 @t+3 3 @t+1 @t+1 @t+3 @t+3 4 @t+2 @t+1 @t+4 @t+4 5 @t+2 @t+1 @t+4 @t+4 6 @t+3 @t+2 @t+5 @t+5 7 @t+3 @t+2 @t+5 @t+5 8 @t+4 @t+2 @t+6 @t+6 9 @t+4 @t+3 @t+6 @t+6 10 @t+5 @t+3 @t+7 @t+7 +TAG_CLASS_FEATURES_ASSASSIN TAG_ASSASSINS Assassin Base Attack & Base Save Bonuses Level ~Base Attack Bonus~[TAG_LEVEL_BONUSES] ~Fortitude~[TAG_FORTITUDE] ~Save~[TAG_LEVEL_BONUSES] ~Reflex~[TAG_REFLEX] ~Save~[TAG_LEVEL_BONUSES] ~Will~[TAG_WILL] ~Save~[TAG_LEVEL_BONUSES] 1 @t+0 @t+0 @t+2 @t+0 2 @t+1 @t+0 @t+3 @t+0 3 @t+2 @t+1 @t+3 @t+1 4 @t+3 @t+1 @t+4 @t+1 5 @t+3 @t+1 @t+4 @t+1 6 @t+4 @t+2 @t+5 @t+2 7 @t+5 @t+2 @t+5 @t+2 8 @t+6 @t+2 @t+6 @t+2 9 @t+6 @t+3 @t+6 @t+3 10 @t+7 @t+3 @t+7 @t+3 +TAG_CLASS_FEATURES_DWARVEN_DEFENDER TAG_DWARVEN_DEFENDERS Dwarven Defender Base Attack & Base Save Bonuses Level ~Base Attack Bonus~[TAG_LEVEL_BONUSES] ~Fortitude~[TAG_FORTITUDE] ~Save~[TAG_LEVEL_BONUSES] ~Reflex~[TAG_REFLEX] ~Save~[TAG_LEVEL_BONUSES] ~Will~[TAG_WILL] ~Save~[TAG_LEVEL_BONUSES] 1 @t+1 @t+2 @t+0 @t+2 2 @t+2 @t+3 @t+0 @t+3 3 @t+3 @t+3 @t+1 @t+3 4 @t+4 @t+4 @t+1 @t+4 5 @t+5 @t+4 @t+1 @t+4 6 @t+6 @t+5 @t+2 @t+5 7 @t+7 @t+5 @t+2 @t+5 8 @t+8 @t+6 @t+2 @t+6 9 @t+9 @t+6 @t+3 @t+6 10 @t+10 @t+7 @t+3 @t+7 TAG_MYSTIC_THEURGES TAG_PRESTIGE_CLASSES Mystic Theurges TBD